1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is the Netscape Portable Runtime (NSPR).
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998-2000
20 * the Initial Developer. All Rights Reserved.
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
44 static unsigned char *base
= (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
46 /* PL_Base64Encode, single characters */
50 unsigned char plain
[ 4 ];
51 unsigned char cypher
[ 5 ];
55 printf("Test 001 (PL_Base64Encode, single characters) ..."); fflush(stdout
);
57 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
58 cypher
[2] = cypher
[3] = (unsigned char)'=';
59 cypher
[4] = (unsigned char)0;
61 for( a
= 0; a
< 64; a
++ )
65 for( b
= 0; b
< 4; b
++ )
67 plain
[0] = (unsigned char)(a
* 4 + b
);
68 cypher
[1] = base
[(b
* 16)];
70 rv
= PL_Base64Encode((char *)plain
, 1, result
);
73 printf("FAIL\n\t(%d, %d): return value\n", a
, b
);
77 if( 0 != PL_strncmp((char *)cypher
, result
, 4) )
79 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.4s.\"\n",
80 a
, b
, cypher
, result
);
90 /* PL_Base64Encode, double characters */
94 unsigned char plain
[ 4 ];
95 unsigned char cypher
[ 5 ];
99 printf("Test 002 (PL_Base64Encode, double characters) ..."); fflush(stdout
);
101 plain
[2] = plain
[3] = (unsigned char)0;
102 cypher
[3] = (unsigned char)'=';
103 cypher
[4] = (unsigned char)0;
105 for( a
= 0; a
< 64; a
++ )
108 for( b
= 0; b
< 4; b
++ )
110 plain
[0] = (a
*4) + b
;
111 for( c
= 0; c
< 16; c
++ )
113 cypher
[1] = base
[b
*16 + c
];
114 for( d
= 0; d
< 16; d
++ )
117 cypher
[2] = base
[d
*4];
119 rv
= PL_Base64Encode((char *)plain
, 2, result
);
122 printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a
, b
, c
, d
);
126 if( 0 != PL_strncmp((char *)cypher
, result
, 4) )
128 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
129 a
, b
, c
, d
, cypher
, result
);
141 /* PL_Base64Encode, triple characters */
142 PRBool
test_003(void)
144 PRUint32 a
, b
, c
, d
, e
, f
;
145 unsigned char plain
[ 4 ];
146 unsigned char cypher
[ 5 ];
150 printf("Test 003 (PL_Base64Encode, triple characters) ..."); fflush(stdout
);
152 cypher
[4] = (unsigned char)0;
154 for( a
= 0; a
< 64; a
++ )
157 for( b
= 0; b
< 4; b
++ )
159 plain
[0] = (a
*4) + b
;
160 for( c
= 0; c
< 16; c
++ )
162 cypher
[1] = base
[b
*16 + c
];
163 for( d
= 0; d
< 16; d
++ )
166 for( e
= 0; e
< 4; e
++ )
168 cypher
[2] = base
[d
*4 + e
];
169 for( f
= 0; f
< 64; f
++ )
171 plain
[2] = e
* 64 + f
;
174 rv
= PL_Base64Encode((char *)plain
, 3, result
);
177 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a
, b
, c
, d
, e
, f
);
181 if( 0 != PL_strncmp((char *)cypher
, result
, 4) )
183 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
184 a
, b
, c
, d
, e
, f
, cypher
, result
);
200 const char *plaintext
;
201 const char *cyphertext
;
204 /* Cyphertexts generated with uuenview 0.5.13 */
235 /* legitimate two-letter words */
265 /* all three-letter entries in /usr/dict/words */
1066 /* the false rumors file */
1067 { "\"So when I die, the first thing I will see in heaven is a score list?\"",
1068 "IlNvIHdoZW4gSSBkaWUsIHRoZSBmaXJzdCB0aGluZyBJIHdpbGwgc2VlIGluIGhlYXZlbiBpcyBhIHNjb3JlIGxpc3Q/Ig==" },
1069 { "1st Law of Hacking: leaving is much more difficult than entering.",
1070 "MXN0IExhdyBvZiBIYWNraW5nOiBsZWF2aW5nIGlzIG11Y2ggbW9yZSBkaWZmaWN1bHQgdGhhbiBlbnRlcmluZy4=" },
1071 { "2nd Law of Hacking: first in, first out.",
1072 "Mm5kIExhdyBvZiBIYWNraW5nOiBmaXJzdCBpbiwgZmlyc3Qgb3V0Lg==" },
1073 { "3rd Law of Hacking: the last blow counts most.",
1074 "M3JkIExhdyBvZiBIYWNraW5nOiB0aGUgbGFzdCBibG93IGNvdW50cyBtb3N0Lg==" },
1075 { "4th Law of Hacking: you will find the exit at the entrance.",
1076 "NHRoIExhdyBvZiBIYWNraW5nOiB5b3Ugd2lsbCBmaW5kIHRoZSBleGl0IGF0IHRoZSBlbnRyYW5jZS4=" },
1077 { "A chameleon imitating a mail daemon often delivers scrolls of fire.",
1078 "QSBjaGFtZWxlb24gaW1pdGF0aW5nIGEgbWFpbCBkYWVtb24gb2Z0ZW4gZGVsaXZlcnMgc2Nyb2xscyBvZiBmaXJlLg==" },
1079 { "A cockatrice corpse is guaranteed to be untainted!",
1080 "QSBjb2NrYXRyaWNlIGNvcnBzZSBpcyBndWFyYW50ZWVkIHRvIGJlIHVudGFpbnRlZCE=" },
1081 { "A dead cockatrice is just a dead lizard.",
1082 "QSBkZWFkIGNvY2thdHJpY2UgaXMganVzdCBhIGRlYWQgbGl6YXJkLg==" },
1083 { "A dragon is just a snake that ate a scroll of fire.",
1084 "QSBkcmFnb24gaXMganVzdCBhIHNuYWtlIHRoYXQgYXRlIGEgc2Nyb2xsIG9mIGZpcmUu" },
1085 { "A fading corridor enlightens your insight.",
1086 "QSBmYWRpbmcgY29ycmlkb3IgZW5saWdodGVucyB5b3VyIGluc2lnaHQu" },
1087 { "A glowing potion is too hot to drink.",
1088 "QSBnbG93aW5nIHBvdGlvbiBpcyB0b28gaG90IHRvIGRyaW5rLg==" },
1089 { "A good amulet may protect you against guards.",
1090 "QSBnb29kIGFtdWxldCBtYXkgcHJvdGVjdCB5b3UgYWdhaW5zdCBndWFyZHMu" },
1091 { "A lizard corpse is a good thing to turn undead.",
1092 "QSBsaXphcmQgY29ycHNlIGlzIGEgZ29vZCB0aGluZyB0byB0dXJuIHVuZGVhZC4=" },
1093 { "A long worm can be defined recursively. So how should you attack it?",
1094 "QSBsb25nIHdvcm0gY2FuIGJlIGRlZmluZWQgcmVjdXJzaXZlbHkuIFNvIGhvdyBzaG91bGQgeW91IGF0dGFjayBpdD8=" },
1095 { "A monstrous mind is a toy forever.",
1096 "QSBtb25zdHJvdXMgbWluZCBpcyBhIHRveSBmb3JldmVyLg==" },
1097 { "A nymph will be very pleased if you call her by her real name: Lorelei.",
1098 "QSBueW1waCB3aWxsIGJlIHZlcnkgcGxlYXNlZCBpZiB5b3UgY2FsbCBoZXIgYnkgaGVyIHJlYWwgbmFtZTogTG9yZWxlaS4=" },
1099 { "A ring of dungeon master control is a great find.",
1100 "QSByaW5nIG9mIGR1bmdlb24gbWFzdGVyIGNvbnRyb2wgaXMgYSBncmVhdCBmaW5kLg==" },
1101 { "A ring of extra ring finger is useless if not enchanted.",
1102 "QSByaW5nIG9mIGV4dHJhIHJpbmcgZmluZ2VyIGlzIHVzZWxlc3MgaWYgbm90IGVuY2hhbnRlZC4=" },
1103 { "A rope may form a trail in a maze.",
1104 "QSByb3BlIG1heSBmb3JtIGEgdHJhaWwgaW4gYSBtYXplLg==" },
1105 { "A staff may recharge if you drop it for awhile.",
1106 "QSBzdGFmZiBtYXkgcmVjaGFyZ2UgaWYgeW91IGRyb3AgaXQgZm9yIGF3aGlsZS4=" },
1107 { "A visit to the Zoo is very educational; you meet interesting animals.",
1108 "QSB2aXNpdCB0byB0aGUgWm9vIGlzIHZlcnkgZWR1Y2F0aW9uYWw7IHlvdSBtZWV0IGludGVyZXN0aW5nIGFuaW1hbHMu" },
1109 { "A wand of deaf is a more dangerous weapon than a wand of sheep.",
1110 "QSB3YW5kIG9mIGRlYWYgaXMgYSBtb3JlIGRhbmdlcm91cyB3ZWFwb24gdGhhbiBhIHdhbmQgb2Ygc2hlZXAu" },
1111 { "A wand of vibration might bring the whole cave crashing about your ears.",
1112 "QSB3YW5kIG9mIHZpYnJhdGlvbiBtaWdodCBicmluZyB0aGUgd2hvbGUgY2F2ZSBjcmFzaGluZyBhYm91dCB5b3VyIGVhcnMu" },
1113 { "A winner never quits. A quitter never wins.",
1114 "QSB3aW5uZXIgbmV2ZXIgcXVpdHMuIEEgcXVpdHRlciBuZXZlciB3aW5zLg==" },
1115 { "A wish? Okay, make me a fortune cookie!",
1116 "QSB3aXNoPyBPa2F5LCBtYWtlIG1lIGEgZm9ydHVuZSBjb29raWUh" },
1117 { "Afraid of mimics? Try to wear a ring of true seeing.",
1118 "QWZyYWlkIG9mIG1pbWljcz8gVHJ5IHRvIHdlYXIgYSByaW5nIG9mIHRydWUgc2VlaW5nLg==" },
1119 { "All monsters are created evil, but some are more evil than others.",
1120 "QWxsIG1vbnN0ZXJzIGFyZSBjcmVhdGVkIGV2aWwsIGJ1dCBzb21lIGFyZSBtb3JlIGV2aWwgdGhhbiBvdGhlcnMu" },
1121 { "Always attack a floating eye from behind!",
1122 "QWx3YXlzIGF0dGFjayBhIGZsb2F0aW5nIGV5ZSBmcm9tIGJlaGluZCE=" },
1123 { "An elven cloak is always the height of fashion.",
1124 "QW4gZWx2ZW4gY2xvYWsgaXMgYWx3YXlzIHRoZSBoZWlnaHQgb2YgZmFzaGlvbi4=" },
1125 { "Any small object that is accidentally dropped will hide under a larger object.",
1126 "QW55IHNtYWxsIG9iamVjdCB0aGF0IGlzIGFjY2lkZW50YWxseSBkcm9wcGVkIHdpbGwgaGlkZSB1bmRlciBhIGxhcmdlciBvYmplY3Qu" },
1127 { "Balrogs do not appear above level 20.",
1128 "QmFscm9ncyBkbyBub3QgYXBwZWFyIGFib3ZlIGxldmVsIDIwLg==" },
1129 { "Banana peels work especially well against Keystone Kops.",
1130 "QmFuYW5hIHBlZWxzIHdvcmsgZXNwZWNpYWxseSB3ZWxsIGFnYWluc3QgS2V5c3RvbmUgS29wcy4=" },
1131 { "Be careful when eating bananas. Monsters might slip on the peels.",
1132 "QmUgY2FyZWZ1bCB3aGVuIGVhdGluZyBiYW5hbmFzLiBNb25zdGVycyBtaWdodCBzbGlwIG9uIHRoZSBwZWVscy4=" },
1133 { "Better leave the dungeon; otherwise you might get hurt badly.",
1134 "QmV0dGVyIGxlYXZlIHRoZSBkdW5nZW9uOyBvdGhlcndpc2UgeW91IG1pZ2h0IGdldCBodXJ0IGJhZGx5Lg==" },
1135 { "Beware of the potion of nitroglycerin -- it's not for the weak of heart.",
1136 "QmV3YXJlIG9mIHRoZSBwb3Rpb24gb2Ygbml0cm9nbHljZXJpbiAtLSBpdCdzIG5vdCBmb3IgdGhlIHdlYWsgb2YgaGVhcnQu" },
1137 { "Beware: there's always a chance that your wand explodes as you try to zap it!",
1138 "QmV3YXJlOiB0aGVyZSdzIGFsd2F5cyBhIGNoYW5jZSB0aGF0IHlvdXIgd2FuZCBleHBsb2RlcyBhcyB5b3UgdHJ5IHRvIHphcCBpdCE=" },
1139 { "Beyond the 23rd level lies a happy retirement in a room of your own.",
1140 "QmV5b25kIHRoZSAyM3JkIGxldmVsIGxpZXMgYSBoYXBweSByZXRpcmVtZW50IGluIGEgcm9vbSBvZiB5b3VyIG93bi4=" },
1141 { "Changing your suit without dropping your sword? You must be kidding!",
1142 "Q2hhbmdpbmcgeW91ciBzdWl0IHdpdGhvdXQgZHJvcHBpbmcgeW91ciBzd29yZD8gWW91IG11c3QgYmUga2lkZGluZyE=" },
1143 { "Cockatrices might turn themselves to stone faced with a mirror.",
1144 "Q29ja2F0cmljZXMgbWlnaHQgdHVybiB0aGVtc2VsdmVzIHRvIHN0b25lIGZhY2VkIHdpdGggYSBtaXJyb3Iu" },
1145 { "Consumption of home-made food is strictly forbidden in this dungeon.",
1146 "Q29uc3VtcHRpb24gb2YgaG9tZS1tYWRlIGZvb2QgaXMgc3RyaWN0bHkgZm9yYmlkZGVuIGluIHRoaXMgZHVuZ2Vvbi4=" },
1147 { "Dark room? Your chance to develop your photographs!",
1148 "RGFyayByb29tPyBZb3VyIGNoYW5jZSB0byBkZXZlbG9wIHlvdXIgcGhvdG9ncmFwaHMh" },
1149 { "Dark rooms are not *completely* dark: just wait and let your eyes adjust...",
1150 "RGFyayByb29tcyBhcmUgbm90ICpjb21wbGV0ZWx5KiBkYXJrOiBqdXN0IHdhaXQgYW5kIGxldCB5b3VyIGV5ZXMgYWRqdXN0Li4u" },
1151 { "David London sez, \"Hey guys, *WIELD* a lizard corpse against a cockatrice!\"",
1152 "RGF2aWQgTG9uZG9uIHNleiwgIkhleSBndXlzLCAqV0lFTEQqIGEgbGl6YXJkIGNvcnBzZSBhZ2FpbnN0IGEgY29ja2F0cmljZSEi" },
1153 { "Death is just life's way of telling you you've been fired.",
1154 "RGVhdGggaXMganVzdCBsaWZlJ3Mgd2F5IG9mIHRlbGxpbmcgeW91IHlvdSd2ZSBiZWVuIGZpcmVkLg==" },
1155 { "Demi-gods don't need any help from the gods.",
1156 "RGVtaS1nb2RzIGRvbid0IG5lZWQgYW55IGhlbHAgZnJvbSB0aGUgZ29kcy4=" },
1157 { "Demons *HATE* Priests and Priestesses.",
1158 "RGVtb25zICpIQVRFKiBQcmllc3RzIGFuZCBQcmllc3Rlc3Nlcy4=" },
1159 { "Didn't you forget to pay?",
1160 "RGlkbid0IHlvdSBmb3JnZXQgdG8gcGF5Pw==" },
1161 { "Didn't your mother tell you not to eat food off the floor?",
1162 "RGlkbid0IHlvdXIgbW90aGVyIHRlbGwgeW91IG5vdCB0byBlYXQgZm9vZCBvZmYgdGhlIGZsb29yPw==" },
1163 { "Direct a direct hit on your direct opponent, directing in the right direction.",
1164 "RGlyZWN0IGEgZGlyZWN0IGhpdCBvbiB5b3VyIGRpcmVjdCBvcHBvbmVudCwgZGlyZWN0aW5nIGluIHRoZSByaWdodCBkaXJlY3Rpb24u" },
1165 { "Do you want to make more money? Sure, we all do! Join the Fort Ludios guard!",
1166 "RG8geW91IHdhbnQgdG8gbWFrZSBtb3JlIG1vbmV5PyBTdXJlLCB3ZSBhbGwgZG8hIEpvaW4gdGhlIEZvcnQgTHVkaW9zIGd1YXJkIQ==" },
1167 { "Don't eat too much: you might start hiccoughing!",
1168 "RG9uJ3QgZWF0IHRvbyBtdWNoOiB5b3UgbWlnaHQgc3RhcnQgaGljY291Z2hpbmch" },
1169 { "Don't play hack at your work; your boss might hit you!",
1170 "RG9uJ3QgcGxheSBoYWNrIGF0IHlvdXIgd29yazsgeW91ciBib3NzIG1pZ2h0IGhpdCB5b3Uh" },
1171 { "Don't tell a soul you found a secret door, otherwise it isn't a secret anymore.",
1172 "RG9uJ3QgdGVsbCBhIHNvdWwgeW91IGZvdW5kIGEgc2VjcmV0IGRvb3IsIG90aGVyd2lzZSBpdCBpc24ndCBhIHNlY3JldCBhbnltb3JlLg==" },
1173 { "Drinking potions of booze may land you in jail if you are under 21.",
1174 "RHJpbmtpbmcgcG90aW9ucyBvZiBib296ZSBtYXkgbGFuZCB5b3UgaW4gamFpbCBpZiB5b3UgYXJlIHVuZGVyIDIxLg==" },
1175 { "Drop your vanity and get rid of your jewels! Pickpockets about!",
1176 "RHJvcCB5b3VyIHZhbml0eSBhbmQgZ2V0IHJpZCBvZiB5b3VyIGpld2VscyEgUGlja3BvY2tldHMgYWJvdXQh" },
1177 { "Eat 10 cloves of garlic and keep all humans at a two-square distance.",
1178 "RWF0IDEwIGNsb3ZlcyBvZiBnYXJsaWMgYW5kIGtlZXAgYWxsIGh1bWFucyBhdCBhIHR3by1zcXVhcmUgZGlzdGFuY2Uu" },
1179 { "Eels hide under mud. Use a unicorn to clear the water and make them visible.",
1180 "RWVscyBoaWRlIHVuZGVyIG11ZC4gVXNlIGEgdW5pY29ybiB0byBjbGVhciB0aGUgd2F0ZXIgYW5kIG1ha2UgdGhlbSB2aXNpYmxlLg==" },
1181 { "Engrave your wishes with a wand of wishing.",
1182 "RW5ncmF2ZSB5b3VyIHdpc2hlcyB3aXRoIGEgd2FuZCBvZiB3aXNoaW5nLg==" },
1183 { "Eventually you will come to admire the swift elegance of a retreating nymph.",
1184 "RXZlbnR1YWxseSB5b3Ugd2lsbCBjb21lIHRvIGFkbWlyZSB0aGUgc3dpZnQgZWxlZ2FuY2Ugb2YgYSByZXRyZWF0aW5nIG55bXBoLg==" },
1185 { "Ever heard hissing outside? I *knew* you hadn't!",
1186 "RXZlciBoZWFyZCBoaXNzaW5nIG91dHNpZGU/IEkgKmtuZXcqIHlvdSBoYWRuJ3Qh" },
1187 { "Ever lifted a dragon corpse?",
1188 "RXZlciBsaWZ0ZWQgYSBkcmFnb24gY29ycHNlPw==" },
1189 { "Ever seen a leocrotta dancing the tengu?",
1190 "RXZlciBzZWVuIGEgbGVvY3JvdHRhIGRhbmNpbmcgdGhlIHRlbmd1Pw==" },
1191 { "Ever seen your weapon glow plaid?",
1192 "RXZlciBzZWVuIHlvdXIgd2VhcG9uIGdsb3cgcGxhaWQ/" },
1193 { "Ever tamed a shopkeeper?",
1194 "RXZlciB0YW1lZCBhIHNob3BrZWVwZXI/" },
1195 { "Ever tried digging through a Vault Guard?",
1196 "RXZlciB0cmllZCBkaWdnaW5nIHRocm91Z2ggYSBWYXVsdCBHdWFyZD8=" },
1197 { "Ever tried enchanting a rope?",
1198 "RXZlciB0cmllZCBlbmNoYW50aW5nIGEgcm9wZT8=" },
1199 { "Floating eyes can't stand Hawaiian shirts.",
1200 "RmxvYXRpbmcgZXllcyBjYW4ndCBzdGFuZCBIYXdhaWlhbiBzaGlydHMu" },
1201 { "For any remedy there is a misery.",
1202 "Rm9yIGFueSByZW1lZHkgdGhlcmUgaXMgYSBtaXNlcnku" },
1203 { "Giant bats turn into giant vampires.",
1204 "R2lhbnQgYmF0cyB0dXJuIGludG8gZ2lhbnQgdmFtcGlyZXMu" },
1205 { "Good day for overcoming obstacles. Try a steeplechase.",
1206 "R29vZCBkYXkgZm9yIG92ZXJjb21pbmcgb2JzdGFjbGVzLiBUcnkgYSBzdGVlcGxlY2hhc2Uu" },
1207 { "Half Moon tonight. (At least it's better than no Moon at all.)",
1208 "SGFsZiBNb29uIHRvbmlnaHQuIChBdCBsZWFzdCBpdCdzIGJldHRlciB0aGFuIG5vIE1vb24gYXQgYWxsLik=" },
1209 { "Help! I'm being held prisoner in a fortune cookie factory!",
1210 "SGVscCEgSSdtIGJlaW5nIGhlbGQgcHJpc29uZXIgaW4gYSBmb3J0dW5lIGNvb2tpZSBmYWN0b3J5IQ==" },
1211 { "Housecats have nine lives, kittens only one.",
1212 "SG91c2VjYXRzIGhhdmUgbmluZSBsaXZlcywga2l0dGVucyBvbmx5IG9uZS4=" },
1213 { "How long can you tread water?",
1214 "SG93IGxvbmcgY2FuIHlvdSB0cmVhZCB3YXRlcj8=" },
1215 { "Hungry? There is an abundance of food on the next level.",
1216 "SHVuZ3J5PyBUaGVyZSBpcyBhbiBhYnVuZGFuY2Ugb2YgZm9vZCBvbiB0aGUgbmV4dCBsZXZlbC4=" },
1217 { "I guess you've never hit a mail daemon with the Amulet of Yendor...",
1218 "SSBndWVzcyB5b3UndmUgbmV2ZXIgaGl0IGEgbWFpbCBkYWVtb24gd2l0aCB0aGUgQW11bGV0IG9mIFllbmRvci4uLg==" },
1219 { "If you are the shopkeeper, you can take things for free.",
1220 "SWYgeW91IGFyZSB0aGUgc2hvcGtlZXBlciwgeW91IGNhbiB0YWtlIHRoaW5ncyBmb3IgZnJlZS4=" },
1221 { "If you can't learn to do it well, learn to enjoy doing it badly.",
1222 "SWYgeW91IGNhbid0IGxlYXJuIHRvIGRvIGl0IHdlbGwsIGxlYXJuIHRvIGVuam95IGRvaW5nIGl0IGJhZGx5Lg==" },
1223 { "If you thought the Wizard was bad, just wait till you meet the Warlord!",
1224 "SWYgeW91IHRob3VnaHQgdGhlIFdpemFyZCB3YXMgYmFkLCBqdXN0IHdhaXQgdGlsbCB5b3UgbWVldCB0aGUgV2FybG9yZCE=" },
1225 { "If you turn blind, don't expect your dog to be turned into a seeing-eye dog.",
1226 "SWYgeW91IHR1cm4gYmxpbmQsIGRvbid0IGV4cGVjdCB5b3VyIGRvZyB0byBiZSB0dXJuZWQgaW50byBhIHNlZWluZy1leWUgZG9nLg==" },
1227 { "If you want to feel great, you must eat something real big.",
1228 "SWYgeW91IHdhbnQgdG8gZmVlbCBncmVhdCwgeW91IG11c3QgZWF0IHNvbWV0aGluZyByZWFsIGJpZy4=" },
1229 { "If you want to float, you'd better eat a floating eye.",
1230 "SWYgeW91IHdhbnQgdG8gZmxvYXQsIHlvdSdkIGJldHRlciBlYXQgYSBmbG9hdGluZyBleWUu" },
1231 { "If your ghost kills a player, it increases your score.",
1232 "SWYgeW91ciBnaG9zdCBraWxscyBhIHBsYXllciwgaXQgaW5jcmVhc2VzIHlvdXIgc2NvcmUu" },
1233 { "Increase mindpower: Tame your own ghost!",
1234 "SW5jcmVhc2UgbWluZHBvd2VyOiBUYW1lIHlvdXIgb3duIGdob3N0IQ==" },
1235 { "It furthers one to see the great man.",
1236 "SXQgZnVydGhlcnMgb25lIHRvIHNlZSB0aGUgZ3JlYXQgbWFuLg==" },
1237 { "It's easy to overlook a monster in a wood.",
1238 "SXQncyBlYXN5IHRvIG92ZXJsb29rIGEgbW9uc3RlciBpbiBhIHdvb2Qu" },
1239 { "Just below any trapdoor there may be another one. Just keep falling!",
1240 "SnVzdCBiZWxvdyBhbnkgdHJhcGRvb3IgdGhlcmUgbWF5IGJlIGFub3RoZXIgb25lLiBKdXN0IGtlZXAgZmFsbGluZyE=" },
1241 { "Katanas are very sharp; watch you don't cut yourself.",
1242 "S2F0YW5hcyBhcmUgdmVyeSBzaGFycDsgd2F0Y2ggeW91IGRvbid0IGN1dCB5b3Vyc2VsZi4=" },
1243 { "Keep a clear mind: quaff clear potions.",
1244 "S2VlcCBhIGNsZWFyIG1pbmQ6IHF1YWZmIGNsZWFyIHBvdGlvbnMu" },
1245 { "Kicking the terminal doesn't hurt the monsters.",
1246 "S2lja2luZyB0aGUgdGVybWluYWwgZG9lc24ndCBodXJ0IHRoZSBtb25zdGVycy4=" },
1247 { "Killer bees keep appearing till you kill their queen.",
1248 "S2lsbGVyIGJlZXMga2VlcCBhcHBlYXJpbmcgdGlsbCB5b3Uga2lsbCB0aGVpciBxdWVlbi4=" },
1249 { "Killer bunnies can be tamed with carrots only.",
1250 "S2lsbGVyIGJ1bm5pZXMgY2FuIGJlIHRhbWVkIHdpdGggY2Fycm90cyBvbmx5Lg==" },
1251 { "Latest news? Put `rec.games.roguelike.nethack' in your .newsrc!",
1252 "TGF0ZXN0IG5ld3M/IFB1dCBgcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrJyBpbiB5b3VyIC5uZXdzcmMh" },
1253 { "Learn how to spell. Play NetHack!",
1254 "TGVhcm4gaG93IHRvIHNwZWxsLiBQbGF5IE5ldEhhY2sh" },
1255 { "Leprechauns hide their gold in a secret room.",
1256 "TGVwcmVjaGF1bnMgaGlkZSB0aGVpciBnb2xkIGluIGEgc2VjcmV0IHJvb20u" },
1257 { "Let your fingers do the walking on the yulkjhnb keys.",
1258 "TGV0IHlvdXIgZmluZ2VycyBkbyB0aGUgd2Fsa2luZyBvbiB0aGUgeXVsa2pobmIga2V5cy4=" },
1259 { "Let's face it: this time you're not going to win.",
1260 "TGV0J3MgZmFjZSBpdDogdGhpcyB0aW1lIHlvdSdyZSBub3QgZ29pbmcgdG8gd2luLg==" },
1261 { "Let's have a party, drink a lot of booze.",
1262 "TGV0J3MgaGF2ZSBhIHBhcnR5LCBkcmluayBhIGxvdCBvZiBib296ZS4=" },
1263 { "Liquor sellers do not drink; they hate to see you twice.",
1264 "TGlxdW9yIHNlbGxlcnMgZG8gbm90IGRyaW5rOyB0aGV5IGhhdGUgdG8gc2VlIHlvdSB0d2ljZS4=" },
1265 { "Lunar eclipse tonight. May as well quit now!",
1266 "THVuYXIgZWNsaXBzZSB0b25pZ2h0LiBNYXkgYXMgd2VsbCBxdWl0IG5vdyE=" },
1267 { "Meeting your own ghost decreases your luck considerably!",
1268 "TWVldGluZyB5b3VyIG93biBnaG9zdCBkZWNyZWFzZXMgeW91ciBsdWNrIGNvbnNpZGVyYWJseSE=" },
1269 { "Money to invest? Take it to the local branch of the Magic Memory Vault!",
1270 "TW9uZXkgdG8gaW52ZXN0PyBUYWtlIGl0IHRvIHRoZSBsb2NhbCBicmFuY2ggb2YgdGhlIE1hZ2ljIE1lbW9yeSBWYXVsdCE=" },
1271 { "Monsters come from nowhere to hit you everywhere.",
1272 "TW9uc3RlcnMgY29tZSBmcm9tIG5vd2hlcmUgdG8gaGl0IHlvdSBldmVyeXdoZXJlLg==" },
1273 { "Monsters sleep because you are boring, not because they ever get tired.",
1274 "TW9uc3RlcnMgc2xlZXAgYmVjYXVzZSB5b3UgYXJlIGJvcmluZywgbm90IGJlY2F1c2UgdGhleSBldmVyIGdldCB0aXJlZC4=" },
1275 { "Most monsters prefer minced meat. That's why they are hitting you!",
1276 "TW9zdCBtb25zdGVycyBwcmVmZXIgbWluY2VkIG1lYXQuIFRoYXQncyB3aHkgdGhleSBhcmUgaGl0dGluZyB5b3Uh" },
1277 { "Most of the bugs in NetHack are on the floor.",
1278 "TW9zdCBvZiB0aGUgYnVncyBpbiBOZXRIYWNrIGFyZSBvbiB0aGUgZmxvb3Iu" },
1279 { "Much ado Nothing Happens.",
1280 "TXVjaCBhZG8gTm90aGluZyBIYXBwZW5zLg==" },
1281 { "Multi-player NetHack is a myth.",
1282 "TXVsdGktcGxheWVyIE5ldEhhY2sgaXMgYSBteXRoLg==" },
1283 { "NetHack is addictive. Too late, you're already hooked.",
1284 "TmV0SGFjayBpcyBhZGRpY3RpdmUuIFRvbyBsYXRlLCB5b3UncmUgYWxyZWFkeSBob29rZWQu" },
1285 { "Never ask a shopkeeper for a price list.",
1286 "TmV2ZXIgYXNrIGEgc2hvcGtlZXBlciBmb3IgYSBwcmljZSBsaXN0Lg==" },
1287 { "Never burn a tree, unless you like getting whacked with a +5 shovel.",
1288 "TmV2ZXIgYnVybiBhIHRyZWUsIHVubGVzcyB5b3UgbGlrZSBnZXR0aW5nIHdoYWNrZWQgd2l0aCBhICs1IHNob3ZlbC4=" },
1289 { "Never eat with glowing hands!",
1290 "TmV2ZXIgZWF0IHdpdGggZ2xvd2luZyBoYW5kcyE=" },
1291 { "Never mind the monsters hitting you: they just replace the charwomen.",
1292 "TmV2ZXIgbWluZCB0aGUgbW9uc3RlcnMgaGl0dGluZyB5b3U6IHRoZXkganVzdCByZXBsYWNlIHRoZSBjaGFyd29tZW4u" },
1293 { "Never play leapfrog with a unicorn.",
1294 "TmV2ZXIgcGxheSBsZWFwZnJvZyB3aXRoIGEgdW5pY29ybi4=" },
1295 { "Never step on a cursed engraving.",
1296 "TmV2ZXIgc3RlcCBvbiBhIGN1cnNlZCBlbmdyYXZpbmcu" },
1297 { "Never swim with a camera: there's nothing to take pictures of.",
1298 "TmV2ZXIgc3dpbSB3aXRoIGEgY2FtZXJhOiB0aGVyZSdzIG5vdGhpbmcgdG8gdGFrZSBwaWN0dXJlcyBvZi4=" },
1299 { "Never teach your pet rust monster to fetch.",
1300 "TmV2ZXIgdGVhY2ggeW91ciBwZXQgcnVzdCBtb25zdGVyIHRvIGZldGNoLg==" },
1301 { "Never trust a random generator in magic fields.",
1302 "TmV2ZXIgdHJ1c3QgYSByYW5kb20gZ2VuZXJhdG9yIGluIG1hZ2ljIGZpZWxkcy4=" },
1303 { "Never use a wand of death.",
1304 "TmV2ZXIgdXNlIGEgd2FuZCBvZiBkZWF0aC4=" },
1305 { "No level contains two shops. The maze is no level. So...",
1306 "Tm8gbGV2ZWwgY29udGFpbnMgdHdvIHNob3BzLiBUaGUgbWF6ZSBpcyBubyBsZXZlbC4gU28uLi4=" },
1307 { "No part of this fortune may be reproduced, stored in a retrieval system, ...",
1308 "Tm8gcGFydCBvZiB0aGlzIGZvcnR1bmUgbWF5IGJlIHJlcHJvZHVjZWQsIHN0b3JlZCBpbiBhIHJldHJpZXZhbCBzeXN0ZW0sIC4uLg==" },
1309 { "Not all rumors are as misleading as this one.",
1310 "Tm90IGFsbCBydW1vcnMgYXJlIGFzIG1pc2xlYWRpbmcgYXMgdGhpcyBvbmUu" },
1311 { "Nymphs and nurses like beautiful rings.",
1312 "TnltcGhzIGFuZCBudXJzZXMgbGlrZSBiZWF1dGlmdWwgcmluZ3Mu" },
1313 { "Nymphs are blondes. Are you a gentleman?",
1314 "TnltcGhzIGFyZSBibG9uZGVzLiBBcmUgeW91IGEgZ2VudGxlbWFuPw==" },
1315 { "Offering a unicorn a worthless piece of glass might prove to be fatal!",
1316 "T2ZmZXJpbmcgYSB1bmljb3JuIGEgd29ydGhsZXNzIHBpZWNlIG9mIGdsYXNzIG1pZ2h0IHByb3ZlIHRvIGJlIGZhdGFsIQ==" },
1317 { "Old hackers never die: young ones do.",
1318 "T2xkIGhhY2tlcnMgbmV2ZXIgZGllOiB5b3VuZyBvbmVzIGRvLg==" },
1319 { "One has to leave shops before closing time.",
1320 "T25lIGhhcyB0byBsZWF2ZSBzaG9wcyBiZWZvcmUgY2xvc2luZyB0aW1lLg==" },
1321 { "One homunculus a day keeps the doctor away.",
1322 "T25lIGhvbXVuY3VsdXMgYSBkYXkga2VlcHMgdGhlIGRvY3RvciBhd2F5Lg==" },
1323 { "One level further down somebody is getting killed, right now.",
1324 "T25lIGxldmVsIGZ1cnRoZXIgZG93biBzb21lYm9keSBpcyBnZXR0aW5nIGtpbGxlZCwgcmlnaHQgbm93Lg==" },
1325 { "Only a wizard can use a magic whistle.",
1326 "T25seSBhIHdpemFyZCBjYW4gdXNlIGEgbWFnaWMgd2hpc3RsZS4=" },
1327 { "Only adventurers of evil alignment think of killing their dog.",
1328 "T25seSBhZHZlbnR1cmVycyBvZiBldmlsIGFsaWdubWVudCB0aGluayBvZiBraWxsaW5nIHRoZWlyIGRvZy4=" },
1329 { "Only chaotic evils kill sleeping monsters.",
1330 "T25seSBjaGFvdGljIGV2aWxzIGtpbGwgc2xlZXBpbmcgbW9uc3RlcnMu" },
1331 { "Only real trappers escape traps.",
1332 "T25seSByZWFsIHRyYXBwZXJzIGVzY2FwZSB0cmFwcy4=" },
1333 { "Only real wizards can write scrolls.",
1334 "T25seSByZWFsIHdpemFyZHMgY2FuIHdyaXRlIHNjcm9sbHMu" },
1335 { "Operation OVERKILL has started now.",
1336 "T3BlcmF0aW9uIE9WRVJLSUxMIGhhcyBzdGFydGVkIG5vdy4=" },
1337 { "PLEASE ignore previous rumor.",
1338 "UExFQVNFIGlnbm9yZSBwcmV2aW91cyBydW1vci4=" },
1339 { "Polymorph into an ettin; meet your opponents face to face to face.",
1340 "UG9seW1vcnBoIGludG8gYW4gZXR0aW47IG1lZXQgeW91ciBvcHBvbmVudHMgZmFjZSB0byBmYWNlIHRvIGZhY2Uu" },
1341 { "Praying will frighten demons.",
1342 "UHJheWluZyB3aWxsIGZyaWdodGVuIGRlbW9ucy4=" },
1343 { "Row (3x) that boat gently down the stream, Charon (4x), death is but a dream.",
1344 "Um93ICgzeCkgdGhhdCBib2F0IGdlbnRseSBkb3duIHRoZSBzdHJlYW0sIENoYXJvbiAoNHgpLCBkZWF0aCBpcyBidXQgYSBkcmVhbS4=" },
1345 { "Running is good for your legs.",
1346 "UnVubmluZyBpcyBnb29kIGZvciB5b3VyIGxlZ3Mu" },
1347 { "Screw up your courage! You've screwed up everything else.",
1348 "U2NyZXcgdXAgeW91ciBjb3VyYWdlISBZb3UndmUgc2NyZXdlZCB1cCBldmVyeXRoaW5nIGVsc2Uu" },
1349 { "Seepage? Leaky pipes? Rising damp? Summon the plumber!",
1350 "U2VlcGFnZT8gTGVha3kgcGlwZXM/IFJpc2luZyBkYW1wPyBTdW1tb24gdGhlIHBsdW1iZXIh" },
1351 { "Segmentation fault (core dumped).",
1352 "U2VnbWVudGF0aW9uIGZhdWx0IChjb3JlIGR1bXBlZCku" },
1353 { "Shopkeepers sometimes die from old age.",
1354 "U2hvcGtlZXBlcnMgc29tZXRpbWVzIGRpZSBmcm9tIG9sZCBhZ2Uu" },
1355 { "Some mazes (especially small ones) have no solutions, says man 6 maze.",
1356 "U29tZSBtYXplcyAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBoYXZlIG5vIHNvbHV0aW9ucywgc2F5cyBtYW4gNiBtYXplLg==" },
1357 { "Some questions the Sphynx asks just *don't* have any answers.",
1358 "U29tZSBxdWVzdGlvbnMgdGhlIFNwaHlueCBhc2tzIGp1c3QgKmRvbid0KiBoYXZlIGFueSBhbnN3ZXJzLg==" },
1359 { "Sometimes \"mu\" is the answer.",
1360 "U29tZXRpbWVzICJtdSIgaXMgdGhlIGFuc3dlci4=" },
1361 { "Sorry, no fortune this time. Better luck next cookie!",
1362 "U29ycnksIG5vIGZvcnR1bmUgdGhpcyB0aW1lLiBCZXR0ZXIgbHVjayBuZXh0IGNvb2tpZSE=" },
1363 { "Spare your scrolls of make-edible until it's really necessary!",
1364 "U3BhcmUgeW91ciBzY3JvbGxzIG9mIG1ha2UtZWRpYmxlIHVudGlsIGl0J3MgcmVhbGx5IG5lY2Vzc2FyeSE=" },
1365 { "Suddenly, the dungeon will collapse...",
1366 "U3VkZGVubHksIHRoZSBkdW5nZW9uIHdpbGwgY29sbGFwc2UuLi4=" },
1367 { "Taming a mail daemon may cause a system security violation.",
1368 "VGFtaW5nIGEgbWFpbCBkYWVtb24gbWF5IGNhdXNlIGEgc3lzdGVtIHNlY3VyaXR5IHZpb2xhdGlvbi4=" },
1369 { "The crowd was so tough, the Stooges won't play the Dungeon anymore, nyuk nyuk.",
1370 "VGhlIGNyb3dkIHdhcyBzbyB0b3VnaCwgdGhlIFN0b29nZXMgd29uJ3QgcGxheSB0aGUgRHVuZ2VvbiBhbnltb3JlLCBueXVrIG55dWsu" },
1371 { "The leprechauns hide their treasure in a small hidden room.",
1372 "VGhlIGxlcHJlY2hhdW5zIGhpZGUgdGhlaXIgdHJlYXN1cmUgaW4gYSBzbWFsbCBoaWRkZW4gcm9vbS4=" },
1373 { "The longer the wand the better.",
1374 "VGhlIGxvbmdlciB0aGUgd2FuZCB0aGUgYmV0dGVyLg==" },
1375 { "The magic word is \"XYZZY\".",
1376 "VGhlIG1hZ2ljIHdvcmQgaXMgIlhZWlpZIi4=" },
1377 { "The meek shall inherit your bones files.",
1378 "VGhlIG1lZWsgc2hhbGwgaW5oZXJpdCB5b3VyIGJvbmVzIGZpbGVzLg==" },
1379 { "The mines are dark and deep, and I have levels to go before I sleep.",
1380 "VGhlIG1pbmVzIGFyZSBkYXJrIGFuZCBkZWVwLCBhbmQgSSBoYXZlIGxldmVscyB0byBnbyBiZWZvcmUgSSBzbGVlcC4=" },
1381 { "The use of dynamite is dangerous.",
1382 "VGhlIHVzZSBvZiBkeW5hbWl0ZSBpcyBkYW5nZXJvdXMu" },
1383 { "There are no worms in the UNIX version.",
1384 "VGhlcmUgYXJlIG5vIHdvcm1zIGluIHRoZSBVTklYIHZlcnNpb24u" },
1385 { "There is a trap on this level!",
1386 "VGhlcmUgaXMgYSB0cmFwIG9uIHRoaXMgbGV2ZWwh" },
1387 { "They say that Demogorgon, Asmodeus, Orcus, Yeenoghu & Juiblex is no law firm.",
1388 "VGhleSBzYXkgdGhhdCBEZW1vZ29yZ29uLCBBc21vZGV1cywgT3JjdXMsIFllZW5vZ2h1ICYgSnVpYmxleCBpcyBubyBsYXcgZmlybS4=" },
1389 { "They say that Geryon has an evil twin, beware!",
1390 "VGhleSBzYXkgdGhhdCBHZXJ5b24gaGFzIGFuIGV2aWwgdHdpbiwgYmV3YXJlIQ==" },
1391 { "They say that Medusa would make a terrible pet.",
1392 "VGhleSBzYXkgdGhhdCBNZWR1c2Egd291bGQgbWFrZSBhIHRlcnJpYmxlIHBldC4=" },
1393 { "They say that NetHack bugs are Seldon planned.",
1394 "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGJ1Z3MgYXJlIFNlbGRvbiBwbGFubmVkLg==" },
1395 { "They say that NetHack comes in 256 flavors.",
1396 "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGNvbWVzIGluIDI1NiBmbGF2b3JzLg==" },
1397 { "They say that NetHack is just a computer game.",
1398 "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIGp1c3QgYSBjb21wdXRlciBnYW1lLg==" },
1399 { "They say that NetHack is more than just a computer game.",
1400 "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG1vcmUgdGhhbiBqdXN0IGEgY29tcHV0ZXIgZ2FtZS4=" },
1401 { "They say that NetHack is never what it used to be.",
1402 "VGhleSBzYXkgdGhhdCBOZXRIYWNrIGlzIG5ldmVyIHdoYXQgaXQgdXNlZCB0byBiZS4=" },
1403 { "They say that a baby dragon is too small to hurt or help you.",
1404 "VGhleSBzYXkgdGhhdCBhIGJhYnkgZHJhZ29uIGlzIHRvbyBzbWFsbCB0byBodXJ0IG9yIGhlbHAgeW91Lg==" },
1405 { "They say that a black pudding is simply a brown pudding gone bad.",
1406 "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHB1ZGRpbmcgaXMgc2ltcGx5IGEgYnJvd24gcHVkZGluZyBnb25lIGJhZC4=" },
1407 { "They say that a black sheep has 3 bags full of wool.",
1408 "VGhleSBzYXkgdGhhdCBhIGJsYWNrIHNoZWVwIGhhcyAzIGJhZ3MgZnVsbCBvZiB3b29sLg==" },
1409 { "They say that a blank scroll is like a blank check.",
1410 "VGhleSBzYXkgdGhhdCBhIGJsYW5rIHNjcm9sbCBpcyBsaWtlIGEgYmxhbmsgY2hlY2su" },
1411 { "They say that a cat named Morris has nine lives.",
1412 "VGhleSBzYXkgdGhhdCBhIGNhdCBuYW1lZCBNb3JyaXMgaGFzIG5pbmUgbGl2ZXMu" },
1413 { "They say that a desperate shopper might pay any price in a shop.",
1414 "VGhleSBzYXkgdGhhdCBhIGRlc3BlcmF0ZSBzaG9wcGVyIG1pZ2h0IHBheSBhbnkgcHJpY2UgaW4gYSBzaG9wLg==" },
1415 { "They say that a diamond dog is everybody's best friend.",
1416 "VGhleSBzYXkgdGhhdCBhIGRpYW1vbmQgZG9nIGlzIGV2ZXJ5Ym9keSdzIGJlc3QgZnJpZW5kLg==" },
1417 { "They say that a dwarf lord can carry a pick-axe because his armor is light.",
1418 "VGhleSBzYXkgdGhhdCBhIGR3YXJmIGxvcmQgY2FuIGNhcnJ5IGEgcGljay1heGUgYmVjYXVzZSBoaXMgYXJtb3IgaXMgbGlnaHQu" },
1419 { "They say that a floating eye can defeat Medusa.",
1420 "VGhleSBzYXkgdGhhdCBhIGZsb2F0aW5nIGV5ZSBjYW4gZGVmZWF0IE1lZHVzYS4=" },
1421 { "They say that a fortune only has 1 line and you can't read between it.",
1422 "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lIGFuZCB5b3UgY2FuJ3QgcmVhZCBiZXR3ZWVuIGl0Lg==" },
1423 { "They say that a fortune only has 1 line, but you can read between it.",
1424 "VGhleSBzYXkgdGhhdCBhIGZvcnR1bmUgb25seSBoYXMgMSBsaW5lLCBidXQgeW91IGNhbiByZWFkIGJldHdlZW4gaXQu" },
1425 { "They say that a fountain looks nothing like a regularly erupting geyser.",
1426 "VGhleSBzYXkgdGhhdCBhIGZvdW50YWluIGxvb2tzIG5vdGhpbmcgbGlrZSBhIHJlZ3VsYXJseSBlcnVwdGluZyBnZXlzZXIu" },
1427 { "They say that a gold doubloon is worth more than its weight in gold.",
1428 "VGhleSBzYXkgdGhhdCBhIGdvbGQgZG91Ymxvb24gaXMgd29ydGggbW9yZSB0aGFuIGl0cyB3ZWlnaHQgaW4gZ29sZC4=" },
1429 { "They say that a grid bug won't pay a shopkeeper for zapping you in a shop.",
1430 "VGhleSBzYXkgdGhhdCBhIGdyaWQgYnVnIHdvbid0IHBheSBhIHNob3BrZWVwZXIgZm9yIHphcHBpbmcgeW91IGluIGEgc2hvcC4=" },
1431 { "They say that a gypsy could tell your fortune for a price.",
1432 "VGhleSBzYXkgdGhhdCBhIGd5cHN5IGNvdWxkIHRlbGwgeW91ciBmb3J0dW5lIGZvciBhIHByaWNlLg==" },
1433 { "They say that a hacker named Alice once level teleported by using a mirror.",
1434 "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBBbGljZSBvbmNlIGxldmVsIHRlbGVwb3J0ZWQgYnkgdXNpbmcgYSBtaXJyb3Iu" },
1435 { "They say that a hacker named David once slew a giant with a sling and a rock.",
1436 "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEYXZpZCBvbmNlIHNsZXcgYSBnaWFudCB3aXRoIGEgc2xpbmcgYW5kIGEgcm9jay4=" },
1437 { "They say that a hacker named Dorothy once rode a fog cloud to Oz.",
1438 "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBEb3JvdGh5IG9uY2Ugcm9kZSBhIGZvZyBjbG91ZCB0byBPei4=" },
1439 { "They say that a hacker named Mary once lost a white sheep in the mazes.",
1440 "VGhleSBzYXkgdGhhdCBhIGhhY2tlciBuYW1lZCBNYXJ5IG9uY2UgbG9zdCBhIHdoaXRlIHNoZWVwIGluIHRoZSBtYXplcy4=" },
1441 { "They say that a helm of brilliance is not to be taken lightly.",
1442 "VGhleSBzYXkgdGhhdCBhIGhlbG0gb2YgYnJpbGxpYW5jZSBpcyBub3QgdG8gYmUgdGFrZW4gbGlnaHRseS4=" },
1443 { "They say that a hot dog and a hell hound are the same thing.",
1444 "VGhleSBzYXkgdGhhdCBhIGhvdCBkb2cgYW5kIGEgaGVsbCBob3VuZCBhcmUgdGhlIHNhbWUgdGhpbmcu" },
1445 { "They say that a lamp named Aladdin's Lamp contains a djinni with 3 wishes.",
1446 "VGhleSBzYXkgdGhhdCBhIGxhbXAgbmFtZWQgQWxhZGRpbidzIExhbXAgY29udGFpbnMgYSBkamlubmkgd2l0aCAzIHdpc2hlcy4=" },
1447 { "They say that a large dog named Lassie will lead you to the amulet.",
1448 "VGhleSBzYXkgdGhhdCBhIGxhcmdlIGRvZyBuYW1lZCBMYXNzaWUgd2lsbCBsZWFkIHlvdSB0byB0aGUgYW11bGV0Lg==" },
1449 { "They say that a long sword is not a light sword.",
1450 "VGhleSBzYXkgdGhhdCBhIGxvbmcgc3dvcmQgaXMgbm90IGEgbGlnaHQgc3dvcmQu" },
1451 { "They say that a manes won't mince words with you.",
1452 "VGhleSBzYXkgdGhhdCBhIG1hbmVzIHdvbid0IG1pbmNlIHdvcmRzIHdpdGggeW91Lg==" },
1453 { "They say that a mind is a terrible thing to waste.",
1454 "VGhleSBzYXkgdGhhdCBhIG1pbmQgaXMgYSB0ZXJyaWJsZSB0aGluZyB0byB3YXN0ZS4=" },
1455 { "They say that a plain nymph will only wear a wire ring in one ear.",
1456 "VGhleSBzYXkgdGhhdCBhIHBsYWluIG55bXBoIHdpbGwgb25seSB3ZWFyIGEgd2lyZSByaW5nIGluIG9uZSBlYXIu" },
1457 { "They say that a plumed hat could be a previously used crested helmet.",
1458 "VGhleSBzYXkgdGhhdCBhIHBsdW1lZCBoYXQgY291bGQgYmUgYSBwcmV2aW91c2x5IHVzZWQgY3Jlc3RlZCBoZWxtZXQu" },
1459 { "They say that a potion of oil is difficult to grasp.",
1460 "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiBvaWwgaXMgZGlmZmljdWx0IHRvIGdyYXNwLg==" },
1461 { "They say that a potion of yogurt is a cancelled potion of sickness.",
1462 "VGhleSBzYXkgdGhhdCBhIHBvdGlvbiBvZiB5b2d1cnQgaXMgYSBjYW5jZWxsZWQgcG90aW9uIG9mIHNpY2tuZXNzLg==" },
1463 { "They say that a purple worm is not a baby purple dragon.",
1464 "VGhleSBzYXkgdGhhdCBhIHB1cnBsZSB3b3JtIGlzIG5vdCBhIGJhYnkgcHVycGxlIGRyYWdvbi4=" },
1465 { "They say that a quivering blob tastes different than a gelatinous cube.",
1466 "VGhleSBzYXkgdGhhdCBhIHF1aXZlcmluZyBibG9iIHRhc3RlcyBkaWZmZXJlbnQgdGhhbiBhIGdlbGF0aW5vdXMgY3ViZS4=" },
1467 { "They say that a runed broadsword named Stormbringer attracts vortices.",
1468 "VGhleSBzYXkgdGhhdCBhIHJ1bmVkIGJyb2Fkc3dvcmQgbmFtZWQgU3Rvcm1icmluZ2VyIGF0dHJhY3RzIHZvcnRpY2VzLg==" },
1469 { "They say that a scroll of summoning has other names.",
1470 "VGhleSBzYXkgdGhhdCBhIHNjcm9sbCBvZiBzdW1tb25pbmcgaGFzIG90aGVyIG5hbWVzLg==" },
1471 { "They say that a shaman can bestow blessings but usually doesn't.",
1472 "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiBjYW4gYmVzdG93IGJsZXNzaW5ncyBidXQgdXN1YWxseSBkb2Vzbid0Lg==" },
1473 { "They say that a shaman will bless you for an eye of newt and wing of bat.",
1474 "VGhleSBzYXkgdGhhdCBhIHNoYW1hbiB3aWxsIGJsZXNzIHlvdSBmb3IgYW4gZXllIG9mIG5ld3QgYW5kIHdpbmcgb2YgYmF0Lg==" },
1475 { "They say that a shimmering gold shield is not a polished silver shield.",
1476 "VGhleSBzYXkgdGhhdCBhIHNoaW1tZXJpbmcgZ29sZCBzaGllbGQgaXMgbm90IGEgcG9saXNoZWQgc2lsdmVyIHNoaWVsZC4=" },
1477 { "They say that a spear will hit a neo-otyugh. (Do YOU know what that is?)",
1478 "VGhleSBzYXkgdGhhdCBhIHNwZWFyIHdpbGwgaGl0IGEgbmVvLW90eXVnaC4gKERvIFlPVSBrbm93IHdoYXQgdGhhdCBpcz8p" },
1479 { "They say that a spotted dragon is the ultimate shape changer.",
1480 "VGhleSBzYXkgdGhhdCBhIHNwb3R0ZWQgZHJhZ29uIGlzIHRoZSB1bHRpbWF0ZSBzaGFwZSBjaGFuZ2VyLg==" },
1481 { "They say that a stethoscope is no good if you can only hear your heartbeat.",
1482 "VGhleSBzYXkgdGhhdCBhIHN0ZXRob3Njb3BlIGlzIG5vIGdvb2QgaWYgeW91IGNhbiBvbmx5IGhlYXIgeW91ciBoZWFydGJlYXQu" },
1483 { "They say that a succubus named Suzy will sometimes warn you of danger.",
1484 "VGhleSBzYXkgdGhhdCBhIHN1Y2N1YnVzIG5hbWVkIFN1enkgd2lsbCBzb21ldGltZXMgd2FybiB5b3Ugb2YgZGFuZ2VyLg==" },
1485 { "They say that a wand of cancellation is not like a wand of polymorph.",
1486 "VGhleSBzYXkgdGhhdCBhIHdhbmQgb2YgY2FuY2VsbGF0aW9uIGlzIG5vdCBsaWtlIGEgd2FuZCBvZiBwb2x5bW9ycGgu" },
1487 { "They say that a wood golem named Pinocchio would be easy to control.",
1488 "VGhleSBzYXkgdGhhdCBhIHdvb2QgZ29sZW0gbmFtZWQgUGlub2NjaGlvIHdvdWxkIGJlIGVhc3kgdG8gY29udHJvbC4=" },
1489 { "They say that after killing a dragon it's time for a change of scenery.",
1490 "VGhleSBzYXkgdGhhdCBhZnRlciBraWxsaW5nIGEgZHJhZ29uIGl0J3MgdGltZSBmb3IgYSBjaGFuZ2Ugb2Ygc2NlbmVyeS4=" },
1491 { "They say that an amulet of strangulation is worse than ring around the collar.",
1492 "VGhleSBzYXkgdGhhdCBhbiBhbXVsZXQgb2Ygc3RyYW5ndWxhdGlvbiBpcyB3b3JzZSB0aGFuIHJpbmcgYXJvdW5kIHRoZSBjb2xsYXIu" },
1493 { "They say that an attic is the best place to hide your toys.",
1494 "VGhleSBzYXkgdGhhdCBhbiBhdHRpYyBpcyB0aGUgYmVzdCBwbGFjZSB0byBoaWRlIHlvdXIgdG95cy4=" },
1495 { "They say that an axe named Cleaver once belonged to a hacker named Beaver.",
1496 "VGhleSBzYXkgdGhhdCBhbiBheGUgbmFtZWQgQ2xlYXZlciBvbmNlIGJlbG9uZ2VkIHRvIGEgaGFja2VyIG5hbWVkIEJlYXZlci4=" },
1497 { "They say that an eye of newt and a wing of bat are double the trouble.",
1498 "VGhleSBzYXkgdGhhdCBhbiBleWUgb2YgbmV3dCBhbmQgYSB3aW5nIG9mIGJhdCBhcmUgZG91YmxlIHRoZSB0cm91YmxlLg==" },
1499 { "They say that an incubus named Izzy sometimes makes women feel sensitive.",
1500 "VGhleSBzYXkgdGhhdCBhbiBpbmN1YnVzIG5hbWVkIEl6enkgc29tZXRpbWVzIG1ha2VzIHdvbWVuIGZlZWwgc2Vuc2l0aXZlLg==" },
1501 { "They say that an opulent throne room is rarely a place to wish you'd be in.",
1502 "VGhleSBzYXkgdGhhdCBhbiBvcHVsZW50IHRocm9uZSByb29tIGlzIHJhcmVseSBhIHBsYWNlIHRvIHdpc2ggeW91J2QgYmUgaW4u" },
1503 { "They say that an unlucky hacker once had a nose bleed at an altar and died.",
1504 "VGhleSBzYXkgdGhhdCBhbiB1bmx1Y2t5IGhhY2tlciBvbmNlIGhhZCBhIG5vc2UgYmxlZWQgYXQgYW4gYWx0YXIgYW5kIGRpZWQu" },
1505 { "They say that and they say this but they never say never, never!",
1506 "VGhleSBzYXkgdGhhdCBhbmQgdGhleSBzYXkgdGhpcyBidXQgdGhleSBuZXZlciBzYXkgbmV2ZXIsIG5ldmVyIQ==" },
1507 { "They say that any quantum mechanic knows that speed kills.",
1508 "VGhleSBzYXkgdGhhdCBhbnkgcXVhbnR1bSBtZWNoYW5pYyBrbm93cyB0aGF0IHNwZWVkIGtpbGxzLg==" },
1509 { "They say that applying a unicorn horn means you've missed the point.",
1510 "VGhleSBzYXkgdGhhdCBhcHBseWluZyBhIHVuaWNvcm4gaG9ybiBtZWFucyB5b3UndmUgbWlzc2VkIHRoZSBwb2ludC4=" },
1511 { "They say that blue stones are radioactive, beware.",
1512 "VGhleSBzYXkgdGhhdCBibHVlIHN0b25lcyBhcmUgcmFkaW9hY3RpdmUsIGJld2FyZS4=" },
1513 { "They say that building a dungeon is a team effort.",
1514 "VGhleSBzYXkgdGhhdCBidWlsZGluZyBhIGR1bmdlb24gaXMgYSB0ZWFtIGVmZm9ydC4=" },
1515 { "They say that chaotic characters never get a kick out of altars.",
1516 "VGhleSBzYXkgdGhhdCBjaGFvdGljIGNoYXJhY3RlcnMgbmV2ZXIgZ2V0IGEga2ljayBvdXQgb2YgYWx0YXJzLg==" },
1517 { "They say that collapsing a dungeon often creates a panic.",
1518 "VGhleSBzYXkgdGhhdCBjb2xsYXBzaW5nIGEgZHVuZ2VvbiBvZnRlbiBjcmVhdGVzIGEgcGFuaWMu" },
1519 { "They say that counting your eggs before they hatch shows that you care.",
1520 "VGhleSBzYXkgdGhhdCBjb3VudGluZyB5b3VyIGVnZ3MgYmVmb3JlIHRoZXkgaGF0Y2ggc2hvd3MgdGhhdCB5b3UgY2FyZS4=" },
1521 { "They say that dipping a bag of tricks in a fountain won't make it an icebox.",
1522 "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGEgYmFnIG9mIHRyaWNrcyBpbiBhIGZvdW50YWluIHdvbid0IG1ha2UgaXQgYW4gaWNlYm94Lg==" },
1523 { "They say that dipping an eel and brown mold in hot water makes bouillabaisse.",
1524 "VGhleSBzYXkgdGhhdCBkaXBwaW5nIGFuIGVlbCBhbmQgYnJvd24gbW9sZCBpbiBob3Qgd2F0ZXIgbWFrZXMgYm91aWxsYWJhaXNzZS4=" },
1525 { "They say that donating a doubloon is extremely pious charity.",
1526 "VGhleSBzYXkgdGhhdCBkb25hdGluZyBhIGRvdWJsb29uIGlzIGV4dHJlbWVseSBwaW91cyBjaGFyaXR5Lg==" },
1527 { "They say that eating royal jelly attracts grizzly owlbears.",
1528 "VGhleSBzYXkgdGhhdCBlYXRpbmcgcm95YWwgamVsbHkgYXR0cmFjdHMgZ3JpenpseSBvd2xiZWFycy4=" },
1529 { "They say that eggs, pancakes and juice are just a mundane breakfast.",
1530 "VGhleSBzYXkgdGhhdCBlZ2dzLCBwYW5jYWtlcyBhbmQganVpY2UgYXJlIGp1c3QgYSBtdW5kYW5lIGJyZWFrZmFzdC4=" },
1531 { "They say that everyone knows why Medusa stands alone in the dark.",
1532 "VGhleSBzYXkgdGhhdCBldmVyeW9uZSBrbm93cyB3aHkgTWVkdXNhIHN0YW5kcyBhbG9uZSBpbiB0aGUgZGFyay4=" },
1533 { "They say that everyone wanted rec.games.hack to undergo a name change.",
1534 "VGhleSBzYXkgdGhhdCBldmVyeW9uZSB3YW50ZWQgcmVjLmdhbWVzLmhhY2sgdG8gdW5kZXJnbyBhIG5hbWUgY2hhbmdlLg==" },
1535 { "They say that finding a winning strategy is a deliberate move on your part.",
1536 "VGhleSBzYXkgdGhhdCBmaW5kaW5nIGEgd2lubmluZyBzdHJhdGVneSBpcyBhIGRlbGliZXJhdGUgbW92ZSBvbiB5b3VyIHBhcnQu" },
1537 { "They say that finding worthless glass is worth something.",
1538 "VGhleSBzYXkgdGhhdCBmaW5kaW5nIHdvcnRobGVzcyBnbGFzcyBpcyB3b3J0aCBzb21ldGhpbmcu" },
1539 { "They say that fortune cookies are food for thought.",
1540 "VGhleSBzYXkgdGhhdCBmb3J0dW5lIGNvb2tpZXMgYXJlIGZvb2QgZm9yIHRob3VnaHQu" },
1541 { "They say that gold is only wasted on a pet dragon.",
1542 "VGhleSBzYXkgdGhhdCBnb2xkIGlzIG9ubHkgd2FzdGVkIG9uIGEgcGV0IGRyYWdvbi4=" },
1543 { "They say that good things come to those that wait.",
1544 "VGhleSBzYXkgdGhhdCBnb29kIHRoaW5ncyBjb21lIHRvIHRob3NlIHRoYXQgd2FpdC4=" },
1545 { "They say that greased objects will slip out of monsters' hands.",
1546 "VGhleSBzYXkgdGhhdCBncmVhc2VkIG9iamVjdHMgd2lsbCBzbGlwIG91dCBvZiBtb25zdGVycycgaGFuZHMu" },
1547 { "They say that if you can't spell then you'll wish you had a spell book.",
1548 "VGhleSBzYXkgdGhhdCBpZiB5b3UgY2FuJ3Qgc3BlbGwgdGhlbiB5b3UnbGwgd2lzaCB5b3UgaGFkIGEgc3BlbGwgYm9vay4=" },
1549 { "They say that if you live by the sword, you'll die by the sword.",
1550 "VGhleSBzYXkgdGhhdCBpZiB5b3UgbGl2ZSBieSB0aGUgc3dvcmQsIHlvdSdsbCBkaWUgYnkgdGhlIHN3b3JkLg==" },
1551 { "They say that if you play like a monster you'll have a better game.",
1552 "VGhleSBzYXkgdGhhdCBpZiB5b3UgcGxheSBsaWtlIGEgbW9uc3RlciB5b3UnbGwgaGF2ZSBhIGJldHRlciBnYW1lLg==" },
1553 { "They say that if you sleep with a demon you might awake with a headache.",
1554 "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc2xlZXAgd2l0aCBhIGRlbW9uIHlvdSBtaWdodCBhd2FrZSB3aXRoIGEgaGVhZGFjaGUu" },
1555 { "They say that if you step on a crack you could break your mother's back.",
1556 "VGhleSBzYXkgdGhhdCBpZiB5b3Ugc3RlcCBvbiBhIGNyYWNrIHlvdSBjb3VsZCBicmVhayB5b3VyIG1vdGhlcidzIGJhY2su" },
1557 { "They say that if you're invisible you can still be heard!",
1558 "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgaW52aXNpYmxlIHlvdSBjYW4gc3RpbGwgYmUgaGVhcmQh" },
1559 { "They say that if you're lucky you can feel the runes on a scroll.",
1560 "VGhleSBzYXkgdGhhdCBpZiB5b3UncmUgbHVja3kgeW91IGNhbiBmZWVsIHRoZSBydW5lcyBvbiBhIHNjcm9sbC4=" },
1561 { "They say that in the big picture gold is only small change.",
1562 "VGhleSBzYXkgdGhhdCBpbiB0aGUgYmlnIHBpY3R1cmUgZ29sZCBpcyBvbmx5IHNtYWxsIGNoYW5nZS4=" },
1563 { "They say that in the dungeon it's not what you know that really matters.",
1564 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBpdCdzIG5vdCB3aGF0IHlvdSBrbm93IHRoYXQgcmVhbGx5IG1hdHRlcnMu" },
1565 { "They say that in the dungeon moon rocks are really dilithium crystals.",
1566 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiBtb29uIHJvY2tzIGFyZSByZWFsbHkgZGlsaXRoaXVtIGNyeXN0YWxzLg==" },
1567 { "They say that in the dungeon the boorish customer is never right.",
1568 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB0aGUgYm9vcmlzaCBjdXN0b21lciBpcyBuZXZlciByaWdodC4=" },
1569 { "They say that in the dungeon you don't need a watch to tell time.",
1570 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgZG9uJ3QgbmVlZCBhIHdhdGNoIHRvIHRlbGwgdGltZS4=" },
1571 { "They say that in the dungeon you need something old, new, burrowed and blue.",
1572 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3UgbmVlZCBzb21ldGhpbmcgb2xkLCBuZXcsIGJ1cnJvd2VkIGFuZCBibHVlLg==" },
1573 { "They say that in the dungeon you should always count your blessings.",
1574 "VGhleSBzYXkgdGhhdCBpbiB0aGUgZHVuZ2VvbiB5b3Ugc2hvdWxkIGFsd2F5cyBjb3VudCB5b3VyIGJsZXNzaW5ncy4=" },
1575 { "They say that iron golem plate mail isn't worth wishing for.",
1576 "VGhleSBzYXkgdGhhdCBpcm9uIGdvbGVtIHBsYXRlIG1haWwgaXNuJ3Qgd29ydGggd2lzaGluZyBmb3Iu" },
1577 { "They say that it takes four quarterstaffs to make one staff.",
1578 "VGhleSBzYXkgdGhhdCBpdCB0YWtlcyBmb3VyIHF1YXJ0ZXJzdGFmZnMgdG8gbWFrZSBvbmUgc3RhZmYu" },
1579 { "They say that it's not over till the fat ladies sing.",
1580 "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWRpZXMgc2luZy4=" },
1581 { "They say that it's not over till the fat lady shouts `Off with its head'.",
1582 "VGhleSBzYXkgdGhhdCBpdCdzIG5vdCBvdmVyIHRpbGwgdGhlIGZhdCBsYWR5IHNob3V0cyBgT2ZmIHdpdGggaXRzIGhlYWQnLg==" },
1583 { "They say that kicking a heavy statue is really a dumb move.",
1584 "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgaGVhdnkgc3RhdHVlIGlzIHJlYWxseSBhIGR1bWIgbW92ZS4=" },
1585 { "They say that kicking a valuable gem doesn't seem to make sense.",
1586 "VGhleSBzYXkgdGhhdCBraWNraW5nIGEgdmFsdWFibGUgZ2VtIGRvZXNuJ3Qgc2VlbSB0byBtYWtlIHNlbnNlLg==" },
1587 { "They say that leprechauns know Latin and you should too.",
1588 "VGhleSBzYXkgdGhhdCBsZXByZWNoYXVucyBrbm93IExhdGluIGFuZCB5b3Ugc2hvdWxkIHRvby4=" },
1589 { "They say that minotaurs get lost outside of the mazes.",
1590 "VGhleSBzYXkgdGhhdCBtaW5vdGF1cnMgZ2V0IGxvc3Qgb3V0c2lkZSBvZiB0aGUgbWF6ZXMu" },
1591 { "They say that most trolls are born again.",
1592 "VGhleSBzYXkgdGhhdCBtb3N0IHRyb2xscyBhcmUgYm9ybiBhZ2Fpbi4=" },
1593 { "They say that naming your cat Garfield will make you more attractive.",
1594 "VGhleSBzYXkgdGhhdCBuYW1pbmcgeW91ciBjYXQgR2FyZmllbGQgd2lsbCBtYWtlIHlvdSBtb3JlIGF0dHJhY3RpdmUu" },
1595 { "They say that no one knows everything about everything in the dungeon.",
1596 "VGhleSBzYXkgdGhhdCBubyBvbmUga25vd3MgZXZlcnl0aGluZyBhYm91dCBldmVyeXRoaW5nIGluIHRoZSBkdW5nZW9uLg==" },
1597 { "They say that no one plays NetHack just for the fun of it.",
1598 "VGhleSBzYXkgdGhhdCBubyBvbmUgcGxheXMgTmV0SGFjayBqdXN0IGZvciB0aGUgZnVuIG9mIGl0Lg==" },
1599 { "They say that no one really subscribes to rec.games.roguelike.nethack.",
1600 "VGhleSBzYXkgdGhhdCBubyBvbmUgcmVhbGx5IHN1YnNjcmliZXMgdG8gcmVjLmdhbWVzLnJvZ3VlbGlrZS5uZXRoYWNrLg==" },
1601 { "They say that no one will admit to starting a rumor.",
1602 "VGhleSBzYXkgdGhhdCBubyBvbmUgd2lsbCBhZG1pdCB0byBzdGFydGluZyBhIHJ1bW9yLg==" },
1603 { "They say that nurses sometimes carry scalpels and never use them.",
1604 "VGhleSBzYXkgdGhhdCBudXJzZXMgc29tZXRpbWVzIGNhcnJ5IHNjYWxwZWxzIGFuZCBuZXZlciB1c2UgdGhlbS4=" },
1605 { "They say that once you've met one wizard you've met them all.",
1606 "VGhleSBzYXkgdGhhdCBvbmNlIHlvdSd2ZSBtZXQgb25lIHdpemFyZCB5b3UndmUgbWV0IHRoZW0gYWxsLg==" },
1607 { "They say that one troll is worth 10,000 newts.",
1608 "VGhleSBzYXkgdGhhdCBvbmUgdHJvbGwgaXMgd29ydGggMTAsMDAwIG5ld3RzLg==" },
1609 { "They say that only David can find the zoo!",
1610 "VGhleSBzYXkgdGhhdCBvbmx5IERhdmlkIGNhbiBmaW5kIHRoZSB6b28h" },
1611 { "They say that only angels play their harps for their pets.",
1612 "VGhleSBzYXkgdGhhdCBvbmx5IGFuZ2VscyBwbGF5IHRoZWlyIGhhcnBzIGZvciB0aGVpciBwZXRzLg==" },
1613 { "They say that only big spenders carry gold.",
1614 "VGhleSBzYXkgdGhhdCBvbmx5IGJpZyBzcGVuZGVycyBjYXJyeSBnb2xkLg==" },
1615 { "They say that orc shamans are healthy, wealthy and wise.",
1616 "VGhleSBzYXkgdGhhdCBvcmMgc2hhbWFucyBhcmUgaGVhbHRoeSwgd2VhbHRoeSBhbmQgd2lzZS4=" },
1617 { "They say that playing NetHack is like walking into a death trap.",
1618 "VGhleSBzYXkgdGhhdCBwbGF5aW5nIE5ldEhhY2sgaXMgbGlrZSB3YWxraW5nIGludG8gYSBkZWF0aCB0cmFwLg==" },
1619 { "They say that problem breathing is best treated by a proper diet.",
1620 "VGhleSBzYXkgdGhhdCBwcm9ibGVtIGJyZWF0aGluZyBpcyBiZXN0IHRyZWF0ZWQgYnkgYSBwcm9wZXIgZGlldC4=" },
1621 { "They say that quaffing many potions of levitation can give you a headache.",
1622 "VGhleSBzYXkgdGhhdCBxdWFmZmluZyBtYW55IHBvdGlvbnMgb2YgbGV2aXRhdGlvbiBjYW4gZ2l2ZSB5b3UgYSBoZWFkYWNoZS4=" },
1623 { "They say that queen bees get that way by eating royal jelly.",
1624 "VGhleSBzYXkgdGhhdCBxdWVlbiBiZWVzIGdldCB0aGF0IHdheSBieSBlYXRpbmcgcm95YWwgamVsbHku" },
1625 { "They say that reading a scare monster scroll is the same as saying Elbereth.",
1626 "VGhleSBzYXkgdGhhdCByZWFkaW5nIGEgc2NhcmUgbW9uc3RlciBzY3JvbGwgaXMgdGhlIHNhbWUgYXMgc2F5aW5nIEVsYmVyZXRoLg==" },
1627 { "They say that real hackers always are controlled.",
1628 "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgYWx3YXlzIGFyZSBjb250cm9sbGVkLg==" },
1629 { "They say that real hackers never sleep.",
1630 "VGhleSBzYXkgdGhhdCByZWFsIGhhY2tlcnMgbmV2ZXIgc2xlZXAu" },
1631 { "They say that shopkeepers are insured by Croesus himself!",
1632 "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBhcmUgaW5zdXJlZCBieSBDcm9lc3VzIGhpbXNlbGYh" },
1633 { "They say that shopkeepers never carry more than 20 gold pieces, at night.",
1634 "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBjYXJyeSBtb3JlIHRoYW4gMjAgZ29sZCBwaWVjZXMsIGF0IG5pZ2h0Lg==" },
1635 { "They say that shopkeepers never sell blessed potions of invisibility.",
1636 "VGhleSBzYXkgdGhhdCBzaG9wa2VlcGVycyBuZXZlciBzZWxsIGJsZXNzZWQgcG90aW9ucyBvZiBpbnZpc2liaWxpdHku" },
1637 { "They say that soldiers wear kid gloves and silly helmets.",
1638 "VGhleSBzYXkgdGhhdCBzb2xkaWVycyB3ZWFyIGtpZCBnbG92ZXMgYW5kIHNpbGx5IGhlbG1ldHMu" },
1639 { "They say that some Kops are on the take.",
1640 "VGhleSBzYXkgdGhhdCBzb21lIEtvcHMgYXJlIG9uIHRoZSB0YWtlLg==" },
1641 { "They say that some guards' palms can be greased.",
1642 "VGhleSBzYXkgdGhhdCBzb21lIGd1YXJkcycgcGFsbXMgY2FuIGJlIGdyZWFzZWQu" },
1643 { "They say that some monsters may kiss your boots to stop your drum playing.",
1644 "VGhleSBzYXkgdGhhdCBzb21lIG1vbnN0ZXJzIG1heSBraXNzIHlvdXIgYm9vdHMgdG8gc3RvcCB5b3VyIGRydW0gcGxheWluZy4=" },
1645 { "They say that sometimes you can be the hit of the party when playing a horn.",
1646 "VGhleSBzYXkgdGhhdCBzb21ldGltZXMgeW91IGNhbiBiZSB0aGUgaGl0IG9mIHRoZSBwYXJ0eSB3aGVuIHBsYXlpbmcgYSBob3JuLg==" },
1647 { "They say that the NetHack gods generally welcome your sacrifices.",
1648 "VGhleSBzYXkgdGhhdCB0aGUgTmV0SGFjayBnb2RzIGdlbmVyYWxseSB3ZWxjb21lIHlvdXIgc2FjcmlmaWNlcy4=" },
1649 { "They say that the Three Rings are named Vilya, Nenya and Narya.",
1650 "VGhleSBzYXkgdGhhdCB0aGUgVGhyZWUgUmluZ3MgYXJlIG5hbWVkIFZpbHlhLCBOZW55YSBhbmQgTmFyeWEu" },
1651 { "They say that the Wizard of Yendor has a death wish.",
1652 "VGhleSBzYXkgdGhhdCB0aGUgV2l6YXJkIG9mIFllbmRvciBoYXMgYSBkZWF0aCB3aXNoLg==" },
1653 { "They say that the `hair of the dog' is sometimes an effective remedy.",
1654 "VGhleSBzYXkgdGhhdCB0aGUgYGhhaXIgb2YgdGhlIGRvZycgaXMgc29tZXRpbWVzIGFuIGVmZmVjdGl2ZSByZW1lZHku" },
1655 { "They say that the best time to save your game is now before its too late.",
1656 "VGhleSBzYXkgdGhhdCB0aGUgYmVzdCB0aW1lIHRvIHNhdmUgeW91ciBnYW1lIGlzIG5vdyBiZWZvcmUgaXRzIHRvbyBsYXRlLg==" },
1657 { "They say that the biggest obstacle in NetHack is your mind.",
1658 "VGhleSBzYXkgdGhhdCB0aGUgYmlnZ2VzdCBvYnN0YWNsZSBpbiBOZXRIYWNrIGlzIHlvdXIgbWluZC4=" },
1659 { "They say that the gods are angry when they hit you with objects.",
1660 "VGhleSBzYXkgdGhhdCB0aGUgZ29kcyBhcmUgYW5ncnkgd2hlbiB0aGV5IGhpdCB5b3Ugd2l0aCBvYmplY3RzLg==" },
1661 { "They say that the priesthood are specially favored by the gods.",
1662 "VGhleSBzYXkgdGhhdCB0aGUgcHJpZXN0aG9vZCBhcmUgc3BlY2lhbGx5IGZhdm9yZWQgYnkgdGhlIGdvZHMu" },
1663 { "They say that the way to make a unicorn happy is to give it what it wants.",
1664 "VGhleSBzYXkgdGhhdCB0aGUgd2F5IHRvIG1ha2UgYSB1bmljb3JuIGhhcHB5IGlzIHRvIGdpdmUgaXQgd2hhdCBpdCB3YW50cy4=" },
1665 { "They say that there are no black or white stones, only gray.",
1666 "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gYmxhY2sgb3Igd2hpdGUgc3RvbmVzLCBvbmx5IGdyYXku" },
1667 { "They say that there are no skeletons hence there are no skeleton keys.",
1668 "VGhleSBzYXkgdGhhdCB0aGVyZSBhcmUgbm8gc2tlbGV0b25zIGhlbmNlIHRoZXJlIGFyZSBubyBza2VsZXRvbiBrZXlzLg==" },
1669 { "They say that there is a clever rogue in every hacker just dying to escape.",
1670 "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBhIGNsZXZlciByb2d1ZSBpbiBldmVyeSBoYWNrZXIganVzdCBkeWluZyB0byBlc2NhcGUu" },
1671 { "They say that there is no such thing as free advice.",
1672 "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGZyZWUgYWR2aWNlLg==" },
1673 { "They say that there is only one way to win at NetHack.",
1674 "VGhleSBzYXkgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB3YXkgdG8gd2luIGF0IE5ldEhhY2su" },
1675 { "They say that there once was a fearsome chaotic samurai named Luk No.",
1676 "VGhleSBzYXkgdGhhdCB0aGVyZSBvbmNlIHdhcyBhIGZlYXJzb21lIGNoYW90aWMgc2FtdXJhaSBuYW1lZCBMdWsgTm8u" },
1677 { "They say that there was a time when cursed holy water wasn't water.",
1678 "VGhleSBzYXkgdGhhdCB0aGVyZSB3YXMgYSB0aW1lIHdoZW4gY3Vyc2VkIGhvbHkgd2F0ZXIgd2Fzbid0IHdhdGVyLg==" },
1679 { "They say that there's no point in crying over a gray ooze.",
1680 "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG5vIHBvaW50IGluIGNyeWluZyBvdmVyIGEgZ3JheSBvb3plLg==" },
1681 { "They say that there's only hope left after you've opened Pandora's box.",
1682 "VGhleSBzYXkgdGhhdCB0aGVyZSdzIG9ubHkgaG9wZSBsZWZ0IGFmdGVyIHlvdSd2ZSBvcGVuZWQgUGFuZG9yYSdzIGJveC4=" },
1683 { "They say that trapdoors should always be marked `Caution: Trap Door'.",
1684 "VGhleSBzYXkgdGhhdCB0cmFwZG9vcnMgc2hvdWxkIGFsd2F5cyBiZSBtYXJrZWQgYENhdXRpb246IFRyYXAgRG9vcicu" },
1685 { "They say that using an amulet of change isn't a difficult operation.",
1686 "VGhleSBzYXkgdGhhdCB1c2luZyBhbiBhbXVsZXQgb2YgY2hhbmdlIGlzbid0IGEgZGlmZmljdWx0IG9wZXJhdGlvbi4=" },
1687 { "They say that water walking boots are better if you are fast like Hermes.",
1688 "VGhleSBzYXkgdGhhdCB3YXRlciB3YWxraW5nIGJvb3RzIGFyZSBiZXR0ZXIgaWYgeW91IGFyZSBmYXN0IGxpa2UgSGVybWVzLg==" },
1689 { "They say that when you wear a circular amulet you might resemble a troll.",
1690 "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSB3ZWFyIGEgY2lyY3VsYXIgYW11bGV0IHlvdSBtaWdodCByZXNlbWJsZSBhIHRyb2xsLg==" },
1691 { "They say that when you're hungry you can get a pizza in 30 moves or it's free.",
1692 "VGhleSBzYXkgdGhhdCB3aGVuIHlvdSdyZSBodW5ncnkgeW91IGNhbiBnZXQgYSBwaXp6YSBpbiAzMCBtb3ZlcyBvciBpdCdzIGZyZWUu" },
1693 { "They say that when your god is angry you should try another one.",
1694 "VGhleSBzYXkgdGhhdCB3aGVuIHlvdXIgZ29kIGlzIGFuZ3J5IHlvdSBzaG91bGQgdHJ5IGFub3RoZXIgb25lLg==" },
1695 { "They say that wielding a unicorn horn takes strength.",
1696 "VGhleSBzYXkgdGhhdCB3aWVsZGluZyBhIHVuaWNvcm4gaG9ybiB0YWtlcyBzdHJlbmd0aC4=" },
1697 { "They say that with speed boots you never worry about hit and run accidents.",
1698 "VGhleSBzYXkgdGhhdCB3aXRoIHNwZWVkIGJvb3RzIHlvdSBuZXZlciB3b3JyeSBhYm91dCBoaXQgYW5kIHJ1biBhY2NpZGVudHMu" },
1699 { "They say that you can defeat a killer bee with a unicorn horn.",
1700 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIGRlZmVhdCBhIGtpbGxlciBiZWUgd2l0aCBhIHVuaWNvcm4gaG9ybi4=" },
1701 { "They say that you can only cross the River Styx in Charon's boat.",
1702 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgY3Jvc3MgdGhlIFJpdmVyIFN0eXggaW4gQ2hhcm9uJ3MgYm9hdC4=" },
1703 { "They say that you can only kill a lich once and then you'd better be careful.",
1704 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkga2lsbCBhIGxpY2ggb25jZSBhbmQgdGhlbiB5b3UnZCBiZXR0ZXIgYmUgY2FyZWZ1bC4=" },
1705 { "They say that you can only wish for things you've already had.",
1706 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIG9ubHkgd2lzaCBmb3IgdGhpbmdzIHlvdSd2ZSBhbHJlYWR5IGhhZC4=" },
1707 { "They say that you can train a cat by talking gently to it.",
1708 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgY2F0IGJ5IHRhbGtpbmcgZ2VudGx5IHRvIGl0Lg==" },
1709 { "They say that you can train a dog by talking firmly to it.",
1710 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRyYWluIGEgZG9nIGJ5IHRhbGtpbmcgZmlybWx5IHRvIGl0Lg==" },
1711 { "They say that you can trust your gold with the king.",
1712 "VGhleSBzYXkgdGhhdCB5b3UgY2FuIHRydXN0IHlvdXIgZ29sZCB3aXRoIHRoZSBraW5nLg==" },
1713 { "They say that you can't wipe your greasy bare hands on a blank scroll.",
1714 "VGhleSBzYXkgdGhhdCB5b3UgY2FuJ3Qgd2lwZSB5b3VyIGdyZWFzeSBiYXJlIGhhbmRzIG9uIGEgYmxhbmsgc2Nyb2xsLg==" },
1715 { "They say that you cannot trust scrolls of rumor.",
1716 "VGhleSBzYXkgdGhhdCB5b3UgY2Fubm90IHRydXN0IHNjcm9sbHMgb2YgcnVtb3Iu" },
1717 { "They say that you could fall head over heels for an energy vortex.",
1718 "VGhleSBzYXkgdGhhdCB5b3UgY291bGQgZmFsbCBoZWFkIG92ZXIgaGVlbHMgZm9yIGFuIGVuZXJneSB2b3J0ZXgu" },
1719 { "They say that you need a key in order to open locked doors.",
1720 "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIGtleSBpbiBvcmRlciB0byBvcGVuIGxvY2tlZCBkb29ycy4=" },
1721 { "They say that you need a mirror to notice a mimic in an antique shop.",
1722 "VGhleSBzYXkgdGhhdCB5b3UgbmVlZCBhIG1pcnJvciB0byBub3RpY2UgYSBtaW1pYyBpbiBhbiBhbnRpcXVlIHNob3Au" },
1723 { "They say that you really can use a pick-axe unless you really can't.",
1724 "VGhleSBzYXkgdGhhdCB5b3UgcmVhbGx5IGNhbiB1c2UgYSBwaWNrLWF4ZSB1bmxlc3MgeW91IHJlYWxseSBjYW4ndC4=" },
1725 { "They say that you should always store your tools in the cellar.",
1726 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBzdG9yZSB5b3VyIHRvb2xzIGluIHRoZSBjZWxsYXIu" },
1727 { "They say that you should be careful while climbing the ladder to success.",
1728 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGJlIGNhcmVmdWwgd2hpbGUgY2xpbWJpbmcgdGhlIGxhZGRlciB0byBzdWNjZXNzLg==" },
1729 { "They say that you should call your armor `rustproof'.",
1730 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIGNhbGwgeW91ciBhcm1vciBgcnVzdHByb29mJy4=" },
1731 { "They say that you should name your dog Spuds to have a cool pet.",
1732 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciBkb2cgU3B1ZHMgdG8gaGF2ZSBhIGNvb2wgcGV0Lg==" },
1733 { "They say that you should name your weapon after your first monster kill.",
1734 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5hbWUgeW91ciB3ZWFwb24gYWZ0ZXIgeW91ciBmaXJzdCBtb25zdGVyIGtpbGwu" },
1735 { "They say that you should never introduce a rope golem to a succubus.",
1736 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIGludHJvZHVjZSBhIHJvcGUgZ29sZW0gdG8gYSBzdWNjdWJ1cy4=" },
1737 { "They say that you should never sleep near invisible ring wraiths.",
1738 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHNsZWVwIG5lYXIgaW52aXNpYmxlIHJpbmcgd3JhaXRocy4=" },
1739 { "They say that you should never try to leave the dungeon with a bag of gems.",
1740 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIG5ldmVyIHRyeSB0byBsZWF2ZSB0aGUgZHVuZ2VvbiB3aXRoIGEgYmFnIG9mIGdlbXMu" },
1741 { "They say that you should remove your armor before sitting on a throne.",
1742 "VGhleSBzYXkgdGhhdCB5b3Ugc2hvdWxkIHJlbW92ZSB5b3VyIGFybW9yIGJlZm9yZSBzaXR0aW5nIG9uIGEgdGhyb25lLg==" },
1743 { "This fortune cookie is copy protected.",
1744 "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyBjb3B5IHByb3RlY3RlZC4=" },
1745 { "This fortune cookie is the property of Fortune Cookies, Inc.",
1746 "VGhpcyBmb3J0dW5lIGNvb2tpZSBpcyB0aGUgcHJvcGVydHkgb2YgRm9ydHVuZSBDb29raWVzLCBJbmMu" },
1747 { "Tired? Try a scroll of charging on yourself.",
1748 "VGlyZWQ/IFRyeSBhIHNjcm9sbCBvZiBjaGFyZ2luZyBvbiB5b3Vyc2VsZi4=" },
1749 { "To achieve the next higher rating, you need 3 more points.",
1750 "VG8gYWNoaWV2ZSB0aGUgbmV4dCBoaWdoZXIgcmF0aW5nLCB5b3UgbmVlZCAzIG1vcmUgcG9pbnRzLg==" },
1751 { "To reach heaven, escape the dungeon while wearing a ring of levitation.",
1752 "VG8gcmVhY2ggaGVhdmVuLCBlc2NhcGUgdGhlIGR1bmdlb24gd2hpbGUgd2VhcmluZyBhIHJpbmcgb2YgbGV2aXRhdGlvbi4=" },
1753 { "Tourists wear shirts loud enough to wake the dead.",
1754 "VG91cmlzdHMgd2VhciBzaGlydHMgbG91ZCBlbm91Z2ggdG8gd2FrZSB0aGUgZGVhZC4=" },
1755 { "Try calling your katana Moulinette.",
1756 "VHJ5IGNhbGxpbmcgeW91ciBrYXRhbmEgTW91bGluZXR0ZS4=" },
1757 { "Ulch! That meat was painted!",
1758 "VWxjaCEgVGhhdCBtZWF0IHdhcyBwYWludGVkIQ==" },
1759 { "Unfortunately, this message was left intentionally blank.",
1760 "VW5mb3J0dW5hdGVseSwgdGhpcyBtZXNzYWdlIHdhcyBsZWZ0IGludGVudGlvbmFsbHkgYmxhbmsu" },
1761 { "Using a morning star in the evening has no effect.",
1762 "VXNpbmcgYSBtb3JuaW5nIHN0YXIgaW4gdGhlIGV2ZW5pbmcgaGFzIG5vIGVmZmVjdC4=" },
1763 { "Want a hint? Zap a wand of make invisible on your weapon!",
1764 "V2FudCBhIGhpbnQ/IFphcCBhIHdhbmQgb2YgbWFrZSBpbnZpc2libGUgb24geW91ciB3ZWFwb24h" },
1765 { "Want to ascend in a hurry? Apply at Gizmonic Institute.",
1766 "V2FudCB0byBhc2NlbmQgaW4gYSBodXJyeT8gQXBwbHkgYXQgR2l6bW9uaWMgSW5zdGl0dXRlLg==" },
1767 { "Wanted: shopkeepers. Send a scroll of mail to Mage of Yendor/Level 35/Dungeon.",
1768 "V2FudGVkOiBzaG9wa2VlcGVycy4gU2VuZCBhIHNjcm9sbCBvZiBtYWlsIHRvIE1hZ2Ugb2YgWWVuZG9yL0xldmVsIDM1L0R1bmdlb24u" },
1769 { "Warning: fortune reading can be hazardous to your health.",
1770 "V2FybmluZzogZm9ydHVuZSByZWFkaW5nIGNhbiBiZSBoYXphcmRvdXMgdG8geW91ciBoZWFsdGgu" },
1771 { "We have new ways of detecting treachery...",
1772 "V2UgaGF2ZSBuZXcgd2F5cyBvZiBkZXRlY3RpbmcgdHJlYWNoZXJ5Li4u" },
1773 { "Wet towels make great weapons!",
1774 "V2V0IHRvd2VscyBtYWtlIGdyZWF0IHdlYXBvbnMh" },
1775 { "What a pity, you cannot read it!",
1776 "V2hhdCBhIHBpdHksIHlvdSBjYW5ub3QgcmVhZCBpdCE=" },
1777 { "When a piercer drops in on you, you will be tempted to hit the ceiling!",
1778 "V2hlbiBhIHBpZXJjZXIgZHJvcHMgaW4gb24geW91LCB5b3Ugd2lsbCBiZSB0ZW1wdGVkIHRvIGhpdCB0aGUgY2VpbGluZyE=" },
1779 { "When in a maze follow the right wall and you will never get lost.",
1780 "V2hlbiBpbiBhIG1hemUgZm9sbG93IHRoZSByaWdodCB3YWxsIGFuZCB5b3Ugd2lsbCBuZXZlciBnZXQgbG9zdC4=" },
1781 { "When you have a key, you don't have to wait for the guard.",
1782 "V2hlbiB5b3UgaGF2ZSBhIGtleSwgeW91IGRvbid0IGhhdmUgdG8gd2FpdCBmb3IgdGhlIGd1YXJkLg==" },
1783 { "Why are you wasting time reading fortunes?",
1784 "V2h5IGFyZSB5b3Ugd2FzdGluZyB0aW1lIHJlYWRpbmcgZm9ydHVuZXM/" },
1785 { "Wish for a master key and open the Magic Memory Vault!",
1786 "V2lzaCBmb3IgYSBtYXN0ZXIga2V5IGFuZCBvcGVuIHRoZSBNYWdpYyBNZW1vcnkgVmF1bHQh" },
1787 { "Wizard expects every monster to do its duty.",
1788 "V2l6YXJkIGV4cGVjdHMgZXZlcnkgbW9uc3RlciB0byBkbyBpdHMgZHV0eS4=" },
1789 { "Wow! You could've had a potion of fruit juice!",
1790 "V293ISBZb3UgY291bGQndmUgaGFkIGEgcG90aW9uIG9mIGZydWl0IGp1aWNlIQ==" },
1791 { "Yet Another Silly Message (YASM).",
1792 "WWV0IEFub3RoZXIgU2lsbHkgTWVzc2FnZSAoWUFTTSku" },
1793 { "You are destined to be misled by a fortune.",
1794 "WW91IGFyZSBkZXN0aW5lZCB0byBiZSBtaXNsZWQgYnkgYSBmb3J0dW5lLg==" },
1795 { "You can get a genuine Amulet of Yendor by doing the following: --More--",
1796 "WW91IGNhbiBnZXQgYSBnZW51aW5lIEFtdWxldCBvZiBZZW5kb3IgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogLS1Nb3JlLS0=" },
1797 { "You can protect yourself from black dragons by doing the following: --More--",
1798 "WW91IGNhbiBwcm90ZWN0IHlvdXJzZWxmIGZyb20gYmxhY2sgZHJhZ29ucyBieSBkb2luZyB0aGUgZm9sbG93aW5nOiAtLU1vcmUtLQ==" },
1799 { "You can't get by the snake.",
1800 "WW91IGNhbid0IGdldCBieSB0aGUgc25ha2Uu" },
1801 { "You feel like someone is pulling your leg.",
1802 "WW91IGZlZWwgbGlrZSBzb21lb25lIGlzIHB1bGxpbmcgeW91ciBsZWcu" },
1803 { "You have to outwit the Sphynx or pay her.",
1804 "WW91IGhhdmUgdG8gb3V0d2l0IHRoZSBTcGh5bnggb3IgcGF5IGhlci4=" },
1805 { "You hear the fortune cookie's hissing!",
1806 "WW91IGhlYXIgdGhlIGZvcnR1bmUgY29va2llJ3MgaGlzc2luZyE=" },
1807 { "You may get rich selling letters, but beware of being blackmailed!",
1808 "WW91IG1heSBnZXQgcmljaCBzZWxsaW5nIGxldHRlcnMsIGJ1dCBiZXdhcmUgb2YgYmVpbmcgYmxhY2ttYWlsZWQh" },
1809 { "You offend Shai-Hulud by sheathing your crysknife without having drawn blood.",
1810 "WW91IG9mZmVuZCBTaGFpLUh1bHVkIGJ5IHNoZWF0aGluZyB5b3VyIGNyeXNrbmlmZSB3aXRob3V0IGhhdmluZyBkcmF3biBibG9vZC4=" },
1811 { "You swallowed the fortune!",
1812 "WW91IHN3YWxsb3dlZCB0aGUgZm9ydHVuZSE=" },
1813 { "You want to regain strength? Two levels ahead is a guesthouse!",
1814 "WW91IHdhbnQgdG8gcmVnYWluIHN0cmVuZ3RoPyBUd28gbGV2ZWxzIGFoZWFkIGlzIGEgZ3Vlc3Rob3VzZSE=" },
1815 { "You will encounter a tall, dark, and gruesome creature...",
1816 "WW91IHdpbGwgZW5jb3VudGVyIGEgdGFsbCwgZGFyaywgYW5kIGdydWVzb21lIGNyZWF0dXJlLi4u" },
1818 { "The End", "VGhlIEVuZA==" }
1821 /* PL_Base64Encode, random strings */
1822 PRBool
test_004(void)
1825 char result
[ 4096 ];
1827 printf("Test 004 (PL_Base64Encode, random strings) ..."); fflush(stdout
);
1829 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
1831 PRUint32 plen
= PL_strlen(array
[i
].plaintext
);
1832 PRUint32 clen
= ((plen
+ 2)/3)*4;
1834 char *rv
= PL_Base64Encode(array
[i
].plaintext
, plen
, result
);
1838 printf("FAIL\n\t(%d): return value\n", i
);
1842 if( 0 != PL_strncmp(result
, array
[i
].cyphertext
, clen
) )
1844 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
1845 i
, array
[i
].plaintext
, array
[i
].cyphertext
, clen
, result
);
1854 /* PL_Base64Encode, single characters, malloc */
1855 PRBool
test_005(void)
1858 unsigned char plain
[ 4 ];
1859 unsigned char cypher
[ 5 ];
1862 printf("Test 005 (PL_Base64Encode, single characters, malloc) ..."); fflush(stdout
);
1864 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
1865 cypher
[2] = cypher
[3] = (unsigned char)'=';
1866 cypher
[4] = (unsigned char)0;
1868 for( a
= 0; a
< 64; a
++ )
1870 cypher
[0] = base
[a
];
1872 for( b
= 0; b
< 4; b
++ )
1874 plain
[0] = (unsigned char)(a
* 4 + b
);
1875 cypher
[1] = base
[(b
* 16)];
1877 rv
= PL_Base64Encode((char *)plain
, 1, (char *)0);
1878 if( (char *)0 == rv
)
1880 printf("FAIL\n\t(%d, %d): no return value\n", a
, b
);
1884 if( 0 != PL_strcmp((char *)cypher
, rv
) )
1886 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
1900 /* PL_Base64Encode, double characters, malloc */
1901 PRBool
test_006(void)
1903 PRUint32 a
, b
, c
, d
;
1904 unsigned char plain
[ 4 ];
1905 unsigned char cypher
[ 5 ];
1908 printf("Test 006 (PL_Base64Encode, double characters, malloc) ..."); fflush(stdout
);
1910 plain
[2] = plain
[3] = (unsigned char)0;
1911 cypher
[3] = (unsigned char)'=';
1912 cypher
[4] = (unsigned char)0;
1914 for( a
= 0; a
< 64; a
++ )
1916 cypher
[0] = base
[a
];
1917 for( b
= 0; b
< 4; b
++ )
1919 plain
[0] = (a
*4) + b
;
1920 for( c
= 0; c
< 16; c
++ )
1922 cypher
[1] = base
[b
*16 + c
];
1923 for( d
= 0; d
< 16; d
++ )
1925 plain
[1] = c
*16 + d
;
1926 cypher
[2] = base
[d
*4];
1928 rv
= PL_Base64Encode((char *)plain
, 2, (char *)0);
1929 if( (char *)0 == rv
)
1931 printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a
, b
, c
, d
);
1935 if( 0 != PL_strcmp((char *)cypher
, rv
) )
1937 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
1938 a
, b
, c
, d
, cypher
, rv
);
1953 /* PL_Base64Encode, triple characters, malloc */
1954 PRBool
test_007(void)
1956 PRUint32 a
, b
, c
, d
, e
, f
;
1957 unsigned char plain
[ 4 ];
1958 unsigned char cypher
[ 5 ];
1961 printf("Test 007 (PL_Base64Encode, triple characters, malloc) ..."); fflush(stdout
);
1963 cypher
[4] = (unsigned char)0;
1965 for( a
= 0; a
< 64; a
++ )
1967 cypher
[0] = base
[a
];
1968 for( b
= 0; b
< 4; b
++ )
1970 plain
[0] = (a
*4) + b
;
1971 for( c
= 0; c
< 16; c
++ )
1973 cypher
[1] = base
[b
*16 + c
];
1974 for( d
= 0; d
< 16; d
++ )
1976 plain
[1] = c
*16 + d
;
1977 for( e
= 0; e
< 4; e
++ )
1979 cypher
[2] = base
[d
*4 + e
];
1980 for( f
= 0; f
< 64; f
++ )
1982 plain
[2] = e
* 64 + f
;
1983 cypher
[3] = base
[f
];
1985 rv
= PL_Base64Encode((char *)plain
, 3, (char *)0);
1986 if( (char *)0 == rv
)
1988 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a
, b
, c
, d
, e
, f
);
1992 if( 0 != PL_strcmp((char *)cypher
, rv
) )
1994 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.4s.\"\n",
1995 a
, b
, c
, d
, e
, f
, cypher
, rv
);
2012 /* PL_Base64Encode, random strings, malloc */
2013 PRBool
test_008(void)
2017 printf("Test 008 (PL_Base64Encode, random strings, malloc) ..."); fflush(stdout
);
2019 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2021 PRUint32 plen
= PL_strlen(array
[i
].plaintext
);
2022 PRUint32 clen
= ((plen
+ 2)/3)*4;
2024 char *rv
= PL_Base64Encode(array
[i
].plaintext
, plen
, (char *)0);
2026 if( (char *)0 == rv
)
2028 printf("FAIL\n\t(%d): no return value\n", i
);
2032 if( 0 != PL_strcmp(rv
, array
[i
].cyphertext
) )
2034 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2035 i
, array
[i
].plaintext
, array
[i
].cyphertext
, rv
);
2044 /* PL_Base64Decode, single characters */
2045 PRBool
test_009(void)
2048 unsigned char plain
[ 4 ];
2049 unsigned char cypher
[ 5 ];
2053 printf("Test 009 (PL_Base64Decode, single characters, equals) ..."); fflush(stdout
);
2055 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
2056 cypher
[2] = cypher
[3] = (unsigned char)'=';
2057 cypher
[4] = (unsigned char)0;
2059 for( a
= 0; a
< 64; a
++ )
2061 cypher
[0] = base
[a
];
2063 for( b
= 0; b
< 4; b
++ )
2065 plain
[0] = (unsigned char)(a
* 4 + b
);
2066 cypher
[1] = base
[(b
* 16)];
2068 rv
= PL_Base64Decode((char *)cypher
, 4, result
);
2071 printf("FAIL\n\t(%d, %d): return value\n", a
, b
);
2075 if( 0 != PL_strncmp((char *)plain
, result
, 1) )
2077 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
2078 a
, b
, plain
, result
);
2088 /* PL_Base64Decode, single characters */
2089 PRBool
test_010(void)
2092 unsigned char plain
[ 4 ];
2093 unsigned char cypher
[ 5 ];
2097 printf("Test 010 (PL_Base64Decode, single characters, no equals) ..."); fflush(stdout
);
2099 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
2100 cypher
[2] = cypher
[3] = (unsigned char)0;
2101 cypher
[4] = (unsigned char)0;
2103 for( a
= 0; a
< 64; a
++ )
2105 cypher
[0] = base
[a
];
2107 for( b
= 0; b
< 4; b
++ )
2109 plain
[0] = (unsigned char)(a
* 4 + b
);
2110 cypher
[1] = base
[(b
* 16)];
2112 rv
= PL_Base64Decode((char *)cypher
, 2, result
);
2115 printf("FAIL\n\t(%d, %d): return value\n", a
, b
);
2119 if( 0 != PL_strncmp((char *)plain
, result
, 1) )
2121 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%.1s.\"\n",
2122 a
, b
, plain
, result
);
2132 /* PL_Base64Decode, double characters */
2133 PRBool
test_011(void)
2135 PRUint32 a
, b
, c
, d
;
2136 unsigned char plain
[ 4 ];
2137 unsigned char cypher
[ 5 ];
2141 printf("Test 011 (PL_Base64Decode, double characters, equals) ..."); fflush(stdout
);
2143 plain
[2] = plain
[3] = (unsigned char)0;
2144 cypher
[3] = (unsigned char)'=';
2145 cypher
[4] = (unsigned char)0;
2147 for( a
= 0; a
< 64; a
++ )
2149 cypher
[0] = base
[a
];
2150 for( b
= 0; b
< 4; b
++ )
2152 plain
[0] = (a
*4) + b
;
2153 for( c
= 0; c
< 16; c
++ )
2155 cypher
[1] = base
[b
*16 + c
];
2156 for( d
= 0; d
< 16; d
++ )
2158 plain
[1] = c
*16 + d
;
2159 cypher
[2] = base
[d
*4];
2161 rv
= PL_Base64Decode((char *)cypher
, 4, result
);
2164 printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a
, b
, c
, d
);
2168 if( 0 != PL_strncmp((char *)plain
, result
, 2) )
2170 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
2171 a
, b
, c
, d
, plain
, result
);
2183 /* PL_Base64Decode, double characters */
2184 PRBool
test_012(void)
2186 PRUint32 a
, b
, c
, d
;
2187 unsigned char plain
[ 4 ];
2188 unsigned char cypher
[ 5 ];
2192 printf("Test 012 (PL_Base64Decode, double characters, no equals) ..."); fflush(stdout
);
2194 plain
[2] = plain
[3] = (unsigned char)0;
2195 cypher
[3] = (unsigned char)0;
2196 cypher
[4] = (unsigned char)0;
2198 for( a
= 0; a
< 64; a
++ )
2200 cypher
[0] = base
[a
];
2201 for( b
= 0; b
< 4; b
++ )
2203 plain
[0] = (a
*4) + b
;
2204 for( c
= 0; c
< 16; c
++ )
2206 cypher
[1] = base
[b
*16 + c
];
2207 for( d
= 0; d
< 16; d
++ )
2209 plain
[1] = c
*16 + d
;
2210 cypher
[2] = base
[d
*4];
2212 rv
= PL_Base64Decode((char *)cypher
, 3, result
);
2215 printf("FAIL\n\t(%d, %d, %d, %d): return value\n", a
, b
, c
, d
);
2219 if( 0 != PL_strncmp((char *)plain
, result
, 2) )
2221 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%.2s.\"\n",
2222 a
, b
, c
, d
, cypher
, result
);
2234 /* PL_Base64Decode, triple characters */
2235 PRBool
test_013(void)
2237 PRUint32 a
, b
, c
, d
, e
, f
;
2238 unsigned char plain
[ 4 ];
2239 unsigned char cypher
[ 5 ];
2243 printf("Test 013 (PL_Base64Decode, triple characters) ..."); fflush(stdout
);
2245 cypher
[4] = (unsigned char)0;
2247 for( a
= 0; a
< 64; a
++ )
2249 cypher
[0] = base
[a
];
2250 for( b
= 0; b
< 4; b
++ )
2252 plain
[0] = (a
*4) + b
;
2253 for( c
= 0; c
< 16; c
++ )
2255 cypher
[1] = base
[b
*16 + c
];
2256 for( d
= 0; d
< 16; d
++ )
2258 plain
[1] = c
*16 + d
;
2259 for( e
= 0; e
< 4; e
++ )
2261 cypher
[2] = base
[d
*4 + e
];
2262 for( f
= 0; f
< 64; f
++ )
2264 plain
[2] = e
* 64 + f
;
2265 cypher
[3] = base
[f
];
2267 rv
= PL_Base64Decode((char *)cypher
, 4, result
);
2270 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): return value\n", a
, b
, c
, d
, e
, f
);
2274 if( 0 != PL_strncmp((char *)plain
, result
, 3) )
2276 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
2277 a
, b
, c
, d
, e
, f
, plain
, result
);
2291 /* PL_Base64Decode, random strings */
2292 PRBool
test_014(void)
2295 char result
[ 4096 ];
2297 printf("Test 014 (PL_Base64Decode, random strings, equals) ..."); fflush(stdout
);
2299 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2301 PRUint32 clen
= PL_strlen(array
[i
].cyphertext
);
2302 PRUint32 plen
= (clen
* 3) / 4;
2304 char *rv
= PL_Base64Decode(array
[i
].cyphertext
, clen
, result
);
2308 printf("FAIL\n\t(%d): return value\n", i
);
2312 if( 0 == (clen
& 3) )
2314 if( '=' == array
[i
].cyphertext
[clen
-1] )
2316 if( '=' == array
[i
].cyphertext
[clen
-2] )
2327 if( 0 != PL_strncmp(result
, array
[i
].plaintext
, plen
) )
2329 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
2330 i
, array
[i
].cyphertext
, array
[i
].plaintext
, plen
, result
);
2339 /* PL_Base64Decode, random strings */
2340 PRBool
test_015(void)
2343 char buffer
[ 4096 ];
2344 char result
[ 4096 ];
2347 printf("Test 015 (PL_Base64Decode, random strings, no equals) ..."); fflush(stdout
);
2349 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2351 PRUint32 clen
, plen
;
2353 PL_strcpy(buffer
, array
[i
].cyphertext
);
2354 clen
= PL_strlen(buffer
);
2356 if( 0 == (clen
& 3) )
2358 if( '=' == buffer
[clen
-1] )
2360 if( '=' == buffer
[clen
-2] )
2362 buffer
[clen
-2] = buffer
[clen
-1] = (char)0;
2367 buffer
[clen
-1] = (char)0;
2373 plen
= (clen
* 3) / 4;
2375 rv
= PL_Base64Decode(buffer
, clen
, result
);
2379 printf("FAIL\n\t(%d): return value\n", i
);
2383 if( 0 != PL_strncmp(result
, array
[i
].plaintext
, plen
) )
2385 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
2386 i
, array
[i
].cyphertext
, array
[i
].plaintext
, plen
, result
);
2395 /* PL_Base64Decode, single characters, malloc */
2396 PRBool
test_016(void)
2399 unsigned char plain
[ 4 ];
2400 unsigned char cypher
[ 5 ];
2403 printf("Test 016 (PL_Base64Decode, single characters, equals, malloc) ..."); fflush(stdout
);
2405 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
2406 cypher
[2] = cypher
[3] = (unsigned char)'=';
2407 cypher
[4] = (unsigned char)0;
2409 for( a
= 0; a
< 64; a
++ )
2411 cypher
[0] = base
[a
];
2413 for( b
= 0; b
< 4; b
++ )
2415 plain
[0] = (unsigned char)(a
* 4 + b
);
2416 cypher
[1] = base
[(b
* 16)];
2418 rv
= PL_Base64Decode((char *)cypher
, 4, (char *)0);
2419 if( (char *)0 == rv
)
2421 printf("FAIL\n\t(%d, %d): no return value\n", a
, b
);
2425 if( 0 != PL_strcmp((char *)plain
, rv
) )
2427 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
2441 /* PL_Base64Decode, single characters, malloc */
2442 PRBool
test_017(void)
2445 unsigned char plain
[ 4 ];
2446 unsigned char cypher
[ 5 ];
2449 printf("Test 017 (PL_Base64Decode, single characters, no equals, malloc) ..."); fflush(stdout
);
2451 plain
[1] = plain
[2] = plain
[3] = (unsigned char)0;
2452 cypher
[2] = cypher
[3] = (unsigned char)0;
2453 cypher
[4] = (unsigned char)0;
2455 for( a
= 0; a
< 64; a
++ )
2457 cypher
[0] = base
[a
];
2459 for( b
= 0; b
< 4; b
++ )
2461 plain
[0] = (unsigned char)(a
* 4 + b
);
2462 cypher
[1] = base
[(b
* 16)];
2464 rv
= PL_Base64Decode((char *)cypher
, 2, (char *)0);
2465 if( (char *)0 == rv
)
2467 printf("FAIL\n\t(%d, %d): no return value\n", a
, b
);
2471 if( 0 != PL_strcmp((char *)plain
, rv
) )
2473 printf("FAIL\n\t(%d, %d): expected \"%s,\" got \"%s.\"\n",
2487 /* PL_Base64Decode, double characters, malloc */
2488 PRBool
test_018(void)
2490 PRUint32 a
, b
, c
, d
;
2491 unsigned char plain
[ 4 ];
2492 unsigned char cypher
[ 5 ];
2495 printf("Test 018 (PL_Base64Decode, double characters, equals, malloc) ..."); fflush(stdout
);
2497 plain
[2] = plain
[3] = (unsigned char)0;
2498 cypher
[3] = (unsigned char)'=';
2499 cypher
[4] = (unsigned char)0;
2501 for( a
= 0; a
< 64; a
++ )
2503 cypher
[0] = base
[a
];
2504 for( b
= 0; b
< 4; b
++ )
2506 plain
[0] = (a
*4) + b
;
2507 for( c
= 0; c
< 16; c
++ )
2509 cypher
[1] = base
[b
*16 + c
];
2510 for( d
= 0; d
< 16; d
++ )
2512 plain
[1] = c
*16 + d
;
2513 cypher
[2] = base
[d
*4];
2515 rv
= PL_Base64Decode((char *)cypher
, 4, (char *)0);
2516 if( (char *)0 == rv
)
2518 printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a
, b
, c
, d
);
2522 if( 0 != PL_strcmp((char *)plain
, rv
) )
2524 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
2525 a
, b
, c
, d
, plain
, rv
);
2540 /* PL_Base64Decode, double characters, malloc */
2541 PRBool
test_019(void)
2543 PRUint32 a
, b
, c
, d
;
2544 unsigned char plain
[ 4 ];
2545 unsigned char cypher
[ 5 ];
2548 printf("Test 019 (PL_Base64Decode, double characters, no equals, malloc) ..."); fflush(stdout
);
2550 plain
[2] = plain
[3] = (unsigned char)0;
2551 cypher
[3] = (unsigned char)0;
2552 cypher
[4] = (unsigned char)0;
2554 for( a
= 0; a
< 64; a
++ )
2556 cypher
[0] = base
[a
];
2557 for( b
= 0; b
< 4; b
++ )
2559 plain
[0] = (a
*4) + b
;
2560 for( c
= 0; c
< 16; c
++ )
2562 cypher
[1] = base
[b
*16 + c
];
2563 for( d
= 0; d
< 16; d
++ )
2565 plain
[1] = c
*16 + d
;
2566 cypher
[2] = base
[d
*4];
2568 rv
= PL_Base64Decode((char *)cypher
, 3, (char *)0);
2569 if( (char *)0 == rv
)
2571 printf("FAIL\n\t(%d, %d, %d, %d): no return value\n", a
, b
, c
, d
);
2575 if( 0 != PL_strcmp((char *)plain
, rv
) )
2577 printf("FAIL\n\t(%d, %d, %d, %d): expected \"%s,\" got \"%s.\"\n",
2578 a
, b
, c
, d
, cypher
, rv
);
2593 /* PL_Base64Decode, triple characters, malloc */
2594 PRBool
test_020(void)
2596 PRUint32 a
, b
, c
, d
, e
, f
;
2597 unsigned char plain
[ 4 ];
2598 unsigned char cypher
[ 5 ];
2601 printf("Test 020 (PL_Base64Decode, triple characters, malloc) ..."); fflush(stdout
);
2603 cypher
[4] = (unsigned char)0;
2604 plain
[3] = (unsigned char)0;
2606 for( a
= 0; a
< 64; a
++ )
2608 cypher
[0] = base
[a
];
2609 for( b
= 0; b
< 4; b
++ )
2611 plain
[0] = (a
*4) + b
;
2612 for( c
= 0; c
< 16; c
++ )
2614 cypher
[1] = base
[b
*16 + c
];
2615 for( d
= 0; d
< 16; d
++ )
2617 plain
[1] = c
*16 + d
;
2618 for( e
= 0; e
< 4; e
++ )
2620 cypher
[2] = base
[d
*4 + e
];
2621 for( f
= 0; f
< 64; f
++ )
2623 plain
[2] = e
* 64 + f
;
2624 cypher
[3] = base
[f
];
2626 rv
= PL_Base64Decode((char *)cypher
, 4, (char *)0);
2627 if( (char *)0 == rv
)
2629 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): no return value\n", a
, b
, c
, d
, e
, f
);
2633 if( 0 != PL_strcmp((char *)plain
, rv
) )
2635 printf("FAIL\n\t(%d, %d, %d, %d, %d, %d): expected \"%s,\" got \"%.3s.\"\n",
2636 a
, b
, c
, d
, e
, f
, plain
, rv
);
2653 /* PL_Base64Decode, random strings, malloc */
2654 PRBool
test_021(void)
2658 printf("Test 021 (PL_Base64Decode, random strings, equals, malloc) ..."); fflush(stdout
);
2660 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2662 PRUint32 clen
= PL_strlen(array
[i
].cyphertext
);
2664 char *rv
= PL_Base64Decode(array
[i
].cyphertext
, clen
, (char *)0);
2666 if( (char *)0 == rv
)
2668 printf("FAIL\n\t(%d): no return value\n", i
);
2672 if( 0 != PL_strcmp(rv
, array
[i
].plaintext
) )
2674 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2675 i
, array
[i
].cyphertext
, array
[i
].plaintext
, rv
);
2687 /* PL_Base64Encode, random strings, malloc */
2688 PRBool
test_022(void)
2691 char buffer
[ 4096 ];
2694 printf("Test 022 (PL_Base64Decode, random strings, no equals, malloc) ..."); fflush(stdout
);
2696 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2700 PL_strcpy(buffer
, array
[i
].cyphertext
);
2701 clen
= PL_strlen(buffer
);
2703 if( 0 == (clen
& 3) )
2705 if( '=' == buffer
[clen
-1] )
2707 if( '=' == buffer
[clen
-2] )
2709 buffer
[clen
-2] = buffer
[clen
-1] = (char)0;
2714 buffer
[clen
-1] = (char)0;
2720 rv
= PL_Base64Decode(buffer
, clen
, (char *)0);
2722 if( (char *)0 == rv
)
2724 printf("FAIL\n\t(%d): no return value\n", i
);
2728 if( 0 != PL_strcmp(rv
, array
[i
].plaintext
) )
2730 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2731 i
, array
[i
].cyphertext
, array
[i
].plaintext
, rv
);
2740 /* PL_Base64Encode, random strings */
2741 PRBool
test_023(void)
2744 char result
[ 4096 ];
2746 printf("Test 023 (PL_Base64Encode, random strings, strlen) ..."); fflush(stdout
);
2748 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2750 PRUint32 plen
= PL_strlen(array
[i
].plaintext
);
2751 PRUint32 clen
= ((plen
+ 2)/3)*4;
2753 char *rv
= PL_Base64Encode(array
[i
].plaintext
, 0, result
);
2757 printf("FAIL\n\t(%d): return value\n", i
);
2761 if( 0 != PL_strncmp(result
, array
[i
].cyphertext
, clen
) )
2763 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
2764 i
, array
[i
].plaintext
, array
[i
].cyphertext
, clen
, result
);
2773 /* PL_Base64Encode, random strings, malloc */
2774 PRBool
test_024(void)
2778 printf("Test 024 (PL_Base64Encode, random strings, malloc, strlen) ..."); fflush(stdout
);
2780 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2782 PRUint32 plen
= PL_strlen(array
[i
].plaintext
);
2783 PRUint32 clen
= ((plen
+ 2)/3)*4;
2785 char *rv
= PL_Base64Encode(array
[i
].plaintext
, 0, (char *)0);
2787 if( (char *)0 == rv
)
2789 printf("FAIL\n\t(%d): no return value\n", i
);
2793 if( 0 != PL_strcmp(rv
, array
[i
].cyphertext
) )
2795 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2796 i
, array
[i
].plaintext
, array
[i
].cyphertext
, rv
);
2805 /* PL_Base64Decode, random strings */
2806 PRBool
test_025(void)
2809 char result
[ 4096 ];
2811 printf("Test 025 (PL_Base64Decode, random strings, equals, strlen) ..."); fflush(stdout
);
2813 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2815 PRUint32 clen
= PL_strlen(array
[i
].cyphertext
);
2816 PRUint32 plen
= (clen
* 3) / 4;
2818 char *rv
= PL_Base64Decode(array
[i
].cyphertext
, 0, result
);
2822 printf("FAIL\n\t(%d): return value\n", i
);
2826 if( 0 == (clen
& 3) )
2828 if( '=' == array
[i
].cyphertext
[clen
-1] )
2830 if( '=' == array
[i
].cyphertext
[clen
-2] )
2841 if( 0 != PL_strncmp(result
, array
[i
].plaintext
, plen
) )
2843 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
2844 i
, array
[i
].cyphertext
, array
[i
].plaintext
, plen
, result
);
2853 /* PL_Base64Decode, random strings */
2854 PRBool
test_026(void)
2857 char buffer
[ 4096 ];
2858 char result
[ 4096 ];
2861 printf("Test 026 (PL_Base64Decode, random strings, no equals, strlen) ..."); fflush(stdout
);
2863 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2865 PRUint32 clen
, plen
;
2867 PL_strcpy(buffer
, array
[i
].cyphertext
);
2868 clen
= PL_strlen(buffer
);
2870 if( 0 == (clen
& 3) )
2872 if( '=' == buffer
[clen
-1] )
2874 if( '=' == buffer
[clen
-2] )
2876 buffer
[clen
-2] = buffer
[clen
-1] = (char)0;
2881 buffer
[clen
-1] = (char)0;
2887 plen
= (clen
* 3) / 4;
2889 rv
= PL_Base64Decode(buffer
, 0, result
);
2893 printf("FAIL\n\t(%d): return value\n", i
);
2897 if( 0 != PL_strncmp(result
, array
[i
].plaintext
, plen
) )
2899 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%.*s.\"\n",
2900 i
, array
[i
].cyphertext
, array
[i
].plaintext
, plen
, result
);
2909 /* PL_Base64Decode, random strings, malloc */
2910 PRBool
test_027(void)
2914 printf("Test 027 (PL_Base64Decode, random strings, equals, malloc, strlen) ..."); fflush(stdout
);
2916 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2918 PRUint32 clen
= PL_strlen(array
[i
].cyphertext
);
2920 char *rv
= PL_Base64Decode(array
[i
].cyphertext
, 0, (char *)0);
2922 if( (char *)0 == rv
)
2924 printf("FAIL\n\t(%d): no return value\n", i
);
2928 if( 0 != PL_strcmp(rv
, array
[i
].plaintext
) )
2930 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2931 i
, array
[i
].cyphertext
, array
[i
].plaintext
, rv
);
2943 /* PL_Base64Encode, random strings, malloc */
2944 PRBool
test_028(void)
2947 char buffer
[ 4096 ];
2950 printf("Test 028 (PL_Base64Decode, random strings, no equals, malloc, strlen) ..."); fflush(stdout
);
2952 for( i
= 0; i
< sizeof(array
)/sizeof(array
[0]); i
++ )
2956 PL_strcpy(buffer
, array
[i
].cyphertext
);
2957 clen
= PL_strlen(buffer
);
2959 if( 0 == (clen
& 3) )
2961 if( '=' == buffer
[clen
-1] )
2963 if( '=' == buffer
[clen
-2] )
2965 buffer
[clen
-2] = buffer
[clen
-1] = (char)0;
2970 buffer
[clen
-1] = (char)0;
2976 rv
= PL_Base64Decode(buffer
, 0, (char *)0);
2978 if( (char *)0 == rv
)
2980 printf("FAIL\n\t(%d): no return value\n", i
);
2984 if( 0 != PL_strcmp(rv
, array
[i
].plaintext
) )
2986 printf("FAIL\n\t(%d, \"%s\"): expected \n\"%s,\" got \n\"%s.\"\n",
2987 i
, array
[i
].cyphertext
, array
[i
].plaintext
, rv
);
3003 printf("Testing the Portable Library base64 functions:\n");
3004 printf("(warning: the \"triple characters\" tests are slow)\n");
3037 printf("Suite passed.\n");
3042 printf("Suite failed.\n");