00000000 00000018 00000030 00000048 00000060 00000078 00000090 000000A8 000000C0 000000D8 000000F0 00000108 00000120 00000138 00000150 00000168 00000180 00000198 000001B0 000001C8 000001E0 000001F8 00000210 00000228 00000240 00000258 00000270 00000288 000002A0 000002B8 000002D0 000002E8 00000300 00000318 00000330 00000348 00000360 00000378 00000390 000003A8 000003C0 000003D8 000003F0 00000408 00000420 00000438 00000450 00000468 00000480 00000498 000004B0 000004C8 000004E0 000004F8 00000510 00000528 00000540 00000558 00000570 00000588 000005A0 000005B8 000005D0 000005E8 00000600 00000618 00000630 00000648 00000660 00000678 00000690 000006A8 000006C0 000006D8 000006F0 00000708 00000720 00000738 00000750 00000768 00000780 00000798 000007B0 000007C8 000007E0 000007F8 00000810 00000828 00000840 00000858 00000870 00000888 000008A0 000008B8 000008D0 000008E8 00000900 00000918 00000930 00000948 00000960 00000978 00000990 000009A8 000009C0 000009D8 000009F0 00000A08 00000A20 00000A38 00000A50 00000A68 00000A80 00000A98 00000AB0 00000AC8 00000AE0 00000AF8 00000B10 00000B28 00000B40 00000B58 00000B70 00000B88 00000BA0 00000BB8 00000BD0 00000BE8 00000C00 00000C18 00000C30 00000C48 00000C60 00000C78 00000C90 00000CA8 00000CC0 00000CD8 00000CF0 00000D08 00000D20 00000D38 00000D50 00000D68 00000D80 00000D98 00000DB0 00000DC8 00000DE0 00000DF8 00000E10 00000E28 00000E40 00000E58 00000E70 00000E88 00000EA0 00000EB8 00000ED0 00000EE8 00000F00 00000F18 00000F30 00000F48 00000F60 00000F78 00000F90 00000FA8 00000FC0 00000FD8 00000FF0 00001008 00001020 00001038 00001050 00001068 00001080 00001098 000010B0 000010C8 000010E0 000010F8 00001110 00001128 00001140 00001158 00001170 00001188 000011A0 000011B8 000011D0 000011E8 00001200 00001218 00001230 00001248 00001260 00001278 00001290 000012A8 000012C0 000012D8 000012F0 00001308 00001320 00001338 00001350 00001368 00001380 00001398 000013B0 000013C8 000013E0 000013F8 00001410 00001428 00001440 00001458 00001470 00001488 000014A0 000014B8 000014D0 000014E8 00001500 00001518 00001530 00001548 00001560 00001578 00001590 000015A8 000015C0 000015D8 000015F0 00001608 00001620 00001638 00001650 00001668 00001680 00001698 000016B0 000016C8 000016E0 000016F8 00001710 00001728 00001740 00001758 00001770 00001788 000017A0 000017B8 000017D0 000017E8 00001800 00001818 00001830 00001848 00001860 00001878 00001890 000018A8 000018C0 000018D8 000018F0 00001908 00001920 00001938 00001950 00001968 00001980 00001998 000019B0 000019C8 000019E0 000019F8 00001A10 00001A28 00001A40 00001A58 00001A70 00001A88 00001AA0 00001AB8 00001AD0 00001AE8 00001B00 00001B18 00001B30 00001B48 00001B60 00001B78 00001B90 00001BA8 00001BC0 00001BD8 00001BF0 00001C08 00001C20 00001C38 00001C50 00001C68 00001C80 00001C98 00001CB0 00001CC8 00001CE0 00001CF8 00001D10 00001D28 00001D40 00001D58 00001D70 00001D88 00001DA0 00001DB8 00001DD0 00001DE8 00001E00 00001E18 00001E30 00001E48 00001E60 00001E78 00001E90 00001EA8 00001EC0 00001ED8 00001EF0 00001F08 00001F20 00001F38 00001F50 00001F68 00001F80 00001F98 00001FB0 00001FC8 00001FE0 00001FF8 00002010 00002028 00002040 00002058 00002070 00002088 000020A0 000020B8 000020D0 000020E8 00002100 00002118 00002130 00002148 00002160 00002178 00002190 000021A8 000021C0 000021D8 000021F0 00002208 00002220 00002238 00002250 00002268 00002280 00002298 000022B0 000022C8 000022E0 000022F8 00002310 00002328 00002340 00002358 00002370 00002388 000023A0 000023B8 000023D0 000023E8 00002400 00002418 00002430 00002448 00002460 00002478 00002490 000024A8 000024C0 000024D8 000024F0 00002508 00002520 00002538 00002550 00002568 00002580 00002598 000025B0 000025C8 000025E0 000025F8 00002610 00002628 00002640 00002658 00002670 00002688 000026A0 000026B8 000026D0 000026E8 00002700 00002718 00002730 00002748 00002760 00002778 00002790 000027A8 000027C0 000027D8 000027F0 00002808 00002820 00002838 00002850 00002868 00002880 00002898 000028B0 000028C8 000028E0 000028F8 00002910 00002928 00002940 00002958 00002970 00002988 000029A0 000029B8 000029D0 000029E8 00002A00 00002A18 00002A30 00002A48 00002A60 00002A78 00002A90 00002AA8 00002AC0 00002AD8 00002AF0 00002B08 00002B20 00002B38 00002B50 00002B68 00002B80 00002B98 00002BB0 00002BC8 00002BE0 00002BF8 00002C10 00002C28 00002C40 00002C58 00002C70 00002C88 00002CA0 00002CB8 00002CD0 00002CE8 00002D00 00002D18 00002D30 00002D48 00002D60 00002D78 00002D90 00002DA8 00002DC0 00002DD8 00002DF0 00002E08 00002E20 00002E38 00002E50 00002E68 00002E80 00002E98 00002EB0 00002EC8 00002EE0 00002EF8 00002F10 00002F28 00002F40 00002F58 00002F70 00002F88 00002FA0 00002FB8 00002FD0 00002FE8 00003000 00003018 00003030 00003048 00003060 00003078 00003090 000030A8 000030C0 000030D8 000030F0 00003108 00003120 00003138 00003150 00003168 00003180 00003198 000031B0 000031C8 000031E0 000031F8 00003210 00003228 00003240 00003258 00003270 00003288 000032A0 000032B8 000032D0 000032E8 00003300 00003318 00003330 00003348 00003360 00003378 00003390 000033A8 000033C0 000033D8 000033F0 00003408 00003420 00003438 00003450 00003468 00003480 00003498 000034B0 000034C8 000034E0 000034F8 00003510 00003528 00003540 00003558 00003570 00003588 000035A0 000035B8 000035D0 000035E8 00003600 00003618 00003630 00003648 00003660 00003678 00003690 000036A8 000036C0 000036D8 000036F0 00003708 00003720 00003738 00003750 00003768 00003780 00003798 000037B0 000037C8 000037E0 000037F8 00003810 00003828 00003840 00003858 00003870 00003888 000038A0 000038B8 000038D0 000038E8 00003900 00003918 00003930 00003948 00003960 00003978 00003990 000039A8 000039C0 000039D8 000039F0 00003A08 00003A20 00003A38 00003A50 00003A68 00003A80 00003A98 00003AB0 00003AC8 00003AE0 00003AF8 00003B10 00003B28 00003B40 00003B58 00003B70 00003B88 00003BA0 00003BB8 00003BD0 00003BE8 00003C00 00003C18 00003C30 00003C48 00003C60 00003C78 00003C90 00003CA8 00003CC0 00003CD8 00003CF0 00003D08 00003D20 00003D38 00003D50 00003D68 00003D80 00003D98 00003DB0 00003DC8 00003DE0 00003DF8 00003E10 00003E28 00003E40 00003E58 00003E70 00003E88 00003EA0 00003EB8 00003ED0 00003EE8 00003F00 00003F18 00003F30 00003F48 00003F60 00003F78 00003F90 00003FA8 00003FC0 00003FD8 00003FF0 00004008 00004020 00004038 00004050 00004068 00004080 00004098 000040B0 000040C8 000040E0 000040F8 00004110 00004128 00004140 00004158 00004170 00004188 000041A0 000041B8 000041D0 000041E8 00004200 00004218 00004230 00004248 00004260 00004278 00004290 000042A8 000042C0 000042D8 000042F0 00004308 00004320 00004338 00004350 00004368 00004380 00004398 000043B0 000043C8 000043E0 000043F8 00004410 00004428 00004440 00004458 00004470 00004488 000044A0 000044B8 000044D0 000044E8 00004500 00004518 00004530 00004548 00004560 00004578 00004590 000045A8 000045C0 000045D8 000045F0 00004608 00004620 00004638 00004650 00004668 00004680 00004698 000046B0 000046C8 000046E0 000046F8 00004710 00004728 00004740 00004758 00004770 00004788 000047A0 000047B8 000047D0 000047E8 00004800 00004818 00004830 00004848 00004860 00004878 00004890 000048A8 000048C0 000048D8 000048F0 00004908 00004920 00004938 00004950 00004968 00004980 00004998 000049B0 000049C8 000049E0 000049F8 00004A10 00004A28 00004A40 00004A58 00004A70 00004A88 00004AA0 00004AB8 00004AD0 00004AE8 00004B00 00004B18 00004B30 00004B48 00004B60 00004B78 00004B90 00004BA8 00004BC0 00004BD8 00004BF0 00004C08 00004C20 00004C38 00004C50 00004C68 00004C80 00004C98 00004CB0 00004CC8 00004CE0 00004CF8 00004D10 00004D28 00004D40 00004D58 00004D70 00004D88 00004DA0 00004DB8 00004DD0 00004DE8 00004E00 00004E18 00004E30 00004E48 00004E60 00004E78 00004E90 00004EA8 00004EC0 00004ED8 00004EF0 00004F08 00004F20 00004F38 00004F50 00004F68 00004F80 00004F98 00004FB0 00004FC8 00004FE0 00004FF8 00005010 00005028 00005040 00005058 00005070 00005088 000050A0 000050B8 000050D0 000050E8 00005100 00005118 00005130 00005148 00005160 00005178 00005190 000051A8 000051C0 000051D8 000051F0 00005208 00005220 00005238 00005250 00005268 00005280 00005298 000052B0 000052C8 000052E0 000052F8 00005310 00005328 00005340 00005358 00005370 00005388 000053A0 000053B8 000053D0 000053E8 00005400 00005418 00005430 00005448 00005460 00005478 00005490 000054A8 000054C0 000054D8 000054F0 00005508 00005520 00005538 00005550 00005568 00005580 00005598 000055B0 000055C8 000055E0 000055F8 00005610 00005628 00005640 00005658 00005670 00005688 000056A0 000056B8 000056D0 000056E8 00005700 00005718 00005730 00005748 00005760 00005778 00005790 000057A8 000057C0 000057D8 000057F0 00005808 00005820 00005838 00005850 00005868 00005880 00005898 000058B0 000058C8 000058E0 000058F8 00005910 00005928 00005940 00005958 00005970 00005988 000059A0 000059B8 000059D0 000059E8 00005A00 00005A18 00005A30 00005A48 00005A60 00005A78 00005A90 00005AA8 00005AC0 00005AD8 00005AF0 00005B08 00005B20 00005B38 00005B50 00005B68 00005B80 00005B98 00005BB0 00005BC8 00005BE0 00005BF8 00005C10 00005C28 00005C40 00005C58 00005C70 00005C88 00005CA0 00005CB8 00005CD0 00005CE8 00005D00 00005D18 00005D30 00005D48 00005D60 00005D78 00005D90 00005DA8 00005DC0 00005DD8 00005DF0 00005E08 00005E20 00005E38 00005E50 00005E68 00005E80 00005E98 00005EB0 00005EC8 00005EE0 00005EF8 00005F10 00005F28 00005F40 00005F58 00005F70 00005F88 00005FA0 00005FB8 00005FD0 00005FE8 00006000 00006018 00006030 00006048 00006060 00006078 00006090 000060A8 000060C0 000060D8 000060F0 00006108 00006120 00006138 00006150 00006168 00006180 00006198 000061B0 000061C8 000061E0 000061F8 00006210 00006228 00006240 00006258 00006270 00006288 000062A0 000062B8 000062D0 000062E8 00006300 00006318 00006330 00006348 00006360 00006378 00006390 000063A8 000063C0 000063D8 000063F0 00006408 00006420 00006438 00006450 00006468 00006480 00006498 000064B0 000064C8 000064E0 000064F8 00006510 00006528 00006540 00006558 00006570 00006588 000065A0 000065B8 000065D0 000065E8 00006600 00006618 00006630 00006648 00006660 00006678 00006690 000066A8 000066C0 000066D8 000066F0 00006708 00006720 00006738 00006750 00006768 00006780 00006798 000067B0 000067C8 000067E0 000067F8 00006810 00006828 00006840 00006858 00006870 00006888 000068A0 000068B8 000068D0 000068E8 00006900 00006918 00006930 00006948 00006960 00006978 00006990 000069A8 000069C0 000069D8 000069F0 00006A08 00006A20 00006A38 00006A50 00006A68 00006A80 00006A98 00006AB0 00006AC8 00006AE0 00006AF8 00006B10 00006B28 00006B40 00006B58 00006B70 00006B88 00006BA0 00006BB8 00006BD0 00006BE8 00006C00 00006C18 00006C30 00006C48 00006C60 00006C78 00006C90 00006CA8 00006CC0 00006CD8 00006CF0 00006D08 00006D20 00006D38 00006D50 00006D68 00006D80 00006D98 00006DB0 00006DC8 00006DE0 00006DF8 00006E10 00006E28 00006E40 00006E58 00006E70 00006E88 00006EA0 00006EB8 00006ED0 00006EE8 00006F00 00006F18 00006F30 00006F48 00006F60 00006F78 00006F90 00006FA8 00006FC0 00006FD8 00006FF0 00007008 00007020 00007038 00007050 00007068 00007080 00007098 000070B0 000070C8 000070E0 000070F8 00007110 00007128 00007140 00007158 00007170 00007188 000071A0 000071B8 000071D0 000071E8 00007200 00007218 00007230 00007248 00007260 00007278 00007290 000072A8 000072C0 000072D8 000072F0 00007308 00007320 00007338 00007350 00007368 00007380 00007398 000073B0 000073C8 000073E0 000073F8 00007410 00007428 00007440 00007458 00007470 00007488 000074A0 000074B8 000074D0 000074E8 00007500 00007518 00007530 00007548 00007560 00007578 00007590 000075A8 000075C0 000075D8 000075F0 00007608 00007620 00007638 00007650 00007668 00007680 00007698 000076B0 000076C8 000076E0 000076F8 00007710 00007728 00007740 00007758 00007770 00007788 000077A0 000077B8 000077D0 000077E8 00007800 00007818 00007830 00007848 00007860 00007878 00007890 000078A8 000078C0 000078D8 000078F0 00007908 00007920 00007938 00007950 00007968 00007980 00007998 000079B0 000079C8 000079E0 000079F8 00007A10 00007A28 00007A40 00007A58 00007A70 00007A88 00007AA0 00007AB8 00007AD0 00007AE8 00007B00 00007B18 00007B30 00007B48 00007B60 00007B78 00007B90 00007BA8 00007BC0 00007BD8 00007BF0 00007C08 00007C20 00007C38 00007C50 00007C68 00007C80 00007C98 00007CB0 00007CC8 00007CE0 00007CF8 00007D10 00007D28 00007D40 00007D58 00007D70 00007D88 00007DA0 00007DB8 00007DD0 00007DE8 00007E00 00007E18 00007E30 00007E48 00007E60 00007E78 00007E90 00007EA8 00007EC0 00007ED8 00007EF0 00007F08 00007F20 00007F38 00007F50 00007F68 00007F80 00007F98 00007FB0 00007FC8 00007FE0 00007FF8 00008010 00008028 00008040 00008058 00008070 00008088 000080A0 000080B8 000080D0 000080E8 00008100 00008118 00008130 00008148 00008160 00008178 00008190 000081A8 000081C0 000081D8 000081F0 00008208 00008220 00008238 00008250 00008268 00008280 00008298 000082B0 000082C8 000082E0 000082F8 00008310 00008328 00008340 00008358 00008370 00008388 000083A0 000083B8 000083D0 000083E8 00008400 00008418 00008430 00008448 00008460 00008478 00008490 000084A8 000084C0 000084D8 000084F0 00008508 00008520 00008538 00008550 00008568 00008580 00008598 000085B0 000085C8 000085E0 000085F8 00008610 00008628 00008640 00008658 00008670 00008688 000086A0 000086B8 000086D0 000086E8 00008700 00008718 00008730 00008748 00008760 00008778 00008790 000087A8 000087C0 000087D8 000087F0 00008808 00008820 00008838 00008850 00008868 00008880 00008898 000088B0 000088C8 000088E0 000088F8 00008910 00008928 00008940 00008958 00008970 00008988 000089A0 000089B8 000089D0 000089E8 00008A00 00008A18 00008A30 00008A48 00008A60 00008A78 00008A90 00008AA8 00008AC0 00008AD8 00008AF0 00008B08 00008B20 00008B38 00008B50 00008B68 00008B80 00008B98 00008BB0 00008BC8 00008BE0 00008BF8 00008C10 00008C28 00008C40 00008C58 00008C70 00008C88 00008CA0 00008CB8 00008CD0 00008CE8 00008D00 00008D18 00008D30 00008D48 00008D60 00008D78 00008D90 00008DA8 00008DC0 00008DD8 00008DF0 00008E08 00008E20 00008E38 00008E50 00008E68 00008E80 00008E98 00008EB0 00008EC8 00008EE0 00008EF8 00008F10 00008F28 00008F40 00008F58 00008F70 00008F88 00008FA0 00008FB8 00008FD0 00008FE8 00009000 00009018 00009030 00009048 00009060 00009078 00009090 000090A8 000090C0 000090D8 000090F0 00009108 00009120 00009138 00009150 00009168 00009180 00009198 000091B0 000091C8 000091E0 000091F8 00009210 00009228 00009240 00009258 00009270 00009288 000092A0 000092B8 000092D0 000092E8 00009300 00009318 00009330 00009348 00009360 00009378 00009390 000093A8 000093C0 000093D8 000093F0 00009408 00009420 00009438 00009450 00009468 00009480 00009498 000094B0 000094C8 000094E0 000094F8 00009510 00009528 00009540 00009558 00009570 00009588 000095A0 000095B8 000095D0 000095E8 00009600 00009618 00009630 00009648 00009660 00009678 00009690 000096A8 000096C0 000096D8 000096F0 00009708 00009720 00009738 00009750 00009768 00009780 00009798 000097B0 000097C8 000097E0 000097F8 00009810 00009828 00009840 00009858 00009870 00009888 000098A0 000098B8 000098D0 000098E8 00009900 00009918 00009930 00009948 00009960 00009978 00009990 000099A8 000099C0 000099D8 000099F0 00009A08 00009A20 00009A38 00009A50 00009A68 00009A80 00009A98 00009AB0 00009AC8 00009AE0 00009AF8 00009B10 00009B28 00009B40 00009B58 00009B70 00009B88 00009BA0 00009BB8 00009BD0 00009BE8 00009C00 00009C18 00009C30 00009C48 00009C60 00009C78 00009C90 00009CA8 00009CC0 00009CD8 00009CF0 00009D08 00009D20 00009D38 00009D50 00009D68 00009D80 00009D98 00009DB0 00009DC8 00009DE0 00009DF8 00009E10 00009E28 00009E40 00009E58 00009E70 00009E88 00009EA0 00009EB8 00009ED0 00009EE8 00009F00 00009F18 00009F30 00009F48 00009F60 00009F78 00009F90 00009FA8 00009FC0 00009FD8 00009FF0 0000A008 0000A020 0000A038 0000A050 0000A068 0000A080 0000A098 0000A0B0 0000A0C8 0000A0E0 0000A0F8 0000A110 0000A128 0000A140 0000A158 0000A170 0000A188 0000A1A0 0000A1B8 0000A1D0 0000A1E8 0000A200 0000A218 0000A230 0000A248 0000A260 0000A278 0000A290 0000A2A8 0000A2C0 0000A2D8 0000A2F0 0000A308 0000A320 0000A338 0000A350 0000A368 0000A380 0000A398 0000A3B0 0000A3C8 0000A3E0 0000A3F8 0000A410 0000A428 0000A440 0000A458 0000A470 0000A488 0000A4A0 0000A4B8 0000A4D0 0000A4E8 0000A500 0000A518 0000A530 0000A548 0000A560 0000A578 0000A590 0000A5A8 0000A5C0 0000A5D8 0000A5F0 0000A608 0000A620 0000A638 0000A650 0000A668 0000A680 0000A698 0000A6B0 0000A6C8 0000A6E0 0000A6F8 0000A710 0000A728 0000A740 0000A758 0000A770 0000A788 0000A7A0 0000A7B8 0000A7D0 0000A7E8 0000A800 0000A818 0000A830 0000A848 0000A860 0000A878 0000A890 0000A8A8 0000A8C0 0000A8D8 0000A8F0 0000A908 0000A920 0000A938 0000A950 0000A968 0000A980 0000A998 0000A9B0 0000A9C8 0000A9E0 0000A9F8 0000AA10 0000AA28 0000AA40 0000AA58 0000AA70 0000AA88 0000AAA0 0000AAB8 0000AAD0 0000AAE8 0000AB00 0000AB18 0000AB30 0000AB48 0000AB60 0000AB78 0000AB90 0000ABA8 0000ABC0 0000ABD8 0000ABF0 0000AC08 0000AC20 0000AC38 0000AC50 0000AC68 0000AC80 0000AC98 0000ACB0 0000ACC8 0000ACE0 0000ACF8 0000AD10 0000AD28 0000AD40 0000AD58 0000AD70 0000AD88 0000ADA0 0000ADB8 0000ADD0 0000ADE8 0000AE00 0000AE18 0000AE30 0000AE48 0000AE60 0000AE78 0000AE90 0000AEA8 0000AEC0 0000AED8 0000AEF0 0000AF08 0000AF20 0000AF38 0000AF50 0000AF68 0000AF80 0000AF98 0000AFB0 0000AFC8 0000AFE0 0000AFF8 0000B010 0000B028 0000B040 0000B058 0000B070 0000B088 0000B0A0 0000B0B8 0000B0D0 0000B0E8 0000B100 0000B118 0000B130 0000B148 0000B160 0000B178 0000B190 0000B1A8 0000B1C0 0000B1D8 0000B1F0 0000B208 0000B220 0000B238 0000B250 0000B268 0000B280 0000B298 0000B2B0 0000B2C8 0000B2E0 0000B2F8 0000B310 0000B328 0000B340 0000B358 0000B370 0000B388 0000B3A0 0000B3B8 0000B3D0 0000B3E8 0000B400 0000B418 0000B430 0000B448 0000B460 0000B478 0000B490 0000B4A8 0000B4C0 0000B4D8 0000B4F0 0000B508 0000B520 0000B538 0000B550 0000B568 0000B580 0000B598 0000B5B0 0000B5C8 0000B5E0 0000B5F8 0000B610 0000B628 0000B640 0000B658 0000B670 0000B688 0000B6A0 0000B6B8 0000B6D0 0000B6E8 0000B700 0000B718 0000B730 0000B748 0000B760 0000B778 0000B790 0000B7A8 0000B7C0 0000B7D8 0000B7F0 0000B808 0000B820 0000B838 0000B850 0000B868 0000B880 0000B898 0000B8B0 0000B8C8 0000B8E0 0000B8F8 0000B910 0000B928 0000B940 0000B958 0000B970 0000B988 0000B9A0 0000B9B8 0000B9D0 0000B9E8 0000BA00 0000BA18 0000BA30 0000BA48 0000BA60 0000BA78 0000BA90 0000BAA8 0000BAC0 0000BAD8 0000BAF0 0000BB08 0000BB20 0000BB38 0000BB50 0000BB68 0000BB80 0000BB98 0000BBB0 0000BBC8 0000BBE0 0000BBF8 0000BC10 0000BC28 0000BC40 0000BC58 0000BC70 0000BC88 0000BCA0 0000BCB8 0000BCD0 0000BCE8 0000BD00 0000BD18 0000BD30 0000BD48 0000BD60 0000BD78 0000BD90 0000BDA8 0000BDC0 0000BDD8 0000BDF0 0000BE08 0000BE20 0000BE38 0000BE50 0000BE68 0000BE80 0000BE98 0000BEB0 0000BEC8 0000BEE0 0000BEF8 0000BF10 0000BF28 0000BF40 0000BF58 0000BF70 0000BF88 0000BFA0 0000BFB8 0000BFD0 0000BFE8 0000C000 0000C018 0000C030 0000C048 0000C060 0000C078 0000C090 0000C0A8 0000C0C0 0000C0D8 0000C0F0 0000C108 0000C120 0000C138 0000C150 0000C168 0000C180 0000C198 0000C1B0 0000C1C8 0000C1E0 0000C1F8 0000C210 0000C228 0000C240 0000C258 0000C270 0000C288 0000C2A0 0000C2B8 0000C2D0 0000C2E8 0000C300 0000C318 0000C330 0000C348 0000C360 0000C378 0000C390 0000C3A8 0000C3C0 0000C3D8 0000C3F0 0000C408 0000C420 0000C438 0000C450 0000C468 0000C480 0000C498 0000C4B0 0000C4C8 0000C4E0 0000C4F8 0000C510 0000C528 0000C540 0000C558 0000C570 0000C588 0000C5A0 0000C5B8 0000C5D0 0000C5E8 0000C600 0000C618 0000C630 0000C648 0000C660 0000C678 0000C690 0000C6A8 0000C6C0 0000C6D8 0000C6F0 0000C708 0000C720 0000C738 0000C750 0000C768 0000C780 0000C798 0000C7B0 0000C7C8 0000C7E0 0000C7F8 0000C810 0000C828 0000C840 0000C858 0000C870 0000C888 0000C8A0 0000C8B8 0000C8D0 0000C8E8 0000C900 0000C918 0000C930 0000C948 0000C960 0000C978 0000C990 0000C9A8 0000C9C0 0000C9D8 0000C9F0 0000CA08 0000CA20 0000CA38 0000CA50 0000CA68 0000CA80 0000CA98 0000CAB0 0000CAC8 0000CAE0 0000CAF8 0000CB10 0000CB28 0000CB40 0000CB58 0000CB70 0000CB88 0000CBA0 0000CBB8 0000CBD0 0000CBE8 0000CC00 0000CC18 0000CC30 0000CC48 0000CC60 0000CC78 0000CC90 0000CCA8 0000CCC0 0000CCD8 0000CCF0 0000CD08 0000CD20 0000CD38 0000CD50 0000CD68 0000CD80 0000CD98 0000CDB0 0000CDC8 0000CDE0 0000CDF8 0000CE10 0000CE28 0000CE40 0000CE58 0000CE70 0000CE88 0000CEA0 0000CEB8 0000CED0 0000CEE8 0000CF00 0000CF18 0000CF30 0000CF48 0000CF60 0000CF78 0000CF90 0000CFA8 0000CFC0 0000CFD8 0000CFF0 0000D008 0000D020 0000D038 0000D050 0000D068 0000D080 0000D098 0000D0B0 0000D0C8 0000D0E0 0000D0F8 0000D110 0000D128 0000D140 0000D158 0000D170 0000D188 0000D1A0 0000D1B8 0000D1D0 0000D1E8 0000D200 0000D218 0000D230 0000D248 0000D260 0000D278 0000D290 0000D2A8 0000D2C0 0000D2D8 0000D2F0 0000D308 0000D320 0000D338 0000D350 0000D368 0000D380 0000D398 0000D3B0 0000D3C8 0000D3E0 0000D3F8 0000D410 0000D428 0000D440 0000D458 0000D470 0000D488 0000D4A0 0000D4B8 0000D4D0 0000D4E8 0000D500 0000D518 0000D530 0000D548 0000D560 0000D578 0000D590 0000D5A8 0000D5C0 0000D5D8 0000D5F0 0000D608 0000D620 0000D638 0000D650 0000D668 0000D680 0000D698 0000D6B0 0000D6C8 0000D6E0 0000D6F8 0000D710 0000D728 0000D740 0000D758 0000D770 0000D788 0000D7A0 0000D7B8 0000D7D0 0000D7E8 0000D800 0000D818 0000D830 0000D848 0000D860 0000D878 0000D890 0000D8A8 0000D8C0 0000D8D8 0000D8F0 0000D908 0000D920 0000D938 0000D950 0000D968 0000D980 0000D998 0000D9B0 0000D9C8 0000D9E0 0000D9F8 0000DA10 0000DA28 0000DA40 0000DA58 0000DA70 0000DA88 0000DAA0 0000DAB8 0000DAD0 0000DAE8 0000DB00 0000DB18 0000DB30 0000DB48 0000DB60 0000DB78 0000DB90 0000DBA8 0000DBC0 0000DBD8 0000DBF0 0000DC08 0000DC20 0000DC38 0000DC50 0000DC68 0000DC80 0000DC98 0000DCB0 0000DCC8 0000DCE0 0000DCF8 0000DD10 0000DD28 0000DD40 0000DD58 0000DD70 0000DD88 0000DDA0 0000DDB8 0000DDD0 0000DDE8 0000DE00 0000DE18 0000DE30 0000DE48 0000DE60 0000DE78 0000DE90 0000DEA8 0000DEC0 0000DED8 0000DEF0 0000DF08 0000DF20 0000DF38 0000DF50 0000DF68 0000DF80 0000DF98 0000DFB0 0000DFC8 0000DFE0 0000DFF8 0000E010 0000E028 0000E040 0000E058 0000E070 0000E088 0000E0A0 0000E0B8 0000E0D0 0000E0E8 0000E100 0000E118 0000E130 0000E148 0000E160 0000E178 0000E190 0000E1A8 0000E1C0 0000E1D8 0000E1F0 0000E208 0000E220 0000E238 0000E250 0000E268 0000E280 0000E298 0000E2B0 0000E2C8 0000E2E0 0000E2F8 0000E310 0000E328 0000E340 0000E358 0000E370 0000E388 0000E3A0 0000E3B8 0000E3D0 0000E3E8 0000E400 0000E418 0000E430 0000E448 0000E460 0000E478 0000E490 0000E4A8 0000E4C0 0000E4D8 0000E4F0 0000E508 0000E520 0000E538 0000E550 0000E568 0000E580 0000E598 0000E5B0 0000E5C8 0000E5E0 0000E5F8 0000E610 0000E628 0000E640 0000E658 0000E670 0000E688 0000E6A0 0000E6B8 0000E6D0 0000E6E8 0000E700 0000E718 0000E730 0000E748 0000E760 0000E778 0000E790 0000E7A8 0000E7C0 0000E7D8 0000E7F0 0000E808 0000E820 0000E838 0000E850 0000E868 0000E880 0000E898 0000E8B0 0000E8C8 0000E8E0 0000E8F8 0000E910 0000E928 0000E940 0000E958 0000E970 0000E988 0000E9A0 0000E9B8 0000E9D0 0000E9E8 0000EA00 0000EA18 0000EA30 0000EA48 0000EA60 0000EA78 0000EA90 0000EAA8 0000EAC0 0000EAD8 0000EAF0 0000EB08 0000EB20 0000EB38 0000EB50 0000EB68 0000EB80 0000EB98 0000EBB0 0000EBC8 0000EBE0 0000EBF8 0000EC10 0000EC28 0000EC40 0000EC58 0000EC70 0000EC88 0000ECA0 0000ECB8 0000ECD0 0000ECE8 0000ED00 0000ED18 0000ED30 0000ED48 0000ED60 0000ED78 0000ED90 0000EDA8 0000EDC0 0000EDD8 0000EDF0 0000EE08 0000EE20 0000EE38 0000EE50 0000EE68 0000EE80 0000EE98 0000EEB0 0000EEC8 0000EEE0 0000EEF8 0000EF10 0000EF28 0000EF40 0000EF58 0000EF70 0000EF88 0000EFA0 0000EFB8 0000EFD0 0000EFE8 0000F000 0000F018 0000F030 0000F048 0000F060 0000F078 0000F090 0000F0A8 0000F0C0 0000F0D8 0000F0F0 0000F108 0000F120 0000F138 0000F150 0000F168 0000F180 0000F198 0000F1B0 0000F1C8 0000F1E0 0000F1F8 0000F210 0000F228 0000F240 0000F258 0000F270 0000F288 0000F2A0 0000F2B8 0000F2D0 0000F2E8 0000F300 0000F318 0000F330 0000F348 0000F360 0000F378 0000F390 0000F3A8 0000F3C0 0000F3D8 0000F3F0 0000F408 0000F420 0000F438 0000F450 0000F468 0000F480 0000F498 0000F4B0 0000F4C8 0000F4E0 0000F4F8 0000F510 0000F528 0000F540 0000F558 0000F570 0000F588 0000F5A0 0000F5B8 0000F5D0 0000F5E8 0000F600 0000F618 0000F630 0000F648 0000F660 0000F678 0000F690 0000F6A8 0000F6C0 0000F6D8 0000F6F0 0000F708 0000F720 0000F738 0000F750 0000F768 0000F780 0000F798 0000F7B0 0000F7C8 0000F7E0 0000F7F8 0000F810 0000F828 0000F840 0000F858 0000F870 0000F888 0000F8A0 0000F8B8 0000F8D0 0000F8E8 0000F900 0000F918 0000F930 0000F948 0000F960 0000F978 0000F990 0000F9A8 0000F9C0 0000F9D8 0000F9F0 0000FA08 0000FA20 0000FA38 0000FA50 0000FA68 0000FA80 0000FA98 0000FAB0 0000FAC8 0000FAE0 0000FAF8 0000FB10 0000FB28 0000FB40 0000FB58 0000FB70 0000FB88 0000FBA0 0000FBB8 0000FBD0 0000FBE8 0000FC00 0000FC18 0000FC30 0000FC48 0000FC60 0000FC78 0000FC90 0000FCA8 0000FCC0 0000FCD8 0000FCF0 0000FD08 0000FD20 0000FD38 0000FD50 0000FD68 0000FD80 0000FD98 0000FDB0 0000FDC8 0000FDE0 0000FDF8 0000FE10 0000FE28 0000FE40 0000FE58 0000FE70 0000FE88 0000FEA0 0000FEB8 0000FED0 0000FEE8 0000FF00 0000FF18 0000FF30 0000FF48 0000FF60 0000FF78 0000FF90 0000FFA8 0000FFC0 0000FFD8 0000FFF0 00010008 00010020 00010038 00010050 00010068 00010080 00010098 000100B0 000100C8 000100E0 000100F8 00010110 00010128 00010140 00010158 00010170 00010188 000101A0 000101B8 000101D0 000101E8 00010200 00010218 00010230 00010248 00010260 00010278 00010290 000102A8 000102C0 000102D8 000102F0 00010308 00010320 00010338 00010350 00010368 00010380 00010398 000103B0 000103C8 000103E0 000103F8 00010410 00010428 00010440 00010458 00010470 00010488 000104A0 000104B8 000104D0 000104E8 00010500 00010518 00010530 00010548 00010560 00010578 00010590 000105A8 000105C0 000105D8 000105F0 00010608 00010620 00010638 00010650 00010668 00010680 00010698 000106B0 000106C8 000106E0 000106F8 00010710 00010728 00010740 00010758 00010770 00010788 000107A0 000107B8 000107D0 000107E8 00010800 00010818 00010830 00010848 00010860 00010878 00010890 000108A8 000108C0 000108D8 000108F0 00010908 00010920 00010938 00010950 00010968 00010980 00010998 000109B0 000109C8 000109E0 000109F8 00010A10 00010A28 00010A40 00010A58 00010A70 00010A88 00010AA0 00010AB8 00010AD0 00010AE8 00010B00 00010B18 00010B30 00010B48 00010B60 00010B78 00010B90 00010BA8 00010BC0 00010BD8 00010BF0 00010C08 00010C20 00010C38 00010C50 00010C68 00010C80 00010C98 00010CB0 00010CC8 00010CE0 00010CF8 00010D10 00010D28 00010D40 00010D58 00010D70 00010D88 00010DA0 00010DB8 00010DD0 00010DE8 00010E00 00010E18 00010E30 00010E48 00010E60 00010E78 00010E90 00010EA8 00010EC0 00010ED8 00010EF0 00010F08 00010F20 00010F38 00010F50 00010F68 00010F80 00010F98 00010FB0 00010FC8 00010FE0 00010FF8 00011010 00011028 00011040 00011058 00011070 00011088 000110A0 000110B8 000110D0 000110E8 00011100 00011118 00011130 00011148 00011160 00011178 00011190 000111A8 000111C0 000111D8 000111F0 00011208 00011220 00011238 00011250 00011268 00011280 00011298 000112B0 000112C8 000112E0 000112F8 00011310 00011328 00011340 00011358 00011370 00011388 000113A0 000113B8 000113D0 000113E8 00011400 00011418 00011430 00011448 00011460 00011478 00011490 000114A8 000114C0 000114D8 000114F0 00011508 00011520 00011538 00011550 00011568 00011580 00011598 000115B0 000115C8 000115E0 000115F8 00011610 00011628 00011640 00011658 00011670 00011688 000116A0 000116B8 000116D0 000116E8 00011700 00011718 00011730 00011748 00011760 00011778 00011790 000117A8 000117C0 000117D8 000117F0 00011808 00011820 00011838 00011850 00011868 00011880 00011898 000118B0 000118C8 000118E0 000118F8 00011910 00011928 00011940 00011958 00011970 00011988 000119A0 000119B8 000119D0 000119E8 00011A00 00011A18 00011A30 00011A48 00011A60 00011A78 00011A90 00011AA8 00011AC0 00011AD8 00011AF0 00011B08 00011B20 00011B38 00011B50 00011B68 00011B80 00011B98 00011BB0 00011BC8 00011BE0 00011BF8 00011C10 00011C28 00011C40 00011C58 00011C70 00011C88 00011CA0 00011CB8 00011CD0 00011CE8 00011D00 00011D18 00011D30 00011D48 00011D60 00011D78 00011D90 00011DA8 00011DC0 00011DD8 00011DF0 00011E08 00011E20 00011E38 00011E50 00011E68 00011E80 00011E98 00011EB0 00011EC8 00011EE0 00011EF8 00011F10 00011F28 00011F40 00011F58 00011F70 00011F88 00011FA0 00011FB8 00011FD0 00011FE8 00012000 00012018 00012030 00012048 00012060 00012078 00012090 000120A8 000120C0 000120D8 000120F0 00012108 00012120 00012138 00012150 00012168 00012180 00012198 000121B0 000121C8 000121E0 000121F8 00012210 00012228 00012240 00012258 00012270 00012288 000122A0 000122B8 000122D0 000122E8 00012300 00012318 00012330 00012348 00012360 00012378 00012390 000123A8 000123C0 000123D8 000123F0 00012408 00012420 00012438 00012450 00012468 00012480 00012498 000124B0 000124C8 000124E0 000124F8 00012510 00012528 00012540 00012558 00012570 00012588 000125A0 000125B8 000125D0 000125E8 00012600 00012618 00012630 00012648 00012660 00012678 00012690 000126A8 000126C0 000126D8 000126F0 00012708 00012720 00012738 00012750 00012768 00012780 00012798 000127B0 000127C8 000127E0 000127F8 00012810 00012828 00012840 00012858 00012870 00012888 000128A0 000128B8 000128D0 000128E8 00012900 00012918 00012930 00012948 00012960 00012978 00012990 000129A8 000129C0 000129D8 000129F0 00012A08 00012A20 00012A38 00012A50 00012A68 00012A80 00012A98 00012AB0 00012AC8 00012AE0 00012AF8 00012B10 00012B28 00012B40 00012B58 00012B70 00012B88 00012BA0 00012BB8 00012BD0 00012BE8 00012C00 00012C18 00012C30 00012C48 00012C60 00012C78 00012C90 00012CA8 00012CC0 00012CD8 00012CF0 00012D08 00012D20 00012D38 00012D50 00012D68 00012D80 00012D98 00012DB0 00012DC8 00012DE0 00012DF8 00012E10 00012E28 00012E40 00012E58 00012E70 00012E88 00012EA0 00012EB8 00012ED0 00012EE8 00012F00 00012F18 00012F30 00012F48 00012F60 00012F78 00012F90 00012FA8 00012FC0 00012FD8 00012FF0 00013008 00013020 00013038 00013050 00013068 00013080 00013098 000130B0 000130C8 000130E0 000130F8 00013110 00013128 00013140 00013158 00013170 00013188 000131A0 000131B8 000131D0 000131E8 00013200 00013218 00013230 00013248 00013260 00013278 00013290 000132A8 000132C0 000132D8 000132F0 00013308 00013320 00013338 00013350 00013368 00013380 00013398 000133B0 000133C8 000133E0 000133F8 00013410 00013428 00013440 00013458 00013470 00013488 000134A0 000134B8 000134D0 000134E8 00013500 00013518 00013530 00013548 00013560 00013578 00013590 000135A8 000135C0 000135D8 000135F0 00013608 00013620 00013638 00013650 00013668 00013680 00013698 000136B0 000136C8 000136E0 000136F8 00013710 00013728 00013740 00013758 00013770 00013788 000137A0 000137B8 000137D0 000137E8 00013800 00013818 00013830 00013848 00013860 00013878 00013890 000138A8 000138C0 000138D8 000138F0 00013908 00013920 00013938 00013950 00013968 00013980 00013998 000139B0 000139C8 000139E0 000139F8 00013A10 00013A28 00013A40 00013A58 00013A70 00013A88 00013AA0 00013AB8 00013AD0 00013AE8 00013B00 00013B18 00013B30 00013B48 00013B60 00013B78 00013B90 00013BA8 00013BC0 00013BD8 00013BF0 00013C08 00013C20 00013C38 00013C50 00013C68 00013C80 00013C98 00013CB0 00013CC8 00013CE0 00013CF8 00013D10 00013D28 00013D40 00013D58 00013D70 00013D88 00013DA0 00013DB8 00013DD0 00013DE8 00013E00 00013E18 00013E30 00013E48 00013E60 00013E78 00013E90 00013EA8 00013EC0 00013ED8 00013EF0 00013F08 00013F20 00013F38 00013F50 00013F68 00013F80 00013F98 00013FB0 00013FC8 00013FE0 00013FF8 00014010 00014028 00014040 00014058 00014070 00014088 000140A0 000140B8 000140D0 000140E8 00014100 00014118 00014130 00014148 00014160 00014178 00014190 000141A8 000141C0 000141D8 000141F0 00014208 00014220 00014238 00014250 00014268 00014280 00014298 000142B0 000142C8 000142E0 000142F8 00014310 00014328 00014340 00014358 00014370 00014388 000143A0 000143B8 000143D0 000143E8 00014400 00014418 00014430 00014448 00014460 00014478 00014490 000144A8 000144C0 000144D8 000144F0 00014508 00014520 00014538 00014550 00014568 00014580 00014598 000145B0 000145C8 000145E0 000145F8 00014610 00014628 00014640 00014658 00014670 00014688 000146A0 000146B8 000146D0 000146E8 00014700 00014718 00014730 00014748 00014760 00014778 00014790 000147A8 000147C0 000147D8 000147F0 00014808 00014820 00014838 00014850 00014868 00014880 00014898 000148B0 000148C8 000148E0 000148F8 00014910 00014928 00014940 00014958 00014970 00014988 000149A0 000149B8 000149D0 000149E8 00014A00 00014A18 00014A30 00014A48 00014A60 00014A78 00014A90 00014AA8 00014AC0 00014AD8 00014AF0 00014B08 00014B20 00014B38 00014B50 00014B68 00014B80 00014B98 00014BB0 00014BC8 00014BE0 00014BF8 00014C10 00014C28 00014C40 00014C58 00014C70 00014C88 00014CA0 00014CB8 00014CD0 00014CE8 00014D00 00014D18 00014D30 00014D48 00014D60 00014D78 00014D90 00014DA8 00014DC0 00014DD8 00014DF0 00014E08 00014E20 00014E38 00014E50 00014E68 00014E80 00014E98 00014EB0 00014EC8 00014EE0 00014EF8 00014F10 00014F28 00014F40 00014F58 00014F70 00014F88 00014FA0 00014FB8 00014FD0 00014FE8 00015000 00015018 00015030 00015048 00015060 00015078 00015090 000150A8 000150C0 000150D8 000150F0 00015108 00015120 00015138 00015150 00015168 00015180 00015198 000151B0 000151C8 000151E0 000151F8 00015210 00015228 00015240 00015258 00015270 00015288 000152A0 000152B8 000152D0 000152E8 00015300 00015318 00015330 00015348 00015360 00015378 00015390 000153A8 000153C0 000153D8 000153F0 00015408 00015420 00015438 00015450 00015468 00015480 00015498 000154B0 000154C8 000154E0 000154F8 00015510 00015528 00015540 00015558 00015570 00015588 000155A0 000155B8 000155D0 000155E8 00015600 00015618 00015630 00015648 00015660 00015678 00015690 000156A8 000156C0 000156D8 000156F0 00015708 00015720 00015738 00015750 00015768 00015780 00015798 000157B0 000157C8 000157E0 000157F8 00015810 00015828 00015840 00015858 00015870 00015888 000158A0 000158B8 000158D0 000158E8 00015900 00015918 00015930 00015948 00015960 00015978 00015990 000159A8 000159C0 000159D8 000159F0 00015A08 00015A20 00015A38 00015A50 00015A68 00015A80 00015A98 00015AB0 00015AC8 00015AE0 00015AF8 00015B10 00015B28 00015B40 00015B58 00015B70 00015B88 00015BA0 00015BB8 00015BD0 00015BE8 00015C00 00015C18 00015C30 00015C48 00015C60 00015C78 00015C90 00015CA8 00015CC0 00015CD8 00015CF0 00015D08 00015D20 00015D38 00015D50 00015D68 00015D80 00015D98 00015DB0 00015DC8 00015DE0 00015DF8 00015E10 00015E28 00015E40 00015E58 00015E70 00015E88 00015EA0 00015EB8 00015ED0 00015EE8 00015F00 00015F18 00015F30 00015F48 00015F60 00015F78 00015F90 00015FA8 00015FC0 00015FD8 00015FF0 00016008 00016020 00016038 00016050 00016068 00016080 00016098 000160B0 000160C8 000160E0 000160F8 00016110 00016128 00016140 00016158 00016170 00016188 000161A0 000161B8 000161D0 000161E8 00016200 00016218 00016230 00016248 00016260 00016278 00016290 000162A8 000162C0 000162D8 000162F0 00016308 00016320 00016338 00016350 00016368 00016380 00016398 000163B0 000163C8 000163E0 000163F8 00016410 00016428 00016440 00016458 00016470 00016488 000164A0 000164B8 000164D0 000164E8 00016500 00016518 00016530 00016548 00016560 00016578 00016590 000165A8 000165C0 000165D8 000165F0 00016608 00016620 00016638 00016650 00016668 00016680 00016698 000166B0 000166C8 000166E0 000166F8 00016710 00016728 00016740 00016758 00016770 00016788 000167A0 000167B8 000167D0 000167E8 00016800 00016818 00016830 00016848 00016860 00016878 00016890 000168A8 000168C0 000168D8 000168F0 00016908 00016920 00016938 00016950 00016968 00016980 00016998 000169B0 000169C8 000169E0 000169F8 00016A10 00016A28 00016A40 00016A58 00016A70 00016A88 00016AA0 00016AB8 00016AD0 00016AE8 00016B00 00016B18 00016B30 00016B48 00016B60 00016B78 00016B90 00016BA8 00016BC0 00016BD8 00016BF0 00016C08 00016C20 00016C38 00016C50 00016C68 00016C80 00016C98 00016CB0 00016CC8 00016CE0 00016CF8 00016D10 00016D28 00016D40 00016D58 00016D70 00016D88 00016DA0 00016DB8 00016DD0 00016DE8 00016E00 00016E18 00016E30 00016E48 00016E60 00016E78 00016E90 00016EA8 00016EC0 00016ED8 00016EF0 00016F08 00016F20 00016F38 00016F50 00016F68 00016F80 00016F98 00016FB0 00016FC8 00016FE0 00016FF8 00017010 00017028 00017040 00017058 00017070 00017088 000170A0 000170B8 000170D0 000170E8 00017100 00017118 00017130 00017148 00017160 00017178 00017190 000171A8 000171C0 000171D8 000171F0 00017208 00017220 00017238 00017250 00017268 00017280 00017298 000172B0 000172C8 000172E0 000172F8 00017310 00017328 00017340 00017358 00017370 00017388 000173A0 000173B8 000173D0 000173E8 00017400 00017418 00017430 00017448 00017460 00017478 00017490 000174A8 000174C0 000174D8 000174F0 00017508 00017520 00017538 00017550 00017568 00017580 00017598 000175B0 000175C8 000175E0 000175F8 00017610 00017628 00017640 00017658 00017670 00017688 000176A0 000176B8 000176D0 000176E8 00017700 00017718 00017730 00017748 00017760 00017778 00017790 000177A8 000177C0 000177D8 000177F0 00017808 00017820 00017838 00017850 00017868 00017880 00017898 000178B0 000178C8 000178E0 000178F8 00017910 00017928 00017940 00017958 00017970 00017988 000179A0 000179B8 000179D0 000179E8 00017A00 00017A18 00017A30 00017A48 00017A60 00017A78 00017A90 00017AA8 00017AC0 00017AD8 00017AF0 00017B08 00017B20 00017B38 00017B50 00017B68 00017B80 00017B98 00017BB0 00017BC8 00017BE0 00017BF8 00017C10 00017C28 00017C40 00017C58 00017C70 00017C88 00017CA0 00017CB8 00017CD0 00017CE8 00017D00 00017D18 00017D30 00017D48 00017D60 00017D78 00017D90 00017DA8 00017DC0 00017DD8 00017DF0 00017E08 00017E20 00017E38 00017E50 00017E68 00017E80 00017E98 00017EB0 00017EC8 00017EE0 00017EF8 00017F10 00017F28 00017F40 00017F58 00017F70 00017F88 00017FA0 00017FB8 00017FD0 00017FE8 00018000 00018018 00018030 00018048 00018060 00018078 00018090 000180A8 000180C0 000180D8 000180F0 00018108 00018120 00018138 00018150 00018168 00018180 00018198 000181B0 000181C8 000181E0 000181F8 00018210 00018228 00018240 00018258 00018270 00018288 000182A0 000182B8 000182D0 000182E8 00018300 00018318 00018330 00018348 00018360 00018378 00018390 000183A8 000183C0 000183D8 000183F0 00018408 00018420 00018438 00018450 00018468 00018480 00018498 000184B0 000184C8 000184E0 000184F8 00018510 00018528 00018540 00018558 00018570 00018588 000185A0 000185B8 000185D0 000185E8 00018600 00018618 00018630 00018648 00018660 00018678 00018690 000186A8 000186C0 000186D8 000186F0 00018708 00018720 00018738 00018750 00018768 00018780 00018798 000187B0 000187C8 000187E0 000187F8 00018810 00018828 00018840 00018858 00018870 00018888 000188A0 000188B8 000188D0 000188E8 00018900 00018918 00018930 00018948 00018960 00018978 00018990 000189A8 000189C0 000189D8 000189F0 00018A08 00018A20 00018A38 00018A50 00018A68 00018A80 00018A98 00018AB0 00018AC8 00018AE0 00018AF8 00018B10 00018B28 00018B40 00018B58 00018B70 00018B88 00018BA0 00018BB8 00018BD0 00018BE8 00018C00 00018C18 00018C30 00018C48 00018C60 00018C78 00018C90 00018CA8 00018CC0 00018CD8 00018CF0 00018D08 00018D20 00018D38 00018D50 00018D68 00018D80 00018D98 00018DB0 00018DC8 00018DE0 00018DF8 00018E10 00018E28 00018E40 00018E58 00018E70 00018E88 00018EA0 00018EB8 00018ED0 00018EE8 00018F00 00018F18 00018F30 00018F48 00018F60 00018F78 00018F90 00018FA8 00018FC0 00018FD8 00018FF0 00019008 00019020 00019038 00019050 00019068 00019080 00019098 000190B0 000190C8 000190E0 000190F8 00019110 00019128 00019140 00019158 00019170 00019188 000191A0 000191B8 000191D0 000191E8 00019200 00019218 00019230 00019248 00019260 00019278 00019290 000192A8 000192C0 000192D8 000192F0 00019308 00019320 00019338 00019350 00019368 00019380 00019398 000193B0 000193C8 000193E0 000193F8 00019410 00019428 00019440 00019458 00019470 00019488 000194A0 000194B8 000194D0 000194E8 00019500 00019518 00019530 00019548 00019560 00019578 00019590 000195A8 000195C0 000195D8 000195F0 00019608 00019620 00019638 00019650 00019668 00019680 00019698 000196B0 000196C8 000196E0 000196F8 00019710 00019728 00019740 00019758 00019770 00019788 000197A0 000197B8 000197D0 000197E8 00019800 00019818 00019830 00019848 00019860 00019878 00019890 000198A8 000198C0 000198D8 000198F0 00019908 00019920 00019938 00019950 00019968 00019980 00019998 000199B0 000199C8 000199E0 000199F8 00019A10 00019A28 00019A40 00019A58 00019A70 00019A88 00019AA0 00019AB8 00019AD0 00019AE8 00019B00 00019B18 00019B30 00019B48 00019B60 00019B78 00019B90 00019BA8 00019BC0 00019BD8 00019BF0 00019C08 00019C20 00019C38 00019C50 00019C68 00019C80 00019C98 00019CB0 00019CC8 00019CE0 00019CF8 00019D10 00019D28 00019D40 00019D58 00019D70 00019D88 00019DA0 00019DB8 00019DD0 00019DE8 00019E00 00019E18 00019E30 00019E48 00019E60 00019E78 00019E90 00019EA8 00019EC0 00019ED8 00019EF0 00019F08 00019F20 00019F38 00019F50 00019F68 00019F80 00019F98 00019FB0 00019FC8 00019FE0 00019FF8 0001A010 0001A028 0001A040 0001A058 0001A070 0001A088 0001A0A0 0001A0B8 0001A0D0 0001A0E8 0001A100 0001A118 0001A130 0001A148 0001A160 0001A178 0001A190 0001A1A8 0001A1C0 0001A1D8 0001A1F0 0001A208 0001A220 0001A238 0001A250 0001A268 0001A280 0001A298 0001A2B0 0001A2C8 0001A2E0 0001A2F8 0001A310 0001A328 0001A340 0001A358 0001A370 0001A388 0001A3A0 0001A3B8 0001A3D0 0001A3E8 0001A400 0001A418 0001A430 0001A448 0001A460 0001A478 0001A490 0001A4A8 0001A4C0 0001A4D8 0001A4F0 0001A508 0001A520 0001A538 0001A550 0001A568 0001A580 0001A598 0001A5B0 0001A5C8 0001A5E0 0001A5F8 0001A610 0001A628 0001A640 0001A658 0001A670 0001A688 0001A6A0 0001A6B8 0001A6D0 0001A6E8 0001A700 0001A718 0001A730 0001A748 0001A760 0001A778 0001A790 0001A7A8 0001A7C0 0001A7D8 0001A7F0 0001A808 0001A820 0001A838 0001A850 0001A868 0001A880 0001A898 0001A8B0 0001A8C8 0001A8E0 0001A8F8 0001A910 0001A928 0001A940 0001A958 0001A970 0001A988 0001A9A0 0001A9B8 0001A9D0 0001A9E8 0001AA00 0001AA18 0001AA30 0001AA48 0001AA60 0001AA78 0001AA90 0001AAA8 0001AAC0 0001AAD8 0001AAF0 0001AB08 0001AB20 0001AB38 0001AB50 0001AB68 0001AB80 0001AB98 0001ABB0 0001ABC8 0001ABE0 0001ABF8 0001AC10 0001AC28 0001AC40 0001AC58 0001AC70 0001AC88 0001ACA0 0001ACB8 0001ACD0 0001ACE8 0001AD00 0001AD18 0001AD30 0001AD48 0001AD60 0001AD78 0001AD90 0001ADA8 0001ADC0 0001ADD8 0001ADF0 0001AE08 0001AE20 0001AE38 0001AE50 0001AE68 0001AE80 0001AE98 0001AEB0 0001AEC8 0001AEE0 0001AEF8 0001AF10 0001AF28 0001AF40 0001AF58 0001AF70 0001AF88 0001AFA0 0001AFB8 0001AFD0 0001AFE8 0001B000 0001B018 0001B030 0001B048 0001B060 0001B078 0001B090 0001B0A8 0001B0C0 0001B0D8 0001B0F0 0001B108 0001B120 0001B138 0001B150 0001B168 0001B180 0001B198 0001B1B0 0001B1C8 0001B1E0 0001B1F8 0001B210 0001B228 0001B240 0001B258 0001B270 0001B288 0001B2A0 0001B2B8 0001B2D0 0001B2E8 0001B300 0001B318 0001B330 0001B348 0001B360 0001B378 0001B390 0001B3A8 0001B3C0 0001B3D8 0001B3F0 0001B408 0001B420 0001B438 0001B450 0001B468 0001B480 0001B498 0001B4B0 0001B4C8 0001B4E0 0001B4F8 0001B510 0001B528 0001B540 0001B558 0001B570 0001B588 0001B5A0 0001B5B8 0001B5D0 0001B5E8 0001B600 0001B618 0001B630 0001B648 0001B660 0001B678 0001B690 0001B6A8 0001B6C0 0001B6D8 0001B6F0 0001B708 0001B720 0001B738 0001B750 0001B768 0001B780 0001B798 0001B7B0 0001B7C8 0001B7E0 0001B7F8 0001B810 0001B828 0001B840 0001B858 0001B870 0001B888 0001B8A0 0001B8B8 0001B8D0 0001B8E8 0001B900 0001B918 0001B930 0001B948 0001B960 0001B978 0001B990 0001B9A8 0001B9C0 0001B9D8 0001B9F0 0001BA08 0001BA20 0001BA38 0001BA50 0001BA68 0001BA80 0001BA98 0001BAB0 0001BAC8 0001BAE0 0001BAF8 0001BB10 0001BB28 0001BB40 0001BB58 0001BB70 0001BB88 0001BBA0 0001BBB8 0001BBD0 0001BBE8 0001BC00 0001BC18 0001BC30 0001BC48 0001BC60 0001BC78 0001BC90 0001BCA8 0001BCC0 0001BCD8 0001BCF0 0001BD08 0001BD20 0001BD38 0001BD50 0001BD68 0001BD80 0001BD98 0001BDB0 0001BDC8 0001BDE0 0001BDF8 0001BE10 0001BE28 0001BE40 0001BE58 0001BE70 0001BE88 0001BEA0 0001BEB8 0001BED0 0001BEE8 0001BF00 0001BF18 0001BF30 0001BF48 0001BF60 0001BF78 0001BF90 0001BFA8 0001BFC0 0001BFD8 0001BFF0 0001C008 0001C020 0001C038 0001C050 0001C068 0001C080 0001C098 0001C0B0 0001C0C8 0001C0E0 0001C0F8 0001C110
| 23 21 2F 62 69 6E 2F 73 68 0A 0A 23 20 67 72 6F 66 66 65 72 20 2D 20 64 69 73 70 6C 61 79 20 67 72 6F 66 66 20 66 69 6C 65 73 0A 0A 23 20 53 6F 75 72 63 65 20 66 69 6C 65 20 70 6F 73 69 74 69 6F 6E 3A 20 3C 67 72 6F 66 66 2D 73 6F 75 72 63 65 3E 2F 63 6F 6E 74 72 69 62 2F 67 72 6F 66 66 65 72 2F 67 72 6F 66 66 65 72 2E 73 68 0A 0A 23 20 43 6F 70 79 72 69 67 68 74 20 28 43 29 20 32 30 30 31 2C 32 30 30 32 2C 32 30 30 33 2C 32 30 30 34 20 46 72 65 65 20 53 6F 66 74 77 61 72 65 20 46 6F 75 6E 64 61 74 69 6F 6E 2C 20 49 6E 63 2E 0A 23 20 57 72 69 74 74 65 6E 20 62 79 20 42 65 72 6E 64 20 57 61 72 6B 65 6E 0A 0A 23 20 54 68 69 73 20 66 69 6C 65 20 69 73 20 70 61 72 74 20 6F 66 20 67 72 6F 66 66 20 76 65 72 73 69 6F 6E 20 31 2E 31 38 2E 31 2E 31 2E 0A 0A 23 20 67 72 6F 66 66 20 69 73 20 66 72 65 65 20 73 6F 66 74 77 61 72 65 3B 20 79 6F 75 20 63 61 6E 20 72 65 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6E 64 2F 6F 72 20 6D 6F 64 69 66 79 20 69 74 0A 23 20 75 6E 64 65 72 20 74 68 65 20 74 65 72 6D 73 20 6F 66 20 74 68 65 20 47 4E 55 20 47 65 6E 65 72 61 6C 20 50 75 62 6C 69 63 20 4C 69 63 65 6E 73 65 20 61 73 20 70 75 62 6C 69 73 68 65 64 20 62 79 0A 23 20 74 68 65 20 46 72 65 65 20 53 6F 66 74 77 61 72 65 20 46 6F 75 6E 64 61 74 69 6F 6E 3B 20 65 69 74 68 65 72 20 76 65 72 73 69 6F 6E 20 32 2C 20 6F 72 20 28 61 74 20 79 6F 75 72 20 6F 70 74 69 6F 6E 29 0A 23 20 61 6E 79 20 6C 61 74 65 72 20 76 65 72 73 69 6F 6E 2E 0A 0A 23 20 67 72 6F 66 66 20 69 73 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6E 20 74 68 65 20 68 6F 70 65 20 74 68 61 74 20 69 74 20 77 69 6C 6C 20 62 65 20 75 73 65 66 75 6C 2C 20 62 75 74 20 57 49 54 48 4F 55 54 0A 23 20 41 4E 59 20 57 41 52 52 41 4E 54 59 3B 20 77 69 74 68 6F 75 74 20 65 76 65 6E 20 74 68 65 20 69 6D 70 6C 69 65 64 20 77 61 72 72 61 6E 74 79 20 6F 66 20 4D 45 52 43 48 41 4E 54 41 42 49 4C 49 54 59 0A 23 20 6F 72 20 46 49 54 4E 45 53 53 20 46 4F 52 20 41 20 50 41 52 54 49 43 55 4C 41 52 20 50 55 52 50 4F 53 45 2E 20 20 53 65 65 20 74 68 65 20 47 4E 55 20 47 65 6E 65 72 61 6C 20 50 75 62 6C 69 63 0A 23 20 4C 69 63 65 6E 73 65 20 66 6F 72 20 6D 6F 72 65 20 64 65 74 61 69 6C 73 2E 0A 0A 23 20 59 6F 75 20 73 68 6F 75 6C 64 20 68 61 76 65 20 72 65 63 65 69 76 65 64 20 61 20 63 6F 70 79 20 6F 66 20 74 68 65 20 47 4E 55 20 47 65 6E 65 72 61 6C 20 50 75 62 6C 69 63 20 4C 69 63 65 6E 73 65 0A 23 20 61 6C 6F 6E 67 20 77 69 74 68 20 67 72 6F 66 66 3B 20 73 65 65 20 74 68 65 20 66 69 6C 65 73 20 43 4F 50 59 49 4E 47 20 61 6E 64 20 4C 49 43 45 4E 53 45 20 69 6E 20 74 68 65 20 74 6F 70 0A 23 20 64 69 72 65 63 74 6F 72 79 20 6F 66 20 74 68 65 20 67 72 6F 66 66 20 73 6F 75 72 63 65 2E 20 20 49 66 20 6E 6F 74 2C 20 77 72 69 74 65 20 74 6F 20 74 68 65 20 46 72 65 65 20 53 6F 66 74 77 61 72 65 0A 23 20 46 6F 75 6E 64 61 74 69 6F 6E 2C 20 35 39 20 54 65 6D 70 6C 65 20 50 6C 61 63 65 20 2D 20 53 75 69 74 65 20 33 33 30 2C 20 42 6F 73 74 6F 6E 2C 20 4D 41 20 30 32 31 31 31 2D 31 33 30 37 2C 20 55 53 41 2E 0A 0A 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 3D 27 67 72 6F 66 66 65 72 27 3B 0A 5F 50 52 4F 47 52 41 4D 5F 56 45 52 53 49 4F 4E 3D 27 30 2E 39 2E 31 31 27 3B 0A 5F 4C 41 53 54 5F 55 50 44 41 54 45 3D 27 31 35 20 4A 75 6E 65 20 32 30 30 34 27 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 44 65 74 65 72 6D 69 6E 65 20 74 68 65 20 73 68 65 6C 6C 20 75 6E 64 65 72 20 77 68 69 63 68 20 74 6F 20 72 75 6E 20 74 68 69 73 20 73 63 72 69 70 74 20 66 72 6F 6D 20 74 68 65 20 63 6F 6D 6D 61 6E 64 0A 23 20 6C 69 6E 65 20 61 72 67 75 6D 65 6E 74 73 20 6F 72 20 24 47 52 4F 46 46 5F 4F 50 54 3B 20 69 66 20 6E 6F 6E 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2C 20 6A 75 73 74 20 67 6F 20 6F 6E 20 77 69 74 68 0A 23 20 74 68 65 20 73 74 61 72 74 69 6E 67 20 73 68 65 6C 6C 2E 0A 0A 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 67 72 6F 66 66 65 72 5F 72 75 6E 7D 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 23 20 6F 6E 6C 79 20 72 65 61 63 68 65 64 20 64 75 72 69 6E 67 20 74 68 65 20 66 69 72 73 74 20 72 75 6E 20 6F 66 20 74 68 65 20 73 63 72 69 70 74 0A 0A 20 20 65 78 70 6F 72 74 20 5F 67 72 6F 66 66 65 72 5F 72 75 6E 3B 09 09 23 20 63 6F 75 6E 74 65 72 20 66 6F 72 20 74 68 65 20 72 75 6E 73 20 6F 66 20 67 72 6F 66 66 65 72 0A 20 20 5F 67 72 6F 66 66 65 72 5F 72 75 6E 3D 27 66 69 72 73 74 27 3B 0A 0A 20 20 65 78 70 6F 72 74 20 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 3B 0A 20 20 65 78 70 6F 72 74 20 5F 50 52 4F 47 52 41 4D 5F 56 45 52 53 49 4F 4E 3B 0A 20 20 65 78 70 6F 72 74 20 5F 4C 41 53 54 5F 55 50 44 41 54 45 3B 0A 0A 20 20 65 78 70 6F 72 74 20 47 52 4F 46 46 45 52 5F 4F 50 54 3B 09 09 23 20 6F 70 74 69 6F 6E 20 65 6E 76 69 72 6F 6E 6D 65 6E 74 20 66 6F 72 20 67 72 6F 66 66 65 72 0A 20 20 65 78 70 6F 72 74 20 5F 47 52 4F 46 46 45 52 5F 53 48 3B 09 09 23 20 66 69 6C 65 20 6E 61 6D 65 20 6F 66 20 74 68 69 73 20 73 68 65 6C 6C 20 73 63 72 69 70 74 0A 20 20 65 78 70 6F 72 74 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3B 09 23 20 6F 75 74 70 75 74 20 67 65 6E 65 72 61 74 65 64 2C 20 73 65 65 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 2E 2E 28 29 0A 0A 20 20 65 78 70 6F 72 74 20 5F 43 4F 4E 46 46 49 4C 45 53 3B 09 09 23 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 20 66 69 6C 65 73 0A 20 20 5F 43 4F 4E 46 46 49 4C 45 53 3D 22 2F 65 74 63 2F 67 72 6F 66 66 2F 67 72 6F 66 66 65 72 2E 63 6F 6E 66 20 24 7B 48 4F 4D 45 7D 2F 2E 67 72 6F 66 66 2F 67 72 6F 66 66 65 72 2E 63 6F 6E 66 22 3B 0A 0A 20 20 63 61 73 65 20 22 24 30 22 20 69 6E 0A 20 20 2A 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 2A 29 0A 20 20 20 20 5F 47 52 4F 46 46 45 52 5F 53 48 3D 22 24 30 22 3B 0A 20 20 20 20 23 20 77 61 73 3A 20 5F 47 52 4F 46 46 45 52 5F 53 48 3D 22 2F 75 73 72 2F 62 69 6E 2F 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 22 3B 0A 20 20 20 20 3B 3B 0A 20 20 2A 29 0A 20 20 20 20 65 63 68 6F 20 22 54 68 65 20 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 20 73 63 72 69 70 74 20 73 68 6F 75 6C 64 20 62 65 20 73 74 61 72 74 65 64 20 64 69 72 65 63 74 6C 79 2E 22 20 3E 26 32 0A 20 20 20 20 65 78 69 74 20 31 3B 0A 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 0A 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 20 20 23 20 5F 67 65 74 5F 6F 70 74 5F 73 68 65 6C 6C 20 28 22 24 40 22 29 0A 20 20 23 0A 20 20 23 20 44 65 74 65 72 6D 69 6E 65 20 77 68 65 74 68 65 72 20 60 2D 2D 73 68 65 6C 6C 27 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20 69 6E 20 24 47 52 4F 46 46 5F 4F 50 54 20 6F 72 20 69 6E 20 24 2A 3B 0A 20 20 23 20 69 66 20 73 6F 20 65 63 68 6F 20 69 74 73 20 61 72 67 75 6D 65 6E 74 2E 0A 20 20 23 0A 20 20 5F 67 65 74 5F 6F 70 74 5F 73 68 65 6C 6C 28 29 0A 20 20 7B 0A 20 20 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 20 20 6C 6F 63 61 6C 20 5F 73 68 3B 0A 20 20 20 20 63 61 73 65 20 22 20 24 7B 47 52 4F 46 46 45 52 5F 4F 50 54 7D 20 24 2A 22 20 69 6E 0A 20 20 20 20 20 20 2A 5C 20 2D 2D 73 68 65 6C 6C 5C 20 2A 7C 2A 5C 20 2D 2D 73 68 65 6C 6C 3D 2A 29 0A 20 20 20 20 20 20 20 20 28 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 7B 47 52 4F 46 46 45 52 5F 4F 50 54 7D 22 20 27 22 24 40 22 27 3B 0A 20 20 20 20 20 20 20 20 20 20 5F 73 68 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 31 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2D 2D 73 68 65 6C 6C 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 67 65 20 32 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 73 68 3D 22 24 32 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2D 2D 73 68 65 6C 6C 3D 3F 2A 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 75 70 20 74 6F 20 66 69 72 73 74 20 60 3D 27 20 63 68 61 72 61 63 74 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 73 68 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5B 5E 3D 5D 2A 3D 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 68 7D 22 3B 0A 20 20 20 20 20 20 20 20 29 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 7D 0A 0A 0A 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 20 20 23 20 5F 74 65 73 74 5F 6F 6E 5F 73 68 65 6C 6C 20 28 3C 6E 61 6D 65 3E 29 0A 20 20 23 0A 20 20 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 3C 6E 61 6D 65 3E 20 69 73 20 61 20 73 68 65 6C 6C 20 70 72 6F 67 72 61 6D 20 6F 66 20 42 6F 75 72 6E 65 20 74 79 70 65 20 28 50 4F 53 49 58 20 73 68 29 2E 0A 20 20 23 0A 20 20 5F 74 65 73 74 5F 6F 6E 5F 73 68 65 6C 6C 28 29 0A 20 20 7B 0A 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6C 65 20 30 20 7C 7C 20 74 65 73 74 20 5F 22 24 31 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 72 65 74 75 72 6E 20 31 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 23 20 64 6F 20 6E 6F 74 20 71 75 6F 74 65 20 24 31 20 74 6F 20 61 6C 6C 6F 77 20 61 72 67 75 6D 65 6E 74 73 0A 20 20 20 20 74 65 73 74 20 5F 22 24 28 24 31 20 2D 63 20 27 73 3D 6F 6B 3B 20 65 63 68 6F 20 2D 6E 20 22 24 73 22 27 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 29 22 5F 20 3D 20 5F 6F 6B 5F 3B 0A 20 20 7D 0A 0A 20 20 23 20 64 6F 20 74 68 65 20 73 68 65 6C 6C 20 64 65 74 65 72 6D 69 6E 61 74 69 6F 6E 20 66 72 6F 6D 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 61 6E 64 20 24 47 52 4F 46 46 45 52 5F 4F 50 54 0A 20 20 5F 73 68 65 6C 6C 3D 22 24 28 5F 67 65 74 5F 6F 70 74 5F 73 68 65 6C 6C 20 22 24 40 22 29 22 3B 0A 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 73 68 65 6C 6C 7D 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 20 20 23 20 6E 6F 6E 65 20 66 6F 75 6E 64 2C 20 73 6F 20 6C 6F 6F 6B 20 61 74 20 74 68 65 20 60 2D 2D 73 68 65 6C 6C 27 20 6C 69 6E 65 73 20 69 6E 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 20 66 69 6C 65 73 0A 20 20 20 20 65 78 70 6F 72 74 20 66 3B 0A 20 20 20 20 66 6F 72 20 66 20 69 6E 20 24 7B 5F 43 4F 4E 46 46 49 4C 45 53 7D 3B 20 64 6F 0A 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 66 20 24 66 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 61 6C 6C 3D 22 24 28 63 61 74 20 24 66 20 7C 20 73 65 64 20 2D 6E 20 2D 65 20 27 2F 5E 2D 2D 73 68 65 6C 6C 5B 3D 20 5D 20 2A 5C 28 5B 5E 20 5D 2A 5C 29 24 2F 73 2F 2F 5C 31 2F 70 27 29 22 0A 20 20 20 20 20 20 20 20 66 6F 72 20 73 20 69 6E 20 24 7B 5F 61 6C 6C 7D 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 5F 73 68 65 6C 6C 3D 24 73 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 75 6E 73 65 74 20 66 3B 0A 20 20 20 20 75 6E 73 65 74 20 73 3B 0A 20 20 20 20 75 6E 73 65 74 20 5F 61 6C 6C 3B 0A 20 20 66 69 3B 0A 0A 20 20 23 20 72 65 73 74 61 72 74 20 74 68 65 20 73 63 72 69 70 74 20 77 69 74 68 20 74 68 65 20 6C 61 73 74 20 66 6F 75 6E 64 20 24 5F 73 68 65 6C 6C 2C 20 69 66 20 69 74 20 69 73 20 61 20 73 68 65 6C 6C 0A 20 20 69 66 20 5F 74 65 73 74 5F 6F 6E 5F 73 68 65 6C 6C 20 22 24 7B 5F 73 68 65 6C 6C 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 5F 67 72 6F 66 66 65 72 5F 72 75 6E 3D 27 73 65 63 6F 6E 64 27 3B 0A 20 20 20 20 23 20 64 6F 20 6E 6F 74 20 71 75 6F 74 65 20 24 5F 73 68 65 6C 6C 20 74 6F 20 61 6C 6C 6F 77 20 61 72 67 75 6D 65 6E 74 73 0A 20 20 20 20 65 78 65 63 20 24 7B 5F 73 68 65 6C 6C 7D 20 22 24 7B 5F 47 52 4F 46 46 45 52 5F 53 48 7D 22 20 22 24 40 22 3B 0A 20 20 20 20 65 78 69 74 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 67 72 6F 66 66 65 72 5F 72 75 6E 3D 27 73 65 63 6F 6E 64 27 3B 0A 20 20 75 6E 73 65 74 20 5F 73 68 65 6C 6C 3B 0A 0A 66 69 3B 20 23 20 65 6E 64 20 6F 66 20 66 69 72 73 74 20 72 75 6E 0A 0A 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 67 72 6F 66 66 65 72 5F 72 75 6E 7D 22 5F 20 21 3D 20 5F 73 65 63 6F 6E 64 5F 3B 0A 74 68 65 6E 0A 20 20 65 63 68 6F 20 22 24 5F 67 72 6F 66 66 65 72 5F 72 75 6E 20 73 68 6F 75 6C 64 20 62 65 20 27 73 65 63 6F 6E 64 27 20 68 65 72 65 2E 22 20 3E 26 32 0A 20 20 65 78 69 74 20 31 0A 66 69 3B 0A 0A 75 6E 73 65 74 20 5F 67 72 6F 66 66 65 72 5F 72 75 6E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 69 61 67 6E 6F 73 74 69 63 20 6D 65 73 73 61 67 65 73 0A 23 0A 65 78 70 6F 72 74 20 5F 44 45 42 55 47 3B 0A 5F 44 45 42 55 47 3D 27 6E 6F 27 3B 09 09 09 23 20 64 69 73 61 62 6C 65 20 64 65 62 75 67 67 69 6E 67 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 0A 23 5F 44 45 42 55 47 3D 27 79 65 73 27 3B 09 09 09 23 20 65 6E 61 62 6C 65 20 64 65 62 75 67 67 69 6E 67 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 0A 0A 65 78 70 6F 72 74 20 5F 44 45 42 55 47 5F 4C 4D 3B 0A 5F 44 45 42 55 47 5F 4C 4D 3D 27 6E 6F 27 3B 09 09 09 23 20 64 69 73 61 62 6C 65 20 6C 61 6E 64 6D 61 72 6B 20 6D 65 73 73 61 67 65 73 0A 23 5F 44 45 42 55 47 5F 4C 4D 3D 27 79 65 73 27 3B 09 09 23 20 65 6E 61 62 6C 65 20 6C 61 6E 64 6D 61 72 6B 20 6D 65 73 73 61 67 65 73 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6E 76 69 72 6F 6E 6D 65 6E 74 20 56 61 72 69 61 62 6C 65 73 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 20 45 6E 76 69 72 6F 6E 6D 65 6E 74 20 76 61 72 69 61 62 6C 65 73 20 74 68 61 74 20 65 78 69 73 74 20 6F 6E 6C 79 20 66 6F 72 20 74 68 69 73 20 66 69 6C 65 20 73 74 61 72 74 20 77 69 74 68 20 61 6E 0A 23 20 75 6E 64 65 72 73 63 6F 72 65 20 6C 65 74 74 65 72 2E 20 20 47 6C 6F 62 61 6C 20 76 61 72 69 61 62 6C 65 73 20 74 6F 20 74 68 69 73 20 66 69 6C 65 20 61 72 65 20 77 72 69 74 74 65 6E 20 69 6E 0A 23 20 75 70 70 65 72 20 63 61 73 65 20 6C 65 74 74 65 72 73 2C 20 65 2E 67 2E 20 24 5F 47 4C 4F 42 41 4C 5F 56 41 52 49 41 42 4C 45 3B 20 74 65 6D 70 6F 72 61 72 79 20 76 61 72 69 61 62 6C 65 73 0A 23 20 73 74 61 72 74 20 77 69 74 68 20 61 6E 20 75 6E 64 65 72 6C 69 6E 65 20 61 6E 64 20 75 73 65 20 6F 6E 6C 79 20 6C 6F 77 65 72 20 63 61 73 65 20 6C 65 74 74 65 72 73 20 61 6E 64 0A 23 20 75 6E 64 65 72 6C 69 6E 65 73 2C 20 65 2E 67 2E 20 20 24 5F 6C 6F 63 61 6C 5F 76 61 72 69 61 62 6C 65 20 2E 0A 0A 23 20 20 20 5B 41 2D 5A 5D 2A 20 20 20 20 20 73 79 73 74 65 6D 20 76 61 72 69 61 62 6C 65 73 2C 20 20 20 20 20 20 65 2E 67 2E 20 24 4D 41 4E 50 41 54 48 0A 23 20 20 20 5F 5B 41 2D 5A 5F 5D 2A 20 20 20 67 6C 6F 62 61 6C 20 66 69 6C 65 20 76 61 72 69 61 62 6C 65 73 2C 20 65 2E 67 2E 20 24 5F 4D 41 4E 5F 50 41 54 48 0A 23 20 20 20 5F 5B 61 2D 7A 5F 5D 2A 20 20 20 74 65 6D 70 6F 72 61 72 79 20 76 61 72 69 61 62 6C 65 73 2C 20 20 20 65 2E 67 2E 20 24 5F 6D 61 6E 70 61 74 68 0A 0A 23 20 44 75 65 20 74 6F 20 69 6E 63 6F 6D 70 61 74 69 62 69 6C 69 74 69 65 73 20 6F 66 20 74 68 65 20 60 61 73 68 27 20 73 68 65 6C 6C 2C 20 74 68 65 20 6E 61 6D 65 20 6F 66 20 6C 6F 6F 70 0A 23 20 76 61 72 69 61 62 6C 65 73 20 69 6E 20 60 66 6F 72 27 20 6D 75 73 74 20 62 65 20 73 69 6E 67 6C 65 20 63 68 61 72 61 63 74 65 72 0A 23 20 20 20 5B 61 2D 7A 5D 20 20 20 20 20 20 6C 6F 63 61 6C 20 6C 6F 6F 70 20 76 61 72 69 61 62 6C 65 73 2C 20 20 20 65 2E 67 2E 20 24 69 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 61 64 2D 6F 6E 6C 79 20 76 61 72 69 61 62 6C 65 73 20 28 67 6C 6F 62 61 6C 20 74 6F 20 74 68 69 73 20 66 69 6C 65 29 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 20 63 68 61 72 61 63 74 65 72 73 0A 0A 65 78 70 6F 72 74 20 5F 42 51 55 4F 54 45 3B 0A 65 78 70 6F 72 74 20 5F 42 53 4C 41 53 48 3B 0A 65 78 70 6F 72 74 20 5F 44 51 55 4F 54 45 3B 0A 65 78 70 6F 72 74 20 5F 4E 45 57 4C 49 4E 45 3B 0A 65 78 70 6F 72 74 20 5F 4C 42 52 41 43 4B 3B 0A 65 78 70 6F 72 74 20 5F 4C 50 41 52 3B 0A 65 78 70 6F 72 74 20 5F 52 42 52 41 43 4B 3B 0A 65 78 70 6F 72 74 20 5F 52 50 41 52 3B 0A 65 78 70 6F 72 74 20 5F 53 50 41 43 45 3B 0A 65 78 70 6F 72 74 20 5F 53 51 55 4F 54 45 3B 0A 65 78 70 6F 72 74 20 5F 54 41 42 3B 0A 0A 5F 42 51 55 4F 54 45 3D 27 60 27 3B 0A 5F 42 53 4C 41 53 48 3D 27 5C 27 3B 0A 5F 44 51 55 4F 54 45 3D 27 22 27 3B 0A 5F 4E 45 57 4C 49 4E 45 3D 27 0A 27 3B 0A 5F 4C 42 52 41 43 4B 3D 27 5B 27 3B 0A 5F 4C 50 41 52 3D 27 28 27 3B 0A 5F 52 42 52 41 43 4B 3D 27 5D 27 3B 0A 5F 52 50 41 52 3D 27 29 27 3B 0A 5F 53 50 41 43 45 3D 27 20 27 3B 0A 5F 53 51 55 4F 54 45 3D 22 27 22 3B 0A 5F 54 41 42 3D 27 09 27 3B 0A 0A 23 20 66 75 6E 63 74 69 6F 6E 20 72 65 74 75 72 6E 20 76 61 6C 75 65 73 3B 20 60 30 27 20 6D 65 61 6E 73 20 6F 6B 3B 20 6F 74 68 65 72 20 76 61 6C 75 65 73 20 61 72 65 20 65 72 72 6F 72 20 63 6F 64 65 73 0A 65 78 70 6F 72 74 20 5F 41 4C 4C 5F 45 58 49 54 3B 0A 65 78 70 6F 72 74 20 5F 42 41 44 3B 0A 65 78 70 6F 72 74 20 5F 45 52 52 4F 52 3B 0A 65 78 70 6F 72 74 20 5F 47 4F 4F 44 3B 0A 65 78 70 6F 72 74 20 5F 4E 4F 3B 0A 65 78 70 6F 72 74 20 5F 4F 4B 3B 0A 65 78 70 6F 72 74 20 5F 59 45 53 3B 0A 0A 5F 47 4F 4F 44 3D 27 30 27 3B 09 09 09 23 20 72 65 74 75 72 6E 20 6F 6B 0A 5F 42 41 44 3D 27 31 27 3B 09 09 09 23 20 72 65 74 75 72 6E 20 6E 65 67 61 74 69 76 65 6C 79 2C 20 65 72 72 6F 72 20 63 6F 64 65 20 60 31 27 0A 5F 45 52 52 4F 52 3D 27 37 27 3B 09 09 09 23 20 66 6F 72 20 73 79 6E 74 61 78 20 65 72 72 6F 72 73 3B 20 6E 6F 20 60 2D 31 27 20 69 6E 20 60 61 73 68 27 0A 0A 5F 41 4C 4C 5F 45 58 49 54 3D 22 24 7B 5F 47 4F 4F 44 7D 20 24 7B 5F 42 41 44 7D 20 24 7B 5F 45 52 52 4F 52 7D 22 3B 20 23 20 61 6C 6C 20 65 78 69 74 20 63 6F 64 65 73 20 28 66 6F 72 20 60 74 72 61 70 5F 73 65 74 27 29 0A 0A 5F 4E 4F 3D 22 24 7B 5F 42 41 44 7D 22 3B 0A 5F 59 45 53 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 5F 4F 4B 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 0A 23 20 71 75 61 73 69 2D 66 75 6E 63 74 69 6F 6E 73 2C 20 63 61 6C 6C 20 77 69 74 68 20 60 65 76 61 6C 27 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 6F 6B 3B 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 67 6F 6F 64 3B 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 62 61 64 3B 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 79 65 73 3B 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 6E 6F 3B 0A 65 78 70 6F 72 74 20 72 65 74 75 72 6E 5F 65 72 72 6F 72 3B 0A 72 65 74 75 72 6E 5F 6F 6B 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 4F 4B 7D 22 3B 0A 72 65 74 75 72 6E 5F 67 6F 6F 64 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 72 65 74 75 72 6E 5F 62 61 64 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 42 41 44 7D 22 3B 0A 72 65 74 75 72 6E 5F 79 65 73 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 59 45 53 7D 22 3B 0A 72 65 74 75 72 6E 5F 6E 6F 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 4E 4F 7D 22 3B 0A 72 65 74 75 72 6E 5F 65 72 72 6F 72 3D 22 66 75 6E 63 5F 70 6F 70 3B 20 72 65 74 75 72 6E 20 24 7B 5F 45 52 52 4F 52 7D 22 3B 0A 0A 0A 65 78 70 6F 72 74 20 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3B 0A 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3D 27 78 2C 70 73 2C 74 74 79 27 3B 0A 65 78 70 6F 72 74 20 5F 44 45 46 41 55 4C 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3B 0A 5F 44 45 46 41 55 4C 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3D 27 37 35 27 3B 0A 0A 65 78 70 6F 72 74 20 5F 44 45 46 41 55 4C 54 5F 54 54 59 5F 44 45 56 49 43 45 3B 0A 5F 44 45 46 41 55 4C 54 5F 54 54 59 5F 44 45 56 49 43 45 3D 27 6C 61 74 69 6E 31 27 3B 0A 0A 23 20 5F 56 49 45 57 45 52 5F 2A 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 73 20 66 6F 72 20 64 69 66 66 65 72 65 6E 74 20 6D 6F 64 65 73 20 28 6F 6E 6C 79 20 58 20 69 73 20 6E 65 63 65 73 73 61 72 79 29 0A 23 20 5F 56 49 45 57 45 52 5F 2A 20 61 20 63 6F 6D 6D 61 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 73 20 28 77 69 74 68 20 6F 70 74 69 6F 6E 73 29 0A 65 78 70 6F 72 74 20 5F 56 49 45 57 45 52 5F 44 56 49 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 64 76 69 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 56 49 45 57 45 52 5F 50 53 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 73 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 56 49 45 57 45 52 5F 48 54 4D 4C 5F 58 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 68 74 6D 6C 20 6D 6F 64 65 20 69 6E 20 58 0A 65 78 70 6F 72 74 20 5F 56 49 45 57 45 52 5F 48 54 4D 4C 5F 54 54 59 3B 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 68 74 6D 6C 20 6D 6F 64 65 20 69 6E 20 74 74 79 0A 5F 56 49 45 57 45 52 5F 44 56 49 3D 27 78 64 76 69 2C 64 76 69 6C 78 27 3B 0A 5F 56 49 45 57 45 52 5F 50 44 46 3D 27 78 70 64 66 2C 61 63 72 6F 72 65 61 64 27 3B 0A 5F 56 49 45 57 45 52 5F 50 53 3D 27 67 76 2C 67 68 6F 73 74 76 69 65 77 2C 67 73 5F 78 31 31 2C 67 73 27 3B 0A 5F 56 49 45 57 45 52 5F 48 54 4D 4C 3D 27 6B 6F 6E 71 75 65 72 6F 72 2C 6D 6F 7A 69 6C 6C 61 2C 6E 65 74 73 63 61 70 65 2C 6F 70 65 72 61 2C 61 6D 61 79 61 2C 61 72 65 6E 61 2C 6C 79 6E 78 27 3B 0A 5F 56 49 45 57 45 52 5F 58 3D 27 67 78 64 69 74 76 69 65 77 2C 78 64 69 74 76 69 65 77 27 3B 0A 0A 23 20 53 65 61 72 63 68 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 20 69 6E 20 73 74 61 6E 64 61 72 64 20 73 65 63 74 69 6F 6E 73 20 60 31 27 20 74 6F 20 60 38 27 2C 20 61 6E 64 20 69 6E 20 74 68 65 0A 23 20 74 72 61 64 69 74 69 6F 6E 61 6C 20 73 65 63 74 69 6F 6E 73 20 60 39 27 2C 20 60 6E 27 2C 20 61 6E 64 20 60 6F 27 2E 20 20 4F 6E 20 6D 61 6E 79 20 73 79 73 74 65 6D 73 2C 20 74 68 65 72 65 0A 23 20 65 78 69 73 74 20 65 76 65 6E 20 6D 6F 72 65 20 73 65 63 74 69 6F 6E 73 2C 20 6D 6F 73 74 6C 79 20 63 6F 6E 74 61 69 6E 69 6E 67 20 61 20 73 65 74 20 6F 66 20 6D 61 6E 20 70 61 67 65 73 0A 23 20 73 70 65 63 69 61 6C 20 74 6F 20 61 20 73 70 65 63 69 66 69 63 20 70 72 6F 67 72 61 6D 20 70 61 63 6B 61 67 65 2E 20 20 54 68 65 73 65 20 61 72 65 6E 27 74 20 73 65 61 72 63 68 65 64 20 66 6F 72 0A 23 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 2C 20 62 75 74 20 6D 75 73 74 20 62 65 20 73 70 65 63 69 66 69 65 64 20 6F 6E 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2E 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 41 55 54 4F 5F 53 45 43 3B 0A 5F 4D 41 4E 5F 41 55 54 4F 5F 53 45 43 3D 22 27 31 27 20 27 32 27 20 27 33 27 20 27 34 27 20 27 35 27 20 27 36 27 20 27 37 27 20 27 38 27 20 27 39 27 20 27 6E 27 20 27 6F 27 22 0A 0A 65 78 70 6F 72 74 20 5F 50 52 4F 43 45 53 53 5F 49 44 3B 09 09 23 20 66 6F 72 20 73 68 75 74 74 69 6E 67 20 64 6F 77 6E 20 74 68 65 20 70 72 6F 67 72 61 6D 0A 5F 50 52 4F 43 45 53 53 5F 49 44 3D 22 24 24 22 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 6F 70 74 69 6F 6E 73 20 6F 66 20 74 68 65 20 69 6E 76 6F 6C 76 65 64 20 70 72 6F 67 72 61 6D 73 0A 23 0A 23 20 54 68 65 20 6E 61 6D 69 6E 67 20 73 63 68 65 6D 65 20 66 6F 72 20 74 68 65 20 6F 70 74 69 6F 6E 73 20 65 6E 76 69 72 6F 6E 6D 65 6E 74 20 6E 61 6D 65 73 20 69 73 0A 23 20 24 5F 4F 50 54 53 5F 3C 70 72 6F 67 3E 5F 3C 6C 65 6E 67 74 68 3E 5B 5F 3C 61 72 67 73 70 65 63 3E 5D 0A 23 0A 23 20 3C 70 72 6F 67 3E 3A 20 20 20 20 70 72 6F 67 72 61 6D 20 6E 61 6D 65 20 47 52 4F 46 46 45 52 2C 20 47 52 4F 46 46 2C 20 6F 72 20 43 4D 44 4C 49 4E 45 20 28 66 6F 72 20 61 6C 6C 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 6F 70 74 69 6F 6E 73 29 0A 23 20 3C 6C 65 6E 67 74 68 3E 3A 20 20 4C 4F 4E 47 20 28 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 29 20 6F 72 20 53 48 4F 52 54 20 28 73 69 6E 67 6C 65 20 63 68 61 72 61 63 74 65 72 20 6F 70 74 69 6F 6E 73 29 0A 23 20 3C 61 72 67 73 70 65 63 3E 3A 20 41 52 47 20 66 6F 72 20 6F 70 74 69 6F 6E 73 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 2C 20 4E 41 20 66 6F 72 20 6E 6F 20 61 72 67 75 6D 65 6E 74 3B 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 77 69 74 68 6F 75 74 20 5F 3C 61 72 67 73 70 65 63 3E 20 62 6F 74 68 20 74 68 65 20 6F 6E 65 73 20 77 69 74 68 20 61 6E 64 20 77 69 74 68 6F 75 74 20 61 72 67 2E 0A 23 0A 23 20 45 61 63 68 20 6F 70 74 69 6F 6E 20 74 68 61 74 20 74 61 6B 65 73 20 61 6E 20 61 72 67 75 6D 65 6E 74 20 6D 75 73 74 20 62 65 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 0A 23 20 74 72 61 69 6C 69 6E 67 20 3A 20 28 63 6F 6C 6F 6E 29 2E 0A 0A 23 20 65 78 70 6F 72 74 73 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 53 48 4F 52 54 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 53 48 4F 52 54 5F 41 52 47 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 4C 4F 4E 47 5F 4E 41 3B 0A 65 78 70 6F 72 74 20 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 4C 4F 4E 47 5F 41 52 47 3B 0A 0A 23 23 23 23 23 23 20 67 72 6F 66 66 65 72 20 6E 61 74 69 76 65 20 6F 70 74 69 6F 6E 73 0A 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 4E 41 3D 22 27 68 27 20 27 51 27 20 27 76 27 20 27 56 27 20 27 58 27 20 27 5A 27 22 3B 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 41 52 47 3D 22 27 54 27 22 3B 0A 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 4E 41 3D 22 27 61 75 74 6F 27 20 27 64 65 62 75 67 27 20 27 64 65 66 61 75 6C 74 27 20 27 64 76 69 27 20 5C 0A 27 67 72 6F 66 66 27 20 27 68 65 6C 70 27 20 27 69 6E 74 65 72 6D 65 64 69 61 74 65 2D 6F 75 74 70 75 74 27 20 27 68 74 6D 6C 27 20 27 6D 61 6E 27 20 5C 0A 27 6E 6F 2D 6C 6F 63 61 74 69 6F 6E 27 20 27 6E 6F 2D 6D 61 6E 27 20 27 70 64 66 27 20 27 70 73 27 20 27 72 76 27 20 27 73 6F 75 72 63 65 27 20 27 74 65 78 74 27 20 27 74 65 78 74 2D 64 65 76 69 63 65 27 20 5C 0A 27 74 69 74 6C 65 27 20 27 74 74 79 27 20 27 74 74 79 2D 64 65 76 69 63 65 27 20 27 76 65 72 73 69 6F 6E 27 20 27 77 68 61 74 69 73 27 20 27 77 68 65 72 65 27 20 27 77 77 77 27 20 27 78 27 20 27 58 27 22 3B 0A 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 41 52 47 3D 22 5C 0A 27 61 70 72 6F 70 6F 73 27 20 27 61 70 72 6F 70 6F 73 2D 64 61 74 61 27 20 27 61 70 72 6F 70 6F 73 2D 64 65 76 65 6C 27 20 27 61 70 72 6F 70 6F 73 2D 70 72 6F 67 73 27 20 5C 0A 27 64 65 66 61 75 6C 74 2D 6D 6F 64 65 73 27 20 27 64 76 69 2D 76 69 65 77 65 72 27 20 27 65 78 74 65 6E 73 69 6F 6E 27 20 27 66 67 27 20 27 66 6E 27 20 27 66 6F 6E 74 27 20 5C 0A 27 66 6F 72 65 67 72 6F 75 6E 64 27 20 27 68 74 6D 6C 2D 76 69 65 77 65 72 27 20 27 6D 6F 64 65 27 20 27 70 64 66 2D 76 69 65 77 65 72 27 20 27 70 73 2D 76 69 65 77 65 72 27 20 27 73 68 65 6C 6C 27 20 5C 0A 27 74 74 79 2D 76 69 65 77 65 72 27 20 27 77 77 77 2D 76 69 65 77 65 72 27 20 27 78 2D 76 69 65 77 65 72 27 20 27 58 2D 76 69 65 77 65 72 27 22 3B 0A 0A 23 23 23 23 23 20 67 72 6F 66 66 65 72 20 6F 70 74 69 6F 6E 73 20 69 6E 68 65 72 65 74 65 64 20 66 72 6F 6D 20 67 72 6F 66 66 0A 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 4E 41 3D 22 27 61 27 20 27 62 27 20 27 63 27 20 27 43 27 20 27 65 27 20 27 45 27 20 27 67 27 20 27 47 27 20 27 69 27 20 27 6C 27 20 27 4E 27 20 27 70 27 20 5C 0A 27 52 27 20 27 73 27 20 27 53 27 20 27 74 27 20 27 55 27 20 27 56 27 20 27 7A 27 22 3B 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 41 52 47 3D 22 27 64 27 20 27 66 27 20 27 46 27 20 27 49 27 20 27 4C 27 20 27 6D 27 20 27 4D 27 20 27 6E 27 20 27 6F 27 20 27 50 27 20 27 72 27 20 5C 0A 27 77 27 20 27 57 27 22 3B 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 4E 41 3D 22 27 73 6F 75 72 63 65 27 22 3B 0A 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 41 52 47 3D 22 27 64 65 76 69 63 65 27 20 27 6D 61 63 72 6F 2D 66 69 6C 65 27 22 3B 0A 0A 23 23 23 23 23 20 67 72 6F 66 66 65 72 20 6F 70 74 69 6F 6E 73 20 69 6E 68 65 72 65 74 65 64 20 66 72 6F 6D 20 74 68 65 20 58 20 57 69 6E 64 6F 77 20 74 6F 6F 6C 6B 69 74 0A 0A 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 4E 41 3D 22 22 3B 0A 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 41 52 47 3D 22 22 3B 0A 0A 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 4E 41 3D 22 27 69 63 6F 6E 69 63 27 20 27 72 76 27 22 3B 0A 0A 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 41 52 47 3D 22 27 62 61 63 6B 67 72 6F 75 6E 64 27 20 27 62 64 27 20 27 62 67 27 20 27 62 6F 72 64 65 72 63 6F 6C 6F 72 27 20 27 62 6F 72 64 65 72 77 69 64 74 68 27 20 5C 0A 27 62 77 27 20 27 64 69 73 70 6C 61 79 27 20 27 66 67 27 20 27 66 6E 27 20 27 66 6F 6E 74 27 20 27 66 6F 72 65 67 72 6F 75 6E 64 27 20 27 66 74 27 2C 20 27 67 65 6F 6D 65 74 72 79 27 0A 27 72 65 73 6F 6C 75 74 69 6F 6E 27 20 27 74 69 74 6C 65 27 20 27 78 72 6D 27 22 3B 0A 0A 23 23 23 23 23 23 20 67 72 6F 66 66 65 72 20 6F 70 74 69 6F 6E 73 20 69 6E 68 65 72 69 74 65 64 20 66 72 6F 6D 20 6D 61 6E 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 4E 41 3D 22 22 3B 0A 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 41 52 47 3D 22 22 3B 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 4E 41 3D 22 27 61 6C 6C 27 20 27 61 73 63 69 69 27 20 27 63 61 74 6D 61 6E 27 20 27 64 65 62 75 67 27 20 27 64 69 74 72 6F 66 66 27 20 27 68 65 6C 70 27 20 5C 0A 27 6C 6F 63 61 6C 2D 66 69 6C 65 27 20 27 6C 6F 63 61 74 69 6F 6E 27 20 27 70 61 67 65 72 27 20 27 74 72 6F 66 66 27 20 27 75 70 64 61 74 65 27 20 27 76 65 72 73 69 6F 6E 27 20 5C 0A 27 77 68 61 74 69 73 27 20 27 77 68 65 72 65 27 22 3B 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 41 52 47 3D 22 27 65 78 74 65 6E 73 69 6F 6E 27 20 27 6C 6F 63 61 6C 65 27 20 27 6D 61 6E 70 61 74 68 27 20 5C 0A 27 70 61 67 65 72 27 20 27 70 72 65 70 72 6F 63 65 73 73 6F 72 27 20 27 70 72 6F 6D 70 74 27 20 27 73 65 63 74 69 6F 6E 73 27 20 27 73 79 73 74 65 6D 73 27 20 27 74 72 6F 66 66 2D 64 65 76 69 63 65 27 22 3B 0A 0A 23 23 23 23 23 23 20 61 64 64 69 74 69 6F 6E 61 6C 20 6F 70 74 69 6F 6E 73 20 66 6F 72 20 70 61 72 73 69 6E 67 20 24 4D 41 4E 4F 50 54 20 6F 6E 6C 79 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 53 48 4F 52 54 5F 4E 41 3D 22 27 37 27 20 27 61 27 20 27 63 27 20 27 64 27 20 27 44 27 20 27 66 27 20 27 68 27 20 27 6B 27 20 27 6C 27 20 27 74 27 20 27 75 27 20 5C 0A 27 56 27 20 27 77 27 20 27 5A 27 22 3B 0A 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 53 48 4F 52 54 5F 41 52 47 3D 22 27 65 27 20 27 4C 27 20 27 6D 27 20 27 4D 27 20 27 70 27 20 27 50 27 20 27 72 27 20 27 53 27 20 27 54 27 22 3B 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 4C 4F 4E 47 5F 4E 41 3D 22 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 4E 41 7D 20 5C 0A 27 61 70 72 6F 70 6F 73 27 20 27 64 65 62 75 67 27 20 27 64 65 66 61 75 6C 74 27 20 27 68 74 6D 6C 27 20 27 69 67 6E 6F 72 65 2D 63 61 73 65 27 20 27 6C 6F 63 61 74 69 6F 6E 2D 63 61 74 27 20 5C 0A 27 6D 61 74 63 68 2D 63 61 73 65 27 20 27 74 72 6F 66 66 27 20 27 75 70 64 61 74 65 27 20 27 76 65 72 73 69 6F 6E 27 20 27 77 68 65 72 65 2D 63 61 74 27 22 3B 0A 0A 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 4C 4F 4E 47 5F 41 52 47 3D 22 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 4E 41 7D 20 5C 0A 27 63 6F 6E 66 69 67 5F 66 69 6C 65 27 20 27 65 6E 63 6F 64 69 6E 67 27 20 27 6C 6F 63 61 6C 65 27 22 3B 0A 0A 23 23 23 23 23 23 20 63 6F 6C 6C 65 63 74 69 6F 6E 73 20 6F 66 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 6F 70 74 69 6F 6E 73 0A 0A 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 53 48 4F 52 54 5F 4E 41 3D 22 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 4E 41 7D 5C 0A 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 4E 41 7D 20 24 7B 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 4E 41 7D 20 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 4E 41 7D 22 3B 0A 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 53 48 4F 52 54 5F 41 52 47 3D 22 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 53 48 4F 52 54 5F 41 52 47 7D 20 5C 0A 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 41 52 47 7D 20 24 7B 5F 4F 50 54 53 5F 58 5F 53 48 4F 52 54 5F 41 52 47 7D 20 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 53 48 4F 52 54 5F 41 52 47 7D 22 3B 0A 0A 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 4C 4F 4E 47 5F 4E 41 3D 22 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 4E 41 7D 20 5C 0A 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 4E 41 7D 20 24 7B 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 4E 41 7D 20 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 4E 41 7D 22 3B 0A 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 5F 4C 4F 4E 47 5F 41 52 47 3D 22 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 45 52 5F 4C 4F 4E 47 5F 41 52 47 7D 20 5C 0A 24 7B 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 4C 4F 4E 47 5F 41 52 47 7D 20 24 7B 5F 4F 50 54 53 5F 4D 41 4E 5F 4C 4F 4E 47 5F 41 52 47 7D 20 24 7B 5F 4F 50 54 53 5F 58 5F 4C 4F 4E 47 5F 41 52 47 7D 22 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 61 64 2D 77 72 69 74 65 20 76 61 72 69 61 62 6C 65 73 20 28 67 6C 6F 62 61 6C 20 74 6F 20 74 68 69 73 20 66 69 6C 65 29 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 65 78 70 6F 72 74 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 3B 09 09 23 20 54 72 61 6E 73 70 2E 20 6F 70 74 69 6F 6E 73 20 66 6F 72 20 67 72 6F 66 66 20 28 60 65 76 61 6C 27 29 2E 0A 65 78 70 6F 72 74 20 5F 41 44 44 4F 50 54 53 5F 50 4F 53 54 3B 09 09 23 20 54 72 61 6E 73 70 2E 20 6F 70 74 69 6F 6E 73 20 70 6F 73 74 70 72 6F 63 20 28 60 65 76 61 6C 27 29 2E 0A 65 78 70 6F 72 74 20 5F 41 44 44 4F 50 54 53 5F 58 3B 09 09 23 20 54 72 61 6E 73 70 2E 20 6F 70 74 69 6F 6E 73 20 58 20 70 6F 73 74 70 72 6F 63 20 28 60 65 76 61 6C 27 29 2E 0A 65 78 70 6F 72 74 20 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3B 09 09 23 20 53 65 74 20 64 65 66 61 75 6C 74 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3B 09 09 23 20 44 69 73 70 6C 61 79 20 6D 6F 64 65 2E 0A 65 78 70 6F 72 74 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3B 09 09 23 20 56 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 74 6F 20 62 65 20 75 73 65 64 20 66 6F 72 20 64 69 73 70 6C 61 79 2E 0A 65 78 70 6F 72 74 20 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 3B 09 09 23 20 58 20 72 65 73 6F 75 72 63 65 73 20 66 6F 72 20 74 68 65 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 2E 0A 65 78 70 6F 72 74 20 5F 46 49 4C 45 41 52 47 53 3B 09 09 23 20 53 74 6F 72 65 73 20 66 69 6C 65 73 70 65 63 20 70 61 72 61 6D 65 74 65 72 73 2E 0A 65 78 70 6F 72 74 20 5F 46 55 4E 43 5F 53 54 41 43 4B 3B 09 09 23 20 53 74 6F 72 65 20 64 65 62 75 67 67 69 6E 67 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 2E 0A 65 78 70 6F 72 74 20 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 3B 09 23 20 50 72 6F 63 65 73 73 65 64 20 66 69 6C 65 20 6E 61 6D 65 73 2E 0A 23 20 5F 48 41 53 5F 2A 20 66 72 6F 6D 20 61 76 61 69 6C 61 62 69 6C 69 74 79 20 74 65 73 74 73 0A 65 78 70 6F 72 74 20 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 3B 09 23 20 60 79 65 73 27 20 69 66 20 63 6F 6D 70 72 65 73 73 69 6F 6E 20 69 73 20 61 76 61 69 6C 61 62 6C 65 0A 65 78 70 6F 72 74 20 5F 48 41 53 5F 4F 50 54 53 5F 47 4E 55 3B 09 09 23 20 60 79 65 73 27 20 69 66 20 47 4E 55 20 60 67 65 74 6F 70 74 27 20 69 73 20 61 76 61 69 6C 61 62 6C 65 0A 65 78 70 6F 72 74 20 5F 48 41 53 5F 4F 50 54 53 5F 50 4F 53 49 58 3B 09 09 23 20 60 79 65 73 27 20 69 66 20 50 4F 53 49 58 20 60 67 65 74 6F 70 74 73 27 20 69 73 20 61 76 61 69 6C 61 62 6C 65 0A 23 20 5F 4D 41 4E 5F 2A 20 66 69 6E 61 6C 6C 79 20 75 73 65 64 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 20 6F 66 20 6D 61 6E 20 73 65 61 72 63 68 69 6E 67 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 41 4C 4C 3B 09 09 23 20 73 65 61 72 63 68 20 61 6C 6C 20 6D 61 6E 20 70 61 67 65 73 20 70 65 72 20 66 69 6C 65 73 70 65 63 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3B 09 09 23 20 65 6E 61 62 6C 65 20 73 65 61 72 63 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 45 58 54 3B 09 09 23 20 65 78 74 65 6E 73 69 6F 6E 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 46 4F 52 43 45 3B 09 09 23 20 66 6F 72 63 65 20 66 69 6C 65 20 70 61 72 61 6D 65 74 65 72 20 74 6F 20 62 65 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 3B 09 09 23 20 73 65 74 75 70 20 6D 61 6E 20 76 61 72 69 61 62 6C 65 73 20 6F 6E 6C 79 20 6F 6E 63 65 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 4C 41 4E 47 3B 09 09 23 20 6C 61 6E 67 75 61 67 65 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 4C 41 4E 47 5F 44 4F 4E 45 3B 09 09 23 20 6C 61 6E 67 75 61 67 65 20 64 69 72 73 20 61 64 64 65 64 20 74 6F 20 6D 61 6E 20 70 61 74 68 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 50 41 54 48 3B 09 09 23 20 73 65 61 72 63 68 20 70 61 74 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 53 45 43 3B 09 09 23 20 73 65 63 74 69 6F 6E 73 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 3B 20 73 65 70 2E 20 60 3A 27 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 53 45 43 5F 44 4F 4E 45 3B 09 09 23 20 73 65 63 74 69 6F 6E 73 20 61 64 64 65 64 20 74 6F 20 6D 61 6E 20 70 61 74 68 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 53 59 53 3B 09 09 23 20 73 79 73 74 65 6D 20 6E 61 6D 65 73 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 3B 20 73 65 70 2E 20 60 2C 27 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 5F 53 59 53 3B 09 09 23 20 73 79 73 74 65 6D 20 6E 61 6D 65 73 20 61 64 64 65 64 20 74 6F 20 6D 61 6E 20 70 61 74 68 0A 23 20 5F 4D 41 4E 4F 50 54 5F 2A 20 61 73 20 70 61 72 73 65 64 20 66 72 6F 6D 20 24 4D 41 4E 4F 50 54 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 41 4C 4C 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 61 6C 6C 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 45 58 54 45 4E 53 49 4F 4E 3B 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 65 78 74 65 6E 73 69 6F 6E 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 4C 41 4E 47 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 6C 6F 63 61 6C 65 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 50 41 54 48 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 6D 61 6E 70 61 74 68 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 50 41 47 45 52 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 70 61 67 65 72 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 53 45 43 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 73 65 63 74 69 6F 6E 73 0A 65 78 70 6F 72 74 20 5F 4D 41 4E 4F 50 54 5F 53 59 53 3B 09 09 23 20 24 4D 41 4E 4F 50 54 20 2D 2D 73 79 73 74 65 6D 73 0A 23 20 5F 4F 50 54 5F 2A 20 61 73 20 70 61 72 73 65 64 20 66 72 6F 6D 20 67 72 6F 66 66 65 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 41 4C 4C 3B 09 09 23 20 64 69 73 70 6C 61 79 20 61 6C 6C 20 73 75 69 74 61 62 6C 65 20 6D 61 6E 20 70 61 67 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 3B 09 09 23 20 63 61 6C 6C 20 60 61 70 72 6F 70 6F 73 27 20 70 72 6F 67 72 61 6D 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 41 54 41 3B 09 23 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 6D 61 6E 20 73 65 63 74 69 6F 6E 73 20 34 2C 20 35 2C 20 37 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 45 56 45 4C 3B 09 23 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 6D 61 6E 20 73 65 63 74 69 6F 6E 73 20 32 2C 20 33 2C 20 39 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 50 52 4F 47 53 3B 09 23 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 6D 61 6E 20 73 65 63 74 69 6F 6E 73 20 31 2C 20 36 2C 20 38 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 42 44 3B 09 09 09 23 20 73 65 74 20 62 6F 72 64 65 72 20 63 6F 6C 6F 72 20 69 6E 20 73 6F 6D 65 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 42 47 3B 09 09 09 23 20 73 65 74 20 62 61 63 6B 67 72 6F 75 6E 64 20 63 6F 6C 6F 72 20 69 6E 20 73 6F 6D 65 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 42 57 3B 09 09 09 23 20 73 65 74 20 62 6F 72 64 65 72 20 77 69 64 74 68 20 69 6E 20 73 6F 6D 65 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 44 45 42 55 47 3B 09 09 23 20 70 72 69 6E 74 20 64 65 62 75 67 67 69 6E 67 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 6F 6E 20 73 74 64 65 72 72 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3B 09 23 20 60 2C 27 2D 6C 69 73 74 20 6F 66 20 6D 6F 64 65 73 20 77 68 65 6E 20 6E 6F 20 6D 6F 64 65 20 67 69 76 65 6E 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 44 45 56 49 43 45 3B 09 09 23 20 64 65 76 69 63 65 20 6F 70 74 69 6F 6E 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 44 49 53 50 4C 41 59 3B 09 09 23 20 73 65 74 20 58 20 64 69 73 70 6C 61 79 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 46 47 3B 09 09 09 23 20 73 65 74 20 66 6F 72 65 67 72 6F 75 6E 64 20 63 6F 6C 6F 72 20 69 6E 20 73 6F 6D 65 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 46 4E 3B 09 09 09 23 20 73 65 74 20 66 6F 6E 74 20 69 6E 20 73 6F 6D 65 20 6D 6F 64 65 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 47 45 4F 4D 45 54 52 59 3B 09 09 23 20 73 65 74 20 73 69 7A 65 20 61 6E 64 20 70 6F 73 69 74 69 6F 6E 20 6F 66 20 76 69 65 77 65 72 20 69 6E 20 58 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 49 43 4F 4E 49 43 3B 09 09 23 20 2D 69 63 6F 6E 69 63 20 6F 70 74 69 6F 6E 20 66 6F 72 20 58 20 76 69 65 77 65 72 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 4C 41 4E 47 3B 09 09 23 20 73 65 74 20 6C 61 6E 67 75 61 67 65 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 4C 4F 43 41 54 49 4F 4E 3B 09 09 23 20 70 72 69 6E 74 20 70 72 6F 63 65 73 73 65 64 20 66 69 6C 65 20 6E 61 6D 65 73 20 74 6F 20 73 74 64 65 72 72 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 4D 4F 44 45 3B 09 09 23 20 76 61 6C 75 65 73 3A 20 58 2C 20 74 74 79 2C 20 51 2C 20 5A 2C 20 22 22 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 4D 41 4E 50 41 54 48 3B 09 09 23 20 6D 61 6E 75 61 6C 20 73 65 74 74 69 6E 67 20 6F 66 20 70 61 74 68 20 66 6F 72 20 6D 61 6E 2D 70 61 67 65 73 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 50 41 47 45 52 3B 09 09 23 20 73 70 65 63 69 66 79 20 70 61 67 69 6E 67 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3B 09 09 23 20 73 65 74 20 58 20 72 65 73 6F 6C 75 74 69 6F 6E 20 69 6E 20 64 70 69 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 52 56 3B 09 09 09 23 20 72 65 76 65 72 73 65 20 66 6F 72 65 2D 20 61 6E 64 20 62 61 63 6B 67 72 6F 75 6E 64 20 63 6F 6C 6F 72 73 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 53 45 43 54 49 4F 4E 53 3B 09 09 23 20 73 65 63 74 69 6F 6E 73 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 20 73 65 61 72 63 68 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 53 59 53 54 45 4D 53 3B 09 09 23 20 6D 61 6E 20 70 61 67 65 73 20 6F 66 20 64 69 66 66 65 72 65 6E 74 20 4F 53 27 73 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 54 49 54 4C 45 3B 09 09 23 20 74 69 74 6C 65 20 66 6F 72 20 67 78 64 69 74 76 69 65 77 20 77 69 6E 64 6F 77 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 54 45 58 54 5F 44 45 56 49 43 45 3B 09 09 23 20 73 65 74 20 64 65 76 69 63 65 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 3B 09 09 09 23 20 67 72 6F 66 66 20 6F 70 74 69 6F 6E 20 2D 56 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 44 56 49 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 64 76 69 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 44 46 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 64 66 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 53 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 73 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 48 54 4D 4C 3B 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 68 74 6D 6C 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 58 3B 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 78 20 6D 6F 64 65 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 57 48 41 54 49 53 3B 09 09 23 20 70 72 69 6E 74 20 74 68 65 20 6F 6E 65 2D 6C 69 6E 65 72 20 6D 61 6E 20 69 6E 66 6F 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 58 52 4D 3B 09 09 23 20 73 70 65 63 69 66 79 20 58 20 72 65 73 6F 75 72 63 65 2E 0A 65 78 70 6F 72 74 20 5F 4F 50 54 5F 5A 3B 09 09 09 23 20 67 72 6F 66 66 20 6F 70 74 69 6F 6E 20 2D 5A 2E 0A 23 20 5F 54 4D 50 5F 2A 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 0A 65 78 70 6F 72 74 20 5F 54 4D 50 5F 44 49 52 3B 09 09 23 20 67 72 6F 66 66 20 64 69 72 65 63 74 6F 72 79 20 66 6F 72 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 0A 65 78 70 6F 72 74 20 5F 54 4D 50 5F 44 49 52 5F 53 55 42 3B 09 09 23 20 67 72 6F 66 66 65 72 20 64 69 72 65 63 74 6F 72 79 20 66 6F 72 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 0A 65 78 70 6F 72 74 20 5F 54 4D 50 5F 43 41 54 3B 09 09 23 20 73 74 6F 72 65 73 20 63 6F 6E 63 61 74 65 6E 61 74 69 6F 6E 20 6F 66 20 65 76 65 72 79 74 68 69 6E 67 0A 65 78 70 6F 72 74 20 5F 54 4D 50 5F 53 54 44 49 4E 3B 09 09 23 20 73 74 6F 72 65 73 20 73 74 64 69 6E 2C 20 69 66 20 61 6E 79 0A 0A 23 20 74 68 65 73 65 20 76 61 72 69 61 62 6C 65 73 20 61 72 65 20 70 72 65 73 65 74 20 69 6E 20 73 65 63 74 69 6F 6E 20 60 50 72 65 73 65 74 27 20 61 66 74 65 72 20 74 68 65 20 72 75 64 69 6D 2E 20 74 65 73 74 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 54 65 73 74 20 6F 66 20 72 75 64 69 6D 65 6E 74 61 72 79 20 73 68 65 6C 6C 20 66 75 6E 63 74 69 6F 6E 61 6C 69 74 79 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 60 74 65 73 74 27 2E 0A 23 0A 74 65 73 74 20 22 61 22 20 3D 20 22 61 22 20 7C 7C 20 65 78 69 74 20 31 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 60 65 63 68 6F 27 20 61 6E 64 20 74 68 65 20 60 24 28 29 27 20 63 6F 6E 73 74 72 75 63 74 2E 0A 23 0A 65 63 68 6F 20 2D 6E 20 27 27 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 65 78 69 74 20 22 24 7B 5F 45 52 52 4F 52 7D 22 3B 0A 69 66 20 74 65 73 74 20 5F 22 24 28 65 63 68 6F 20 2D 6E 20 27 74 65 27 20 26 26 20 65 63 68 6F 20 2D 6E 20 27 27 20 26 26 20 65 63 68 6F 20 2D 6E 20 27 73 74 27 29 22 5F 20 21 3D 20 5F 74 65 73 74 5F 3B 20 74 68 65 6E 0A 20 20 65 78 69 74 20 22 24 7B 5F 45 52 52 4F 52 7D 22 3B 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 66 75 6E 63 74 69 6F 6E 20 64 65 66 69 6E 69 74 69 6F 6E 73 2E 0A 23 0A 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 28 29 0A 7B 0A 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 4F 4B 7D 22 3B 0A 7D 0A 0A 69 66 20 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 3A 0A 65 6C 73 65 0A 20 20 65 63 68 6F 20 27 73 68 65 6C 6C 20 64 6F 65 73 20 6E 6F 74 20 73 75 70 70 6F 72 74 20 66 75 6E 63 74 69 6F 6E 20 64 65 66 69 6E 69 74 69 6F 6E 73 2E 27 20 3E 26 32 3B 0A 20 20 65 78 69 74 20 22 24 7B 5F 45 52 52 4F 52 7D 22 3B 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 50 72 65 73 65 74 20 61 6E 64 20 72 65 73 65 74 20 6F 66 20 72 65 61 64 2D 77 72 69 74 65 20 67 6C 6F 62 61 6C 20 76 61 72 69 61 62 6C 65 73 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 0A 23 20 46 6F 72 20 76 61 72 69 61 62 6C 65 73 20 74 68 61 74 20 63 61 6E 20 62 65 20 72 65 73 65 74 20 62 79 20 6F 70 74 69 6F 6E 20 60 2D 2D 64 65 66 61 75 6C 74 27 2C 20 73 65 65 20 72 65 73 65 74 28 29 2E 0A 0A 5F 46 49 4C 45 41 52 47 53 3D 27 27 3B 0A 0A 23 20 5F 48 41 53 5F 2A 20 66 72 6F 6D 20 61 76 61 69 6C 61 62 69 6C 69 74 79 20 74 65 73 74 73 0A 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 3D 27 27 3B 0A 5F 48 41 53 5F 4F 50 54 53 5F 47 4E 55 3D 27 27 3B 0A 5F 48 41 53 5F 4F 50 54 53 5F 50 4F 53 49 58 3D 27 27 3B 0A 0A 23 20 5F 54 4D 50 5F 2A 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 0A 5F 54 4D 50 5F 44 49 52 3D 27 27 3B 0A 5F 54 4D 50 5F 44 49 52 5F 53 55 42 3D 27 27 3B 0A 5F 54 4D 50 5F 43 41 54 3D 27 27 3B 0A 5F 54 4D 50 5F 53 54 44 49 4E 3D 27 27 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 73 65 74 20 28 29 0A 23 0A 23 20 52 65 73 65 74 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 74 68 61 74 20 63 61 6E 20 62 65 20 61 66 66 65 63 74 65 64 20 62 79 20 6F 70 74 69 6F 6E 73 20 74 6F 20 74 68 65 69 72 20 64 65 66 61 75 6C 74 2E 0A 23 0A 72 65 73 65 74 28 29 0A 7B 0A 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6E 65 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 72 65 73 65 74 28 29 20 64 6F 65 73 20 6E 6F 74 20 68 61 76 65 20 61 72 67 75 6D 65 6E 74 73 2E 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 3D 27 27 3B 0A 20 20 5F 41 44 44 4F 50 54 53 5F 50 4F 53 54 3D 27 27 3B 0A 20 20 5F 41 44 44 4F 50 54 53 5F 58 3D 27 27 3B 0A 20 20 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 3D 27 27 3B 0A 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 27 3B 0A 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 27 27 3B 0A 20 20 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 3D 27 27 3B 0A 0A 20 20 23 20 5F 4D 41 4E 5F 2A 20 66 69 6E 61 6C 6C 79 20 75 73 65 64 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 20 6F 66 20 6D 61 6E 20 73 65 61 72 63 68 69 6E 67 0A 20 20 5F 4D 41 4E 5F 41 4C 4C 3D 27 6E 6F 27 3B 0A 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 27 79 65 73 27 3B 09 09 23 20 64 6F 20 73 65 61 72 63 68 20 66 6F 72 20 6D 61 6E 2D 70 61 67 65 73 0A 20 20 5F 4D 41 4E 5F 45 58 54 3D 27 27 3B 0A 20 20 5F 4D 41 4E 5F 46 4F 52 43 45 3D 27 6E 6F 27 3B 09 09 23 20 66 69 72 73 74 20 6C 6F 63 61 6C 20 66 69 6C 65 2C 20 74 68 65 6E 20 73 65 61 72 63 68 20 6D 61 6E 20 70 61 67 65 0A 20 20 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 3D 27 6E 6F 27 3B 0A 20 20 5F 4D 41 4E 5F 4C 41 4E 47 3D 27 27 3B 0A 20 20 5F 4D 41 4E 5F 4C 41 4E 47 5F 44 4F 4E 45 3D 27 6E 6F 27 3B 0A 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 27 27 3B 0A 20 20 5F 4D 41 4E 5F 53 45 43 3D 27 27 3B 0A 20 20 5F 4D 41 4E 5F 53 45 43 5F 44 4F 4E 45 3D 27 6E 6F 27 3B 0A 20 20 5F 4D 41 4E 5F 53 59 53 3D 27 27 3B 0A 20 20 5F 4D 41 4E 5F 53 59 53 5F 44 4F 4E 45 3D 27 6E 6F 27 3B 0A 0A 20 20 23 20 5F 4D 41 4E 4F 50 54 5F 2A 20 61 73 20 70 61 72 73 65 64 20 66 72 6F 6D 20 24 4D 41 4E 4F 50 54 0A 20 20 5F 4D 41 4E 4F 50 54 5F 41 4C 4C 3D 27 6E 6F 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 45 58 54 45 4E 53 49 4F 4E 3D 27 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 4C 41 4E 47 3D 27 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 50 41 54 48 3D 27 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 50 41 47 45 52 3D 27 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 53 45 43 3D 27 27 3B 0A 20 20 5F 4D 41 4E 4F 50 54 5F 53 59 53 3D 27 27 3B 0A 0A 20 20 23 20 5F 4F 50 54 5F 2A 20 61 73 20 70 61 72 73 65 64 20 66 72 6F 6D 20 67 72 6F 66 66 65 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 0A 20 20 5F 4F 50 54 5F 41 4C 4C 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 41 54 41 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 45 56 45 4C 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 50 52 4F 47 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 42 44 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 42 47 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 42 57 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 44 45 42 55 47 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 44 45 56 49 43 45 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 44 49 53 50 4C 41 59 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 46 47 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 46 4E 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 47 45 4F 4D 45 54 52 59 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 49 43 4F 4E 49 43 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 4C 41 4E 47 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 4C 4F 43 41 54 49 4F 4E 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 4D 41 4E 50 41 54 48 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 50 41 47 45 52 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 52 56 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 53 45 43 54 49 4F 4E 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 53 59 53 54 45 4D 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 54 49 54 4C 45 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 54 45 58 54 5F 44 45 56 49 43 45 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 56 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 44 56 49 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 44 46 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 53 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 48 54 4D 4C 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 58 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 57 48 41 54 49 53 3D 27 6E 6F 27 3B 0A 20 20 5F 4F 50 54 5F 58 52 4D 3D 27 27 3B 0A 20 20 5F 4F 50 54 5F 5A 3D 27 6E 6F 27 3B 0A 0A 7D 0A 0A 72 65 73 65 74 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 46 75 6E 63 74 69 6F 6E 73 20 66 6F 72 20 65 72 72 6F 72 20 68 61 6E 64 6C 69 6E 67 20 61 6E 64 20 64 65 62 75 67 67 69 6E 67 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 61 6E 64 6D 61 72 6B 20 28 3C 74 65 78 74 3E 29 0A 23 0A 23 20 50 72 69 6E 74 20 3C 74 65 78 74 3E 20 74 6F 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 20 61 73 20 61 20 64 65 62 75 67 67 69 6E 67 20 61 69 64 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 44 45 42 55 47 5F 4C 4D 0A 23 0A 6C 61 6E 64 6D 61 72 6B 28 29 0A 7B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 44 45 42 55 47 5F 4C 4D 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 20 20 65 63 68 6F 20 22 3E 3E 3E 20 24 2A 22 20 3E 26 32 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 6C 61 6E 64 6D 61 72 6B 20 22 31 3A 20 64 65 62 75 67 67 69 6E 67 20 66 75 6E 63 74 69 6F 6E 73 22 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 63 6C 65 61 6E 5F 75 70 20 28 29 0A 23 0A 23 20 43 6C 65 61 6E 20 75 70 20 61 74 20 65 78 69 74 2E 0A 23 0A 63 6C 65 61 6E 5F 75 70 28 29 0A 7B 0A 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 2F 2A 3B 0A 20 20 20 20 72 6D 64 69 72 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 63 68 6F 32 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 4F 75 74 70 75 74 20 74 6F 20 73 74 64 65 72 72 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 61 72 62 69 74 72 61 72 79 20 74 65 78 74 2E 0A 23 0A 65 63 68 6F 32 28 29 0A 7B 0A 20 20 65 63 68 6F 20 22 24 2A 22 20 3E 26 32 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 63 68 6F 32 6E 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 4F 75 74 70 75 74 20 74 6F 20 73 74 64 65 72 72 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 61 72 62 69 74 72 61 72 79 20 74 65 78 74 2E 0A 23 0A 65 63 68 6F 32 6E 28 29 0A 7B 0A 20 20 65 63 68 6F 20 2D 6E 20 22 24 2A 22 20 3E 26 32 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 69 61 67 20 28 74 65 78 74 3E 2A 29 0A 23 0A 23 20 4F 75 74 70 75 74 20 61 20 64 69 61 67 6E 6F 73 74 69 63 20 6D 65 73 73 61 67 65 20 74 6F 20 73 74 64 65 72 72 0A 23 0A 64 69 61 67 28 29 0A 7B 0A 20 20 65 63 68 6F 32 20 27 3E 3E 3E 3E 3E 27 22 24 2A 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 72 72 6F 72 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 50 72 69 6E 74 20 61 6E 20 65 72 72 6F 72 20 6D 65 73 73 61 67 65 20 74 6F 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 3B 20 65 78 69 74 20 77 69 74 68 20 61 6E 20 65 72 72 6F 72 20 63 6F 6E 64 69 74 69 6F 6E 0A 23 0A 65 72 72 6F 72 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 6C 6F 63 61 6C 20 5F 63 6F 64 65 3B 0A 20 20 5F 63 6F 64 65 3D 22 24 7B 5F 45 52 52 4F 52 7D 22 3B 0A 20 20 63 61 73 65 20 22 24 23 22 20 69 6E 0A 20 20 20 20 30 29 20 74 72 75 65 3B 20 3B 3B 0A 20 20 20 20 31 29 20 65 63 68 6F 32 20 27 67 72 6F 66 66 65 72 20 65 72 72 6F 72 3A 20 27 22 24 31 22 3B 20 3B 3B 0A 20 20 20 20 32 29 0A 20 20 20 20 20 20 65 63 68 6F 32 20 27 67 72 6F 66 66 65 72 20 65 72 72 6F 72 3A 20 27 22 24 31 22 3B 0A 20 20 20 20 20 20 5F 63 6F 64 65 3D 22 24 32 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 20 65 63 68 6F 32 20 27 67 72 6F 66 66 65 72 20 65 72 72 6F 72 3A 20 77 72 6F 6E 67 20 6E 75 6D 62 65 72 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 69 6E 20 65 72 72 6F 72 28 29 2E 27 3B 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 44 45 42 55 47 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 20 20 66 75 6E 63 5F 73 74 61 63 6B 5F 64 75 6D 70 3B 0A 20 20 66 69 3B 0A 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 6B 69 6C 6C 20 22 24 7B 5F 50 52 4F 43 45 53 53 5F 49 44 7D 22 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 26 31 3B 0A 20 20 6B 69 6C 6C 20 2D 39 20 22 24 7B 5F 50 52 4F 43 45 53 53 5F 49 44 7D 22 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 26 31 3B 0A 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 61 62 6F 72 74 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 54 65 72 6D 69 6E 61 74 65 20 70 72 6F 67 72 61 6D 20 77 69 74 68 20 65 72 72 6F 72 20 63 6F 6E 64 69 74 69 6F 6E 0A 23 0A 61 62 6F 72 74 28 29 0A 7B 0A 20 20 65 72 72 6F 72 20 22 50 72 6F 67 72 61 6D 20 61 62 6F 72 74 65 64 2E 22 3B 0A 20 20 65 78 69 74 20 31 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 63 68 65 63 6B 20 28 3C 66 75 6E 63 5F 6E 61 6D 65 3E 20 3C 72 65 6C 5F 6F 70 3E 20 3C 6E 72 5F 61 72 67 73 3E 20 22 24 40 22 29 0A 23 0A 23 20 43 68 65 63 6B 20 6E 75 6D 62 65 72 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 61 6E 64 20 72 65 67 69 73 74 65 72 20 74 6F 20 5F 46 55 4E 43 5F 53 54 41 43 4B 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 3E 3D 33 0A 23 20 20 20 3C 66 75 6E 63 5F 6E 61 6D 65 3E 3A 20 6E 61 6D 65 20 6F 66 20 74 68 65 20 63 61 6C 6C 69 6E 67 20 66 75 6E 63 74 69 6F 6E 2E 0A 23 20 20 20 3C 72 65 6C 5F 6F 70 3E 3A 20 20 20 20 61 20 72 65 6C 61 74 69 6F 6E 61 6C 20 6F 70 65 72 61 74 6F 72 3A 20 3D 20 21 3D 20 3C 20 3E 20 3C 3D 20 3E 3D 20 0A 23 20 20 20 3C 6E 72 5F 61 72 67 73 3E 3A 20 20 20 6E 75 6D 62 65 72 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 74 6F 20 62 65 20 63 68 65 63 6B 65 64 20 61 67 61 69 6E 73 74 20 3C 6F 70 65 72 61 74 6F 72 3E 0A 23 20 20 20 22 24 40 22 3A 20 20 20 20 20 20 20 20 74 68 65 20 61 72 67 75 6D 65 6E 74 73 20 6F 66 20 74 68 65 20 63 61 6C 6C 69 6E 67 20 66 75 6E 63 74 69 6F 6E 2E 0A 23 0A 66 75 6E 63 5F 63 68 65 63 6B 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 5F 63 6F 6D 70 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 6E 61 6D 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6E 61 72 67 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 3B 0A 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6C 74 20 33 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 66 75 6E 63 5F 63 68 65 63 6B 28 29 20 6E 65 65 64 73 20 61 74 20 6C 65 61 73 74 20 33 20 61 72 67 75 6D 65 6E 74 73 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 5F 66 6E 61 6D 65 3D 22 24 31 22 3B 0A 20 20 63 61 73 65 20 22 24 33 22 20 69 6E 0A 20 20 20 20 31 29 0A 20 20 20 20 20 20 5F 6E 61 72 67 73 3D 22 24 33 22 3B 0A 20 20 20 20 20 20 5F 73 3D 27 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 30 7C 5B 32 2D 39 5D 29 0A 20 20 20 20 20 20 5F 6E 61 72 67 73 3D 22 24 33 22 3B 0A 20 20 20 20 20 20 5F 73 3D 27 73 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 72 72 6F 72 20 22 66 75 6E 63 5F 63 68 65 63 6B 28 29 3A 20 74 68 69 72 64 20 61 72 67 75 6D 65 6E 74 20 6D 75 73 74 20 62 65 20 61 20 64 69 67 69 74 2E 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 63 61 73 65 20 22 24 32 22 20 69 6E 0A 20 20 20 20 27 3D 27 7C 27 2D 65 71 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 65 71 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 65 78 61 63 74 6C 79 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 3E 3D 27 7C 27 2D 67 65 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 67 65 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 61 74 20 6C 65 61 73 74 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 3C 3D 27 7C 27 2D 6C 65 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 6C 65 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 61 74 20 6D 6F 73 74 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 3C 27 7C 27 2D 6C 74 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 6C 74 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 6C 65 73 73 20 74 68 61 6E 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 3E 27 7C 27 2D 67 74 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 67 74 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 6D 6F 72 65 20 74 68 61 6E 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 21 3D 27 7C 27 2D 6E 65 27 29 0A 20 20 20 20 20 20 5F 6F 70 3D 27 2D 6E 65 27 3B 0A 20 20 20 20 20 20 5F 63 6F 6D 70 3D 27 6E 6F 74 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 20 0A 20 20 20 20 20 20 65 72 72 6F 72 20 5C 0A 20 20 20 20 20 20 20 20 27 66 75 6E 63 5F 63 68 65 63 6B 28 29 3A 20 73 65 63 6F 6E 64 20 61 72 67 75 6D 65 6E 74 20 69 73 20 6E 6F 74 20 61 20 72 65 6C 61 74 69 6F 6E 61 6C 20 6F 70 65 72 61 74 6F 72 2E 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 73 68 69 66 74 20 33 3B 0A 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 22 24 7B 5F 6F 70 7D 22 20 22 24 7B 5F 6E 61 72 67 73 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 72 72 6F 72 20 5C 0A 20 20 20 20 20 20 22 24 7B 5F 66 6E 61 6D 65 7D 22 27 28 29 20 6E 65 65 64 73 20 27 22 24 7B 5F 63 6F 6D 70 7D 20 24 7B 5F 6E 61 72 67 73 7D 22 27 20 61 72 67 75 6D 65 6E 74 27 22 24 7B 5F 73 7D 22 27 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 44 45 42 55 47 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 20 20 66 75 6E 63 5F 70 75 73 68 20 22 24 7B 5F 66 6E 61 6D 65 7D 20 24 2A 22 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 70 6F 70 20 28 29 0A 23 0A 23 20 52 65 74 72 69 65 76 65 20 74 68 65 20 74 6F 70 20 65 6C 65 6D 65 6E 74 20 66 72 6F 6D 20 74 68 65 20 73 74 61 63 6B 2E 0A 23 0A 23 20 54 68 65 20 73 74 61 63 6B 20 65 6C 65 6D 65 6E 74 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20 60 21 27 3B 20 74 68 65 20 70 6F 70 70 65 64 20 65 6C 65 6D 65 6E 74 20 69 73 0A 23 20 69 64 65 6E 74 69 63 61 6C 20 74 6F 20 74 68 65 20 6F 72 69 67 69 6E 61 6C 20 65 6C 65 6D 65 6E 74 2C 20 65 78 63 65 70 74 20 74 68 61 74 20 61 6C 6C 20 60 21 27 20 63 68 61 72 61 63 74 65 72 73 0A 23 20 77 65 72 65 20 72 65 6D 6F 76 65 64 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 0A 23 0A 66 75 6E 63 5F 70 6F 70 28 29 0A 7B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 44 45 42 55 47 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6E 65 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 72 72 6F 72 20 27 66 75 6E 63 5F 70 6F 70 28 29 20 64 6F 65 73 20 6E 6F 74 20 68 61 76 65 20 61 72 67 75 6D 65 6E 74 73 2E 27 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 20 69 6E 0A 20 20 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 27 66 75 6E 63 5F 70 6F 70 28 29 3A 20 73 74 61 63 6B 20 69 73 20 65 6D 70 74 79 2E 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 21 2A 29 0A 20 20 20 20 20 20 20 20 23 20 73 70 6C 69 74 20 61 74 20 66 69 72 73 74 20 62 61 6E 67 20 60 21 27 2E 0A 20 20 20 20 20 20 20 20 5F 46 55 4E 43 5F 53 54 41 43 4B 3D 22 24 28 65 63 68 6F 20 2D 6E 20 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5B 5E 21 5D 2A 21 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 5F 46 55 4E 43 5F 53 54 41 43 4B 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 70 75 73 68 20 28 3C 65 6C 65 6D 65 6E 74 3E 29 0A 23 0A 23 20 53 74 6F 72 65 20 61 6E 6F 74 68 65 72 20 65 6C 65 6D 65 6E 74 20 74 6F 20 73 74 61 63 6B 2E 0A 23 0A 23 20 54 68 65 20 73 74 61 63 6B 20 65 6C 65 6D 65 6E 74 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20 60 21 27 3B 20 69 66 20 3C 65 6C 65 6D 65 6E 74 3E 20 63 6F 6E 74 61 69 6E 73 20 61 20 60 21 27 0A 23 20 69 74 20 69 73 20 72 65 6D 6F 76 65 64 20 66 69 72 73 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 0A 23 0A 66 75 6E 63 5F 70 75 73 68 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 5F 65 6C 65 6D 65 6E 74 3B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 44 45 42 55 47 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6E 65 20 31 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 72 72 6F 72 20 27 66 75 6E 63 5F 70 75 73 68 28 29 20 6E 65 65 64 73 20 31 20 61 72 67 75 6D 65 6E 74 2E 27 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 63 61 73 65 20 22 24 31 22 20 69 6E 0A 20 20 20 20 20 20 2A 27 21 27 2A 29 0A 20 20 20 20 20 20 20 20 23 20 72 65 6D 6F 76 65 20 61 6C 6C 20 62 61 6E 67 73 20 60 21 27 2E 0A 20 20 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 21 2F 2F 67 27 29 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 46 55 4E 43 5F 53 54 41 43 4B 3D 22 24 7B 5F 65 6C 65 6D 65 6E 74 7D 22 3B 0A 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 5F 46 55 4E 43 5F 53 54 41 43 4B 3D 22 24 7B 5F 65 6C 65 6D 65 6E 74 7D 21 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 73 74 61 63 6B 5F 64 75 6D 70 20 28 29 0A 23 0A 23 20 50 72 69 6E 74 20 74 68 65 20 63 6F 6E 74 65 6E 74 20 6F 66 20 74 68 65 20 73 74 61 63 6B 2E 20 20 49 67 6E 6F 72 65 20 74 68 65 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 0A 66 75 6E 63 5F 73 74 61 63 6B 5F 64 75 6D 70 28 29 0A 7B 0A 20 20 64 69 61 67 20 27 63 61 6C 6C 20 73 74 61 63 6B 3A 27 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 20 69 6E 0A 20 20 20 20 2A 21 2A 29 0A 20 20 20 20 20 20 5F 72 65 73 74 3D 22 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 3B 0A 20 20 20 20 20 20 77 68 69 6C 65 20 74 65 73 74 20 5F 22 24 7B 5F 72 65 73 74 7D 22 5F 20 21 3D 20 5F 5F 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 23 20 67 65 74 20 70 61 72 74 20 62 65 66 6F 72 65 20 74 68 65 20 66 69 72 73 74 20 62 61 6E 67 20 60 21 27 2E 0A 20 20 20 20 20 20 20 20 64 69 61 67 20 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 21 2E 2A 24 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 70 61 72 74 20 62 65 66 6F 72 65 20 61 6E 64 20 69 6E 63 6C 75 64 69 6E 67 20 74 68 65 20 66 69 72 73 74 20 62 61 6E 67 20 60 21 27 2E 0A 20 20 20 20 20 20 20 20 5F 72 65 73 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5B 5E 21 5D 2A 21 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 64 69 61 67 20 22 24 7B 5F 46 55 4E 43 5F 53 54 41 43 4B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6D 20 54 65 73 74 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 6C 61 6E 64 6D 61 72 6B 20 22 32 3A 20 73 79 73 74 65 6D 20 74 65 73 74 22 3B 0A 0A 23 20 54 65 73 74 20 74 68 65 20 61 76 61 69 6C 61 62 69 6C 69 74 79 20 6F 66 20 74 68 65 20 73 79 73 74 65 6D 20 75 74 69 6C 69 74 69 65 73 20 75 73 65 64 20 69 6E 20 74 68 69 73 20 73 63 72 69 70 74 2E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 60 74 72 75 65 27 2E 0A 23 0A 69 66 20 74 72 75 65 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 26 31 3B 20 74 68 65 6E 0A 20 20 74 72 75 65 3B 0A 65 6C 73 65 0A 20 20 74 72 75 65 28 29 0A 20 20 7B 0A 20 20 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 7D 0A 0A 20 20 66 61 6C 73 65 28 29 0A 20 20 7B 0A 20 20 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 42 41 44 7D 22 3B 0A 20 20 7D 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 60 75 6E 73 65 74 27 2E 0A 23 0A 5F 74 65 73 74 3D 27 74 65 73 74 27 3B 0A 69 66 20 75 6E 73 65 74 20 5F 74 65 73 74 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 26 31 20 26 26 20 74 65 73 74 20 5F 22 24 7B 5F 74 65 73 74 7D 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 74 72 75 65 3B 0A 65 6C 73 65 0A 20 20 75 6E 73 65 74 28 29 0A 20 20 7B 0A 20 20 20 20 66 6F 72 20 76 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 76 22 3D 27 27 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 7D 0A 66 69 3B 0A 75 6E 73 65 74 20 5F 74 65 73 74 3B 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 62 75 69 6C 74 69 6E 20 60 6C 6F 63 61 6C 27 0A 23 0A 0A 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 5F 74 65 73 74 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 26 31 20 7C 7C 20 72 65 74 75 72 6E 20 22 24 7B 5F 42 41 44 7D 22 3B 0A 7D 0A 0A 69 66 20 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 3B 20 74 68 65 6E 0A 20 20 3A 0A 65 6C 73 65 0A 20 20 6C 6F 63 61 6C 28 29 0A 20 20 7B 0A 20 20 20 20 69 66 20 74 65 73 74 20 5F 22 24 31 22 5F 20 21 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 72 72 6F 72 20 22 6F 76 65 72 72 69 64 69 6E 67 20 67 6C 6F 62 61 6C 20 76 61 72 69 61 62 6C 65 20 5C 60 24 31 27 20 77 69 74 68 20 6C 6F 63 61 6C 20 76 61 6C 75 65 2E 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 7D 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 67 6C 6F 62 61 6C 20 73 65 74 74 69 6E 67 20 69 6E 20 66 75 6E 63 74 69 6F 6E 73 0A 23 0A 5F 67 6C 6F 62 61 6C 3D 27 6F 75 74 73 69 64 65 27 3B 0A 5F 63 6C 6F 62 62 65 72 3D 27 6F 75 74 73 69 64 65 27 3B 0A 0A 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 5F 63 6C 6F 62 62 65 72 3B 0A 20 20 5F 67 6C 6F 62 61 6C 3D 27 69 6E 73 69 64 65 27 3B 0A 20 20 5F 63 6C 6F 62 62 65 72 3D 27 69 6E 73 69 64 65 27 3B 0A 7D 0A 0A 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 3B 0A 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 67 6C 6F 62 61 6C 7D 22 5F 20 21 3D 20 5F 69 6E 73 69 64 65 5F 20 7C 7C 20 74 65 73 74 20 5F 22 24 7B 5F 63 6C 6F 62 62 65 72 7D 22 5F 20 21 3D 20 5F 6F 75 74 73 69 64 65 5F 3B 0A 74 68 65 6E 0A 20 20 65 72 72 6F 72 20 22 43 61 6E 6E 6F 74 20 61 73 73 69 67 6E 20 74 6F 20 67 6C 6F 62 61 6C 20 76 61 72 69 61 62 6C 65 73 20 66 72 6F 6D 20 77 69 74 68 69 6E 20 66 75 6E 63 74 69 6F 6E 73 2E 22 3B 0A 66 69 3B 0A 0A 75 6E 73 65 74 20 5F 67 6C 6F 62 61 6C 3B 0A 75 6E 73 65 74 20 5F 63 6C 6F 62 62 65 72 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 66 75 6E 63 74 69 6F 6E 20 60 73 65 64 27 2E 0A 23 0A 0A 69 66 20 74 65 73 74 20 5F 22 24 28 65 63 68 6F 20 78 54 65 73 54 78 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 5C 28 5B 54 74 5D 65 2A 78 2A 73 54 54 2A 5C 29 2E 2A 24 2F 5C 31 2F 27 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 54 7C 73 7C 54 7C 74 7C 67 27 29 22 5F 20 21 3D 20 5F 74 65 73 74 5F 3B 0A 74 68 65 6E 0A 20 20 65 72 72 6F 72 20 27 54 65 73 74 20 6F 66 20 22 73 65 64 22 20 63 6F 6D 6D 61 6E 64 20 66 61 69 6C 65 64 2E 27 3B 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 6F 66 20 66 75 6E 63 74 69 6F 6E 20 60 63 61 74 27 2E 0A 23 0A 69 66 20 74 65 73 74 20 5F 22 24 28 65 63 68 6F 20 74 65 73 74 20 7C 20 63 61 74 29 22 5F 20 21 3D 20 5F 74 65 73 74 5F 3B 20 74 68 65 6E 0A 20 20 65 72 72 6F 72 20 27 54 65 73 74 20 6F 66 20 22 63 61 74 22 20 63 6F 6D 6D 61 6E 64 20 66 61 69 6C 65 64 2E 27 3B 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 54 65 73 74 20 66 6F 72 20 63 6F 6D 70 72 65 73 73 69 6F 6E 2E 0A 23 0A 69 66 20 74 65 73 74 20 5F 22 24 28 65 63 68 6F 20 27 74 65 73 74 27 20 7C 20 67 7A 69 70 20 2D 63 20 2D 64 20 2D 66 20 2D 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 29 22 5F 20 3D 20 5F 74 65 73 74 5F 3B 20 74 68 65 6E 0A 20 20 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 3D 27 79 65 73 27 3B 0A 20 20 69 66 20 65 63 68 6F 20 27 74 65 73 74 27 20 7C 20 62 7A 69 70 32 20 2D 63 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 20 62 7A 69 70 32 20 2D 74 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 5C 0A 20 20 20 20 20 26 26 20 74 65 73 74 20 5F 22 24 28 65 63 68 6F 20 27 74 65 73 74 27 20 7C 20 62 7A 69 70 32 20 2D 63 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 62 7A 69 70 32 20 2D 64 20 2D 63 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 29 22 5F 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 3D 20 5F 74 65 73 74 5F 3B 20 74 68 65 6E 0A 20 20 20 20 5F 48 41 53 5F 42 5A 49 50 3D 27 79 65 73 27 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 5F 48 41 53 5F 42 5A 49 50 3D 27 6E 6F 27 3B 0A 20 20 66 69 3B 0A 65 6C 73 65 0A 20 20 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 3D 27 6E 6F 27 3B 0A 20 20 5F 48 41 53 5F 42 5A 49 50 3D 27 6E 6F 27 3B 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 5F 74 5F 65 5F 73 5F 74 5F 66 5F 75 5F 6E 5F 63 5F 28 29 0A 7B 0A 20 20 3A 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 66 69 6E 69 74 69 6F 6E 20 6F 66 20 6E 6F 72 6D 61 6C 20 46 75 6E 63 74 69 6F 6E 73 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 22 33 3A 20 66 75 6E 63 74 69 6F 6E 73 22 3B 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 61 62 6F 72 74 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 55 6E 63 6F 6E 64 69 74 69 6F 6E 61 6C 6C 79 20 74 65 72 6D 69 6E 61 74 65 20 74 68 65 20 70 72 6F 67 72 61 6D 20 77 69 74 68 20 65 72 72 6F 72 20 63 6F 64 65 3B 0A 23 20 75 73 65 66 75 6C 20 66 6F 72 20 64 65 62 75 67 67 69 6E 67 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 61 70 72 6F 70 6F 73 5F 72 75 6E 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 0A 61 70 72 6F 70 6F 73 5F 72 75 6E 28 29 20 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 61 70 72 6F 70 6F 73 5F 72 75 6E 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 61 70 72 6F 70 6F 73 20 61 70 72 6F 70 6F 73 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 61 70 72 6F 70 6F 73 20 22 24 31 22 3B 0A 20 20 65 6C 69 66 20 6D 61 6E 20 2D 2D 61 70 72 6F 70 6F 73 20 6D 61 6E 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 6D 61 6E 20 2D 2D 61 70 72 6F 70 6F 73 20 22 24 31 22 3B 0A 20 20 65 6C 69 66 20 6D 61 6E 20 2D 6B 20 6D 61 6E 20 3E 2F 64 65 76 2F 6E 75 6C 6C 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 6D 61 6E 20 2D 6B 20 22 24 31 22 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 62 61 73 65 5F 6E 61 6D 65 20 28 3C 70 61 74 68 3E 29 0A 23 0A 23 20 47 65 74 20 74 68 65 20 66 69 6C 65 20 6E 61 6D 65 20 70 61 72 74 20 6F 66 20 3C 70 61 74 68 3E 2C 20 69 2E 65 2E 20 64 65 6C 65 74 65 20 65 76 65 72 79 74 68 69 6E 67 20 75 70 20 74 6F 20 6C 61 73 74 0A 23 20 60 2F 27 20 66 72 6F 6D 20 74 68 65 20 62 65 67 69 6E 6E 69 6E 67 20 6F 66 20 3C 70 61 74 68 3E 2E 20 20 52 65 6D 6F 76 65 20 66 69 6E 61 6C 20 73 6C 61 73 68 65 73 2C 20 74 6F 6F 2C 20 74 6F 20 67 65 74 20 61 0A 23 20 6E 6F 6E 2D 65 6D 70 74 79 20 6F 75 74 70 75 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 31 0A 23 20 4F 75 74 70 75 74 20 20 20 20 3A 20 74 68 65 20 66 69 6C 65 20 6E 61 6D 65 20 70 61 72 74 20 28 77 69 74 68 6F 75 74 20 73 6C 61 73 68 65 73 29 0A 23 0A 62 61 73 65 5F 6E 61 6D 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 62 61 73 65 5F 6E 61 6D 65 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 66 3B 0A 20 20 66 3D 22 24 31 22 3B 0A 20 20 63 61 73 65 20 22 24 66 22 20 69 6E 0A 20 20 20 20 2A 2F 29 0A 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 61 6C 6C 20 66 69 6E 61 6C 20 73 6C 61 73 68 65 73 0A 20 20 20 20 20 20 66 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 66 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 2F 2F 2A 24 7C 7C 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 63 61 73 65 20 22 24 66 22 20 69 6E 0A 20 20 20 20 2F 7C 27 27 29 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 2F 2A 29 0A 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 65 76 65 72 79 74 68 69 6E 67 20 62 65 66 6F 72 65 20 61 6E 64 20 69 6E 63 6C 75 64 69 6E 67 20 74 68 65 20 6C 61 73 74 20 73 6C 61 73 68 20 60 2F 27 2E 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 66 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 5E 2E 2A 2F 2F 2A 5C 28 5B 5E 2F 5D 2A 5C 29 24 7C 5C 31 7C 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 66 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 63 61 74 7A 20 28 3C 66 69 6C 65 3E 29 0A 23 0A 23 20 44 65 63 6F 6D 70 72 65 73 73 20 69 66 20 70 6F 73 73 69 62 6C 65 20 6F 72 20 6A 75 73 74 20 70 72 69 6E 74 20 3C 66 69 6C 65 3E 20 74 6F 20 73 74 61 6E 64 61 72 64 20 6F 75 74 70 75 74 2E 0A 23 0A 23 20 67 7A 69 70 2C 20 62 7A 69 70 32 2C 20 61 6E 64 20 2E 5A 20 64 65 63 6F 6D 70 72 65 73 73 69 6F 6E 20 69 73 20 73 75 70 70 6F 72 74 65 64 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 2C 20 61 20 66 69 6C 65 20 6E 61 6D 65 2E 0A 23 20 4F 75 74 70 75 74 3A 20 74 68 65 20 63 6F 6E 74 65 6E 74 20 6F 66 20 3C 66 69 6C 65 3E 2C 20 70 6F 73 73 69 62 6C 79 20 64 65 63 6F 6D 70 72 65 73 73 65 64 2E 0A 23 0A 69 66 20 74 65 73 74 20 5F 22 24 7B 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 7D 22 5F 20 3D 20 5F 79 65 73 5F 3B 20 74 68 65 6E 0A 20 20 63 61 74 7A 28 29 0A 20 20 7B 0A 20 20 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 63 61 74 7A 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 20 20 63 61 73 65 20 22 24 31 22 20 69 6E 0A 20 20 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 27 63 61 74 7A 28 29 3A 20 65 6D 70 74 79 20 66 69 6C 65 20 6E 61 6D 65 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 27 2D 27 29 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 27 63 61 74 7A 28 29 3A 20 66 6F 72 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 20 75 73 65 20 73 61 76 65 5F 73 74 64 69 6E 28 29 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 48 41 53 5F 42 5A 49 50 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 69 66 20 62 7A 69 70 32 20 2D 74 20 22 24 31 22 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 62 7A 69 70 32 20 2D 63 20 2D 64 20 22 24 31 22 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 67 7A 69 70 20 2D 63 20 2D 64 20 2D 66 20 22 24 31 22 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 7D 0A 65 6C 73 65 0A 20 20 63 61 74 7A 28 29 0A 20 20 7B 0A 20 20 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 63 61 74 7A 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 20 20 63 61 74 20 22 24 31 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 7D 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 63 6C 65 61 6E 5F 75 70 20 28 29 0A 23 0A 23 20 44 6F 20 74 68 65 20 66 69 6E 61 6C 20 63 6C 65 61 6E 69 6E 67 20 75 70 20 62 65 66 6F 72 65 20 65 78 69 74 69 6E 67 3B 20 75 73 65 64 20 62 79 20 74 68 65 20 74 72 61 70 20 63 61 6C 6C 73 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 69 61 67 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 50 72 69 6E 74 20 6D 61 72 6B 65 64 20 6D 65 73 73 61 67 65 20 74 6F 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 3B 20 75 73 65 66 75 6C 20 66 6F 72 20 64 65 62 75 67 67 69 6E 67 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 34 3A 20 64 69 72 6E 61 6D 65 28 29 2A 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 28 3C 64 69 72 3E 20 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 41 70 70 65 6E 64 20 60 6E 61 6D 65 27 20 74 6F 20 60 64 69 72 27 20 77 69 74 68 20 63 6C 65 61 6E 20 68 61 6E 64 6C 69 6E 67 20 6F 66 20 60 2F 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 0A 23 20 4F 75 74 70 75 74 20 20 20 20 3A 20 74 68 65 20 67 65 6E 65 72 61 74 65 64 20 6E 65 77 20 64 69 72 65 63 74 6F 72 79 20 6E 61 6D 65 20 3C 64 69 72 3E 2F 3C 6E 61 6D 65 3E 0A 23 0A 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 64 69 72 5F 61 70 70 65 6E 64 28 29 3A 20 66 69 72 73 74 20 61 72 67 75 6D 65 6E 74 20 69 73 20 65 6D 70 74 79 2E 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 31 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 64 69 72 6E 61 6D 65 5F 63 68 6F 70 20 22 24 31 22 2F 22 24 32 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 69 72 6E 61 6D 65 5F 63 68 6F 70 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 52 65 6D 6F 76 65 20 75 6E 6E 65 63 65 73 73 61 72 79 20 73 6C 61 73 68 65 73 20 66 72 6F 6D 20 64 69 72 65 63 74 6F 72 79 20 6E 61 6D 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 3A 20 31 2C 20 61 20 64 69 72 65 63 74 6F 72 79 20 6E 61 6D 65 2E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 70 61 74 68 20 77 69 74 68 6F 75 74 20 64 6F 75 62 6C 65 2C 20 6F 72 20 74 72 61 69 6C 69 6E 67 20 73 6C 61 73 68 65 73 2E 0A 23 0A 64 69 72 6E 61 6D 65 5F 63 68 6F 70 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 64 69 72 6E 61 6D 65 5F 63 68 6F 70 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 61 72 67 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 65 70 3B 0A 20 20 23 20 72 65 70 6C 61 63 65 20 61 6C 6C 20 6D 75 6C 74 69 70 6C 65 20 73 6C 61 73 68 65 73 20 62 79 20 61 20 73 69 6E 67 6C 65 20 73 6C 61 73 68 20 60 2F 27 2E 0A 20 20 5F 72 65 73 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 2F 2F 2F 2A 7C 2F 7C 67 27 29 22 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 72 65 73 7D 22 20 69 6E 0A 20 20 20 20 3F 2A 2F 29 0A 20 20 20 20 20 20 23 20 72 65 6D 6F 76 65 20 74 72 61 69 6C 69 6E 67 20 73 6C 61 73 68 20 27 2F 27 3B 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 2F 24 7C 7C 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 7D 22 3B 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 6F 5F 66 69 6C 65 61 72 67 20 28 3C 66 69 6C 65 61 72 67 3E 29 0A 23 0A 23 20 41 70 70 65 6E 64 20 74 68 65 20 66 69 6C 65 2C 20 6D 61 6E 2D 70 61 67 65 2C 20 6F 72 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 20 63 6F 72 72 65 73 70 6F 6E 64 69 6E 67 20 74 6F 20 74 68 65 0A 23 20 61 72 67 75 6D 65 6E 74 20 74 6F 20 74 68 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 2E 20 20 49 66 20 74 68 69 73 20 69 73 20 63 6F 6D 70 72 65 73 73 65 64 20 69 6E 20 74 68 65 20 67 7A 69 70 0A 23 20 6F 72 20 5A 20 66 6F 72 6D 61 74 20 69 74 20 69 73 20 64 65 63 6F 6D 70 72 65 73 73 65 64 2E 20 20 41 20 74 69 74 6C 65 20 65 6C 65 6D 65 6E 74 20 69 73 20 67 65 6E 65 72 61 74 65 64 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 20 65 69 74 68 65 72 3A 0A 23 20 20 20 2D 20 6E 61 6D 65 20 6F 66 20 61 6E 20 65 78 69 73 74 69 6E 67 20 66 69 6C 65 73 2E 0A 23 20 20 20 2D 20 60 2D 27 20 74 6F 20 72 65 70 72 65 73 65 6E 74 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 20 28 73 65 76 65 72 61 6C 20 74 69 6D 65 73 20 61 6C 6C 6F 77 65 64 29 2E 0A 23 20 20 20 2D 20 60 6D 61 6E 3A 6E 61 6D 65 2E 28 73 65 63 74 69 6F 6E 29 27 20 74 68 65 20 6D 61 6E 2D 70 61 67 65 20 66 6F 72 20 60 6E 61 6D 65 27 20 69 6E 20 60 73 65 63 74 69 6F 6E 27 2E 0A 23 20 20 20 2D 20 60 6D 61 6E 3A 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 27 20 74 68 65 20 6D 61 6E 2D 70 61 67 65 20 66 6F 72 20 60 6E 61 6D 65 27 20 69 6E 20 60 73 65 63 74 69 6F 6E 27 2E 0A 23 20 20 20 2D 20 60 6D 61 6E 3A 6E 61 6D 65 27 20 74 68 65 20 6D 61 6E 2D 70 61 67 65 20 66 6F 72 20 60 6E 61 6D 65 27 20 69 6E 20 74 68 65 20 6C 6F 77 65 73 74 20 60 73 65 63 74 69 6F 6E 27 2E 0A 23 20 20 20 2D 20 60 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 27 20 74 68 65 20 6D 61 6E 2D 70 61 67 65 20 66 6F 72 20 60 6E 61 6D 65 27 20 69 6E 20 60 73 65 63 74 69 6F 6E 27 2E 0A 23 20 20 20 2D 20 60 6E 61 6D 65 27 20 74 68 65 20 6D 61 6E 2D 70 61 67 65 20 66 6F 72 20 60 6E 61 6D 65 27 20 69 6E 20 74 68 65 20 6C 6F 77 65 73 74 20 60 73 65 63 74 69 6F 6E 27 2E 0A 23 20 47 6C 6F 62 61 6C 73 20 3A 0A 23 20 20 20 24 5F 54 4D 50 5F 53 54 44 49 4E 2C 20 24 5F 4D 41 4E 5F 45 4E 41 42 4C 45 2C 20 24 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 2C 20 24 5F 4F 50 54 5F 4D 41 4E 0A 23 0A 23 20 4F 75 74 70 75 74 20 20 3A 20 6E 6F 6E 65 0A 23 20 52 65 74 75 72 6E 20 20 3A 20 24 5F 47 4F 4F 44 20 69 66 20 66 6F 75 6E 64 2C 20 24 7B 5F 42 41 44 7D 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 64 6F 5F 66 69 6C 65 61 72 67 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 64 6F 5F 66 69 6C 65 61 72 67 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 69 6C 65 73 70 65 63 3B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 5F 66 69 6C 65 73 70 65 63 3D 22 24 31 22 3B 0A 20 20 23 20 73 74 6F 72 65 20 73 65 71 75 65 6E 63 65 20 69 6E 74 6F 20 70 6F 73 69 74 69 6F 6E 61 6C 20 70 61 72 61 6D 65 74 65 72 73 0A 20 20 63 61 73 65 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 20 69 6E 0A 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 2D 27 29 0A 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 27 2D 27 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 2F 2A 29 09 09 09 23 20 77 69 74 68 20 64 69 72 65 63 74 6F 72 79 20 70 61 72 74 3B 20 73 6F 20 6E 6F 20 6D 61 6E 20 73 65 61 72 63 68 0A 20 20 20 20 20 20 73 65 74 20 2D 2D 20 27 46 69 6C 65 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 46 4F 52 43 45 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 73 65 74 20 2D 2D 20 27 4D 61 6E 70 61 67 65 27 20 27 46 69 6C 65 27 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 73 65 74 20 2D 2D 20 27 46 69 6C 65 27 20 27 4D 61 6E 70 61 67 65 27 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 73 65 74 20 2D 2D 20 27 46 69 6C 65 27 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 63 61 73 65 20 22 24 69 22 20 69 6E 0A 20 20 20 20 20 20 46 69 6C 65 29 0A 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 72 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 09 20 20 20 20 65 63 68 6F 32 20 22 63 6F 75 6C 64 20 6E 6F 74 20 72 65 61 64 20 5C 60 24 7B 5F 66 69 6C 65 73 70 65 63 7D 27 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 4D 61 6E 70 61 67 65 29 09 09 09 23 20 70 61 72 73 65 20 66 69 6C 65 73 70 65 63 20 61 73 20 6D 61 6E 20 70 61 67 65 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 20 69 73 5F 6E 6F 74 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 73 65 74 75 70 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6D 61 6E 5F 64 6F 5F 66 69 6C 65 73 70 65 63 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 09 66 69 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 20 23 20 64 6F 5F 66 69 6C 65 61 72 67 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 64 6F 5F 6E 6F 74 68 69 6E 67 20 28 29 0A 23 0A 23 20 44 75 6D 6D 79 20 66 75 6E 63 74 69 6F 6E 2E 0A 23 0A 64 6F 5F 6E 6F 74 68 69 6E 67 28 29 0A 7B 0A 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 4F 4B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 63 68 6F 32 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 50 72 69 6E 74 20 74 6F 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 20 77 69 74 68 20 66 69 6E 61 6C 20 6C 69 6E 65 20 62 72 65 61 6B 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 63 68 6F 32 6E 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 50 72 69 6E 74 20 74 6F 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 20 77 69 74 68 6F 75 74 20 66 69 6E 61 6C 20 6C 69 6E 65 20 62 72 65 61 6B 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 65 72 72 6F 72 20 28 3C 74 65 78 74 3E 2A 29 0A 23 0A 23 20 50 72 69 6E 74 20 65 72 72 6F 72 20 6D 65 73 73 61 67 65 20 61 6E 64 20 65 78 69 74 20 77 69 74 68 20 65 72 72 6F 72 20 63 6F 64 65 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 63 68 65 63 6B 20 28 3C 66 75 6E 63 5F 6E 61 6D 65 3E 20 3C 72 65 6C 5F 6F 70 3E 20 3C 6E 72 5F 61 72 67 73 3E 20 22 24 40 22 29 0A 23 0A 23 20 43 68 65 63 6B 20 6E 75 6D 62 65 72 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 61 6E 64 20 72 65 67 69 73 74 65 72 20 74 6F 20 5F 46 55 4E 43 5F 53 54 41 43 4B 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 3E 3D 33 0A 23 20 20 20 3C 66 75 6E 63 5F 6E 61 6D 65 3E 3A 20 6E 61 6D 65 20 6F 66 20 74 68 65 20 63 61 6C 6C 69 6E 67 20 66 75 6E 63 74 69 6F 6E 2E 0A 23 20 20 20 3C 72 65 6C 5F 6F 70 3E 3A 20 20 20 20 61 20 72 65 6C 61 74 69 6F 6E 61 6C 20 6F 70 65 72 61 74 6F 72 3A 20 3D 20 21 3D 20 3C 20 3E 20 3C 3D 20 3E 3D 20 0A 23 20 20 20 3C 6E 72 5F 61 72 67 73 3E 3A 20 20 20 6E 75 6D 62 65 72 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 74 6F 20 62 65 20 63 68 65 63 6B 65 64 20 61 67 61 69 6E 73 74 20 3C 6F 70 65 72 61 74 6F 72 3E 0A 23 20 20 20 22 24 40 22 3A 20 20 20 20 20 20 20 20 74 68 65 20 61 72 67 75 6D 65 6E 74 73 20 6F 66 20 74 68 65 20 63 61 6C 6C 69 6E 67 20 66 75 6E 63 74 69 6F 6E 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 70 6F 70 20 28 29 0A 23 0A 23 20 44 65 6C 65 74 65 20 74 68 65 20 74 6F 70 20 65 6C 65 6D 65 6E 74 20 66 72 6F 6D 20 74 68 65 20 66 75 6E 63 74 69 6F 6E 20 63 61 6C 6C 20 73 74 61 63 6B 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 70 75 73 68 20 28 3C 65 6C 65 6D 65 6E 74 3E 29 0A 23 0A 23 20 53 74 6F 72 65 20 61 6E 6F 74 68 65 72 20 65 6C 65 6D 65 6E 74 20 74 6F 20 66 75 6E 63 74 69 6F 6E 20 63 61 6C 6C 20 73 74 61 63 6B 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 66 75 6E 63 5F 73 74 61 63 6B 5F 64 75 6D 70 20 28 29 0A 23 0A 23 20 50 72 69 6E 74 20 74 68 65 20 63 6F 6E 74 65 6E 74 20 6F 66 20 74 68 65 20 73 74 61 63 6B 2E 0A 23 0A 23 20 64 65 66 69 6E 65 64 20 61 62 6F 76 65 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 28 3C 61 72 67 3E 2A 29 0A 23 0A 23 20 52 65 74 72 69 65 76 65 20 66 69 72 73 74 20 6E 6F 6E 2D 65 6D 70 74 79 20 61 72 67 75 6D 65 6E 74 2E 0A 23 0A 23 20 52 65 74 75 72 6E 20 20 3A 20 60 31 27 20 69 66 20 61 6C 6C 20 61 72 67 75 6D 65 6E 74 73 20 61 72 65 20 65 6D 70 74 79 2C 20 60 30 27 20 69 66 20 66 6F 75 6E 64 2E 0A 23 20 4F 75 74 70 75 74 20 20 3A 20 74 68 65 20 72 65 74 72 69 65 76 65 64 20 6E 6F 6E 2D 65 6D 70 74 79 20 61 72 67 75 6D 65 6E 74 2E 0A 23 0A 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 27 3E 3D 27 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 23 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 69 66 20 6F 62 6A 20 69 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 69 22 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 35 3A 20 69 73 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 64 69 72 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 61 20 64 69 72 65 63 74 6F 72 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 61 20 64 69 72 65 63 74 6F 72 79 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 64 69 72 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 64 69 72 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 31 22 20 26 26 20 74 65 73 74 20 2D 72 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 65 6D 70 74 79 20 28 3C 73 74 72 69 6E 67 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 27 20 69 73 20 65 6D 70 74 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3C 3D 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 65 6D 70 74 79 20 6F 72 20 64 6F 65 73 20 6E 6F 74 20 65 78 69 73 74 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 65 6D 70 74 79 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 65 6D 70 74 79 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 31 22 5F 20 3D 20 5F 5F 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 65 71 75 61 6C 20 28 3C 73 74 72 69 6E 67 31 3E 20 3C 73 74 72 69 6E 67 32 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 31 27 20 69 73 20 65 71 75 61 6C 20 74 6F 20 3C 73 74 72 69 6E 67 32 3E 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 62 6F 74 68 20 61 72 67 75 6D 65 6E 74 73 20 61 72 65 20 65 71 75 61 6C 20 73 74 72 69 6E 67 73 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 65 71 75 61 6C 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 65 71 75 61 6C 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 69 66 20 74 65 73 74 20 5F 22 24 31 22 5F 20 3D 20 5F 22 24 32 22 5F 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 66 69 6C 65 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 61 20 72 65 61 64 61 62 6C 65 20 66 69 6C 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 61 20 72 65 61 64 61 62 6C 65 20 66 69 6C 65 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 66 69 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 66 69 6C 65 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 74 65 73 74 20 2D 66 20 22 24 31 22 20 26 26 20 74 65 73 74 20 2D 72 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 6E 5F 65 6D 70 74 79 5F 66 69 6C 65 20 28 3C 66 69 6C 65 5F 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 66 69 6C 65 5F 6E 61 6D 65 27 20 69 73 20 61 20 6E 6F 6E 2D 65 6D 70 74 79 20 65 78 69 73 74 69 6E 67 20 66 69 6C 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3C 3D 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 0A 23 20 20 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 61 20 6E 6F 6E 2D 65 6D 70 74 79 20 65 78 69 73 74 69 6E 67 20 66 69 6C 65 0A 23 20 20 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 0A 23 0A 69 73 5F 6E 6F 6E 5F 65 6D 70 74 79 5F 66 69 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 65 6D 70 74 79 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 66 69 6C 65 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 28 63 61 74 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 2F 2E 2F 71 27 29 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 64 69 72 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 6E 6F 74 20 61 20 72 65 61 64 61 62 6C 65 20 64 69 72 65 63 74 6F 72 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 61 20 64 69 72 65 63 74 6F 72 79 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 6E 6F 74 5F 64 69 72 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 64 69 72 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 64 69 72 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 28 3C 73 74 72 69 6E 67 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 27 20 69 73 20 6E 6F 74 20 65 6D 70 74 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3C 3D 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 65 78 69 73 74 73 20 61 6E 64 20 69 73 20 6E 6F 74 20 65 6D 70 74 79 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 28 3C 73 74 72 69 6E 67 31 3E 20 3C 73 74 72 69 6E 67 32 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 31 27 20 64 69 66 66 65 72 73 20 66 72 6F 6D 20 60 73 74 72 69 6E 67 32 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 0A 23 0A 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 31 22 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 66 69 6C 65 20 28 3C 66 69 6C 65 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 61 20 6E 6F 74 20 72 65 61 64 61 62 6C 65 20 66 69 6C 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 31 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 2C 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 0A 23 0A 69 73 5F 6E 6F 74 5F 66 69 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 66 69 6C 65 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 66 69 6C 65 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 70 72 6F 67 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 56 65 72 69 66 79 20 74 68 61 74 20 61 72 67 20 69 73 20 61 20 6E 6F 74 20 70 72 6F 67 72 61 6D 20 69 6E 20 24 50 41 54 48 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 31 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 0A 23 20 20 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 2C 20 74 68 69 73 20 61 6C 6C 6F 77 73 20 74 6F 20 73 70 65 63 69 66 79 20 70 72 6F 67 73 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 73 0A 23 0A 69 73 5F 6E 6F 74 5F 70 72 6F 67 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 70 72 6F 67 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 77 68 65 72 65 20 22 24 31 22 20 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 77 72 69 74 61 62 6C 65 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 61 20 6E 6F 74 20 61 20 77 72 69 74 61 62 6C 65 20 66 69 6C 65 20 6F 72 20 64 69 72 65 63 74 6F 72 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 31 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 2C 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 0A 23 0A 69 73 5F 6E 6F 74 5F 77 72 69 74 61 62 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 77 72 69 74 61 62 6C 65 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 77 72 69 74 61 62 6C 65 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 6E 6F 74 5F 79 65 73 20 28 3C 73 74 72 69 6E 67 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 27 20 69 73 20 6E 6F 74 20 22 79 65 73 22 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 31 0A 23 0A 69 73 5F 6E 6F 74 5F 79 65 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 6E 6F 74 5F 79 65 73 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 70 72 6F 67 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 44 65 74 65 72 6D 69 6E 65 20 77 68 65 74 68 65 72 20 61 72 67 20 69 73 20 61 20 70 72 6F 67 72 61 6D 20 69 6E 20 24 50 41 54 48 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 30 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 0A 23 20 20 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 2C 20 74 68 69 73 20 61 6C 6C 6F 77 73 20 74 6F 20 73 70 65 63 69 66 79 20 70 72 6F 67 73 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 73 0A 23 0A 69 73 5F 70 72 6F 67 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 70 72 6F 67 20 27 3E 3D 27 20 30 20 22 24 40 22 3B 0A 20 20 63 61 73 65 20 22 24 23 22 20 69 6E 0A 20 20 30 29 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 20 20 3B 3B 0A 20 20 2A 29 0A 20 20 20 20 69 66 20 77 68 65 72 65 20 22 24 31 22 20 3E 2F 64 65 76 2F 6E 75 6C 6C 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 77 72 69 74 61 62 6C 65 20 28 3C 6E 61 6D 65 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 6E 61 6D 65 27 20 69 73 20 61 20 77 72 69 74 61 62 6C 65 20 66 69 6C 65 20 6F 72 20 64 69 72 65 63 74 6F 72 79 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 31 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 2C 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 0A 23 0A 69 73 5F 77 72 69 74 61 62 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 77 72 69 74 61 62 6C 65 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 74 65 73 74 20 2D 72 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 74 65 73 74 20 2D 77 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 69 73 5F 79 65 73 20 28 3C 73 74 72 69 6E 67 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 73 74 72 69 6E 67 27 20 68 61 73 20 76 61 6C 75 65 20 22 79 65 73 22 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3C 3D 31 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 60 79 65 73 27 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 69 73 5F 79 65 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 69 73 5F 79 65 73 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 31 22 20 27 79 65 73 27 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 61 6E 64 6D 61 72 6B 20 28 29 0A 23 0A 23 20 50 72 69 6E 74 20 64 65 62 75 67 67 69 6E 67 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 6F 6E 20 73 74 61 6E 64 61 72 64 20 65 72 72 6F 72 20 69 66 20 24 5F 44 45 42 55 47 5F 4C 4D 20 69 73 20 60 79 65 73 27 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 44 45 42 55 47 5F 4C 4D 0A 23 0A 23 20 44 65 66 69 6E 65 64 20 69 6E 20 73 65 63 74 69 6F 6E 20 60 44 65 62 75 67 67 69 6E 67 20 66 75 6E 63 74 69 6F 6E 73 27 2E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 65 61 76 65 20 28 29 0A 23 0A 23 20 43 6C 65 61 6E 20 65 78 69 74 20 77 69 74 68 6F 75 74 20 61 6E 20 65 72 72 6F 72 2E 0A 23 0A 6C 65 61 76 65 28 29 0A 7B 0A 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 65 78 69 74 20 22 24 7B 5F 4F 4B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 36 3A 20 6C 69 73 74 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 0A 23 20 60 6C 69 73 74 27 20 69 73 20 61 6E 20 6F 62 6A 65 63 74 20 63 6C 61 73 73 20 74 68 61 74 20 72 65 70 72 65 73 65 6E 74 73 20 61 6E 20 61 72 72 61 79 20 6F 72 20 6C 69 73 74 2E 20 20 49 74 73 0A 23 20 64 61 74 61 20 63 6F 6E 73 69 73 74 73 20 6F 66 20 73 70 61 63 65 2D 73 65 70 61 72 61 74 65 64 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 64 20 65 6C 65 6D 65 6E 74 73 2E 20 20 53 6F 20 61 20 6C 69 73 74 0A 23 20 68 61 73 20 74 68 65 20 66 6F 72 6D 20 22 27 66 69 72 73 74 27 20 27 73 65 63 6F 6E 64 27 20 27 2E 2E 2E 27 20 27 6C 61 73 74 27 22 2E 20 20 53 65 65 20 6C 69 73 74 5F 61 70 70 65 6E 64 28 29 20 66 6F 72 0A 23 20 6D 6F 72 65 20 64 65 74 61 69 6C 73 20 6F 6E 20 74 68 65 20 6C 69 73 74 20 73 74 72 75 63 74 75 72 65 2E 20 20 54 68 65 20 61 72 72 61 79 20 65 6C 65 6D 65 6E 74 73 20 6F 66 20 60 6C 69 73 74 27 0A 23 20 63 61 6E 20 62 65 20 67 65 74 20 62 79 20 60 73 65 74 20 2D 2D 20 24 6C 69 73 74 60 2E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 28 3C 6C 69 73 74 3E 20 3C 65 6C 65 6D 65 6E 74 3E 2E 2E 2E 29 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 3E 3D 32 0A 23 20 20 20 3C 6C 69 73 74 3E 3A 20 61 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 20 66 6F 72 20 61 20 6C 69 73 74 20 6F 66 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 64 20 65 6C 65 6D 65 6E 74 73 0A 23 20 20 20 3C 65 6C 65 6D 65 6E 74 3E 3A 20 20 73 6F 6D 65 20 73 65 71 75 65 6E 63 65 20 6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 0A 23 20 4F 75 74 70 75 74 3A 20 6E 6F 6E 65 2C 20 62 75 74 20 24 3C 6C 69 73 74 3E 20 69 73 20 73 65 74 20 74 6F 0A 23 20 20 20 69 66 20 3C 6C 69 73 74 3E 20 69 73 20 65 6D 70 74 79 3A 20 20 22 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 27 2E 2E 2E 27 22 0A 23 20 20 20 6F 74 68 65 72 77 69 73 65 3A 20 20 20 20 20 20 20 20 20 20 20 22 24 6C 69 73 74 20 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 2E 2E 2E 22 0A 23 0A 6C 69 73 74 5F 61 70 70 65 6E 64 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 27 3E 3D 27 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 65 6C 65 6D 65 6E 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 69 73 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6E 61 6D 65 3B 0A 20 20 5F 6E 61 6D 65 3D 22 24 31 22 3B 0A 20 20 65 76 61 6C 20 5F 6C 69 73 74 3D 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 20 20 73 68 69 66 74 3B 0A 20 20 66 6F 72 20 73 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 63 61 73 65 20 22 24 73 22 20 69 6E 0A 20 20 20 20 2A 5C 27 2A 29 0A 20 20 20 20 20 20 23 20 65 73 63 61 70 65 20 65 61 63 68 20 73 69 6E 67 6C 65 20 71 75 6F 74 65 20 62 79 20 72 65 70 6C 61 63 69 6E 67 20 65 61 63 68 0A 20 20 20 20 20 20 23 20 22 27 22 20 28 73 71 75 6F 74 65 29 20 62 79 20 22 27 5C 27 27 22 20 28 73 71 75 6F 74 65 20 62 73 6C 61 73 68 20 73 71 75 6F 74 65 20 73 71 75 6F 74 65 29 3B 0A 20 20 20 20 20 20 23 20 6E 6F 74 65 20 74 68 61 74 20 74 68 65 20 62 61 63 6B 73 6C 61 73 68 20 6D 75 73 74 20 62 65 20 64 6F 75 62 6C 65 64 20 69 6E 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 60 73 65 64 27 0A 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 73 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 27 22 24 7B 5F 53 51 55 4F 54 45 7D 22 27 2F 26 5C 5C 26 26 2F 67 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 27 27 29 20 20 0A 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 73 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 6C 69 73 74 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 6C 69 73 74 3D 22 27 24 7B 5F 65 6C 65 6D 65 6E 74 7D 27 22 3B 0A 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 5F 6C 69 73 74 3D 22 24 7B 5F 6C 69 73 74 7D 20 27 24 7B 5F 65 6C 65 6D 65 6E 74 7D 27 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 5F 6E 61 6D 65 7D 22 3D 27 22 24 7B 5F 6C 69 73 74 7D 22 27 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 20 28 3C 70 72 65 5F 6E 61 6D 65 5F 6F 66 5F 6F 70 74 5F 6C 69 73 74 73 3E 20 5B 3C 63 6D 64 6C 69 6E 65 5F 61 72 67 3E 2E 2E 2E 5D 29 0A 23 0A 23 20 54 72 61 6E 73 66 6F 72 6D 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 61 72 67 75 6D 65 6E 74 73 20 69 6E 74 6F 20 61 20 6E 6F 72 6D 61 6C 69 7A 65 64 20 66 6F 72 6D 2E 0A 23 0A 23 20 4F 70 74 69 6F 6E 73 2C 20 6F 70 74 69 6F 6E 20 61 72 67 75 6D 65 6E 74 73 2C 20 61 6E 64 20 66 69 6C 65 20 70 61 72 61 6D 65 74 65 72 73 20 61 72 65 20 69 64 65 6E 74 69 66 69 65 64 20 61 6E 64 0A 23 20 6F 75 74 70 75 74 20 65 61 63 68 20 61 73 20 61 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 64 20 61 72 67 75 6D 65 6E 74 20 6F 66 20 69 74 73 20 6F 77 6E 2E 20 20 4F 70 74 69 6F 6E 73 20 61 6E 64 0A 23 20 66 69 6C 65 20 70 61 72 61 6D 65 74 65 72 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20 61 20 27 2D 2D 27 20 61 72 67 75 6D 65 6E 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 3E 3D 31 0A 23 20 20 20 3C 70 72 65 5F 6E 61 6D 65 3E 3A 20 63 6F 6D 6D 6F 6E 20 70 61 72 74 20 6F 66 20 61 20 73 65 74 20 6F 66 20 34 20 65 6E 76 69 72 6F 6E 6D 65 6E 74 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 73 3A 0A 23 20 20 20 20 20 24 3C 70 72 65 5F 6E 61 6D 65 3E 5F 53 48 4F 52 54 5F 4E 41 3A 20 20 6C 69 73 74 20 6F 66 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 73 20 77 69 74 68 6F 75 74 20 61 6E 20 61 72 67 2E 0A 23 20 20 20 20 20 24 3C 70 72 65 5F 6E 61 6D 65 3E 5F 53 48 4F 52 54 5F 41 52 47 3A 20 6C 69 73 74 20 6F 66 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 73 20 74 68 61 74 20 68 61 76 65 20 61 6E 20 61 72 67 2E 0A 23 20 20 20 20 20 24 3C 70 72 65 5F 6E 61 6D 65 3E 5F 4C 4F 4E 47 5F 4E 41 3A 20 20 20 6C 69 73 74 20 6F 66 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 20 77 69 74 68 6F 75 74 20 61 6E 20 61 72 67 2E 0A 23 20 20 20 20 20 24 3C 70 72 65 5F 6E 61 6D 65 3E 5F 4C 4F 4E 47 5F 41 52 47 3A 20 20 6C 69 73 74 20 6F 66 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 20 74 68 61 74 20 68 61 76 65 20 61 6E 20 61 72 67 2E 0A 23 20 20 20 3C 63 6D 64 6C 69 6E 65 5F 61 72 67 3E 2E 2E 2E 3A 20 74 68 65 20 61 72 67 75 6D 65 6E 74 73 20 66 72 6F 6D 20 61 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2C 20 73 75 63 68 20 61 73 20 22 24 40 22 2C 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 63 6F 6E 74 65 6E 74 20 6F 66 20 61 20 76 61 72 69 61 62 6C 65 2C 20 6F 72 20 64 69 72 65 63 74 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 0A 23 20 4F 75 74 70 75 74 3A 20 5B 27 2D 5B 2D 5D 6F 70 74 27 20 5B 27 6F 70 74 61 72 67 27 5D 5D 2E 2E 2E 20 27 2D 2D 27 20 5B 27 66 69 6C 65 6E 61 6D 65 27 5D 2E 2E 2E 0A 23 0A 23 20 45 78 61 6D 70 6C 65 3A 0A 23 20 20 20 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 20 50 52 45 20 27 61 20 62 27 20 27 63 27 20 27 27 20 27 6C 6F 6E 67 27 20 2D 61 20 66 31 20 2D 62 63 61 72 67 20 2D 2D 6C 6F 6E 67 3D 6C 61 72 67 20 66 32 0A 23 20 49 66 20 24 50 52 45 5F 53 48 4F 52 54 5F 4E 41 2C 20 24 50 52 45 5F 53 48 4F 52 54 5F 41 52 47 2C 20 24 50 52 45 5F 4C 4F 4E 47 5F 4E 41 2C 20 61 6E 64 20 24 50 52 45 5F 4C 4F 4E 47 5F 41 52 47 20 61 72 65 0A 23 20 6E 6F 6E 65 2D 65 6D 70 74 79 20 6F 70 74 69 6F 6E 20 6C 69 73 74 73 2C 20 74 68 69 73 20 77 69 6C 6C 20 72 65 73 75 6C 74 20 69 6E 20 70 72 69 6E 74 69 6E 67 3A 0A 23 20 20 20 20 20 27 2D 61 27 20 27 2D 62 27 20 27 2D 63 27 20 27 61 72 67 27 20 27 2D 2D 6C 6F 6E 67 27 20 27 6C 61 72 67 27 20 27 2D 2D 27 20 27 66 31 27 20 27 66 32 27 0A 23 0A 23 20 20 20 55 73 65 20 74 68 69 73 20 66 75 6E 63 74 69 6F 6E 20 69 6E 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 77 61 79 3A 0A 23 20 20 20 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 61 72 67 73 5F 6E 6F 72 6D 20 50 52 45 5F 4E 41 4D 45 20 22 24 40 22 29 22 3B 0A 23 20 20 20 20 20 77 68 69 6C 65 20 74 65 73 74 20 22 24 31 22 20 21 3D 20 27 2D 2D 27 3B 20 64 6F 0A 23 20 20 20 20 20 20 20 63 61 73 65 20 22 24 31 22 20 69 6E 0A 23 20 20 20 20 20 20 20 2E 2E 2E 0A 23 20 20 20 20 20 20 20 65 73 61 63 3B 0A 23 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 23 20 20 20 20 20 64 6F 6E 65 3B 0A 23 20 20 20 20 20 73 68 69 66 74 3B 20 20 20 20 20 20 20 20 20 23 73 6B 69 70 20 27 2D 2D 27 0A 23 20 20 20 20 20 23 20 61 6C 6C 20 70 6F 73 69 74 69 6F 6E 61 6C 20 70 61 72 61 6D 65 74 65 72 73 20 28 22 24 40 22 29 20 6C 65 66 74 20 61 72 65 20 66 69 6C 65 20 6E 61 6D 65 20 70 61 72 61 6D 65 74 65 72 73 2E 0A 23 0A 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 70 61 72 61 6D 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 6E 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 68 6F 72 74 5F 61 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 68 6F 72 74 5F 6E 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 6F 6E 67 5F 61 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 6F 6E 67 5F 6E 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 75 6C 74 3B 0A 20 20 5F 73 68 6F 72 74 5F 6E 3D 22 24 28 6F 62 6A 5F 64 61 74 61 20 22 24 31 22 5F 53 48 4F 52 54 5F 4E 41 29 22 3B 20 20 23 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 73 2C 20 6E 6F 20 61 72 67 75 6D 65 6E 74 0A 20 20 5F 73 68 6F 72 74 5F 61 3D 22 24 28 6F 62 6A 5F 64 61 74 61 20 22 24 31 22 5F 53 48 4F 52 54 5F 41 52 47 29 22 3B 20 23 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 73 2C 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 0A 20 20 5F 6C 6F 6E 67 5F 6E 3D 22 24 28 6F 62 6A 5F 64 61 74 61 20 22 24 31 22 5F 4C 4F 4E 47 5F 4E 41 29 22 3B 20 20 20 20 23 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 2C 20 6E 6F 20 61 72 67 75 6D 65 6E 74 0A 20 20 5F 6C 6F 6E 67 5F 61 3D 22 24 28 6F 62 6A 5F 64 61 74 61 20 22 24 31 22 5F 4C 4F 4E 47 5F 41 52 47 29 22 3B 20 20 20 23 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 2C 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 0A 20 20 69 66 20 6F 62 6A 20 5F 73 68 6F 72 74 5F 6E 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 3A 20 6E 6F 20 24 27 22 24 31 22 27 5F 53 48 4F 52 54 5F 4E 41 20 6F 70 74 69 6F 6E 73 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 73 68 6F 72 74 5F 61 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 3A 20 6E 6F 20 24 27 22 24 31 22 27 5F 53 48 4F 52 54 5F 41 52 47 20 6F 70 74 69 6F 6E 73 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 6C 6F 6E 67 5F 6E 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 3A 20 6E 6F 20 24 27 22 24 31 22 27 5F 4C 4F 4E 47 5F 4E 41 20 6F 70 74 69 6F 6E 73 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 6C 6F 6E 67 5F 61 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 3A 20 6E 6F 20 24 27 22 24 31 22 27 5F 4C 4F 4E 47 5F 41 52 47 20 6F 70 74 69 6F 6E 73 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 73 68 69 66 74 3B 0A 20 20 5F 66 6E 3D 27 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 3A 27 3B 09 20 23 20 66 6F 72 20 65 72 72 6F 72 20 6D 65 73 73 61 67 65 73 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 23 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 27 2D 2D 27 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 66 70 61 72 61 6D 73 3D 27 27 3B 0A 20 20 5F 72 65 73 75 6C 74 3D 27 27 3B 0A 20 20 77 68 69 6C 65 20 74 65 73 74 20 22 24 23 22 20 2D 67 65 20 31 3B 20 64 6F 0A 20 20 20 20 5F 61 72 67 3D 22 24 31 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 63 61 73 65 20 22 24 5F 61 72 67 22 20 69 6E 0A 20 20 20 20 20 20 2D 2D 29 20 62 72 65 61 6B 3B 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 3F 2A 29 0A 20 20 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 6C 65 61 64 69 6E 67 20 27 2D 2D 27 3B 0A 20 20 20 20 20 20 20 20 5F 6F 70 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 61 72 67 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 2E 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 6C 6F 6E 67 5F 6E 20 22 24 7B 5F 6F 70 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 23 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 2C 20 6E 6F 20 61 72 67 75 6D 65 6E 74 0A 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 2D 24 7B 5F 6F 70 74 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 23 20 74 65 73 74 20 6F 6E 20 60 2D 2D 6F 70 74 3D 61 72 67 27 0A 20 20 20 20 20 20 20 20 69 66 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 22 24 7B 5F 6F 70 74 7D 22 20 27 3D 27 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 23 20 65 78 74 72 61 63 74 20 6F 70 74 69 6F 6E 20 62 79 20 64 65 6C 65 74 69 6E 67 20 66 72 6F 6D 20 74 68 65 20 66 69 72 73 74 20 27 3D 27 20 74 6F 20 74 68 65 20 65 6E 64 0A 20 20 20 20 20 20 20 20 20 20 5F 6C 6F 70 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6F 70 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 3D 2E 2A 24 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 6C 6F 6E 67 5F 61 20 22 24 7B 5F 6C 6F 70 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 23 20 67 65 74 20 74 68 65 20 6F 70 74 69 6F 6E 20 61 72 67 75 6D 65 6E 74 20 62 79 20 64 65 6C 65 74 69 6E 67 20 75 70 20 74 6F 20 66 69 72 73 74 20 60 3D 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6F 70 74 61 72 67 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6F 70 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5B 5E 3D 5D 2A 3D 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 2D 24 7B 5F 6C 6F 70 74 7D 22 20 22 24 7B 5F 6F 70 74 61 72 67 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 6C 6F 6E 67 5F 61 20 22 24 7B 5F 6F 70 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 23 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 6C 65 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 24 7B 5F 66 6E 7D 20 6E 6F 20 61 72 67 75 6D 65 6E 74 20 66 6F 72 20 6F 70 74 69 6F 6E 20 2D 2D 24 7B 5F 6F 70 74 7D 2E 22 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 2D 24 7B 5F 6F 70 74 7D 22 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 24 7B 5F 66 6E 7D 20 2D 2D 24 7B 5F 6F 70 74 7D 20 69 73 20 6E 6F 74 20 61 6E 20 6F 70 74 69 6F 6E 2E 22 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 3F 2A 29 09 09 09 23 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 20 28 63 6C 75 73 74 65 72 29 0A 20 20 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 6C 65 61 64 69 6E 67 20 60 2D 27 3B 0A 20 20 20 20 20 20 20 20 5F 72 65 73 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 61 72 67 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2D 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 77 68 69 6C 65 20 6F 62 6A 20 5F 72 65 73 74 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 23 20 67 65 74 20 6E 65 78 74 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 20 66 72 6F 6D 20 63 6C 75 73 74 65 72 20 28 66 69 72 73 74 20 63 68 61 72 20 6F 66 20 24 5F 72 65 73 74 29 0A 20 20 20 20 20 20 20 20 20 20 5F 6F 70 74 63 68 61 72 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5C 28 2E 5C 29 2E 2A 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 23 20 72 65 6D 6F 76 65 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 66 72 6F 6D 20 24 7B 5F 72 65 73 74 7D 3B 0A 20 20 20 20 20 20 20 20 20 20 5F 72 65 73 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 72 65 73 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 73 68 6F 72 74 5F 6E 20 22 24 7B 5F 6F 70 74 63 68 61 72 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 24 7B 5F 6F 70 74 63 68 61 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 65 6C 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 73 68 6F 72 74 5F 61 20 22 24 7B 5F 6F 70 74 63 68 61 72 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 72 65 73 74 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 67 65 20 31 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 24 7B 5F 6F 70 74 63 68 61 72 7D 22 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 66 6E 7D 22 27 20 6E 6F 20 61 72 67 75 6D 65 6E 74 20 66 6F 72 20 6F 70 74 69 6F 6E 20 2D 27 22 24 7B 5F 6F 70 74 63 68 61 72 7D 2E 22 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 09 09 23 20 72 65 73 74 20 69 73 20 74 68 65 20 61 72 67 75 6D 65 6E 74 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 2D 24 7B 5F 6F 70 74 63 68 61 72 7D 22 20 22 24 7B 5F 72 65 73 74 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 72 65 73 74 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 24 7B 5F 66 6E 7D 20 75 6E 6B 6E 6F 77 6E 20 6F 70 74 69 6F 6E 20 2D 24 7B 5F 6F 70 74 63 68 61 72 7D 2E 22 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 29 0A 09 23 20 48 65 72 65 2C 20 24 5F 61 72 67 20 69 73 20 6E 6F 74 20 61 6E 20 6F 70 74 69 6F 6E 2C 20 73 6F 20 61 20 66 69 6C 65 20 70 61 72 61 6D 65 74 65 72 2E 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 66 70 61 72 61 6D 73 20 22 24 7B 5F 61 72 67 7D 22 3B 0A 0A 20 20 20 20 20 20 20 20 23 20 49 67 6E 6F 72 65 20 74 68 65 20 73 74 72 61 6E 67 65 20 6F 70 74 69 6F 6E 20 68 61 6E 64 6C 69 6E 67 20 6F 66 20 24 50 4F 53 49 58 4C 59 5F 43 4F 52 52 45 43 54 20 74 6F 0A 20 20 20 20 20 20 20 20 23 20 65 6E 64 20 6F 70 74 69 6F 6E 20 70 61 72 73 69 6E 67 20 61 66 74 65 72 20 74 68 65 20 66 69 72 73 74 20 66 69 6C 65 20 6E 61 6D 65 20 61 72 67 75 6D 65 6E 74 2E 20 20 54 6F 0A 20 20 20 20 20 20 20 20 23 20 72 65 75 73 65 20 69 74 2C 20 64 6F 20 61 20 60 62 72 65 61 6B 27 20 68 65 72 65 20 69 66 20 24 50 4F 53 49 58 4C 59 5F 43 4F 52 52 45 43 54 20 69 73 0A 20 20 20 20 20 20 20 20 23 20 6E 6F 6E 2D 65 6D 70 74 79 2E 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 27 2D 2D 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 66 70 61 72 61 6D 73 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 5F 72 65 73 75 6C 74 3D 22 24 7B 5F 72 65 73 75 6C 74 7D 20 24 7B 5F 66 70 61 72 61 6D 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 74 65 73 74 20 22 24 23 22 20 2D 67 74 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 65 73 75 6C 74 20 22 24 40 22 3B 0A 20 20 66 69 3B 0A 20 20 65 63 68 6F 20 2D 6E 20 22 24 5F 72 65 73 75 6C 74 22 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 28 3C 73 74 72 69 6E 67 3E 20 3C 73 65 70 61 72 61 74 6F 72 3E 29 0A 23 0A 23 20 49 6E 20 3C 73 74 72 69 6E 67 3E 2C 20 65 73 63 61 70 65 20 61 6C 6C 20 77 68 69 74 65 20 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72 73 20 61 6E 64 20 72 65 70 6C 61 63 65 20 65 61 63 68 0A 23 20 3C 73 65 70 61 72 61 74 6F 72 3E 20 62 79 20 73 70 61 63 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 32 3A 20 61 20 3C 73 74 72 69 6E 67 3E 20 74 68 61 74 20 69 73 20 74 6F 20 62 65 20 73 70 6C 69 74 20 69 6E 74 6F 20 70 61 72 74 73 20 64 69 76 69 64 65 64 20 62 79 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3C 73 65 70 61 72 61 74 6F 72 3E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 20 74 68 65 20 72 65 73 75 6C 74 69 6E 67 20 6C 69 73 74 20 73 74 72 69 6E 67 0A 23 0A 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 3B 0A 0A 20 20 23 20 70 72 65 63 65 64 65 20 65 61 63 68 20 73 70 61 63 65 20 6F 72 20 74 61 62 20 62 79 20 61 20 62 61 63 6B 73 6C 61 73 68 20 60 5C 27 20 28 64 6F 75 62 6C 65 64 20 66 6F 72 20 60 73 65 64 27 29 0A 20 20 5F 73 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5C 28 5B 27 22 24 7B 5F 53 50 41 43 45 7D 24 7B 5F 54 41 42 7D 22 27 5D 5C 29 2F 5C 5C 5C 31 2F 67 27 29 22 3B 0A 0A 20 20 23 20 72 65 70 6C 61 63 65 20 73 70 6C 69 74 20 63 68 61 72 61 63 74 65 72 20 6F 66 20 73 74 72 69 6E 67 20 62 79 20 74 68 65 20 6C 69 73 74 20 73 65 70 61 72 61 74 6F 72 20 60 20 27 20 28 73 70 61 63 65 29 2E 0A 20 20 63 61 73 65 20 22 24 32 22 20 69 6E 0A 20 20 20 20 2F 29 09 09 09 09 23 20 63 61 6E 6E 6F 74 20 75 73 65 20 6E 6F 72 6D 61 6C 20 60 73 65 64 27 20 73 65 70 61 72 61 74 6F 72 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 27 22 24 32 22 27 7C 20 7C 67 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 29 09 09 09 09 23 20 75 73 65 20 6E 6F 72 6D 61 6C 20 60 73 65 64 27 20 73 65 70 61 72 61 74 6F 72 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 27 22 24 32 22 27 2F 20 2F 67 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 3F 2A 29 0A 20 20 20 20 20 20 65 72 72 6F 72 20 27 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 28 29 3A 20 73 65 70 61 72 61 74 6F 72 20 6D 75 73 74 20 62 65 20 61 20 73 69 6E 67 6C 65 20 63 68 61 72 61 63 74 65 72 2E 27 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 67 65 74 20 28 3C 6C 69 73 74 3E 29 0A 23 0A 23 20 43 68 65 63 6B 20 77 68 65 74 68 65 72 20 3C 6C 69 73 74 3E 20 69 73 20 61 20 73 70 61 63 65 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 27 2D 71 75 6F 74 65 64 20 65 6C 65 6D 65 6E 74 73 2E 0A 23 0A 23 20 49 66 20 74 68 65 20 74 65 73 74 20 66 61 69 6C 73 20 61 6E 20 65 72 72 6F 72 20 69 73 20 72 61 69 73 65 64 2E 0A 23 20 49 66 20 74 68 65 20 74 65 73 74 20 73 75 63 63 65 65 64 73 20 74 68 65 20 61 72 67 75 6D 65 6E 74 20 69 73 20 65 63 68 6F 65 64 2E 0A 23 0A 23 20 54 65 73 74 69 6E 67 20 63 72 69 74 65 72 69 61 3A 0A 23 20 20 20 41 20 6C 69 73 74 20 68 61 73 20 74 68 65 20 66 6F 72 6D 20 22 27 66 69 72 73 74 27 20 27 73 65 63 6F 6E 64 27 20 27 2E 2E 2E 27 20 27 6C 61 73 74 27 22 2E 20 20 53 6F 20 69 74 20 68 61 73 20 61 0A 23 20 20 20 6C 65 61 64 69 6E 67 20 61 6E 64 20 61 20 66 69 6E 61 6C 20 71 75 6F 74 65 20 61 6E 64 20 74 68 65 20 65 6C 65 6D 65 6E 74 73 20 61 72 65 20 73 65 70 61 72 61 74 65 64 20 62 79 20 22 27 20 27 22 0A 23 20 20 20 63 6F 6E 73 74 72 75 63 74 73 2E 20 20 49 66 20 74 68 65 73 65 20 61 72 65 20 61 6C 6C 20 72 65 6D 6F 76 65 64 20 74 68 65 72 65 20 73 68 6F 75 6C 64 20 6E 6F 74 20 62 65 20 61 6E 79 0A 23 20 20 20 75 6E 65 73 63 61 70 65 64 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 73 20 6C 65 66 74 2E 20 20 57 61 74 63 68 20 6F 75 74 20 66 6F 72 20 65 73 63 61 70 65 64 20 73 69 6E 67 6C 65 0A 23 20 20 20 71 75 6F 74 65 73 3B 20 74 68 65 79 20 68 61 76 65 20 74 68 65 20 66 6F 72 6D 20 27 5C 27 27 20 28 73 71 20 62 73 20 73 71 20 73 71 29 2E 0A 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 0A 23 20 4F 75 74 70 75 74 3A 20 74 68 65 20 61 72 67 75 6D 65 6E 74 20 3C 6C 69 73 74 3E 20 75 6E 63 68 61 6E 67 65 64 2C 20 69 66 20 74 68 65 20 63 68 65 63 6B 20 73 75 63 63 65 65 64 65 64 2E 0A 23 0A 6C 69 73 74 5F 67 65 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 67 65 74 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 69 73 74 3B 0A 20 20 65 76 61 6C 20 5F 6C 69 73 74 3D 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 20 20 23 20 72 65 6D 6F 76 65 20 6C 65 61 64 69 6E 67 20 61 6E 64 20 66 69 6E 61 6C 20 73 70 61 63 65 20 63 68 61 72 61 63 74 65 72 73 0A 20 20 5F 6C 69 73 74 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6C 69 73 74 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 73 65 64 20 2D 65 20 27 73 2F 5E 5B 27 22 24 7B 5F 53 50 41 43 45 7D 24 7B 5F 54 41 42 7D 22 27 5D 2A 2F 2F 27 20 7C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 73 65 64 20 2D 65 20 27 73 2F 5B 27 22 24 7B 5F 53 50 41 43 45 7D 24 7B 5F 54 41 42 7D 22 27 5D 2A 24 2F 2F 27 29 22 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 6C 69 73 74 7D 22 20 69 6E 0A 20 20 27 27 29 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 3B 3B 0A 20 20 5C 27 2A 5C 27 29 0A 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6C 69 73 74 7D 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 3B 3B 0A 20 20 2A 29 0A 20 20 20 20 65 72 72 6F 72 20 22 6C 69 73 74 5F 67 65 74 28 29 3A 20 62 61 64 20 6C 69 73 74 3A 20 24 31 22 0A 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 68 61 73 20 28 3C 76 61 72 5F 6E 61 6D 65 3E 20 3C 65 6C 65 6D 65 6E 74 3E 29 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 32 0A 23 20 20 20 3C 76 61 72 5F 6E 61 6D 65 3E 3A 20 61 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 20 66 6F 72 20 61 20 6C 69 73 74 20 6F 66 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 64 20 65 6C 65 6D 65 6E 74 73 0A 23 20 20 20 3C 65 6C 65 6D 65 6E 74 3E 3A 20 20 73 6F 6D 65 20 73 65 71 75 65 6E 63 65 20 6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 0A 23 20 4F 75 74 70 75 74 3A 0A 23 20 20 20 69 66 20 3C 6C 69 73 74 3E 20 69 73 20 65 6D 70 74 79 3A 20 20 22 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 27 2E 2E 2E 27 22 0A 23 20 20 20 6F 74 68 65 72 77 69 73 65 3A 20 20 20 20 20 20 20 20 20 20 20 22 6C 69 73 74 20 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 2E 2E 2E 22 0A 23 0A 6C 69 73 74 5F 68 61 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 68 61 73 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 65 76 61 6C 20 5F 6C 69 73 74 3D 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 6C 69 73 74 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 32 22 3B 0A 20 20 63 61 73 65 20 22 24 32 22 20 69 6E 0A 20 20 20 20 5C 27 2A 5C 27 29 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 32 22 3B 20 3B 3B 0A 20 20 20 20 2A 29 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 27 24 32 27 22 3B 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 69 66 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 22 24 7B 5F 6C 69 73 74 7D 22 20 22 24 7B 5F 65 6C 65 6D 65 6E 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6C 69 73 74 5F 68 61 73 5F 6E 6F 74 20 28 3C 6C 69 73 74 3E 20 3C 65 6C 65 6D 65 6E 74 3E 29 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 32 0A 23 20 20 20 3C 6C 69 73 74 3E 3A 20 20 20 20 61 20 73 70 61 63 65 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 73 69 6E 67 6C 65 2D 71 75 6F 74 65 64 20 65 6C 65 6D 65 6E 74 73 2E 0A 23 20 20 20 3C 65 6C 65 6D 65 6E 74 3E 3A 20 73 6F 6D 65 20 73 65 71 75 65 6E 63 65 20 6F 66 20 63 68 61 72 61 63 74 65 72 73 2E 0A 23 20 4F 75 74 70 75 74 3A 0A 23 20 20 20 69 66 20 3C 6C 69 73 74 3E 20 69 73 20 65 6D 70 74 79 3A 20 20 22 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 27 2E 2E 2E 27 22 0A 23 20 20 20 6F 74 68 65 72 77 69 73 65 3A 20 20 20 20 20 20 20 20 20 20 20 22 3C 6C 69 73 74 3E 20 27 3C 65 6C 65 6D 65 6E 74 3E 27 20 2E 2E 2E 22 0A 23 0A 6C 69 73 74 5F 68 61 73 5F 6E 6F 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6C 69 73 74 5F 68 61 73 5F 6E 6F 74 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 65 76 61 6C 20 5F 6C 69 73 74 3D 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 6C 69 73 74 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 32 22 3B 0A 20 20 63 61 73 65 20 22 24 32 22 20 69 6E 0A 20 20 20 20 5C 27 2A 5C 27 29 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 24 32 22 3B 20 3B 3B 0A 20 20 20 20 2A 29 20 20 20 20 20 20 5F 65 6C 65 6D 65 6E 74 3D 22 27 24 32 27 22 3B 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 69 66 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 22 24 7B 5F 6C 69 73 74 7D 22 20 22 24 7B 5F 65 6C 65 6D 65 6E 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 37 3A 20 6D 61 6E 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 5F 64 6F 5F 66 69 6C 65 73 70 65 63 20 28 3C 66 69 6C 65 73 70 65 63 3E 29 0A 23 0A 23 20 50 72 69 6E 74 20 73 75 69 74 61 62 6C 65 20 6D 61 6E 20 70 61 67 65 28 73 29 20 66 6F 72 20 66 69 6C 65 73 70 65 63 20 74 6F 20 24 5F 54 4D 50 5F 43 41 54 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 0A 23 20 20 20 3C 66 69 6C 65 73 70 65 63 3E 3A 20 61 72 67 75 6D 65 6E 74 20 6F 66 20 74 68 65 20 66 6F 72 6D 20 60 6D 61 6E 3A 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 27 2C 20 60 6D 61 6E 3A 6E 61 6D 65 27 2C 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 60 6D 61 6E 3A 6E 61 6D 65 28 73 65 63 74 69 6F 6E 29 27 2C 20 60 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 27 2C 20 60 6E 61 6D 65 27 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 20 20 20 3A 20 24 5F 4F 50 54 5F 41 4C 4C 0A 23 0A 23 20 4F 75 74 70 75 74 20 20 20 20 3A 20 6E 6F 6E 65 2E 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 6D 61 6E 20 70 61 67 65 20 77 61 73 20 66 6F 75 6E 64 2C 20 60 31 27 20 65 6C 73 65 2E 0A 23 0A 23 20 4F 6E 6C 79 20 63 61 6C 6C 65 64 20 66 72 6F 6D 20 64 6F 5F 66 69 6C 65 61 72 67 73 28 29 2C 20 63 68 65 63 6B 73 20 6F 6E 20 24 4D 41 4E 50 41 54 48 20 61 6E 64 0A 23 20 24 5F 4D 41 4E 5F 45 4E 41 42 4C 45 20 61 72 65 20 61 73 73 75 6D 65 64 2E 0A 23 0A 6D 61 6E 5F 64 6F 5F 66 69 6C 65 73 70 65 63 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 6E 5F 64 6F 5F 66 69 6C 65 73 70 65 63 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 67 6F 74 5F 6F 6E 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6E 61 6D 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 70 72 65 76 73 65 63 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 65 63 74 69 6F 6E 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 70 65 63 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 74 72 69 6E 67 3B 0A 20 20 6C 6F 63 61 6C 20 73 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 73 70 65 63 3D 22 24 31 22 3B 0A 20 20 5F 6E 61 6D 65 3D 27 27 3B 0A 20 20 5F 73 65 63 74 69 6F 6E 3D 27 27 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 73 70 65 63 7D 22 20 69 6E 0A 20 20 20 20 2A 2F 2A 29 09 09 09 23 20 6E 6F 74 20 61 20 6D 61 6E 20 73 70 65 63 20 77 68 65 6E 20 69 74 20 63 6F 6E 74 61 69 6E 73 20 27 2F 27 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 6D 61 6E 3A 3F 2A 5C 28 3F 2A 5C 29 29 09 09 23 20 6D 61 6E 3A 6E 61 6D 65 28 73 65 63 74 69 6F 6E 29 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 6D 61 6E 3A 5C 28 2E 2E 2A 5C 29 28 5C 28 2E 2E 2A 5C 29 29 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 5F 73 65 63 74 69 6F 6E 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 6D 61 6E 3A 5C 28 2E 2E 2A 5C 29 28 5C 28 2E 2E 2A 5C 29 29 24 2F 5C 32 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 6D 61 6E 3A 3F 2A 2E 5B 30 2D 39 6F 6E 5D 29 09 09 09 23 20 6D 61 6E 3A 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 6D 61 6E 3A 5C 28 2E 2E 2A 5C 29 5C 2E 2E 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 5F 73 65 63 74 69 6F 6E 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 2A 5C 28 2E 5C 29 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 6D 61 6E 3A 3F 2A 29 09 09 09 23 20 6D 61 6E 3A 6E 61 6D 65 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 6D 61 6E 3A 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 2A 5C 28 3F 2A 5C 29 29 09 09 09 23 20 6E 61 6D 65 28 73 65 63 74 69 6F 6E 29 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5C 28 2E 2E 2A 5C 29 28 5C 28 2E 2E 2A 5C 29 29 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 5F 73 65 63 74 69 6F 6E 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5C 28 2E 2E 2A 5C 29 28 5C 28 2E 2E 2A 5C 29 29 24 2F 5C 32 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 2A 2E 5B 30 2D 39 6F 6E 5D 29 09 09 09 23 20 6E 61 6D 65 2E 73 65 63 74 69 6F 6E 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5C 28 2E 2E 2A 5C 29 5C 2E 2E 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 5F 73 65 63 74 69 6F 6E 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 73 70 65 63 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 2A 5C 28 2E 5C 29 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 2A 29 0A 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 6E 61 6D 65 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 6E 6F 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 73 65 63 74 69 6F 6E 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 7B 5F 4D 41 4E 5F 41 55 54 4F 5F 53 45 43 7D 22 3B 0A 20 20 20 20 66 6F 72 20 73 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 69 66 20 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 22 24 73 22 3B 20 74 68 65 6E 20 23 20 66 6F 75 6E 64 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 69 66 20 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 22 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 20 26 26 20 69 73 5F 79 65 73 20 22 24 7B 5F 67 6F 74 5F 6F 6E 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 20 23 20 6D 61 6E 5F 64 6F 5F 66 69 6C 65 73 70 65 63 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 28 3C 66 69 6C 65 3E 20 3C 6E 61 6D 65 3E 20 5B 3C 73 65 63 74 69 6F 6E 3E 5D 29 0A 23 0A 23 20 57 72 69 74 65 20 61 20 66 6F 75 6E 64 20 6D 61 6E 20 70 61 67 65 20 66 69 6C 65 20 61 6E 64 20 72 65 67 69 73 74 65 72 20 74 68 65 20 74 69 74 6C 65 20 65 6C 65 6D 65 6E 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 2C 20 32 2C 20 6F 72 20 33 3B 20 6D 61 79 62 65 20 65 6D 70 74 79 0A 23 20 4F 75 74 70 75 74 3A 20 6E 6F 6E 65 0A 23 0A 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 27 3E 3D 27 20 32 20 22 24 40 22 3B 0A 20 20 63 61 73 65 20 22 24 23 22 20 69 6E 0A 20 20 20 20 32 7C 33 29 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 72 72 6F 72 20 22 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 28 29 20 65 78 70 65 63 74 73 20 32 20 6F 72 20 33 20 61 72 67 75 6D 65 6E 74 73 2E 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 28 29 3A 20 66 69 6C 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 27 3B 0A 20 20 66 69 3B 0A 20 20 74 6F 5F 74 6D 70 20 22 24 31 22 3B 0A 20 20 63 61 73 65 20 22 24 23 22 20 69 6E 0A 20 20 20 20 32 29 0A 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 22 6D 61 6E 3A 24 32 22 3B 0A 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 33 29 0A 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 22 24 32 2E 24 33 22 3B 0A 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 20 28 3C 6E 61 6D 65 3E 20 3C 73 65 63 74 69 6F 6E 3E 29 0A 23 0A 23 20 52 65 74 72 69 65 76 65 20 6D 61 6E 20 70 61 67 65 73 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 0A 23 20 47 6C 6F 62 61 6C 73 20 20 20 3A 20 24 5F 4D 41 4E 5F 50 41 54 48 2C 20 24 5F 4D 41 4E 5F 45 58 54 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 30 20 69 66 20 66 6F 75 6E 64 2C 20 31 20 6F 74 68 65 72 77 69 73 65 0A 23 0A 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 64 69 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 65 78 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 67 6F 74 5F 6F 6E 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6E 61 6D 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 70 72 65 66 69 78 0A 20 20 6C 6F 63 61 6C 20 5F 73 65 63 74 69 6F 6E 3B 0A 20 20 6C 6F 63 61 6C 20 64 3B 0A 20 20 6C 6F 63 61 6C 20 66 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 6E 61 6D 65 3D 22 24 31 22 3B 0A 20 20 5F 73 65 63 74 69 6F 6E 3D 22 24 32 22 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 5F 4D 41 4E 5F 50 41 54 48 7D 22 29 22 3B 0A 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 6E 6F 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 45 58 54 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 66 6F 72 20 64 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 5F 64 69 72 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 64 22 20 22 6D 61 6E 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 29 22 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 64 69 72 20 69 73 5F 64 69 72 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 70 72 65 66 69 78 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 7B 5F 64 69 72 7D 22 20 22 24 7B 5F 6E 61 6D 65 7D 2E 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 66 6F 72 20 66 20 69 6E 20 24 28 65 63 68 6F 20 2D 6E 20 24 7B 5F 70 72 65 66 69 78 7D 2A 29 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 66 20 69 73 5F 66 69 6C 65 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 7B 5F 67 6F 74 5F 6F 6E 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 22 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 5F 65 78 74 3D 22 24 7B 5F 4D 41 4E 5F 45 58 54 7D 22 3B 0A 20 20 20 20 23 20 63 68 65 63 6B 20 66 6F 72 20 64 69 72 65 63 74 6F 72 79 20 6E 61 6D 65 20 68 61 76 69 6E 67 20 74 72 61 69 6C 69 6E 67 20 65 78 74 65 6E 73 69 6F 6E 0A 20 20 20 20 66 6F 72 20 64 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 5F 64 69 72 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 24 64 20 6D 61 6E 24 7B 5F 73 65 63 74 69 6F 6E 7D 24 7B 5F 65 78 74 7D 29 22 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 64 69 72 20 69 73 5F 64 69 72 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 70 72 65 66 69 78 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 7B 5F 64 69 72 7D 22 20 22 24 7B 5F 6E 61 6D 65 7D 2E 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 66 6F 72 20 66 20 69 6E 20 24 7B 5F 70 72 65 66 69 78 7D 2A 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 66 20 69 73 5F 66 69 6C 65 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 7B 5F 67 6F 74 5F 6F 6E 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 22 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 23 20 63 68 65 63 6B 20 66 6F 72 20 66 69 6C 65 73 20 77 69 74 68 20 65 78 74 65 6E 73 69 6F 6E 20 69 6E 20 64 69 72 65 63 74 6F 72 69 65 73 20 77 69 74 68 6F 75 74 20 65 78 74 65 6E 73 69 6F 6E 0A 20 20 20 20 66 6F 72 20 64 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 5F 64 69 72 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 64 22 20 22 6D 61 6E 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 29 22 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 64 69 72 20 69 73 5F 64 69 72 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 70 72 65 66 69 78 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 7B 5F 64 69 72 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 6E 61 6D 65 7D 2E 24 7B 5F 73 65 63 74 69 6F 6E 7D 24 7B 5F 65 78 74 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 66 6F 72 20 66 20 69 6E 20 24 7B 5F 70 72 65 66 69 78 7D 2A 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 66 20 69 73 5F 66 69 6C 65 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 7B 5F 67 6F 74 5F 6F 6E 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 5F 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 22 24 66 22 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 22 24 7B 5F 73 65 63 74 69 6F 6E 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 67 6F 74 5F 6F 6E 65 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 79 65 73 20 26 26 20 69 73 5F 79 65 73 20 22 24 7B 5F 67 6F 74 5F 6F 6E 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 67 6F 6F 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 20 23 20 6D 61 6E 5F 73 65 61 72 63 68 5F 73 65 63 74 69 6F 6E 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 5F 73 65 74 75 70 20 28 29 0A 23 0A 23 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 24 5F 4D 41 4E 5F 2A 20 6E 65 65 64 65 64 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 20 73 65 61 72 63 68 69 6E 67 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 20 20 20 20 24 5F 4F 50 54 5F 2A 2C 20 24 5F 4D 41 4E 4F 50 54 5F 2A 2C 20 24 4C 41 4E 47 2C 20 24 4C 43 5F 4D 45 53 53 41 47 45 53 2C 20 24 4C 43 5F 41 4C 4C 2C 0A 23 20 20 20 20 20 20 20 20 20 20 20 24 4D 41 4E 50 41 54 48 2C 20 24 4D 41 4E 52 4F 46 46 53 45 51 2C 20 24 4D 41 4E 53 45 43 2C 20 24 50 41 47 45 52 2C 20 24 53 59 53 54 45 4D 2C 20 24 4D 41 4E 4F 50 54 2E 0A 23 20 20 20 6F 75 74 3A 20 20 20 20 24 5F 4D 41 4E 5F 50 41 54 48 2C 20 24 5F 4D 41 4E 5F 4C 41 4E 47 2C 20 24 5F 4D 41 4E 5F 53 59 53 2C 20 24 5F 4D 41 4E 5F 4C 41 4E 47 2C 20 24 5F 4D 41 4E 5F 4C 41 4E 47 32 2C 0A 23 20 20 20 20 20 20 20 20 20 20 20 24 5F 4D 41 4E 5F 53 45 43 2C 20 24 5F 4D 41 4E 5F 41 4C 4C 0A 23 20 20 20 69 6E 2F 6F 75 74 3A 20 24 5F 4D 41 4E 5F 45 4E 41 42 4C 45 0A 23 0A 23 20 54 68 65 20 70 72 65 63 65 64 65 6E 63 65 20 66 6F 72 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 72 65 6C 61 74 65 64 20 74 6F 20 60 6D 61 6E 27 20 69 73 20 74 68 61 74 20 6F 66 20 47 4E 55 0A 23 20 60 6D 61 6E 27 2C 20 69 2E 65 2E 0A 23 0A 23 20 24 4C 41 4E 47 3B 20 6F 76 65 72 72 69 64 64 65 6E 20 62 79 0A 23 20 24 4C 43 5F 4D 45 53 53 41 47 45 53 3B 20 6F 76 65 72 72 69 64 64 65 6E 20 62 79 0A 23 20 24 4C 43 5F 41 4C 4C 3B 20 74 68 69 73 20 68 61 73 20 74 68 65 20 73 61 6D 65 20 70 72 65 63 65 64 65 6E 63 65 20 61 73 0A 23 20 24 4D 41 4E 50 41 54 48 2C 20 24 4D 41 4E 52 4F 46 46 53 45 51 2C 20 24 4D 41 4E 53 45 43 2C 20 24 50 41 47 45 52 2C 20 24 53 59 53 54 45 4D 3B 20 6F 76 65 72 72 69 64 64 65 6E 20 62 79 0A 23 20 24 4D 41 4E 4F 50 54 3B 20 6F 76 65 72 72 69 64 64 65 6E 20 62 79 0A 23 20 74 68 65 20 67 72 6F 66 66 65 72 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 6F 70 74 69 6F 6E 73 2E 0A 23 0A 6D 61 6E 5F 73 65 74 75 70 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 6D 61 6E 5F 73 65 74 75 70 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 61 6E 67 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 4D 41 4E 5F 49 53 5F 53 45 54 55 50 3D 27 79 65 73 27 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 20 69 73 5F 6E 6F 74 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 23 20 64 65 74 65 72 6D 69 6E 65 20 62 61 73 69 63 20 70 61 74 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 4D 41 4E 50 41 54 48 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 50 41 54 48 7D 22 20 22 24 7B 4D 41 4E 50 41 54 48 7D 22 29 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 6D 61 6E 70 61 74 68 5F 73 65 74 5F 66 72 6F 6D 5F 70 61 74 68 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 22 24 28 70 61 74 68 5F 63 6C 65 61 6E 20 22 24 7B 5F 4D 41 4E 5F 50 41 54 48 7D 22 29 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 69 73 5F 70 72 6F 67 20 27 6D 61 6E 70 61 74 68 27 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 22 24 28 6D 61 6E 70 61 74 68 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 29 22 3B 20 23 20 6E 6F 74 20 61 6C 77 61 79 73 20 61 76 61 69 6C 61 62 6C 65 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 22 6E 6F 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 4D 41 4E 5F 41 4C 4C 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 22 24 7B 5F 4F 50 54 5F 41 4C 4C 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 41 4C 4C 7D 22 29 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 41 4C 4C 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 5F 4D 41 4E 5F 41 4C 4C 3D 27 6E 6F 27 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 4D 41 4E 5F 53 59 53 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 53 59 53 54 45 4D 53 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 53 59 53 7D 22 20 22 24 7B 53 59 53 54 45 4D 7D 22 29 22 3B 0A 20 20 5F 6C 61 6E 67 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 4C 41 4E 47 7D 22 20 22 24 7B 4C 43 5F 41 4C 4C 7D 22 20 22 24 7B 4C 43 5F 4D 45 53 53 41 47 45 53 7D 22 20 22 24 7B 4C 41 4E 47 7D 22 29 22 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 6C 61 6E 67 7D 22 20 69 6E 0A 20 20 20 20 43 7C 50 4F 53 49 58 29 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 3D 22 22 3B 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 32 3D 22 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 3F 29 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 3D 22 24 7B 5F 6C 61 6E 67 7D 22 3B 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 32 3D 22 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 3D 22 24 7B 5F 6C 61 6E 67 7D 22 3B 0A 20 20 20 20 20 20 23 20 67 65 74 20 66 69 72 73 74 20 74 77 6F 20 63 68 61 72 61 63 74 65 72 73 20 6F 66 20 24 5F 6C 61 6E 67 0A 20 20 20 20 20 20 5F 4D 41 4E 5F 4C 41 4E 47 32 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6C 61 6E 67 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 5C 28 2E 2E 5C 29 2E 2A 24 2F 5C 31 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 23 20 66 72 6F 6D 20 6E 6F 77 20 6F 6E 2C 20 75 73 65 20 6F 6E 6C 79 20 24 5F 4C 41 4E 47 2C 20 66 6F 72 67 65 74 20 61 62 6F 75 74 20 24 5F 4F 50 54 5F 4C 41 4E 47 2C 20 24 4C 43 5F 2A 2E 0A 0A 20 20 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 3B 09 09 23 20 74 68 69 73 20 69 73 20 76 65 72 79 20 73 6C 6F 77 0A 0A 20 20 5F 4D 41 4E 5F 53 45 43 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 53 45 43 54 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 53 45 43 7D 22 20 22 24 7B 4D 41 4E 53 45 43 7D 22 29 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 22 6E 6F 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 4D 41 4E 5F 45 58 54 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 45 58 54 45 4E 53 49 4F 4E 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 45 58 54 45 4E 53 49 4F 4E 7D 22 29 22 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 6E 5F 73 65 74 75 70 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 38 3A 20 6D 61 6E 70 61 74 68 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 20 28 29 0A 23 0A 23 20 41 64 64 20 6C 61 6E 67 75 61 67 65 20 61 6E 64 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 20 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6F 72 69 65 73 20 74 6F 20 6D 61 6E 20 70 61 74 68 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 30 0A 23 20 4F 75 74 70 75 74 20 20 20 20 3A 20 6E 6F 6E 65 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 20 20 20 20 24 5F 4D 41 4E 5F 53 59 53 3A 20 68 61 73 20 74 68 65 20 66 6F 72 6D 20 60 6F 73 31 2C 6F 73 32 2C 2E 2E 2E 27 2C 20 61 20 63 6F 6D 6D 61 20 73 65 70 61 72 61 74 65 64 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 20 6F 66 20 6E 61 6D 65 73 20 6F 66 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74 65 6D 73 2E 0A 23 20 20 20 20 20 20 20 20 20 20 20 24 5F 4D 41 4E 5F 4C 41 4E 47 20 61 6E 64 20 24 5F 4D 41 4E 5F 4C 41 4E 47 32 3A 20 65 61 63 68 20 61 20 73 69 6E 67 6C 65 20 6E 61 6D 65 0A 23 20 20 20 69 6E 2F 6F 75 74 3A 20 24 5F 4D 41 4E 5F 50 41 54 48 3A 20 68 61 73 20 74 68 65 20 66 6F 72 6D 20 60 64 69 72 31 3A 64 69 72 32 3A 2E 2E 2E 27 2C 20 61 20 63 6F 6C 6F 6E 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 64 69 72 65 63 74 6F 72 69 65 73 2E 0A 23 0A 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 70 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 70 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4D 41 4E 5F 50 41 54 48 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 23 20 74 77 69 63 65 20 74 65 73 74 20 62 6F 74 68 20 73 79 73 20 61 6E 64 20 6C 61 6E 67 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 5F 4D 41 4E 5F 50 41 54 48 7D 22 29 22 3B 0A 20 20 5F 6D 70 3D 27 27 3B 0A 20 20 66 6F 72 20 70 20 69 6E 20 22 24 40 22 3B 20 64 6F 09 09 23 20 6C 6F 6F 70 20 6F 6E 20 6D 61 6E 20 70 61 74 68 20 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 20 20 5F 6D 70 3D 22 24 28 5F 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 5F 73 69 6E 67 6C 65 20 22 24 7B 5F 6D 70 7D 22 20 22 24 70 22 29 22 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 5F 6D 70 7D 22 29 22 3B 0A 20 20 66 6F 72 20 70 20 69 6E 20 22 24 40 22 3B 20 64 6F 09 09 23 20 6C 6F 6F 70 20 6F 6E 20 6D 61 6E 20 70 61 74 68 20 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 20 20 5F 6D 70 3D 22 24 28 5F 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 5F 73 69 6E 67 6C 65 20 22 24 7B 5F 6D 70 7D 22 20 22 24 70 22 29 22 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 22 24 28 70 61 74 68 5F 63 68 6F 70 20 22 24 7B 5F 6D 70 7D 22 29 22 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 5F 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 5F 73 69 6E 67 6C 65 28 29 0A 7B 0A 20 20 23 20 54 6F 20 74 68 65 20 64 69 72 65 63 74 6F 72 79 20 69 6E 20 24 31 20 61 70 70 65 6E 64 20 65 78 69 73 74 69 6E 67 20 73 79 73 2F 6C 61 6E 67 20 73 75 62 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 23 20 46 75 6E 63 74 69 6F 6E 20 69 73 20 6E 65 63 65 73 73 61 72 79 20 74 6F 20 73 70 6C 69 74 20 74 68 65 20 4F 53 20 6C 69 73 74 2E 0A 20 20 23 0A 20 20 23 20 67 6C 6F 62 61 6C 73 3A 20 69 6E 3A 20 24 5F 4D 41 4E 5F 53 59 53 2C 20 24 5F 4D 41 4E 5F 4C 41 4E 47 2C 20 24 5F 4D 41 4E 5F 4C 41 4E 47 32 0A 20 20 23 20 61 72 67 75 6D 65 6E 74 3A 20 32 3A 20 60 6D 61 6E 5F 70 61 74 68 27 20 61 6E 64 20 60 64 69 72 27 0A 20 20 23 20 6F 75 74 70 75 74 3A 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 70 61 74 68 20 6F 66 20 74 68 65 20 72 65 74 72 69 65 76 65 64 20 73 75 62 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 23 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 5F 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 5F 73 69 6E 67 6C 65 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 64 3B 0A 20 20 5F 72 65 73 3D 22 24 31 22 3B 0A 20 20 5F 70 61 72 65 6E 74 3D 22 24 32 22 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 22 24 7B 5F 4D 41 4E 5F 53 59 53 7D 22 20 27 2C 27 29 22 3B 0A 20 20 66 6F 72 20 64 20 69 6E 20 22 24 40 22 20 22 24 7B 5F 4D 41 4E 5F 4C 41 4E 47 7D 22 20 22 24 7B 5F 4D 41 4E 5F 4C 41 4E 47 32 7D 22 3B 20 64 6F 0A 20 20 20 20 5F 64 69 72 3D 22 24 28 64 69 72 6E 61 6D 65 5F 61 70 70 65 6E 64 20 22 24 7B 5F 70 61 72 65 6E 74 7D 22 20 22 24 64 22 29 22 3B 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 72 65 73 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 22 24 7B 5F 64 69 72 7D 22 20 26 26 20 6F 62 6A 20 5F 64 69 72 20 69 73 5F 64 69 72 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 72 65 73 3D 22 24 7B 5F 72 65 73 7D 3A 24 7B 5F 64 69 72 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 69 66 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 22 24 7B 5F 72 65 73 7D 22 20 22 24 7B 5F 70 61 72 65 6E 74 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 5F 72 65 73 3D 22 24 7B 5F 72 65 73 7D 3A 24 7B 5F 70 61 72 65 6E 74 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 70 61 74 68 5F 63 68 6F 70 20 22 24 7B 5F 72 65 73 7D 22 3B 0A 7D 0A 0A 23 20 65 6E 64 20 6D 61 6E 70 61 74 68 5F 61 64 64 5F 6C 61 6E 67 5F 73 79 73 20 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 6E 70 61 74 68 5F 73 65 74 5F 66 72 6F 6D 5F 70 61 74 68 20 28 29 0A 23 0A 23 20 44 65 74 65 72 6D 69 6E 65 20 62 61 73 69 63 20 73 65 61 72 63 68 20 70 61 74 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 20 66 72 6F 6D 20 24 50 41 54 48 2E 0A 23 0A 23 20 52 65 74 75 72 6E 3A 20 20 20 20 60 30 27 20 69 66 20 61 20 76 61 6C 69 64 20 6D 61 6E 20 70 61 74 68 20 77 61 73 20 72 65 74 72 69 65 76 65 64 2E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 20 6E 6F 6E 65 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 20 24 50 41 54 48 0A 23 20 20 20 6F 75 74 3A 20 24 5F 4D 41 4E 5F 50 41 54 48 0A 23 0A 6D 61 6E 70 61 74 68 5F 73 65 74 5F 66 72 6F 6D 5F 70 61 74 68 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 6E 70 61 74 68 5F 73 65 74 5F 66 72 6F 6D 5F 70 61 74 68 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 62 61 73 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 61 6E 64 69 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 61 6E 70 61 74 68 3B 0A 20 20 6C 6F 63 61 6C 20 64 3B 0A 20 20 6C 6F 63 61 6C 20 65 3B 0A 20 20 5F 6D 61 6E 70 61 74 68 3D 27 27 3B 0A 0A 20 20 23 20 67 65 74 20 61 20 62 61 73 69 63 20 6D 61 6E 20 70 61 74 68 20 66 72 6F 6D 20 24 50 41 54 48 0A 20 20 69 66 20 6F 62 6A 20 50 41 54 48 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 50 41 54 48 7D 22 29 22 3B 0A 20 20 20 20 66 6F 72 20 64 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 74 68 65 20 66 69 6E 61 6C 20 60 2F 62 69 6E 27 20 70 61 72 74 0A 20 20 20 20 20 20 5F 62 61 73 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 64 22 20 7C 20 73 65 64 20 2D 65 20 27 5C 7C 2E 2A 7C 73 7C 2F 2F 2A 62 69 6E 2F 2A 24 7C 7C 27 29 22 3B 0A 20 20 20 20 20 20 66 6F 72 20 65 20 69 6E 20 2F 73 68 61 72 65 2F 6D 61 6E 20 2F 6D 61 6E 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 5F 6D 61 6E 64 69 72 3D 22 24 7B 5F 62 61 73 65 7D 24 65 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 7B 5F 6D 61 6E 64 69 72 7D 22 20 26 26 20 74 65 73 74 20 2D 72 20 22 24 7B 5F 6D 61 6E 64 69 72 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 6D 61 6E 70 61 74 68 3D 22 24 7B 5F 6D 61 6E 70 61 74 68 7D 3A 24 7B 5F 6D 61 6E 64 69 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 64 6F 6E 65 3B 0A 20 20 66 69 3B 0A 0A 20 20 23 20 61 70 70 65 6E 64 20 73 6F 6D 65 20 64 65 66 61 75 6C 74 20 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 66 6F 72 20 64 20 69 6E 20 2F 75 73 72 2F 6C 6F 63 61 6C 2F 73 68 61 72 65 2F 6D 61 6E 20 2F 75 73 72 2F 6C 6F 63 61 6C 2F 6D 61 6E 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 75 73 72 2F 73 68 61 72 65 2F 6D 61 6E 20 2F 75 73 72 2F 6D 61 6E 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 75 73 72 2F 58 31 31 52 36 2F 6D 61 6E 20 2F 75 73 72 2F 6F 70 65 6E 77 69 6E 2F 6D 61 6E 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 6F 70 74 2F 73 68 61 72 65 2F 6D 61 6E 20 2F 6F 70 74 2F 6D 61 6E 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 2F 6F 70 74 2F 67 6E 6F 6D 65 2F 6D 61 6E 20 2F 6F 70 74 2F 6B 64 65 2F 6D 61 6E 3B 20 64 6F 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 6D 61 6E 70 61 74 68 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 22 24 64 22 20 26 26 20 6F 62 6A 20 64 20 69 73 5F 64 69 72 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 6D 61 6E 70 61 74 68 3D 22 24 7B 5F 6D 61 6E 70 61 74 68 7D 3A 24 64 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 0A 20 20 5F 4D 41 4E 5F 50 41 54 48 3D 22 24 7B 5F 6D 61 6E 70 61 74 68 7D 22 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 6E 70 61 74 68 5F 73 65 74 5F 66 72 6F 6D 5F 70 61 74 68 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 39 3A 20 6F 62 6A 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6F 62 6A 20 28 3C 6F 62 6A 65 63 74 3E 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 20 3C 61 72 67 3E 2E 2E 2E 29 0A 23 0A 23 20 54 68 69 73 20 77 6F 72 6B 73 20 6C 69 6B 65 20 61 20 6D 65 74 68 6F 64 20 28 6F 62 6A 65 63 74 20 66 75 6E 63 74 69 6F 6E 29 20 63 61 6C 6C 20 66 6F 72 20 61 6E 20 6F 62 6A 65 63 74 2E 0A 23 20 52 75 6E 20 22 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 20 24 3C 6F 62 6A 65 63 74 3E 20 3C 61 72 67 3E 20 2E 2E 2E 22 2E 0A 23 0A 23 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75 6D 65 6E 74 20 72 65 70 72 65 73 65 6E 74 73 20 61 6E 20 6F 62 6A 65 63 74 20 77 68 6F 73 65 20 64 61 74 61 20 69 73 20 67 69 76 65 6E 20 61 73 20 66 69 72 73 74 0A 23 20 61 72 67 75 6D 65 6E 74 20 74 6F 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 28 29 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 3A 20 3E 3D 32 0A 23 20 20 20 20 20 20 20 20 20 20 20 3C 6F 62 6A 65 63 74 3E 3A 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 0A 23 20 20 20 20 20 20 20 20 20 20 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 3A 20 61 20 70 72 6F 67 72 61 6D 20 6F 72 20 66 75 6E 63 74 69 6F 6E 20 6E 61 6D 65 0A 23 0A 6F 62 6A 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6F 62 6A 20 27 3E 3D 27 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 66 75 6E 63 3B 0A 20 20 6C 6F 63 61 6C 20 76 61 72 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 6F 62 6A 28 29 3A 20 66 75 6E 63 74 69 6F 6E 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 2E 22 0A 20 20 65 6C 73 65 0A 20 20 20 20 66 75 6E 63 3D 22 24 32 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 61 72 67 31 3D 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 20 20 73 68 69 66 74 3B 0A 20 20 73 68 69 66 74 3B 0A 20 20 65 76 61 6C 20 22 24 7B 66 75 6E 63 7D 22 27 20 22 24 7B 61 72 67 31 7D 22 20 22 24 40 22 27 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6F 62 6A 5F 64 61 74 61 20 28 3C 6F 62 6A 65 63 74 3E 29 0A 23 0A 23 20 50 72 69 6E 74 20 74 68 65 20 64 61 74 61 20 6F 66 20 3C 6F 62 6A 65 63 74 3E 2C 20 69 2E 65 2E 20 74 68 65 20 63 6F 6E 74 65 6E 74 20 6F 66 20 24 3C 6F 62 6A 65 63 74 3E 2E 0A 23 20 46 6F 72 20 70 6F 73 73 69 62 6C 65 20 6C 61 74 65 72 20 65 78 74 65 6E 73 69 6F 6E 73 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 6F 62 6A 65 63 74 3E 3A 20 61 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 20 74 68 65 20 64 61 74 61 20 6F 66 20 3C 6F 62 6A 65 63 74 3E 0A 23 0A 6F 62 6A 5F 64 61 74 61 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6F 62 6A 20 27 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 6F 62 6A 5F 64 61 74 61 28 29 3A 20 6F 62 6A 65 63 74 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 2E 22 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 65 63 68 6F 20 2D 6E 20 27 22 24 7B 27 24 31 27 7D 22 27 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6F 62 6A 5F 66 72 6F 6D 5F 6F 75 74 70 75 74 20 28 3C 6F 62 6A 65 63 74 3E 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 20 3C 61 72 67 3E 2E 2E 2E 29 0A 23 0A 23 20 52 75 6E 20 27 24 3C 6F 62 6A 65 63 74 3E 3D 22 24 28 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 20 3C 61 72 67 3E 2E 2E 2E 29 22 27 20 74 6F 20 73 65 74 20 74 68 65 20 72 65 73 75 6C 74 20 6F 66 20 61 0A 23 20 66 75 6E 63 74 69 6F 6E 20 63 61 6C 6C 20 74 6F 20 61 20 67 6C 6F 62 61 6C 20 76 61 72 69 61 62 6C 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 3E 3D 32 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 6F 62 6A 65 63 74 3E 3A 20 61 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 3A 20 74 68 65 20 6E 61 6D 65 20 6F 66 20 61 20 66 75 6E 63 74 69 6F 6E 20 6F 72 20 70 72 6F 67 72 61 6D 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 61 72 67 3E 3A 20 6F 70 74 69 6F 6E 61 6C 20 61 72 67 75 6D 65 6E 74 20 74 6F 20 3C 63 61 6C 6C 5F 6E 61 6D 65 3E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 20 6E 6F 6E 65 0A 23 0A 6F 62 6A 5F 66 72 6F 6D 5F 6F 75 74 70 75 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6F 62 6A 5F 66 72 6F 6D 5F 6F 75 74 70 75 74 20 27 3E 3D 27 20 32 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 72 65 73 75 6C 74 5F 6E 61 6D 65 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 72 65 73 28 29 3A 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 2E 22 3B 0A 20 20 65 6C 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 72 65 73 28 29 3A 20 66 75 6E 63 74 69 6F 6E 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 2E 22 0A 20 20 65 6C 73 65 0A 20 20 20 20 72 65 73 75 6C 74 5F 6E 61 6D 65 3D 22 24 31 22 3B 0A 20 20 66 69 3B 0A 20 20 73 68 69 66 74 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 73 75 6C 74 5F 6E 61 6D 65 7D 22 27 3D 22 24 28 27 22 24 40 22 27 29 22 27 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6F 62 6A 5F 73 65 74 20 28 3C 6F 62 6A 65 63 74 3E 20 3C 64 61 74 61 3E 29 0A 23 0A 23 20 53 65 74 20 74 68 65 20 64 61 74 61 20 6F 66 20 3C 6F 62 6A 65 63 74 3E 2C 20 69 2E 65 2E 20 63 61 6C 6C 20 22 24 3C 6F 62 6A 65 63 74 3E 3D 3C 64 61 74 61 3E 22 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 32 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 6F 62 6A 65 63 74 3E 3A 20 61 20 76 61 72 69 61 62 6C 65 20 6E 61 6D 65 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 3C 64 61 74 61 3E 3A 20 61 20 73 74 72 69 6E 67 0A 23 20 4F 75 74 70 75 74 3A 3A 20 20 20 6E 6F 6E 65 0A 23 0A 6F 62 6A 5F 73 65 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6F 62 6A 5F 73 65 74 20 27 3D 27 20 32 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 6F 62 6A 5F 73 65 74 28 29 3A 20 6F 62 6A 65 63 74 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 2E 22 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 31 22 3D 27 22 24 32 22 27 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 70 61 74 68 5F 63 68 6F 70 20 28 3C 70 61 74 68 3E 29 0A 23 0A 23 20 52 65 6D 6F 76 65 20 75 6E 6E 65 63 65 73 73 61 72 79 20 63 6F 6C 6F 6E 73 20 66 72 6F 6D 20 70 61 74 68 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 3A 20 31 2C 20 61 20 63 6F 6C 6F 6E 20 73 65 70 61 72 61 74 65 64 20 70 61 74 68 2E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 70 61 74 68 20 77 69 74 68 6F 75 74 20 6C 65 61 64 69 6E 67 2C 20 64 6F 75 62 6C 65 2C 20 6F 72 20 74 72 61 69 6C 69 6E 67 20 63 6F 6C 6F 6E 73 2E 0A 23 0A 70 61 74 68 5F 63 68 6F 70 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 70 61 74 68 5F 63 68 6F 70 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 0A 20 20 23 20 72 65 70 6C 61 63 65 20 6D 75 6C 74 69 70 6C 65 20 63 6F 6C 6F 6E 73 20 62 79 20 61 20 73 69 6E 67 6C 65 20 63 6F 6C 6F 6E 20 60 3A 27 0A 20 20 23 20 72 65 6D 6F 76 65 20 6C 65 61 64 69 6E 67 20 61 6E 64 20 74 72 61 69 6C 69 6E 67 20 63 6F 6C 6F 6E 73 0A 20 20 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 3A 3A 3A 2A 2F 3A 2F 67 27 20 7C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 64 20 2D 65 20 27 73 2F 5E 3A 2A 2F 2F 27 20 7C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 64 20 2D 65 20 27 73 2F 3A 2A 24 2F 2F 27 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 70 61 74 68 5F 63 6C 65 61 6E 20 28 3C 70 61 74 68 3E 29 0A 23 0A 23 20 52 65 6D 6F 76 65 20 6E 6F 6E 2D 65 78 69 73 74 69 6E 67 20 64 69 72 65 63 74 6F 72 69 65 73 20 66 72 6F 6D 20 61 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 3A 20 31 2C 20 61 20 63 6F 6C 6F 6E 20 73 65 70 61 72 61 74 65 64 20 70 61 74 68 2E 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 65 78 69 73 74 69 6E 67 20 64 69 72 65 63 74 6F 72 69 65 73 2E 0A 23 0A 70 61 74 68 5F 63 6C 65 61 6E 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 70 61 74 68 5F 63 6C 65 61 6E 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 61 72 67 3B 0A 20 20 6C 6F 63 61 6C 20 5F 64 69 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 23 22 20 31 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 70 61 74 68 5F 63 6C 65 61 6E 28 29 20 6E 65 65 64 73 20 31 20 61 72 67 75 6D 65 6E 74 2E 27 3B 0A 20 20 66 69 3B 0A 20 20 5F 61 72 67 3D 22 24 31 22 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 5F 61 72 67 7D 22 29 22 3B 0A 20 20 5F 72 65 73 3D 22 22 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 69 66 20 6F 62 6A 20 69 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 5C 0A 20 20 20 20 20 20 20 26 26 20 6F 62 6A 20 5F 72 65 73 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 22 24 69 22 20 5C 0A 20 20 20 20 20 20 20 26 26 20 6F 62 6A 20 69 20 69 73 5F 64 69 72 3B 0A 20 20 20 20 74 68 65 6E 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 69 22 20 69 6E 0A 20 20 20 20 20 20 20 20 3F 2A 2F 29 20 5F 72 65 73 3D 22 24 7B 5F 72 65 73 7D 24 28 64 69 72 6E 61 6D 65 5F 63 68 6F 70 20 22 24 69 22 29 22 3B 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 20 20 5F 72 65 73 3D 22 24 7B 5F 72 65 73 7D 3A 24 69 22 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 69 66 20 70 61 74 68 5F 63 68 6F 70 20 22 24 7B 5F 72 65 73 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 6B 7D 22 3B 0A 20 20 66 69 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 70 61 74 68 5F 63 6F 6E 74 61 69 6E 73 20 28 3C 70 61 74 68 3E 20 3C 64 69 72 3E 29 0A 23 2D 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 64 69 72 27 20 69 73 20 63 6F 6E 74 61 69 6E 65 64 20 69 6E 20 60 70 61 74 68 27 2C 20 61 20 6C 69 73 74 20 73 65 70 61 72 61 74 65 64 20 62 79 20 60 3A 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 32 20 69 73 20 73 75 62 73 74 72 69 6E 67 20 6F 66 20 61 72 67 31 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 70 61 74 68 5F 63 6F 6E 74 61 69 6E 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 70 61 74 68 5F 63 6F 6E 74 61 69 6E 73 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 63 61 73 65 20 22 3A 24 31 3A 22 20 69 6E 0A 20 20 20 20 2A 22 3A 24 32 3A 22 2A 29 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 28 3C 70 61 74 68 3E 20 3C 64 69 72 3E 29 0A 23 2D 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 64 69 72 27 20 69 73 20 6E 6F 74 20 63 6F 6E 74 61 69 6E 65 64 20 69 6E 20 63 6F 6C 6F 6E 20 73 65 70 61 72 61 74 65 64 20 60 70 61 74 68 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 0A 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 70 61 74 68 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 69 66 20 70 61 74 68 5F 63 6F 6E 74 61 69 6E 73 20 22 24 31 22 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 70 61 74 68 5F 73 70 6C 69 74 20 28 3C 70 61 74 68 3E 29 0A 23 0A 23 20 49 6E 20 60 70 61 74 68 27 20 65 73 63 61 70 65 20 77 68 69 74 65 20 73 70 61 63 65 20 61 6E 64 20 72 65 70 6C 61 63 65 20 65 61 63 68 20 63 6F 6C 6F 6E 20 62 79 20 61 20 73 70 61 63 65 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 3A 20 61 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 70 61 74 68 0A 23 20 4F 75 74 70 75 74 3A 20 20 20 20 74 68 65 20 72 65 73 75 6C 74 69 6E 67 20 6C 69 73 74 2C 20 70 72 6F 63 65 73 73 20 77 69 74 68 20 60 65 76 61 6C 20 73 65 74 20 2D 2D 27 0A 23 0A 70 61 74 68 5F 73 70 6C 69 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 70 61 74 68 5F 73 70 6C 69 74 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 22 24 31 22 20 27 3A 27 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 30 3A 20 72 65 67 69 73 74 65 72 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 28 3C 66 69 6C 65 6E 61 6D 65 3E 29 0A 23 0A 23 20 57 72 69 74 65 20 61 20 66 6F 75 6E 64 20 66 69 6C 65 20 61 6E 64 20 72 65 67 69 73 74 65 72 20 74 68 65 20 74 69 74 6C 65 20 65 6C 65 6D 65 6E 74 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 3A 20 61 20 66 69 6C 65 20 6E 61 6D 65 0A 23 20 4F 75 74 70 75 74 3A 20 6E 6F 6E 65 0A 23 0A 72 65 67 69 73 74 65 72 5F 66 69 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 27 72 65 67 69 73 74 65 72 5F 66 69 6C 65 28 29 3A 20 66 69 6C 65 20 6E 61 6D 65 20 69 73 20 65 6D 70 74 79 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 31 22 20 27 2D 27 3B 20 74 68 65 6E 0A 20 20 20 20 74 6F 5F 74 6D 70 20 22 24 7B 5F 54 4D 50 5F 53 54 44 49 4E 7D 22 3B 0A 20 20 20 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 27 2D 27 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 74 6F 5F 74 6D 70 20 22 24 31 22 3B 0A 20 20 20 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 22 24 28 62 61 73 65 5F 6E 61 6D 65 20 22 24 31 22 29 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 28 3C 66 69 6C 65 73 70 65 63 3E 29 0A 23 0A 23 20 43 72 65 61 74 65 20 74 69 74 6C 65 20 65 6C 65 6D 65 6E 74 20 66 72 6F 6D 20 3C 66 69 6C 65 73 70 65 63 3E 20 61 6E 64 20 61 70 70 65 6E 64 20 74 6F 20 24 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 20 28 72 77 29 0A 23 0A 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 72 65 67 69 73 74 65 72 5F 74 69 74 6C 65 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 74 69 74 6C 65 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 74 69 74 6C 65 3D 22 24 28 62 61 73 65 5F 6E 61 6D 65 20 22 24 31 22 29 22 3B 09 23 20 72 65 6D 6F 76 65 20 64 69 72 65 63 74 6F 72 79 20 70 61 72 74 0A 20 20 0A 20 20 23 20 72 65 6D 6F 76 65 20 65 78 74 65 6E 73 69 6F 6E 20 60 2E 67 7A 27 0A 20 20 5F 74 69 74 6C 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 74 69 74 6C 65 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5C 2E 67 7A 24 2F 2F 27 29 22 3B 0A 20 20 23 20 72 65 6D 6F 76 65 20 65 78 74 65 6E 73 69 6F 6E 20 60 2E 5A 27 0A 20 20 5F 74 69 74 6C 65 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 74 69 74 6C 65 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5C 2E 5A 24 2F 2F 27 29 22 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 74 69 74 6C 65 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 3D 22 24 7B 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 7D 20 24 7B 5F 74 69 74 6C 65 7D 22 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 72 65 73 65 74 20 28 29 0A 23 0A 23 20 52 65 73 65 74 20 74 68 65 20 76 61 72 69 61 62 6C 65 73 20 74 68 61 74 20 63 61 6E 20 62 65 20 61 66 66 65 63 74 65 64 20 62 79 20 6F 70 74 69 6F 6E 73 20 74 6F 20 74 68 65 69 72 20 64 65 66 61 75 6C 74 2E 0A 23 0A 23 0A 23 20 44 65 66 69 6E 65 64 20 69 6E 20 73 65 63 74 69 6F 6E 20 60 50 72 65 73 65 74 27 20 61 66 74 65 72 20 74 68 65 20 72 75 64 69 6D 65 6E 74 61 72 79 20 73 68 65 6C 6C 20 74 65 73 74 73 2E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 73 61 76 65 5F 73 74 64 69 6E 20 28 29 0A 23 0A 23 20 53 74 6F 72 65 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 20 74 6F 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 20 28 77 69 74 68 20 64 65 63 6F 6D 70 72 65 73 73 69 6F 6E 29 2E 0A 23 0A 69 66 20 6F 62 6A 20 5F 48 41 53 5F 43 4F 4D 50 52 45 53 53 49 4F 4E 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 73 61 76 65 5F 73 74 64 69 6E 28 29 0A 20 20 7B 0A 20 20 20 20 6C 6F 63 61 6C 20 5F 66 3B 0A 20 20 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 73 61 76 65 5F 73 74 64 69 6E 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 20 20 20 5F 66 3D 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 2F 49 4E 50 55 54 3B 0A 20 20 20 20 63 61 74 20 3E 22 24 7B 5F 66 7D 22 3B 0A 20 20 20 20 63 61 74 7A 20 22 24 7B 5F 66 7D 22 20 3E 22 24 7B 5F 54 4D 50 5F 53 54 44 49 4E 7D 22 3B 0A 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 66 7D 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 7D 0A 65 6C 73 65 0A 20 20 73 61 76 65 5F 73 74 64 69 6E 28 29 0A 20 20 7B 0A 20 20 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 73 61 76 65 5F 73 74 64 69 6E 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 20 20 63 61 74 20 3E 22 24 7B 5F 54 4D 50 5F 53 54 44 49 4E 7D 22 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 7D 0A 66 69 3B 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 31 3A 20 73 74 61 63 6B 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 28 3C 73 74 72 69 6E 67 3E 20 3C 70 61 72 74 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 70 61 72 74 27 20 69 73 20 63 6F 6E 74 61 69 6E 65 64 20 69 6E 20 60 73 74 72 69 6E 67 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 20 74 65 78 74 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 32 20 69 73 20 73 75 62 73 74 72 69 6E 67 20 6F 66 20 61 72 67 31 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 63 61 73 65 20 22 24 31 22 20 69 6E 0A 20 20 20 20 2A 22 24 32 22 2A 29 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 73 74 72 69 6E 67 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 28 3C 73 74 72 69 6E 67 3E 20 3C 70 61 72 74 3E 29 0A 23 0A 23 20 54 65 73 74 20 77 68 65 74 68 65 72 20 60 70 61 72 74 27 20 69 73 20 6E 6F 74 20 73 75 62 73 74 72 69 6E 67 20 6F 66 20 60 73 74 72 69 6E 67 27 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 32 20 74 65 78 74 20 61 72 67 75 6D 65 6E 74 73 2E 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 32 20 69 73 20 73 75 62 73 74 72 69 6E 67 20 6F 66 20 61 72 67 31 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 73 74 72 69 6E 67 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 73 74 72 69 6E 67 5F 6E 6F 74 5F 63 6F 6E 74 61 69 6E 73 20 3D 20 32 20 22 24 40 22 3B 0A 20 20 69 66 20 73 74 72 69 6E 67 5F 63 6F 6E 74 61 69 6E 73 20 22 24 31 22 20 22 24 32 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6E 6F 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 79 65 73 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 32 3A 20 74 6D 70 5F 2A 28 29 27 3B 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 74 6D 70 5F 63 61 74 20 28 29 0A 23 0A 23 20 6F 75 74 70 75 74 20 74 68 65 20 74 65 6D 70 6F 72 61 72 79 20 63 61 74 20 66 69 6C 65 20 28 74 68 65 20 63 6F 6E 63 61 74 65 6E 61 74 69 6F 6E 20 6F 66 20 61 6C 6C 20 69 6E 70 75 74 29 0A 23 0A 74 6D 70 5F 63 61 74 28 29 0A 7B 0A 20 20 63 61 74 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 74 6D 70 5F 63 72 65 61 74 65 20 28 3C 73 75 66 66 69 78 3E 3F 29 0A 23 0A 23 20 63 72 65 61 74 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 0A 23 0A 23 20 49 74 27 73 20 73 61 66 65 20 74 6F 20 75 73 65 20 74 68 65 20 73 68 65 6C 6C 20 70 72 6F 63 65 73 73 20 49 44 20 74 6F 67 65 74 68 65 72 20 77 69 74 68 20 61 20 73 75 66 66 69 78 20 74 6F 0A 23 20 68 61 76 65 20 6D 75 6C 74 69 70 6C 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 2E 0A 23 0A 23 20 4F 75 74 70 75 74 20 3A 20 6E 61 6D 65 20 6F 66 20 63 72 65 61 74 65 64 20 66 69 6C 65 0A 23 0A 74 6D 70 5F 63 72 65 61 74 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 74 6D 70 5F 63 72 65 61 74 65 20 27 3C 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 74 6D 70 3B 0A 20 20 23 20 74 68 65 20 6F 75 74 70 75 74 20 66 69 6C 65 20 64 6F 65 73 20 6E 6F 74 20 68 61 76 65 20 60 2C 27 20 61 73 20 66 69 72 73 74 20 63 68 61 72 61 63 74 65 72 0A 20 20 5F 74 6D 70 3D 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 2F 2C 24 31 22 3B 0A 20 20 65 63 68 6F 20 2D 6E 20 3E 22 24 7B 5F 74 6D 70 7D 22 3B 0A 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 74 6D 70 7D 22 3B 09 09 23 20 6F 75 74 70 75 74 20 66 69 6C 65 20 6E 61 6D 65 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 74 6F 5F 74 6D 70 20 28 3C 66 69 6C 65 6E 61 6D 65 3E 29 0A 23 0A 23 20 70 72 69 6E 74 20 66 69 6C 65 20 28 64 65 63 6F 6D 70 72 65 73 73 65 64 29 20 74 6F 20 74 68 65 20 74 65 6D 70 6F 72 61 72 79 20 63 61 74 20 66 69 6C 65 0A 23 0A 74 6F 5F 74 6D 70 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 74 6F 5F 74 6D 70 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 69 66 20 69 73 5F 66 69 6C 65 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 4C 4F 43 41 54 49 4F 4E 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 63 68 6F 32 20 22 24 31 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 57 48 41 54 49 53 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 77 68 61 74 5F 69 73 20 22 24 31 22 20 3E 3E 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 63 61 74 7A 20 22 24 31 22 20 3E 3E 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 65 72 72 6F 72 20 22 74 6F 5F 74 6D 70 28 29 3A 20 63 6F 75 6C 64 20 6E 6F 74 20 72 65 61 64 20 66 69 6C 65 20 5C 60 24 31 27 2E 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 74 72 61 70 5F 63 6C 65 61 6E 20 28 29 0A 23 0A 23 20 64 69 73 61 62 6C 65 20 74 72 61 70 20 6F 6E 20 61 6C 6C 20 65 78 69 74 20 63 6F 64 65 73 20 28 24 5F 41 4C 4C 5F 45 58 49 54 29 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 30 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 20 20 24 5F 41 4C 4C 5F 45 58 49 54 0A 23 0A 74 72 61 70 5F 63 6C 65 61 6E 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 74 72 61 70 5F 63 6C 65 61 6E 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 24 7B 5F 41 4C 4C 5F 45 58 49 54 7D 3B 20 64 6F 0A 20 20 20 20 74 72 61 70 20 22 22 20 22 24 69 22 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 74 72 75 65 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 74 72 61 70 5F 73 65 74 20 28 3C 66 75 6E 63 74 69 6F 6E 6E 61 6D 65 3E 29 0A 23 0A 23 20 63 61 6C 6C 20 66 75 6E 63 74 69 6F 6E 20 6F 6E 20 61 6C 6C 20 65 78 69 74 20 63 6F 64 65 73 20 28 24 5F 41 4C 4C 5F 45 58 49 54 29 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 20 28 6E 61 6D 65 20 6F 66 20 61 20 73 68 65 6C 6C 20 66 75 6E 63 74 69 6F 6E 29 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 20 20 24 5F 41 4C 4C 5F 45 58 49 54 0A 23 0A 74 72 61 70 5F 73 65 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 74 72 61 70 5F 73 65 74 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 24 7B 5F 41 4C 4C 5F 45 58 49 54 7D 3B 20 64 6F 0A 20 20 20 20 74 72 61 70 20 22 24 31 22 20 22 24 69 22 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 74 72 75 65 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 75 73 61 67 65 20 28 29 0A 23 0A 23 20 70 72 69 6E 74 20 75 73 61 67 65 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 74 6F 20 73 74 64 65 72 72 3B 20 66 6F 72 20 67 72 6F 66 66 65 72 20 6F 70 74 69 6F 6E 20 2D 2D 68 65 6C 70 2E 0A 23 0A 75 73 61 67 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 75 73 61 67 65 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 65 63 68 6F 3B 0A 20 20 76 65 72 73 69 6F 6E 3B 0A 20 20 65 63 68 6F 20 27 55 73 61 67 65 3A 20 27 22 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 22 27 20 5B 6F 70 74 69 6F 6E 5D 2E 2E 2E 20 5B 66 69 6C 65 73 70 65 63 5D 2E 2E 2E 27 3B 0A 20 20 63 61 74 20 3C 3C 45 4F 46 0A 0A 44 69 73 70 6C 61 79 20 72 6F 66 66 20 66 69 6C 65 73 2C 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 2C 20 61 6E 64 2F 6F 72 20 55 6E 69 78 20 6D 61 6E 75 61 6C 20 70 61 67 65 73 20 77 69 74 68 20 61 20 58 0A 57 69 6E 64 6F 77 20 76 69 65 77 65 72 20 6F 72 20 69 6E 20 73 65 76 65 72 61 6C 20 74 65 78 74 20 6D 6F 64 65 73 2E 20 20 41 6C 6C 20 69 6E 70 75 74 20 69 73 20 64 65 63 6F 6D 70 72 65 73 73 65 64 0A 6F 6E 2D 74 68 65 2D 66 6C 79 20 77 69 74 68 20 61 6C 6C 20 66 6F 72 6D 61 74 73 20 74 68 61 74 20 67 7A 69 70 20 63 61 6E 20 68 61 6E 64 6C 65 2E 0A 0A 22 66 69 6C 65 73 70 65 63 22 20 69 73 20 6F 6E 65 20 6F 66 0A 20 20 22 66 69 6C 65 6E 61 6D 65 22 20 20 20 20 20 20 20 6E 61 6D 65 20 6F 66 20 61 20 72 65 61 64 61 62 6C 65 20 66 69 6C 65 0A 20 20 22 2D 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6F 72 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 0A 20 20 22 6D 61 6E 3A 6E 61 6D 65 2E 6E 22 20 20 20 20 20 6D 61 6E 20 70 61 67 65 20 22 6E 61 6D 65 22 20 69 6E 20 73 65 63 74 69 6F 6E 20 22 6E 22 0A 20 20 22 6D 61 6E 3A 6E 61 6D 65 22 20 20 20 20 20 20 20 6D 61 6E 20 70 61 67 65 20 22 6E 61 6D 65 22 20 69 6E 20 66 69 72 73 74 20 73 65 63 74 69 6F 6E 20 66 6F 75 6E 64 0A 20 20 22 6E 61 6D 65 2E 6E 22 20 20 20 20 20 20 20 20 20 6D 61 6E 20 70 61 67 65 20 22 6E 61 6D 65 22 20 69 6E 20 73 65 63 74 69 6F 6E 20 22 6E 22 0A 20 20 22 6E 61 6D 65 22 20 20 20 20 20 20 20 20 20 20 20 6D 61 6E 20 70 61 67 65 20 22 6E 61 6D 65 22 20 69 6E 20 66 69 72 73 74 20 73 65 63 74 69 6F 6E 20 66 6F 75 6E 64 0A 61 6E 64 20 73 6F 6D 65 20 6D 6F 72 65 20 28 73 65 65 20 67 72 6F 66 66 65 72 28 31 29 20 66 6F 72 20 64 65 74 61 69 6C 73 29 2E 0A 0A 2D 68 20 2D 2D 68 65 6C 70 20 20 20 20 20 20 20 20 70 72 69 6E 74 20 74 68 69 73 20 75 73 61 67 65 20 6D 65 73 73 61 67 65 2E 0A 2D 51 20 2D 2D 73 6F 75 72 63 65 20 20 20 20 20 20 6F 75 74 70 75 74 20 61 73 20 72 6F 66 66 20 73 6F 75 72 63 65 2E 0A 2D 54 20 2D 2D 64 65 76 69 63 65 3D 6E 61 6D 65 20 70 61 73 73 20 74 6F 20 67 72 6F 66 66 20 75 73 69 6E 67 20 6F 75 74 70 75 74 20 64 65 76 69 63 65 20 22 6E 61 6D 65 22 2E 0A 2D 76 20 2D 2D 76 65 72 73 69 6F 6E 20 20 20 20 20 70 72 69 6E 74 20 76 65 72 73 69 6F 6E 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 2E 0A 2D 56 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 74 68 65 20 67 72 6F 66 66 20 65 78 65 63 75 74 69 6F 6E 20 70 69 70 65 20 69 6E 73 74 65 61 64 20 6F 66 20 66 6F 72 6D 61 74 74 69 6E 67 2E 0A 2D 58 20 2D 2D 58 20 2D 2D 78 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 22 67 78 64 69 74 76 69 65 77 22 20 75 73 69 6E 67 20 67 72 6F 66 66 20 2D 58 2E 0A 2D 5A 20 2D 2D 64 69 74 72 6F 66 66 20 2D 2D 69 6E 74 65 72 6D 65 64 69 61 74 65 2D 6F 75 74 70 75 74 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 6E 65 72 61 74 65 20 67 72 6F 66 66 20 69 6E 74 65 72 6D 65 64 69 61 74 65 20 6F 75 74 70 75 74 20 77 69 74 68 6F 75 74 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6F 73 74 2D 70 72 6F 63 65 73 73 69 6E 67 20 61 6E 64 20 76 69 65 77 69 6E 67 2C 20 6C 69 6B 65 20 67 72 6F 66 66 20 2D 5A 2E 0A 41 6C 6C 20 6F 74 68 65 72 20 73 68 6F 72 74 20 6F 70 74 69 6F 6E 73 20 61 72 65 20 69 6E 74 65 72 70 72 65 74 65 64 20 61 73 20 22 67 72 6F 66 66 22 20 66 6F 72 6D 61 74 74 69 6E 67 20 6F 70 74 69 6F 6E 73 2E 0A 0A 54 68 65 20 6D 6F 73 74 20 69 6D 70 6F 72 74 61 6E 74 20 67 72 6F 66 66 65 72 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 20 61 72 65 0A 0A 2D 2D 61 70 72 6F 70 6F 73 3D 6E 61 6D 65 20 20 20 73 74 61 72 74 20 6D 61 6E 27 73 20 22 61 70 72 6F 70 6F 73 22 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 22 6E 61 6D 65 22 2E 0A 2D 2D 61 70 72 6F 70 6F 73 2D 64 61 74 61 3D 6E 61 6D 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 72 6F 70 6F 73 22 20 66 6F 72 20 22 6E 61 6D 65 22 20 69 6E 20 6D 61 6E 27 73 20 64 61 74 61 20 73 65 63 74 69 6F 6E 73 20 34 2C 20 35 2C 20 37 2E 0A 2D 2D 61 70 72 6F 70 6F 73 2D 64 65 76 65 6C 3D 6E 61 6D 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 72 6F 70 6F 73 22 20 66 6F 72 20 22 6E 61 6D 65 22 20 69 6E 20 64 65 76 65 6C 6F 70 6D 65 6E 74 20 73 65 63 74 69 6F 6E 73 20 32 2C 20 33 2C 20 39 2E 0A 2D 2D 61 70 72 6F 70 6F 73 2D 70 72 6F 67 73 3D 6E 61 6D 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 72 6F 70 6F 73 22 20 66 6F 72 20 22 6E 61 6D 65 22 20 69 6E 20 6D 61 6E 27 73 20 70 72 6F 67 72 61 6D 20 73 65 63 74 69 6F 6E 73 20 31 2C 20 36 2C 20 38 2E 0A 2D 2D 61 75 74 6F 20 20 20 20 20 20 20 20 20 20 20 63 68 6F 6F 73 65 20 6D 6F 64 65 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 20 66 72 6F 6D 20 74 68 65 20 64 65 66 61 75 6C 74 20 6D 6F 64 65 20 6C 69 73 74 2E 0A 2D 2D 64 65 66 61 75 6C 74 20 20 20 20 20 20 20 20 72 65 73 65 74 20 61 6C 6C 20 6F 70 74 69 6F 6E 73 20 74 6F 20 74 68 65 20 64 65 66 61 75 6C 74 20 76 61 6C 75 65 2E 0A 2D 2D 64 65 66 61 75 6C 74 2D 6D 6F 64 65 73 3D 6D 6F 64 65 31 2C 6D 6F 64 65 32 2C 2E 2E 2E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 65 71 75 65 6E 63 65 20 6F 66 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 20 74 72 69 65 64 20 6D 6F 64 65 73 2E 0A 2D 2D 64 76 69 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 69 6E 20 61 20 76 69 65 77 65 72 20 66 6F 72 20 54 65 58 20 64 65 76 69 63 65 20 69 6E 64 65 70 65 6E 64 65 6E 74 20 66 6F 72 6D 61 74 2E 0A 2D 2D 64 76 69 2D 76 69 65 77 65 72 20 20 20 20 20 63 68 6F 6F 73 65 20 74 68 65 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 64 76 69 20 6D 6F 64 65 2E 0A 2D 2D 67 72 6F 66 66 20 20 20 20 20 20 20 20 20 20 70 72 6F 63 65 73 73 20 6C 69 6B 65 20 67 72 6F 66 66 2C 20 64 69 73 61 62 6C 65 20 76 69 65 77 69 6E 67 20 66 65 61 74 75 72 65 73 2E 0A 2D 2D 68 65 6C 70 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 74 68 69 73 20 68 65 6C 70 69 6E 67 20 6F 75 74 70 75 74 2E 0A 2D 2D 68 74 6D 6C 20 2D 2D 77 77 77 20 20 20 20 20 64 69 73 70 6C 61 79 20 69 6E 20 61 20 77 65 62 20 62 72 6F 77 73 65 72 2E 0A 2D 2D 68 74 6D 6C 2D 76 69 65 77 65 72 20 20 20 20 63 68 6F 6F 73 65 20 74 68 65 20 77 65 62 20 62 72 6F 77 73 65 72 20 66 6F 72 20 77 77 77 20 6D 6F 64 65 2E 0A 2D 2D 6D 61 6E 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6B 20 66 69 6C 65 20 70 61 72 61 6D 65 74 65 72 73 20 66 69 72 73 74 20 77 68 65 74 68 65 72 20 74 68 65 79 20 61 72 65 20 6D 61 6E 20 70 61 67 65 73 2E 0A 2D 2D 6D 6F 64 65 3D 61 75 74 6F 7C 64 76 69 7C 67 72 6F 66 66 7C 68 74 6D 6C 7C 70 64 66 7C 70 73 7C 73 6F 75 72 63 65 7C 74 65 78 74 7C 74 74 79 7C 77 77 77 7C 78 7C 58 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 6F 6F 73 65 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 2E 0A 2D 2D 6E 6F 2D 6D 61 6E 20 20 20 20 20 20 20 20 20 64 69 73 61 62 6C 65 20 6D 61 6E 2D 70 61 67 65 20 66 61 63 69 6C 69 74 79 2E 0A 2D 2D 70 61 67 65 72 3D 70 72 6F 67 72 61 6D 20 20 70 72 65 73 65 74 20 74 68 65 20 70 61 67 69 6E 67 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 2E 0A 2D 2D 70 64 66 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 69 6E 20 61 20 50 44 46 20 76 69 65 77 65 72 2E 0A 2D 2D 70 64 66 2D 76 69 65 77 65 72 20 20 20 20 20 63 68 6F 6F 73 65 20 74 68 65 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 64 66 20 6D 6F 64 65 2E 0A 2D 2D 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 69 6E 20 61 20 50 6F 73 74 73 63 72 69 70 74 20 76 69 65 77 65 72 2E 0A 2D 2D 70 73 2D 76 69 65 77 65 72 20 20 20 20 20 20 63 68 6F 6F 73 65 20 74 68 65 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 73 20 6D 6F 64 65 2E 0A 2D 2D 73 68 65 6C 6C 20 20 20 20 20 20 20 20 20 20 73 70 65 63 69 66 79 20 73 68 65 6C 6C 20 75 6E 64 65 72 20 77 68 69 63 68 20 74 6F 20 72 75 6E 20 74 68 69 73 20 70 72 6F 67 72 61 6D 2E 0A 2D 2D 74 65 78 74 20 20 20 20 20 20 20 20 20 20 20 6F 75 74 70 75 74 20 69 6E 20 61 20 74 65 78 74 20 64 65 76 69 63 65 20 77 69 74 68 6F 75 74 20 61 20 70 61 67 65 72 2E 0A 2D 2D 74 74 79 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 61 20 70 61 67 65 72 20 6F 6E 20 74 65 78 74 20 74 65 72 6D 69 6E 61 6C 20 65 76 65 6E 20 77 68 65 6E 20 69 6E 20 58 2E 0A 2D 2D 77 77 77 2D 76 69 65 77 65 72 20 20 20 20 20 73 61 6D 65 20 61 73 20 2D 2D 68 74 6D 6C 2D 76 69 65 77 65 72 0A 2D 2D 78 2D 76 69 65 77 65 72 20 20 20 20 20 20 20 63 68 6F 6F 73 65 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 78 20 6D 6F 64 65 20 28 58 20 6D 6F 64 65 29 2E 0A 2D 2D 58 2D 76 69 65 77 65 72 20 20 20 20 20 20 20 73 61 6D 65 20 61 73 20 22 2D 2D 78 76 69 65 77 65 72 22 2E 0A 0A 54 68 65 20 75 73 75 61 6C 20 58 20 57 69 6E 64 6F 77 73 20 74 6F 6F 6C 6B 69 74 20 6F 70 74 69 6F 6E 73 20 74 72 61 6E 73 66 6F 72 6D 65 64 20 69 6E 74 6F 20 47 4E 55 20 6C 6F 6E 67 20 6F 70 74 69 6F 6E 73 0A 2D 2D 62 61 63 6B 67 72 6F 75 6E 64 3D 63 6F 6C 6F 72 2C 20 2D 2D 62 64 3D 73 69 7A 65 2C 20 2D 2D 62 67 3D 63 6F 6C 6F 72 2C 20 2D 2D 62 6F 72 64 65 72 63 6F 6C 6F 72 3D 63 6F 6C 6F 72 2C 0A 2D 2D 62 6F 72 64 65 72 77 69 64 74 68 3D 73 69 7A 65 2C 20 2D 2D 62 77 3D 73 69 7A 65 2C 20 2D 2D 64 69 73 70 6C 61 79 3D 58 64 69 73 70 6C 61 79 2C 20 2D 2D 66 67 3D 63 6F 6C 6F 72 2C 0A 2D 2D 66 6E 3D 66 6F 6E 74 2C 20 2D 2D 66 6F 6E 74 3D 66 6F 6E 74 2C 20 2D 2D 66 6F 72 65 67 72 6F 75 6E 64 3D 63 6F 6C 6F 72 2C 20 2D 2D 67 65 6F 6D 65 74 72 79 3D 67 65 6F 6D 2C 20 2D 2D 69 63 6F 6E 69 63 2C 0A 2D 2D 72 65 73 6F 6C 75 74 69 6F 6E 3D 64 70 69 2C 20 2D 2D 72 76 2C 20 2D 2D 74 69 74 6C 65 3D 74 65 78 74 2C 20 2D 2D 78 72 6D 3D 72 65 73 6F 75 72 63 65 0A 0A 4C 6F 6E 67 20 6F 70 74 69 6F 6E 73 20 6F 66 20 47 4E 55 20 22 6D 61 6E 22 0A 20 2D 2D 61 6C 6C 2C 20 2D 2D 61 73 63 69 69 2C 20 2D 2D 64 69 74 72 6F 66 66 2C 20 2D 2D 65 78 74 65 6E 73 69 6F 6E 3D 73 75 66 66 69 78 2C 20 2D 2D 6C 6F 63 61 6C 65 3D 6C 61 6E 67 75 61 67 65 2C 0A 2D 2D 6C 6F 63 61 6C 2D 66 69 6C 65 3D 6E 61 6D 65 2C 20 2D 2D 6C 6F 63 61 74 69 6F 6E 2C 20 2D 2D 6D 61 6E 70 61 74 68 3D 64 69 72 31 3A 64 69 72 32 3A 2E 2E 2E 2C 0A 2D 2D 73 65 63 74 69 6F 6E 73 3D 73 31 3A 73 32 3A 2E 2E 2E 2C 20 2D 2D 73 79 73 74 65 6D 73 3D 73 31 2C 73 32 2C 2E 2E 2E 2C 20 2D 2D 77 68 61 74 69 73 2C 20 2D 2D 77 68 65 72 65 2C 20 2E 2E 2E 0A 0A 45 4F 46 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 76 65 72 73 69 6F 6E 20 28 29 0A 23 0A 23 20 70 72 69 6E 74 20 76 65 72 73 69 6F 6E 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 74 6F 20 73 74 64 65 72 72 0A 23 0A 76 65 72 73 69 6F 6E 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 76 65 72 73 69 6F 6E 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 65 63 68 6F 32 20 22 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 20 24 7B 5F 50 52 4F 47 52 41 4D 5F 56 45 52 53 49 4F 4E 7D 20 6F 66 20 24 7B 5F 4C 41 53 54 5F 55 50 44 41 54 45 7D 22 3B 0A 20 20 23 20 61 6C 73 6F 20 64 69 73 70 6C 61 79 20 67 72 6F 66 66 27 73 20 76 65 72 73 69 6F 6E 2C 20 62 75 74 20 6E 6F 74 20 74 68 65 20 63 61 6C 6C 65 64 20 73 75 62 70 72 6F 67 72 61 6D 73 0A 20 20 67 72 6F 66 66 20 2D 76 20 32 3E 26 31 20 7C 20 73 65 64 20 2D 65 20 27 2F 5E 20 2A 24 2F 71 27 20 7C 20 73 65 64 20 2D 65 20 27 31 73 2F 5E 2F 69 73 20 70 61 72 74 20 6F 66 20 2F 27 20 3E 26 32 3B 20 20 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 77 61 72 6E 69 6E 67 20 28 3C 73 74 72 69 6E 67 3E 29 0A 23 0A 23 20 50 72 69 6E 74 20 77 61 72 6E 69 6E 67 20 74 6F 20 73 74 64 65 72 72 0A 23 0A 77 61 72 6E 69 6E 67 28 29 0A 7B 0A 20 20 65 63 68 6F 32 20 22 77 61 72 6E 69 6E 67 3A 20 24 2A 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 77 68 61 74 5F 69 73 20 28 3C 66 69 6C 65 6E 61 6D 65 3E 29 0A 23 0A 23 20 49 6E 74 65 72 70 72 65 74 20 3C 66 69 6C 65 6E 61 6D 65 3E 20 61 73 20 61 20 6D 61 6E 20 70 61 67 65 20 61 6E 64 20 64 69 73 70 6C 61 79 20 69 74 73 20 60 77 68 61 74 69 73 27 0A 23 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 61 73 20 61 20 66 72 61 67 6D 65 6E 74 20 77 72 69 74 74 65 6E 20 69 6E 20 74 68 65 20 67 72 6F 66 66 20 6C 61 6E 67 75 61 67 65 2E 0A 23 0A 77 68 61 74 5F 69 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 77 68 61 74 5F 69 73 20 3D 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 72 65 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 64 6F 74 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 66 69 6C 65 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 77 68 61 74 5F 69 73 28 29 3A 20 61 72 67 75 6D 65 6E 74 20 69 73 20 6E 6F 74 20 61 20 72 65 61 64 61 62 6C 65 20 66 69 6C 65 2E 22 0A 20 20 66 69 3B 0A 20 20 5F 64 6F 74 3D 27 5E 5C 2E 5B 27 22 24 7B 5F 53 50 41 43 45 7D 24 7B 5F 54 41 42 7D 22 27 5D 2A 27 3B 0A 20 20 65 63 68 6F 20 27 2E 62 72 27 3B 0A 20 20 65 63 68 6F 20 22 24 31 3A 20 22 3B 0A 20 20 20 20 65 63 68 6F 20 27 2E 62 72 27 3B 0A 20 20 65 63 68 6F 20 2D 6E 20 27 20 20 27 3B 0A 20 20 23 20 67 72 65 70 20 74 68 65 20 6C 69 6E 65 20 63 6F 6E 74 61 69 6E 69 6E 67 20 60 2E 54 48 27 20 6D 61 63 72 6F 2C 20 69 66 20 61 6E 79 0A 20 20 5F 72 65 73 3D 22 24 28 63 61 74 7A 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 54 48 20 2F 70 0A 64 27 29 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 72 65 73 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 09 23 20 74 72 61 64 69 74 69 6F 6E 61 6C 20 6D 61 6E 20 73 74 79 6C 65 0A 20 20 20 20 23 20 67 65 74 20 74 68 65 20 74 65 78 74 20 62 65 74 77 65 65 6E 20 74 68 65 20 66 69 72 73 74 20 61 6E 64 20 74 68 65 20 73 65 63 6F 6E 64 20 60 2E 53 48 27 20 6D 61 63 72 6F 2C 20 62 79 0A 20 20 20 20 23 20 2D 20 64 65 6C 65 74 65 20 75 70 20 74 6F 20 66 69 72 73 74 20 2E 53 48 3B 0A 20 20 20 20 23 20 2D 20 6F 66 20 74 68 69 73 2C 20 70 72 69 6E 74 20 65 76 65 72 79 74 68 69 6E 67 20 75 70 20 74 6F 20 6E 65 78 74 20 2E 53 48 2C 20 61 6E 64 20 64 65 6C 65 74 65 20 74 68 65 20 72 65 73 74 3B 0A 20 20 20 20 23 20 2D 20 6F 66 20 74 68 69 73 2C 20 64 65 6C 65 74 65 20 74 68 65 20 66 69 6E 61 6C 20 2E 53 48 20 6C 69 6E 65 3B 0A 20 20 20 20 63 61 74 7A 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 31 2C 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 53 48 2F 64 27 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 31 2C 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 53 48 2F 70 0A 64 27 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 53 48 2F 64 27 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 23 20 67 72 65 70 20 74 68 65 20 6C 69 6E 65 20 63 6F 6E 74 61 69 6E 69 6E 67 20 60 2E 44 64 27 20 6D 61 63 72 6F 2C 20 69 66 20 61 6E 79 0A 20 20 5F 72 65 73 3D 22 24 28 63 61 74 7A 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 44 64 20 2F 70 0A 64 27 29 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 72 65 73 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 09 23 20 42 53 44 20 64 6F 63 20 73 74 79 6C 65 0A 20 20 20 20 23 20 67 65 74 20 74 68 65 20 74 65 78 74 20 62 65 74 77 65 65 6E 20 74 68 65 20 66 69 72 73 74 20 61 6E 64 20 74 68 65 20 73 65 63 6F 6E 64 20 60 2E 4E 64 27 20 6D 61 63 72 6F 2C 20 62 79 0A 20 20 20 20 23 20 2D 20 64 65 6C 65 74 65 20 75 70 20 74 6F 20 66 69 72 73 74 20 2E 4E 64 3B 0A 20 20 20 20 23 20 2D 20 6F 66 20 74 68 69 73 2C 20 70 72 69 6E 74 20 65 76 65 72 79 74 68 69 6E 67 20 75 70 20 74 6F 20 6E 65 78 74 20 2E 4E 64 2C 20 61 6E 64 20 64 65 6C 65 74 65 20 74 68 65 20 72 65 73 74 3B 0A 20 20 20 20 23 20 2D 20 6F 66 20 74 68 69 73 2C 20 64 65 6C 65 74 65 20 74 68 65 20 66 69 6E 61 6C 20 2E 4E 64 20 6C 69 6E 65 3B 0A 20 20 20 20 63 61 74 7A 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 31 2C 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 4E 64 2F 64 27 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 31 2C 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 4E 64 2F 70 0A 64 27 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7C 20 73 65 64 20 2D 65 20 27 2F 27 22 24 7B 5F 64 6F 74 7D 22 27 4E 64 2F 64 27 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 63 68 6F 20 27 69 73 20 6E 6F 74 20 61 20 6D 61 6E 20 70 61 67 65 2E 27 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 77 68 65 72 65 20 28 3C 70 72 6F 67 72 61 6D 3E 29 0A 23 0A 23 20 4F 75 74 70 75 74 20 70 61 74 68 20 6F 66 20 61 20 70 72 6F 67 72 61 6D 20 69 66 20 69 6E 20 24 50 41 54 48 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 20 3A 20 3E 3D 31 20 28 65 6D 70 74 79 20 61 6C 6C 6F 77 65 64 29 0A 23 20 20 20 6D 6F 72 65 20 61 72 67 73 20 61 72 65 20 69 67 6E 6F 72 65 64 2C 20 74 68 69 73 20 61 6C 6C 6F 77 73 20 74 6F 20 73 70 65 63 69 66 79 20 70 72 6F 67 73 20 77 69 74 68 20 61 72 67 75 6D 65 6E 74 73 0A 23 20 52 65 74 75 72 6E 20 20 20 20 3A 20 60 30 27 20 69 66 20 61 72 67 31 20 69 73 20 61 20 70 72 6F 67 72 61 6D 20 69 6E 20 24 50 41 54 48 2C 20 60 31 27 20 6F 74 68 65 72 77 69 73 65 2E 0A 23 0A 77 68 65 72 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 77 68 65 72 65 20 27 3E 3D 27 20 31 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 69 6C 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 61 72 67 3B 0A 20 20 6C 6F 63 61 6C 20 70 3B 0A 20 20 5F 61 72 67 3D 22 24 31 22 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 61 72 67 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 61 72 67 7D 22 20 69 6E 0A 20 20 20 20 2F 2A 29 0A 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 61 72 67 7D 22 20 26 26 20 74 65 73 74 20 2D 78 20 22 24 7B 5F 61 72 67 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 70 61 74 68 5F 73 70 6C 69 74 20 22 24 7B 50 41 54 48 7D 22 29 22 3B 0A 20 20 66 6F 72 20 70 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 63 61 73 65 20 22 24 70 22 20 69 6E 0A 20 20 20 20 20 20 2A 2F 29 20 5F 66 69 6C 65 3D 24 7B 70 7D 24 7B 5F 61 72 67 7D 3B 20 3B 3B 0A 20 20 20 20 20 20 2A 29 20 20 5F 66 69 6C 65 3D 24 7B 70 7D 2F 24 7B 5F 61 72 67 7D 3B 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 69 66 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 66 69 6C 65 7D 22 20 26 26 20 74 65 73 74 20 2D 78 20 22 24 7B 5F 66 69 6C 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6D 61 69 6E 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 23 20 54 68 65 20 6D 61 69 6E 20 61 72 65 61 20 63 6F 6E 74 61 69 6E 73 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 70 61 72 74 73 3A 0A 23 20 2D 20 6D 61 69 6E 5F 69 6E 69 74 28 29 3A 20 69 6E 69 74 69 61 6C 69 7A 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 20 61 6E 64 20 73 65 74 20 65 78 69 74 20 74 72 61 70 0A 23 20 2D 20 70 61 72 73 65 20 24 4D 41 4E 4F 50 54 0A 23 20 2D 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 28 29 3A 20 61 72 67 75 6D 65 6E 74 20 70 61 72 73 69 6E 67 0A 23 20 2D 20 64 65 74 65 72 6D 69 6E 65 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 0A 23 20 2D 20 70 72 6F 63 65 73 73 20 66 69 6C 65 73 70 65 63 20 61 72 67 75 6D 65 6E 74 73 0A 23 20 2D 20 73 65 74 75 70 20 58 20 72 65 73 6F 75 72 63 65 73 0A 23 20 2D 20 64 6F 20 74 68 65 20 64 69 73 70 6C 61 79 69 6E 67 0A 0A 23 20 54 68 65 73 65 20 70 61 72 74 73 20 61 72 65 20 69 6D 70 6C 65 6D 65 6E 74 65 64 20 61 73 20 66 75 6E 63 74 69 6F 6E 73 2C 20 62 65 69 6E 67 20 64 65 66 69 6E 65 64 20 62 65 6C 6F 77 20 69 6E 20 74 68 65 0A 23 20 73 65 71 75 65 6E 63 65 20 74 68 65 79 20 61 72 65 20 63 61 6C 6C 65 64 20 69 6E 20 74 68 65 20 6D 61 69 6E 28 29 20 66 75 6E 63 74 69 6F 6E 2E 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 69 6E 69 74 20 28 29 0A 23 0A 23 20 73 65 74 20 65 78 69 74 20 74 72 61 70 20 61 6E 64 20 63 72 65 61 74 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 54 4D 50 5F 43 41 54 2C 20 24 5F 54 4D 50 5F 53 54 44 49 4E 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 33 3A 20 6D 61 69 6E 5F 69 6E 69 74 28 29 27 3B 0A 6D 61 69 6E 5F 69 6E 69 74 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 69 6E 69 74 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 23 20 63 61 6C 6C 20 63 6C 65 61 6E 5F 75 70 28 29 20 6F 6E 20 61 6E 79 20 73 69 67 6E 61 6C 0A 20 20 74 72 61 70 5F 73 65 74 20 63 6C 65 61 6E 5F 75 70 3B 0A 0A 20 20 23 20 64 65 74 65 72 6D 69 6E 65 20 74 65 6D 70 6F 72 61 72 79 20 64 69 72 65 63 74 6F 72 79 0A 20 20 75 6D 61 73 6B 20 30 30 30 3B 0A 20 20 5F 54 4D 50 5F 44 49 52 3D 27 27 3B 0A 20 20 66 6F 72 20 64 20 69 6E 20 22 24 7B 47 52 4F 46 46 5F 54 4D 50 44 49 52 7D 22 20 22 24 7B 54 4D 50 44 49 52 7D 22 20 22 24 7B 54 4D 50 7D 22 20 22 24 7B 54 45 4D 50 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 54 45 4D 50 44 49 52 7D 22 20 22 24 7B 48 4F 4D 45 7D 22 27 2F 74 6D 70 27 20 27 2F 74 6D 70 27 20 22 24 7B 48 4F 4D 45 7D 22 20 27 2E 27 3B 0A 20 20 64 6F 0A 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 64 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 64 20 69 73 5F 64 69 72 20 26 26 20 6F 62 6A 20 64 20 69 73 5F 77 72 69 74 61 62 6C 65 3B 20 74 68 65 6E 0A 09 20 20 5F 54 4D 50 5F 44 49 52 3D 22 60 6D 6B 74 65 6D 70 20 2D 64 20 24 7B 64 7D 2F 24 7B 5F 50 52 4F 47 52 41 4D 5F 4E 41 4D 45 7D 2E 58 58 58 58 58 58 60 22 3B 0A 09 20 20 69 66 20 74 65 73 74 20 24 3F 20 3D 20 30 3B 20 74 68 65 6E 0A 09 20 20 20 20 20 20 62 72 65 61 6B 3B 0A 09 20 20 65 6C 73 65 0A 09 20 20 20 20 20 20 5F 54 4D 50 5F 44 49 52 3D 27 27 3B 0A 09 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 09 20 20 66 69 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 54 4D 50 5F 44 49 52 20 69 73 5F 6E 6F 74 5F 77 72 69 74 61 62 6C 65 3B 20 74 68 65 6E 0A 09 5F 54 4D 50 5F 44 49 52 3D 27 27 3B 0A 09 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 75 6E 73 65 74 20 64 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 54 4D 50 5F 44 49 52 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 43 6F 75 6C 64 6E 27 74 20 63 72 65 61 74 65 20 61 20 64 69 72 65 63 74 6F 72 79 20 66 6F 72 20 73 74 6F 72 69 6E 67 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 2E 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 5F 54 4D 50 5F 43 41 54 3D 22 24 28 74 6D 70 5F 63 72 65 61 74 65 20 67 72 6F 66 66 65 72 5F 63 61 74 29 22 3B 0A 20 20 5F 54 4D 50 5F 53 54 44 49 4E 3D 22 24 28 74 6D 70 5F 63 72 65 61 74 65 20 67 72 6F 66 66 65 72 5F 69 6E 70 75 74 29 22 3B 0A 0A 20 20 23 20 67 72 6F 66 66 65 72 20 63 6F 6E 66 69 67 75 72 61 74 69 6F 6E 20 66 69 6C 65 73 0A 20 20 66 6F 72 20 66 20 69 6E 20 24 7B 5F 43 4F 4E 46 46 49 4C 45 53 7D 3B 20 64 6F 0A 20 20 20 20 69 66 20 6F 62 6A 20 66 20 69 73 5F 66 69 6C 65 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 63 68 6F 20 27 5F 67 72 6F 66 66 65 72 5F 6F 70 74 3D 22 22 27 20 3E 3E 24 7B 5F 54 4D 50 5F 43 41 54 7D 3B 0A 20 20 20 20 20 20 23 20 63 6F 6C 6C 65 63 74 20 74 68 65 20 6C 69 6E 65 73 20 73 74 61 72 74 69 6E 67 20 77 69 74 68 20 61 20 6D 69 6E 75 73 0A 20 20 20 20 20 20 63 61 74 20 22 24 66 22 20 7C 20 73 65 64 20 2D 65 20 5C 0A 20 20 20 20 20 20 20 20 27 73 2F 5E 5B 09 20 5D 2A 5C 28 2D 2E 2A 5C 29 24 2F 5F 67 72 6F 66 66 65 72 5F 6F 70 74 3D 22 24 7B 5F 67 72 6F 66 66 65 72 5F 6F 70 74 7D 20 5C 31 22 27 2F 20 5C 0A 20 20 20 20 20 20 20 20 3E 3E 24 7B 5F 54 4D 50 5F 43 41 54 7D 3B 0A 20 20 20 20 20 20 23 20 70 72 65 70 65 6E 64 20 74 68 65 20 63 6F 6C 6C 65 63 74 65 64 20 69 6E 66 6F 72 6D 61 74 69 6F 6E 20 74 6F 20 24 47 52 4F 46 46 45 52 5F 4F 50 54 0A 20 20 20 20 20 20 65 63 68 6F 20 27 47 52 4F 46 46 45 52 5F 4F 50 54 3D 22 24 7B 5F 67 72 6F 66 66 65 72 5F 6F 70 74 7D 20 24 7B 47 52 4F 46 46 45 52 5F 4F 50 54 7D 22 27 20 3E 3E 24 7B 5F 54 4D 50 5F 43 41 54 7D 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 2E 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 20 20 5F 54 4D 50 5F 43 41 54 3D 22 24 28 74 6D 70 5F 63 72 65 61 74 65 20 67 72 6F 66 66 65 72 5F 63 61 74 29 22 3B 0A 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 69 6E 69 74 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 20 28 29 0A 23 0A 23 20 50 61 72 73 65 20 24 4D 41 4E 4F 50 54 20 74 6F 20 72 65 74 72 69 65 76 65 20 6D 61 6E 20 6F 70 74 69 6F 6E 73 2C 20 62 75 74 20 6F 6E 6C 79 20 69 66 20 69 74 20 69 73 20 61 20 6E 6F 6E 2D 65 6D 70 74 79 0A 23 20 73 74 72 69 6E 67 3B 20 66 6F 75 6E 64 20 6D 61 6E 20 61 72 67 75 6D 65 6E 74 73 20 63 61 6E 20 62 65 20 6F 76 65 72 77 72 69 74 74 65 6E 20 62 79 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 24 4D 41 4E 4F 50 54 2C 20 24 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 5F 2A 0A 23 20 20 20 6F 75 74 3A 20 24 5F 4D 41 4E 4F 50 54 5F 2A 0A 23 20 20 20 69 6E 2F 6F 75 74 3A 20 24 47 52 4F 46 46 45 52 5F 4F 50 54 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 34 3A 20 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 28 29 27 3B 0A 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 69 73 74 3B 0A 20 20 5F 6C 69 73 74 3D 27 27 3B 0A 20 20 69 66 20 6F 62 6A 20 4D 41 4E 4F 50 54 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 4D 41 4E 4F 50 54 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 4D 41 4E 4F 50 54 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 73 65 64 20 2D 65 20 27 73 2F 5E 27 22 24 7B 5F 53 50 41 43 45 7D 24 7B 5F 53 50 41 43 45 7D 22 27 2A 2F 2F 27 29 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 4D 41 4E 4F 50 54 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 23 20 61 64 64 20 61 72 67 75 6D 65 6E 74 73 20 69 6E 20 24 4D 41 4E 4F 50 54 20 62 79 20 6D 61 70 70 69 6E 67 20 74 68 65 6D 20 74 6F 20 67 72 6F 66 66 65 72 20 6F 70 74 69 6F 6E 73 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 20 5F 4F 50 54 53 5F 4D 41 4E 4F 50 54 20 22 24 7B 4D 41 4E 4F 50 54 7D 22 29 22 3B 0A 20 20 75 6E 74 69 6C 20 74 65 73 74 20 22 24 23 22 20 2D 6C 65 20 30 20 7C 7C 20 69 73 5F 65 71 75 61 6C 20 22 24 31 22 20 27 2D 2D 27 3B 20 64 6F 0A 20 20 20 20 5F 6F 70 74 3D 22 24 31 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 6F 70 74 7D 22 20 69 6E 0A 20 20 20 20 20 20 2D 37 7C 2D 2D 61 73 63 69 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 61 73 63 69 69 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 61 7C 2D 2D 61 6C 6C 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 61 6C 6C 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 63 7C 2D 2D 63 61 74 6D 61 6E 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 64 7C 2D 2D 64 65 62 75 67 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 64 65 62 75 67 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 44 7C 2D 2D 64 65 66 61 75 6C 74 29 0A 20 20 20 20 20 20 20 20 23 20 75 6E 64 6F 20 61 6C 6C 20 6D 61 6E 20 6F 70 74 69 6F 6E 73 20 73 6F 20 66 61 72 0A 20 20 20 20 20 20 20 20 5F 6C 69 73 74 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 65 7C 2D 2D 65 78 74 65 6E 73 69 6F 6E 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 65 78 74 65 6E 73 69 6F 6E 27 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 66 7C 2D 2D 77 68 61 74 69 73 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 77 68 61 74 69 73 27 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 68 7C 2D 2D 68 65 6C 70 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 6B 7C 2D 2D 61 70 72 6F 70 6F 73 29 0A 09 23 20 67 72 6F 66 66 65 72 27 73 20 2D 2D 61 70 72 6F 70 6F 73 20 74 61 6B 65 73 20 61 6E 20 61 72 67 75 6D 65 6E 74 2C 20 62 75 74 20 6D 61 6E 27 73 20 64 6F 65 73 20 6E 6F 74 2C 20 73 6F 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 6C 7C 2D 2D 6C 6F 63 61 6C 2D 66 69 6C 65 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 6C 6F 63 61 6C 2D 66 69 6C 65 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 4C 7C 2D 2D 6C 6F 63 61 6C 65 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 6C 6F 63 61 6C 65 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 6D 7C 2D 2D 73 79 73 74 65 6D 73 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 73 79 73 74 65 6D 73 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 4D 7C 2D 2D 6D 61 6E 70 61 74 68 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 6D 61 6E 70 61 74 68 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 70 7C 2D 2D 70 72 65 70 72 6F 63 65 73 73 6F 72 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 50 7C 2D 2D 70 61 67 65 72 7C 2D 2D 74 74 79 2D 76 69 65 77 65 72 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 70 61 67 65 72 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 72 7C 2D 2D 70 72 6F 6D 70 74 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 53 7C 2D 2D 73 65 63 74 69 6F 6E 73 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 73 65 63 74 69 6F 6E 73 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 74 7C 2D 2D 74 72 6F 66 66 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 54 7C 2D 2D 64 65 76 69 63 65 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 54 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 75 7C 2D 2D 75 70 64 61 74 65 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 56 7C 2D 2D 76 65 72 73 69 6F 6E 29 0A 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 77 7C 2D 2D 77 68 65 72 65 7C 2D 2D 6C 6F 63 61 74 69 6F 6E 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 2D 6C 6F 63 61 74 69 6F 6E 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 5A 7C 2D 2D 64 69 74 72 6F 66 66 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 6C 69 73 74 20 27 2D 5A 27 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 23 20 69 67 6E 6F 72 65 20 61 6C 6C 20 6F 74 68 65 72 20 6F 70 74 69 6F 6E 73 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 23 20 61 70 70 65 6E 64 20 74 68 65 20 32 20 6C 69 73 74 73 20 69 6E 20 24 5F 6C 69 73 74 20 61 6E 64 20 24 47 52 4F 46 46 45 52 5F 4F 50 54 20 74 6F 20 24 47 52 4F 46 46 45 52 5F 4F 50 54 0A 20 20 69 66 20 6F 62 6A 20 47 52 4F 46 46 45 52 5F 4F 50 54 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 47 52 4F 46 46 45 52 5F 4F 50 54 3D 22 24 7B 5F 6C 69 73 74 7D 22 3B 0A 20 20 65 6C 69 66 20 6F 62 6A 20 5F 6C 69 73 74 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 47 52 4F 46 46 45 52 5F 4F 50 54 3D 22 24 7B 5F 6C 69 73 74 7D 20 24 7B 47 52 4F 46 46 45 52 5F 4F 50 54 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 20 28 3C 63 6F 6D 6D 61 6E 64 5F 6C 69 6E 65 5F 61 72 67 73 3E 2A 29 0A 23 0A 23 20 50 61 72 73 65 20 61 72 67 75 6D 65 6E 74 73 3B 20 70 72 6F 63 65 73 73 20 6F 70 74 69 6F 6E 73 20 61 6E 64 20 66 69 6C 65 73 70 65 63 20 70 61 72 61 6D 65 74 65 72 73 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 70 61 73 73 20 74 68 65 20 63 6F 6D 6D 61 6E 64 20 6C 69 6E 65 20 61 72 67 75 6D 65 6E 74 73 20 75 6E 61 6C 74 65 72 65 64 2E 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 20 24 5F 4F 50 54 53 5F 2A 0A 23 20 20 20 6F 75 74 3A 20 24 5F 4F 50 54 5F 2A 2C 20 24 5F 41 44 44 4F 50 54 53 2C 20 24 5F 46 49 4C 45 41 52 47 53 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 35 3A 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 28 29 27 3B 0A 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 20 27 3E 3D 27 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 61 72 67 3B 0A 20 20 6C 6F 63 61 6C 20 5F 63 6F 64 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 64 70 69 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6C 6F 6E 67 6F 70 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 6F 64 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 63 68 61 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 61 72 67 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 73 74 72 69 6E 67 3B 0A 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 7B 47 52 4F 46 46 45 52 5F 4F 50 54 7D 22 20 27 22 24 40 22 27 3B 0A 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 6C 69 73 74 5F 66 72 6F 6D 5F 63 6D 64 6C 69 6E 65 20 5F 4F 50 54 53 5F 43 4D 44 4C 49 4E 45 20 22 24 40 22 29 22 3B 0A 0A 23 20 42 79 20 74 68 65 20 63 61 6C 6C 20 6F 66 20 60 65 76 61 6C 27 2C 20 75 6E 6E 65 63 65 73 73 61 72 79 20 71 75 6F 74 69 6E 67 20 77 61 73 20 72 65 6D 6F 76 65 64 2E 20 20 53 6F 20 74 68 65 0A 23 20 70 6F 73 69 74 69 6F 6E 61 6C 20 73 68 65 6C 6C 20 70 61 72 61 6D 65 74 65 72 73 20 28 24 31 2C 20 24 32 2C 20 2E 2E 2E 29 20 61 72 65 20 6E 6F 77 20 67 75 61 72 61 6E 74 65 65 64 20 74 6F 0A 23 20 72 65 70 72 65 73 65 6E 74 20 61 6E 20 6F 70 74 69 6F 6E 20 6F 72 20 61 6E 20 61 72 67 75 6D 65 6E 74 20 74 6F 20 74 68 65 20 70 72 65 76 69 6F 75 73 20 6F 70 74 69 6F 6E 2C 20 69 66 20 61 6E 79 3B 0A 23 20 74 68 65 6E 20 61 20 60 2D 2D 27 20 61 72 67 75 6D 65 6E 74 20 66 6F 72 20 73 65 70 61 72 61 74 69 6E 67 20 6F 70 74 69 6F 6E 73 20 61 6E 64 0A 23 20 70 61 72 61 6D 65 74 65 72 73 3B 20 66 6F 6C 6C 6F 77 65 64 20 62 79 20 74 68 65 20 66 69 6C 65 73 70 65 63 20 70 61 72 61 6D 65 74 65 72 73 20 69 66 20 61 6E 79 2E 0A 0A 23 20 4E 6F 74 65 2C 20 74 68 65 20 65 78 69 73 74 65 6E 63 65 20 6F 66 20 61 72 67 75 6D 65 6E 74 73 20 74 6F 20 6F 70 74 69 6F 6E 73 20 68 61 73 20 61 6C 72 65 61 64 79 20 62 65 65 6E 20 63 68 65 63 6B 65 64 2E 0A 23 20 53 6F 20 61 20 63 68 65 63 6B 20 66 6F 72 20 60 24 23 27 20 6F 72 20 60 2D 2D 27 20 73 68 6F 75 6C 64 20 6E 6F 74 20 62 65 20 64 6F 6E 65 20 66 6F 72 20 61 72 67 75 6D 65 6E 74 73 2E 0A 0A 20 20 75 6E 74 69 6C 20 74 65 73 74 20 22 24 23 22 20 2D 6C 65 20 30 20 7C 7C 20 69 73 5F 65 71 75 61 6C 20 22 24 31 22 20 27 2D 2D 27 3B 20 64 6F 0A 20 20 20 20 5F 6F 70 74 3D 22 24 31 22 3B 09 09 09 23 20 24 5F 6F 70 74 20 69 73 20 66 65 64 20 69 6E 74 6F 20 74 68 65 20 6F 70 74 69 6F 6E 20 68 61 6E 64 6C 65 72 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 6F 70 74 7D 22 20 69 6E 0A 20 20 20 20 20 20 2D 68 7C 2D 2D 68 65 6C 70 29 0A 20 20 20 20 20 20 20 20 75 73 61 67 65 3B 0A 20 20 20 20 20 20 20 20 6C 65 61 76 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 51 7C 2D 2D 73 6F 75 72 63 65 29 09 09 23 20 6F 75 74 70 75 74 20 73 6F 75 72 63 65 20 63 6F 64 65 20 28 60 51 75 65 6C 6C 63 6F 64 65 27 29 2E 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 73 6F 75 72 63 65 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 54 7C 2D 2D 64 65 76 69 63 65 7C 2D 2D 74 72 6F 66 66 2D 64 65 76 69 63 65 29 20 23 20 64 65 76 69 63 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 44 45 56 49 43 45 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 5F 63 68 65 63 6B 5F 64 65 76 69 63 65 5F 77 69 74 68 5F 6D 6F 64 65 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 76 7C 2D 2D 76 65 72 73 69 6F 6E 29 0A 20 20 20 20 20 20 20 20 76 65 72 73 69 6F 6E 3B 0A 20 20 20 20 20 20 20 20 6C 65 61 76 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 56 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 5A 7C 2D 2D 64 69 74 72 6F 66 66 7C 2D 2D 69 6E 74 65 72 6D 65 64 69 61 74 65 2D 6F 75 74 70 75 74 29 20 23 20 67 72 6F 66 66 20 69 6E 74 65 72 6D 65 64 69 61 74 65 20 6F 75 74 70 75 74 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 5A 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 58 7C 2D 2D 58 7C 2D 2D 78 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 78 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 3F 29 0A 20 20 20 20 20 20 20 20 23 20 64 65 6C 65 74 65 20 6C 65 61 64 69 6E 67 20 60 2D 27 0A 20 20 20 20 20 20 20 20 5F 6F 70 74 63 68 61 72 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 7B 5F 6F 70 74 7D 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2E 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 4E 41 20 22 24 7B 5F 6F 70 74 63 68 61 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 20 22 24 7B 5F 6F 70 74 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 4F 50 54 53 5F 47 52 4F 46 46 5F 53 48 4F 52 54 5F 41 52 47 20 22 24 7B 5F 6F 70 74 63 68 61 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 20 22 24 7B 5F 6F 70 74 7D 22 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 55 6E 6B 6E 6F 77 6E 20 6F 70 74 69 6F 6E 20 3A 20 5C 60 24 31 27 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 6C 6C 29 0A 20 20 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 41 4C 4C 3D 22 79 65 73 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 70 72 6F 70 6F 73 29 09 09 23 20 72 75 6E 20 60 61 70 72 6F 70 6F 73 27 0A 09 61 70 72 6F 70 6F 73 5F 72 75 6E 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 70 72 6F 70 6F 73 2D 64 61 74 61 29 09 09 23 20 72 75 6E 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 64 61 74 61 20 73 65 63 74 69 6F 6E 73 0A 09 61 70 72 6F 70 6F 73 5F 72 75 6E 20 22 24 31 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 34 35 37 5D 5B 5E 29 5D 2A 29 27 3B 0A 20 20 20 20 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 70 72 6F 70 6F 73 2D 64 65 76 65 6C 29 09 09 23 20 72 75 6E 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 64 65 76 65 6C 6F 70 6D 65 6E 74 20 73 65 63 74 69 6F 6E 73 0A 09 61 70 72 6F 70 6F 73 5F 72 75 6E 20 22 24 31 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 32 33 39 5D 5B 5E 29 5D 2A 29 27 3B 0A 20 20 20 20 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 70 72 6F 70 6F 73 2D 70 72 6F 67 73 29 09 09 23 20 72 75 6E 20 60 61 70 72 6F 70 6F 73 27 20 66 6F 72 20 70 72 6F 67 72 61 6D 20 73 65 63 74 69 6F 6E 73 0A 09 61 70 72 6F 70 6F 73 5F 72 75 6E 20 22 24 31 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 31 36 38 5D 5B 5E 29 5D 2A 29 27 3B 0A 20 20 20 20 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 73 63 69 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 20 27 2D 6D 74 74 79 2D 63 68 61 72 27 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 6D 6F 64 65 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 74 65 78 74 27 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 61 75 74 6F 29 09 09 09 23 20 74 68 65 20 64 65 66 61 75 6C 74 20 61 75 74 6F 6D 61 74 69 63 20 6D 6F 64 65 0A 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 62 64 29 09 09 09 23 20 62 6F 72 64 65 72 20 63 6F 6C 6F 72 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 42 44 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 62 67 7C 2D 2D 62 61 63 6B 67 72 6F 75 64 29 09 09 23 20 62 61 63 6B 67 72 6F 75 6E 64 20 63 6F 6C 6F 72 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 42 47 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 62 77 29 09 09 09 23 20 62 6F 72 64 65 72 20 77 69 64 74 68 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 42 57 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 65 66 61 75 6C 74 29 09 09 23 20 72 65 73 65 74 20 76 61 72 69 61 62 6C 65 73 20 74 6F 20 64 65 66 61 75 6C 74 0A 20 20 20 20 20 20 20 20 72 65 73 65 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 65 66 61 75 6C 74 2D 6D 6F 64 65 73 29 09 09 23 20 73 65 71 75 65 6E 63 65 20 6F 66 20 6D 6F 64 65 73 20 69 6E 20 61 75 74 6F 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 65 62 75 67 29 09 09 09 23 20 62 75 67 67 79 2C 20 6F 6E 6C 79 20 66 6F 72 20 64 65 76 65 6C 6F 70 6D 65 6E 74 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 44 45 42 55 47 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 69 73 70 6C 61 79 29 09 09 23 20 73 65 74 20 58 20 64 69 73 70 6C 61 79 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 44 49 53 50 4C 41 59 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 76 69 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 64 76 69 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 64 76 69 2D 76 69 65 77 65 72 29 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 64 76 69 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 44 56 49 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 65 78 74 65 6E 73 69 6F 6E 29 09 09 23 20 74 68 65 20 65 78 74 65 6E 73 69 6F 6E 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 45 58 54 45 4E 53 49 4F 4E 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 66 67 7C 2D 2D 66 6F 72 65 67 72 6F 75 6E 64 29 09 23 20 66 6F 72 65 67 72 6F 75 6E 64 20 63 6F 6C 6F 72 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 46 47 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 66 6E 7C 2D 2D 66 6F 6E 74 29 09 09 23 20 73 65 74 20 66 6F 6E 74 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 46 4E 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 67 65 6F 6D 65 74 72 79 29 09 09 23 20 77 69 6E 64 6F 77 20 67 65 6F 6D 65 74 72 79 20 66 6F 72 20 76 69 65 77 65 72 73 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 47 45 4F 4D 45 54 52 59 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 67 72 6F 66 66 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 67 72 6F 66 66 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 68 74 6D 6C 7C 2D 2D 77 77 77 29 09 09 23 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 77 65 62 20 62 72 6F 77 73 65 72 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 68 74 6D 6C 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 68 74 6D 6C 2D 76 69 65 77 65 72 7C 2D 2D 77 77 77 2D 76 69 65 77 65 72 29 20 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 68 74 6D 6C 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 48 54 4D 4C 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 69 63 6F 6E 69 63 29 09 09 09 23 20 73 74 61 72 74 20 76 69 65 77 65 72 73 20 61 73 20 69 63 6F 6E 73 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 49 43 4F 4E 49 43 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6C 6F 63 61 6C 65 29 09 09 09 23 20 73 65 74 20 6C 61 6E 67 75 61 67 65 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 23 20 61 72 67 75 6D 65 6E 74 20 69 73 20 78 78 5B 5F 74 65 72 72 69 74 6F 72 79 5B 2E 63 6F 64 65 73 65 74 5B 40 6D 6F 64 69 66 69 65 72 5D 5D 5D 20 28 49 53 4F 20 36 33 39 2C 2E 2E 2E 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4C 41 4E 47 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6C 6F 63 61 6C 2D 66 69 6C 65 29 09 09 23 20 66 6F 72 63 65 20 6C 6F 63 61 6C 20 66 69 6C 65 73 3B 20 73 61 6D 65 20 61 73 20 60 2D 2D 6E 6F 2D 6D 61 6E 27 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 46 4F 52 43 45 3D 27 6E 6F 27 3B 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 27 6E 6F 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6C 6F 63 61 74 69 6F 6E 7C 2D 2D 77 68 65 72 65 29 09 23 20 70 72 69 6E 74 20 66 69 6C 65 20 6C 6F 63 61 74 69 6F 6E 73 20 74 6F 20 73 74 64 65 72 72 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4C 4F 43 41 54 49 4F 4E 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6D 61 6E 29 09 09 09 23 20 66 6F 72 63 65 20 61 6C 6C 20 66 69 6C 65 20 70 61 72 61 6D 73 20 74 6F 20 62 65 20 6D 61 6E 20 70 61 67 65 73 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 46 4F 52 43 45 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6D 61 6E 70 61 74 68 29 09 09 23 20 73 70 65 63 69 66 79 20 73 65 61 72 63 68 20 70 61 74 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 23 20 61 72 67 20 69 73 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 64 69 72 65 63 74 6F 72 69 65 73 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 41 4E 50 41 54 48 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6D 6F 64 65 29 09 09 09 23 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 0A 20 20 20 20 20 20 20 20 5F 61 72 67 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 61 72 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 61 75 74 6F 7C 27 27 29 09 09 23 20 73 65 61 72 63 68 20 6D 6F 64 65 20 61 75 74 6F 6D 61 74 69 63 61 6C 6C 79 20 61 6D 6F 6E 67 20 64 65 66 61 75 6C 74 0A 09 20 20 20 20 5F 6D 6F 64 65 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 67 72 6F 66 66 29 09 09 23 20 70 61 73 73 20 69 6E 70 75 74 20 74 6F 20 70 6C 61 69 6E 20 67 72 6F 66 66 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 67 72 6F 66 66 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 68 74 6D 6C 7C 77 77 77 29 09 09 23 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 61 20 77 65 62 20 62 72 6F 77 73 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 68 74 6D 6C 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 64 76 69 29 09 09 09 23 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 78 64 76 69 20 76 69 65 77 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 64 76 69 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 70 64 66 29 09 09 09 23 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 50 44 46 20 76 69 65 77 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 70 64 66 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 70 73 29 09 09 09 23 20 64 69 73 70 6C 61 79 20 77 69 74 68 20 50 6F 73 74 73 63 72 69 70 74 20 76 69 65 77 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 70 73 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 74 65 78 74 29 09 09 09 23 20 6F 75 74 70 75 74 20 6F 6E 20 74 65 72 6D 69 6E 61 6C 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 74 65 78 74 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 74 74 79 29 09 09 09 23 20 6F 75 74 70 75 74 20 6F 6E 20 74 65 72 6D 69 6E 61 6C 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 74 74 79 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 58 7C 78 29 09 09 09 23 20 6F 75 74 70 75 74 20 6F 6E 20 58 20 72 6F 66 66 20 76 69 65 77 65 72 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 27 78 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 51 7C 73 6F 75 72 63 65 29 09 09 23 20 64 69 73 70 6C 61 79 20 73 6F 75 72 63 65 20 63 6F 64 65 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 3D 22 73 6F 75 72 63 65 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 09 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 75 6E 6B 6E 6F 77 6E 20 6D 6F 64 65 20 24 7B 5F 61 72 67 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 22 24 7B 5F 6D 6F 64 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6E 6F 2D 6C 6F 63 61 74 69 6F 6E 29 09 09 23 20 64 69 73 61 62 6C 65 20 66 6F 72 6D 65 72 20 63 61 6C 6C 20 74 6F 20 60 2D 2D 6C 6F 63 61 74 69 6F 6E 27 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4C 4F 43 41 54 49 4F 4E 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 6E 6F 2D 6D 61 6E 29 09 09 09 23 20 64 69 73 61 62 6C 65 20 73 65 61 72 63 68 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 0A 20 20 20 20 20 20 20 20 23 20 74 68 65 20 73 61 6D 65 20 61 73 20 2D 2D 6C 6F 63 61 6C 2D 66 69 6C 65 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 46 4F 52 43 45 3D 22 6E 6F 22 3B 0A 20 20 20 20 20 20 20 20 5F 4D 41 4E 5F 45 4E 41 42 4C 45 3D 22 6E 6F 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 70 61 67 65 72 29 09 09 09 23 20 73 65 74 20 70 61 67 69 6E 67 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 50 41 47 45 52 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 70 64 66 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 70 64 66 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 70 64 66 2D 76 69 65 77 65 72 29 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 73 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 44 46 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 70 73 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 27 70 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 70 73 2D 76 69 65 77 65 72 29 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 70 73 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 53 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 72 65 73 6F 6C 75 74 69 6F 6E 29 09 09 23 20 73 65 74 20 72 65 73 6F 6C 75 74 69 6F 6E 20 66 6F 72 20 58 20 64 65 76 69 63 65 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 61 72 67 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 61 72 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 37 35 7C 37 35 64 70 69 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 64 70 69 3D 37 35 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 31 30 30 7C 31 30 30 64 70 69 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 64 70 69 3D 31 30 30 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 6F 6E 6C 79 20 72 65 73 6F 75 74 69 6F 6E 73 20 6F 66 20 37 35 20 6F 72 20 31 30 30 20 64 70 69 20 61 72 65 20 73 75 70 70 6F 72 74 65 64 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3D 22 24 7B 5F 64 70 69 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 72 76 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 52 56 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 73 65 63 74 69 6F 6E 73 29 09 09 23 20 73 70 65 63 69 66 79 20 73 65 63 74 69 6F 6E 73 20 66 6F 72 20 6D 61 6E 20 70 61 67 65 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 23 20 61 72 67 20 69 73 20 63 6F 6C 6F 6E 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 73 65 63 74 69 6F 6E 20 6E 61 6D 65 73 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 53 45 43 54 49 4F 4E 53 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 73 68 65 6C 6C 29 0A 20 20 20 20 20 20 20 20 23 20 61 6C 72 65 61 64 79 20 64 6F 6E 65 20 64 75 72 69 6E 67 20 74 68 65 20 66 69 72 73 74 20 72 75 6E 3B 20 73 6F 20 69 67 6E 6F 72 65 20 74 68 65 20 61 72 67 75 6D 65 6E 74 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 73 79 73 74 65 6D 73 29 09 09 23 20 6D 61 6E 20 70 61 67 65 73 20 66 6F 72 20 64 69 66 66 65 72 65 6E 74 20 4F 53 27 73 2C 20 61 72 67 0A 20 20 20 20 20 20 20 20 23 20 61 72 67 75 6D 65 6E 74 20 69 73 20 61 20 63 6F 6D 6D 61 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 53 59 53 54 45 4D 53 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 74 65 78 74 29 09 09 09 23 20 74 65 78 74 20 6D 6F 64 65 20 77 69 74 68 6F 75 74 20 70 61 67 65 72 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 74 65 78 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 74 69 74 6C 65 29 09 09 09 23 20 74 69 74 6C 65 20 66 6F 72 20 58 20 76 69 65 77 65 72 73 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 54 49 54 4C 45 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 74 74 79 29 09 09 09 23 20 74 74 79 20 6D 6F 64 65 2C 20 74 65 78 74 20 77 69 74 68 20 70 61 67 65 72 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 74 74 79 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 74 65 78 74 2D 64 65 76 69 63 65 7C 2D 2D 74 74 79 2D 64 65 76 69 63 65 29 20 23 20 64 65 76 69 63 65 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 54 45 58 54 5F 44 45 56 49 43 45 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 77 68 61 74 69 73 29 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 57 48 41 54 49 53 3D 27 79 65 73 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 78 72 6D 29 09 09 09 23 20 70 61 73 73 20 58 20 72 65 73 6F 75 72 63 65 20 73 74 72 69 6E 67 2C 20 61 72 67 3B 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 4F 50 54 5F 58 52 4D 20 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2D 2D 78 2D 76 69 65 77 65 72 7C 2D 2D 58 2D 76 69 65 77 65 72 29 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 78 20 6D 6F 64 65 3B 20 61 72 67 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 58 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 27 65 72 72 6F 72 20 6F 6E 20 61 72 67 75 6D 65 6E 74 20 70 61 72 73 69 6E 67 20 3A 20 27 22 5C 60 24 2A 27 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 73 68 69 66 74 3B 09 09 09 23 20 72 65 6D 6F 76 65 20 60 2D 2D 27 20 61 72 67 75 6D 65 6E 74 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 44 45 42 55 47 20 69 73 5F 6E 6F 74 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 44 45 42 55 47 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 44 45 42 55 47 3D 27 79 65 73 27 3B 0A 20 20 20 20 66 69 3B 0A 20 20 66 69 3B 0A 0A 20 20 23 20 52 65 6D 61 69 6E 69 6E 67 20 61 72 67 75 6D 65 6E 74 73 20 61 72 65 20 66 69 6C 65 20 6E 61 6D 65 73 20 28 66 69 6C 65 73 70 65 63 73 29 2E 0A 20 20 23 20 53 61 76 65 20 74 68 65 6D 20 74 6F 20 6C 69 73 74 20 24 5F 46 49 4C 45 41 52 47 53 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 23 22 20 30 3B 20 74 68 65 6E 09 23 20 75 73 65 20 22 2D 22 20 66 6F 72 20 73 74 61 6E 64 61 72 64 20 69 6E 70 75 74 0A 20 20 20 20 73 65 74 20 2D 2D 20 27 2D 27 3B 0A 20 20 66 69 3B 0A 20 20 5F 46 49 4C 45 41 52 47 53 3D 27 27 3B 0A 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 46 49 4C 45 41 52 47 53 20 22 24 40 22 3B 0A 20 20 69 66 20 6C 69 73 74 5F 68 61 73 20 5F 46 49 4C 45 41 52 47 53 20 27 2D 27 3B 20 74 68 65 6E 0A 20 20 20 20 73 61 76 65 5F 73 74 64 69 6E 3B 0A 20 20 66 69 3B 0A 20 20 23 20 24 5F 46 49 4C 45 41 52 47 53 20 6D 75 73 74 20 62 65 20 72 65 74 72 69 65 76 65 64 20 77 69 74 68 20 60 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 5F 46 49 4C 45 41 52 47 53 22 27 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 28 29 0A 0A 23 20 43 61 6C 6C 65 64 20 66 72 6F 6D 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 28 29 20 62 65 63 61 75 73 65 20 64 6F 75 62 6C 65 20 60 63 61 73 65 27 20 69 73 20 6E 6F 74 20 70 6F 73 73 69 62 6C 65 2E 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 4F 50 54 5F 44 45 56 49 43 45 2C 20 24 5F 4F 50 54 5F 4D 4F 44 45 0A 5F 63 68 65 63 6B 5F 64 65 76 69 63 65 5F 77 69 74 68 5F 6D 6F 64 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 5F 63 68 65 63 6B 5F 64 65 76 69 63 65 5F 77 69 74 68 5F 6D 6F 64 65 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 64 76 69 29 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 64 76 69 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 68 74 6D 6C 29 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 68 74 6D 6C 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 6C 62 70 7C 6C 6A 34 29 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 67 72 6F 66 66 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 70 73 29 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 70 73 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 61 73 63 69 69 7C 63 70 31 30 34 37 7C 6C 61 74 69 6E 31 7C 75 74 66 38 29 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 4D 4F 44 45 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 74 65 78 74 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 74 74 79 3B 09 09 23 20 64 65 66 61 75 6C 74 20 74 65 78 74 20 6D 6F 64 65 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 58 2A 29 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 78 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 09 09 09 09 23 20 75 6E 6B 6E 6F 77 6E 20 64 65 76 69 63 65 2C 20 67 6F 20 74 6F 20 67 72 6F 66 66 20 6D 6F 64 65 0A 20 20 20 20 20 20 5F 4F 50 54 5F 4D 4F 44 45 3D 67 72 6F 66 66 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 65 72 72 6F 72 7D 22 3B 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 20 28 29 0A 23 0A 23 20 44 65 74 65 72 6D 69 6E 65 20 74 68 65 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 20 24 44 49 53 50 4C 41 59 2C 20 24 5F 4F 50 54 5F 4D 4F 44 45 2C 20 24 5F 4F 50 54 5F 44 45 56 49 43 45 0A 23 20 20 20 6F 75 74 3A 20 24 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 0A 23 0A 0A 23 20 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 28 3C 70 72 6F 67 6C 69 73 74 3E 29 0A 23 0A 23 20 52 65 74 72 69 65 76 65 20 66 69 72 73 74 20 61 72 67 75 6D 65 6E 74 20 74 68 61 74 20 72 65 70 72 65 73 65 6E 74 73 20 61 6E 20 65 78 69 73 74 69 6E 67 20 70 72 6F 67 72 61 6D 20 69 6E 20 24 50 41 54 48 2E 0A 23 20 4C 6F 63 61 6C 20 66 75 6E 63 74 69 6F 6E 20 66 6F 72 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 28 29 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 20 31 3B 20 61 20 63 6F 6D 6D 61 2D 73 65 70 61 72 61 74 65 64 20 6C 69 73 74 20 6F 66 20 63 6F 6D 6D 61 6E 64 73 20 28 77 69 74 68 20 6F 70 74 69 6F 6E 73 29 2C 0A 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 6B 65 20 24 5F 56 49 45 57 45 52 5F 2A 2E 0A 23 0A 23 20 52 65 74 75 72 6E 20 20 3A 20 60 31 27 20 69 66 20 6E 6F 6E 65 20 66 6F 75 6E 64 2C 20 60 30 27 20 69 66 20 66 6F 75 6E 64 2E 0A 23 20 4F 75 74 70 75 74 20 20 3A 20 74 68 65 20 61 72 67 75 6D 65 6E 74 20 74 68 61 74 20 73 75 63 63 65 64 65 64 2E 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 36 3A 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 28 29 27 3B 0A 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 6D 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 6F 64 65 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 76 69 65 77 65 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 76 69 65 77 65 72 73 3B 0A 0A 20 20 23 20 68 61 6E 64 6C 65 20 61 70 72 6F 70 6F 73 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 61 70 72 6F 70 6F 73 20 22 24 7B 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 7D 22 3B 0A 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 41 54 41 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 61 70 72 6F 70 6F 73 20 22 24 40 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 34 35 37 5D 29 27 3B 0A 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 44 45 56 45 4C 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 61 70 72 6F 70 6F 73 20 22 24 40 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 32 33 39 5D 29 27 3B 0A 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 41 50 52 4F 50 4F 53 5F 50 52 4F 47 53 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 61 70 72 6F 70 6F 73 20 22 24 40 22 20 7C 20 67 72 65 70 20 27 5E 5B 5E 28 5D 2A 28 5B 31 36 38 5D 29 27 3B 0A 20 20 20 20 5F 63 6F 64 65 3D 22 24 3F 22 3B 0A 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 65 78 69 74 20 22 24 7B 5F 63 6F 64 65 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 23 20 73 65 74 20 64 69 73 70 6C 61 79 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 44 49 53 50 4C 41 59 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 44 49 53 50 4C 41 59 3D 22 24 7B 5F 4F 50 54 5F 44 49 53 50 4C 41 59 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 67 72 6F 66 66 27 3B 0A 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 20 27 2D 56 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 5A 20 69 73 5F 79 65 73 3B 20 74 68 65 6E 0A 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 67 72 6F 66 66 27 3B 0A 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 20 27 2D 5A 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 4D 4F 44 45 20 69 73 5F 65 71 75 61 6C 20 27 67 72 6F 66 66 27 3B 20 74 68 65 6E 0A 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 67 72 6F 66 66 27 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 20 69 73 5F 65 71 75 61 6C 20 27 67 72 6F 66 66 27 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 4D 4F 44 45 20 69 73 5F 65 71 75 61 6C 20 27 73 6F 75 72 63 65 27 3B 20 74 68 65 6E 0A 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 73 6F 75 72 63 65 27 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 4D 4F 44 45 7D 22 20 69 6E 0A 20 20 20 20 27 27 29 09 09 09 09 23 20 61 75 74 6F 6D 61 74 69 63 20 6D 6F 64 65 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 58 2A 29 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 44 49 53 50 4C 41 59 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 6E 6F 20 58 20 64 69 73 70 6C 61 79 20 66 6F 75 6E 64 20 66 6F 72 20 64 65 76 69 63 65 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 78 27 3B 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 61 73 63 69 69 7C 63 70 31 30 34 37 7C 6C 61 74 69 6E 31 7C 75 74 66 38 29 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 27 74 65 78 74 27 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 74 79 27 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 44 49 53 50 4C 41 59 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 74 79 27 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 73 3D 22 24 7B 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 7D 22 3B 0A 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 73 3D 22 24 7B 5F 4F 50 54 5F 44 45 46 41 55 4C 54 5F 4D 4F 44 45 53 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 74 65 78 74 29 0A 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 65 78 74 27 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 74 74 79 29 0A 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 74 79 27 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 09 09 09 09 23 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 20 77 61 73 20 67 69 76 65 6E 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 44 49 53 50 4C 41 59 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 22 79 6F 75 20 6D 75 73 74 20 62 65 20 69 6E 20 58 20 57 69 6E 64 6F 77 20 66 6F 72 20 24 7B 5F 4F 50 54 5F 4D 4F 44 45 7D 20 6D 6F 64 65 2E 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 5F 6D 6F 64 65 73 3D 22 24 7B 5F 4F 50 54 5F 4D 4F 44 45 7D 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 0A 20 20 23 20 6F 6E 6C 79 20 76 69 65 77 65 72 20 6D 6F 64 65 73 20 61 72 65 20 6C 65 66 74 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 22 24 7B 5F 6D 6F 64 65 73 7D 22 20 27 2C 27 29 22 3B 0A 20 20 77 68 69 6C 65 20 74 65 73 74 20 22 24 23 22 20 2D 67 74 20 30 3B 20 64 6F 0A 20 20 20 20 6D 3D 22 24 31 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 63 61 73 65 20 22 24 6D 22 20 69 6E 0A 20 20 20 20 20 20 74 65 78 74 29 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 65 78 74 27 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 74 74 79 29 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 74 74 79 27 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 78 29 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 58 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 4F 50 54 5F 56 49 45 57 45 52 5F 58 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 56 49 45 57 45 52 5F 58 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 3D 22 24 28 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 22 24 7B 5F 76 69 65 77 65 72 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 3F 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 22 24 7B 5F 76 69 65 77 65 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 27 78 27 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 64 76 69 29 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 44 56 49 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 4F 50 54 5F 56 49 45 57 45 52 5F 44 56 49 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 56 49 45 57 45 52 5F 44 56 49 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 3D 22 24 28 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 22 24 7B 5F 76 69 65 77 65 72 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 3F 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 22 24 7B 5F 76 69 65 77 65 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 22 64 76 69 22 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 70 64 66 29 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 44 46 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 44 46 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 56 49 45 57 45 52 5F 50 44 46 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 3D 22 24 28 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 22 24 7B 5F 76 69 65 77 65 72 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 3F 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 22 24 7B 5F 76 69 65 77 65 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 22 70 64 66 22 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 70 73 29 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 53 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 4F 50 54 5F 56 49 45 57 45 52 5F 50 53 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 56 49 45 57 45 52 5F 50 53 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 3D 22 24 28 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 22 24 7B 5F 76 69 65 77 65 72 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 3F 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 22 24 7B 5F 76 69 65 77 65 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 22 70 73 22 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 68 74 6D 6C 29 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 56 49 45 57 45 52 5F 48 54 4D 4C 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 4F 50 54 5F 56 49 45 57 45 52 5F 48 54 4D 4C 7D 22 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 73 3D 22 24 7B 5F 56 49 45 57 45 52 5F 48 54 4D 4C 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 76 69 65 77 65 72 3D 22 24 28 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 20 22 24 7B 5F 76 69 65 77 65 72 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 71 75 61 6C 20 22 24 3F 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 3D 22 24 7B 5F 76 69 65 77 65 72 7D 22 3B 0A 20 20 20 20 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 3D 68 74 6D 6C 3B 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 65 72 72 6F 72 20 22 6E 6F 20 73 75 69 74 61 62 6C 65 20 64 69 73 70 6C 61 79 20 6D 6F 64 65 20 66 6F 75 6E 64 2E 22 3B 0A 7D 0A 0A 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 28 29 0A 7B 0A 20 20 6C 6F 63 61 6C 20 69 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 23 22 20 30 3B 20 74 68 65 6E 0A 20 20 20 20 65 72 72 6F 72 20 22 5F 67 65 74 5F 66 69 72 73 74 5F 70 72 6F 67 28 29 20 6E 65 65 64 73 20 31 20 61 72 67 75 6D 65 6E 74 2E 22 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 31 22 3B 20 74 68 65 6E 0A 20 20 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 42 41 44 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 28 6C 69 73 74 5F 66 72 6F 6D 5F 73 70 6C 69 74 20 22 24 31 22 20 27 2C 27 29 22 3B 0A 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 69 66 20 6F 62 6A 20 69 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 69 66 20 69 73 5F 70 72 6F 67 20 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 24 69 29 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 65 63 68 6F 20 2D 6E 20 22 24 69 22 3B 0A 20 20 20 20 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 72 65 74 75 72 6E 20 22 24 7B 5F 42 41 44 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 20 28 29 0A 23 0A 23 20 50 72 6F 63 65 73 73 20 66 69 6C 65 73 70 65 63 20 61 72 67 75 6D 65 6E 74 73 20 69 6E 20 24 5F 46 49 4C 45 41 52 47 53 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 24 5F 46 49 4C 45 41 52 47 53 20 28 70 72 6F 63 65 73 73 20 77 69 74 68 20 60 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 5F 46 49 4C 45 41 52 47 53 22 27 29 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 37 3A 20 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 28 29 27 3B 0A 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 65 78 69 74 63 6F 64 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 66 69 6C 65 73 70 65 63 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6E 61 6D 65 3B 0A 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 42 41 44 7D 22 3B 0A 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 24 7B 5F 46 49 4C 45 41 52 47 53 7D 22 3B 0A 20 20 75 6E 73 65 74 20 5F 46 49 4C 45 41 52 47 53 3B 0A 20 20 23 20 74 65 6D 70 6F 72 61 72 79 20 73 74 6F 72 61 67 65 20 6F 66 20 61 6C 6C 20 69 6E 70 75 74 20 74 6F 20 24 5F 54 4D 50 5F 43 41 54 0A 20 20 77 68 69 6C 65 20 74 65 73 74 20 22 24 23 22 20 2D 67 65 20 32 3B 20 64 6F 0A 20 20 20 20 23 20 74 65 73 74 20 66 6F 72 20 60 73 20 6E 61 6D 65 27 20 61 72 67 75 6D 65 6E 74 73 2C 20 77 69 74 68 20 60 73 27 20 61 20 31 2D 63 68 61 72 20 73 74 61 6E 64 61 72 64 20 73 65 63 74 69 6F 6E 0A 20 20 20 20 5F 66 69 6C 65 73 70 65 63 3D 22 24 31 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 20 69 6E 0A 20 20 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 27 2D 27 29 0A 20 20 20 20 20 20 20 20 69 66 20 72 65 67 69 73 74 65 72 5F 66 69 6C 65 20 27 2D 27 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 3F 29 0A 20 20 20 20 20 20 20 20 69 66 20 6C 69 73 74 5F 68 61 73 5F 6E 6F 74 20 5F 4D 41 4E 5F 41 55 54 4F 5F 53 45 43 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 5F 6E 61 6D 65 3D 22 24 31 22 3B 0A 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 6E 61 6D 65 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 2A 2F 2A 7C 6D 61 6E 3A 2A 7C 2A 5C 28 2A 5C 29 7C 2A 2E 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 6D 61 6E 3A 24 7B 5F 6E 61 6D 65 7D 28 24 7B 5F 66 69 6C 65 73 70 65 63 7D 29 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 64 6F 6E 65 3B 09 09 09 09 23 20 65 6E 64 20 6F 66 20 60 73 20 6E 61 6D 65 27 20 74 65 73 74 0A 20 20 77 68 69 6C 65 20 74 65 73 74 20 22 24 23 22 20 2D 67 74 20 30 3B 20 64 6F 0A 20 20 20 20 5F 66 69 6C 65 73 70 65 63 3D 22 24 31 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 20 20 69 66 20 64 6F 5F 66 69 6C 65 61 72 67 20 22 24 7B 5F 66 69 6C 65 73 70 65 63 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 65 78 69 74 63 6F 64 65 3D 22 24 7B 5F 47 4F 4F 44 7D 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 53 54 44 49 4E 7D 22 3B 0A 20 20 69 66 20 69 73 5F 65 71 75 61 6C 20 22 24 7B 5F 65 78 69 74 63 6F 64 65 7D 22 20 22 24 7B 5F 42 41 44 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 62 61 64 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 28 29 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 20 28 29 0A 23 0A 23 20 44 65 74 65 72 6D 69 6E 65 20 6F 70 74 69 6F 6E 73 20 66 6F 72 20 73 65 74 74 69 6E 67 20 58 20 72 65 73 6F 75 72 63 65 73 20 77 69 74 68 20 24 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 2E 0A 23 20 0A 23 20 47 6C 6F 62 61 6C 73 3A 20 24 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 2C 20 24 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 38 3A 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 28 29 27 3B 0A 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 5F 70 72 6F 67 3B 09 09 09 23 20 76 69 65 77 65 72 20 70 72 6F 67 72 61 6D 0A 20 20 6C 6F 63 61 6C 20 5F 72 6C 3B 09 09 09 23 20 72 65 73 6F 75 72 63 65 20 6C 69 73 74 0A 20 20 6C 6F 63 61 6C 20 6E 3B 0A 20 20 5F 74 69 74 6C 65 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 54 49 54 4C 45 7D 22 20 22 24 7B 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 7D 22 29 22 3B 0A 20 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3D 27 27 3B 0A 20 20 73 65 74 20 2D 2D 20 24 7B 5F 74 69 74 6C 65 7D 3B 0A 20 20 75 6E 74 69 6C 20 69 73 5F 65 71 75 61 6C 20 22 24 23 22 20 30 3B 20 64 6F 20 0A 20 20 20 20 6E 3D 22 24 31 22 3B 0A 20 20 20 20 63 61 73 65 20 22 24 6E 22 20 69 6E 0A 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2C 2A 29 0A 20 20 20 20 20 20 6E 3D 22 24 28 65 63 68 6F 20 2D 6E 20 22 24 31 22 20 7C 20 73 65 64 20 2D 65 20 27 73 2F 5E 2C 2C 2A 2F 2F 27 29 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 0A 20 20 20 20 69 66 20 6F 62 6A 20 6E 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 63 6F 6E 74 69 6E 75 65 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3D 22 24 7B 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 7D 2C 22 3B 0A 20 20 20 20 66 69 3B 0A 20 20 20 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3D 22 24 7B 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 7D 24 6E 22 3B 0A 20 20 20 20 73 68 69 66 74 3B 0A 20 20 64 6F 6E 65 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 7D 22 20 69 6E 0A 20 20 27 27 29 0A 20 20 20 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3D 27 2D 27 3B 0A 20 20 20 20 3B 3B 0A 20 20 2C 2A 29 0A 20 20 20 20 65 72 72 6F 72 20 22 24 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 20 73 74 61 72 74 73 20 77 69 74 68 20 61 20 63 6F 6D 6D 61 2E 22 3B 0A 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 3D 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 2F 24 7B 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 7D 22 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 20 23 20 66 6F 72 20 65 78 61 6D 70 6C 65 2C 20 66 6F 72 20 67 72 6F 66 66 20 6D 6F 64 65 0A 20 20 20 20 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 3D 27 27 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 0A 20 20 73 65 74 20 2D 2D 20 24 7B 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 7D 3B 0A 20 20 5F 70 72 6F 67 3D 22 24 28 62 61 73 65 5F 6E 61 6D 65 20 22 24 31 22 29 22 3B 0A 20 20 5F 72 6C 3D 27 27 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 42 44 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 62 64 27 20 22 24 7B 5F 4F 50 54 5F 42 44 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 42 47 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 62 67 27 20 22 24 7B 5F 4F 50 54 5F 42 47 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 78 70 64 66 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 70 61 70 65 72 63 6F 6C 6F 72 27 20 22 24 7B 5F 4F 50 54 5F 42 47 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 42 57 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 5F 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 62 77 27 20 22 24 7B 5F 4F 50 54 5F 42 57 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 46 47 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 66 67 27 20 22 24 7B 5F 4F 50 54 5F 46 47 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 7B 5F 4F 50 54 5F 46 4E 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 66 6E 27 20 22 24 7B 5F 4F 50 54 5F 46 4E 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 7B 5F 4F 50 54 5F 47 45 4F 4D 45 54 52 59 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 7C 78 70 64 66 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 67 65 6F 6D 65 74 72 79 27 20 22 24 7B 5F 4F 50 54 5F 47 45 4F 4D 45 54 52 59 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 65 6D 70 74 79 20 22 24 7B 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 3D 22 24 7B 5F 44 45 46 41 55 4C 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 3B 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 72 65 73 6F 6C 75 74 69 6F 6E 27 20 22 24 7B 5F 44 45 46 41 55 4C 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 78 70 64 66 29 0A 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 44 45 46 41 55 4C 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 37 35 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 23 20 37 32 64 70 69 20 69 73 20 27 31 30 30 27 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 7A 27 20 27 31 30 34 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 31 30 30 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 7A 27 20 27 31 33 39 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 72 65 73 6F 6C 75 74 69 6F 6E 27 20 22 24 7B 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 78 70 64 66 29 0A 20 20 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 52 45 53 4F 4C 55 54 49 4F 4E 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 20 20 37 35 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 7A 27 20 27 31 30 34 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 23 20 27 31 30 30 27 20 63 6F 72 72 65 73 70 6F 6E 64 73 20 74 6F 20 37 32 64 70 69 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 20 20 31 30 30 29 0A 20 20 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 7A 27 20 27 31 33 39 27 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 7B 5F 4F 50 54 5F 49 43 4F 4E 49 43 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 69 63 6F 6E 69 63 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 79 65 73 20 22 24 7B 5F 4F 50 54 5F 52 56 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 72 76 27 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 7B 5F 4F 50 54 5F 58 52 4D 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 68 6F 73 74 76 69 65 77 7C 67 76 7C 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 7C 78 64 76 69 7C 78 70 64 66 29 0A 20 20 20 20 20 20 20 20 65 76 61 6C 20 73 65 74 20 2D 2D 20 22 7B 24 5F 4F 50 54 5F 58 52 4D 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 6F 72 20 69 20 69 6E 20 22 24 40 22 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 78 72 6D 27 20 22 24 69 22 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 69 66 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 20 22 24 7B 5F 74 69 74 6C 65 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 63 61 73 65 20 22 24 7B 5F 70 72 6F 67 7D 22 20 69 6E 0A 20 20 20 20 20 20 67 78 64 69 74 76 69 65 77 7C 78 64 69 74 76 69 65 77 29 0A 20 20 20 20 20 20 20 20 6C 69 73 74 5F 61 70 70 65 6E 64 20 5F 72 6C 20 27 2D 74 69 74 6C 65 27 20 22 24 7B 5F 74 69 74 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 65 73 61 63 3B 0A 20 20 66 69 3B 0A 20 20 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 3D 22 24 7B 5F 72 6C 7D 22 3B 20 0A 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 5F 64 69 73 70 6C 61 79 20 28 29 0A 23 0A 23 20 44 6F 20 74 68 65 20 61 63 74 75 61 6C 20 64 69 73 70 6C 61 79 20 6F 66 20 74 68 65 20 77 68 6F 6C 65 20 74 68 69 6E 67 2E 0A 23 0A 23 20 47 6C 6F 62 61 6C 73 3A 0A 23 20 20 20 69 6E 3A 20 24 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 2C 20 24 5F 4F 50 54 5F 44 45 56 49 43 45 2C 0A 23 20 20 20 20 20 20 20 24 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 2C 20 24 5F 41 44 44 4F 50 54 53 5F 50 4F 53 54 2C 20 24 5F 41 44 44 4F 50 54 53 5F 58 2C 0A 23 20 20 20 20 20 20 20 24 5F 52 45 47 49 53 54 45 52 45 44 5F 54 49 54 4C 45 2C 20 24 5F 54 4D 50 5F 43 41 54 2C 0A 23 20 20 20 20 20 20 20 24 5F 4F 50 54 5F 50 41 47 45 52 20 24 50 41 47 45 52 20 24 5F 4D 41 4E 4F 50 54 5F 50 41 47 45 52 0A 23 0A 6C 61 6E 64 6D 61 72 6B 20 27 31 39 3A 20 6D 61 69 6E 5F 64 69 73 70 6C 61 79 28 29 27 3B 0A 6D 61 69 6E 5F 64 69 73 70 6C 61 79 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 5F 64 69 73 70 6C 61 79 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 6C 6F 63 61 6C 20 70 3B 0A 20 20 6C 6F 63 61 6C 20 5F 61 64 64 6F 70 74 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 64 65 76 69 63 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 67 72 6F 67 67 79 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6D 6F 64 65 66 69 6C 65 3B 0A 20 20 6C 6F 63 61 6C 20 5F 6F 70 74 69 6F 6E 73 3B 0A 20 20 6C 6F 63 61 6C 20 5F 70 61 67 65 72 3B 0A 20 20 6C 6F 63 61 6C 20 5F 74 69 74 6C 65 3B 0A 20 20 65 78 70 6F 72 74 20 5F 61 64 64 6F 70 74 73 3B 0A 20 20 65 78 70 6F 72 74 20 5F 67 72 6F 67 67 79 3B 0A 20 20 65 78 70 6F 72 74 20 5F 6D 6F 64 65 66 69 6C 65 3B 0A 0A 20 20 69 66 20 6F 62 6A 20 5F 54 4D 50 5F 43 41 54 20 69 73 5F 6E 6F 6E 5F 65 6D 70 74 79 5F 66 69 6C 65 3B 20 74 68 65 6E 0A 20 20 20 20 5F 6D 6F 64 65 66 69 6C 65 3D 22 24 7B 5F 4F 55 54 50 55 54 5F 46 49 4C 45 5F 4E 41 4D 45 7D 22 3B 0A 20 20 65 6C 73 65 0A 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 20 20 66 69 3B 0A 20 20 63 61 73 65 20 22 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 22 20 69 6E 0A 20 20 20 20 67 72 6F 66 66 29 0A 20 20 20 20 20 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 3D 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 20 24 7B 5F 41 44 44 4F 50 54 53 5F 50 4F 53 54 7D 22 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 4F 50 54 5F 44 45 56 49 43 45 20 69 73 5F 6E 6F 74 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 3D 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 20 2D 54 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 65 76 61 6C 20 67 72 6F 67 20 22 24 7B 5F 6F 70 74 69 6F 6E 73 7D 22 29 22 3B 0A 20 20 20 20 20 20 74 72 61 70 5F 63 6C 65 61 6E 3B 0A 20 20 20 20 20 20 23 20 73 74 61 72 74 20 61 20 6E 65 77 20 73 68 65 6C 6C 20 70 72 6F 67 72 61 6D 20 74 6F 20 67 65 74 20 61 6E 6F 74 68 65 72 20 70 72 6F 63 65 73 73 20 49 44 2E 0A 20 20 20 20 20 20 73 68 20 2D 63 20 27 0A 20 20 20 20 20 20 20 20 73 65 74 20 2D 65 3B 0A 20 20 20 20 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 6D 76 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 63 61 74 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 20 20 28 0A 20 20 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 28 29 0A 20 20 20 20 20 20 20 20 20 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 2F 2A 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6D 64 69 72 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 20 20 74 72 61 70 20 63 6C 65 61 6E 5F 75 70 20 30 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 67 72 6F 67 67 79 7D 22 20 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 22 3B 0A 20 20 20 20 20 20 20 20 29 20 26 27 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 74 65 78 74 7C 74 74 79 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 20 20 20 5F 64 65 76 69 63 65 3D 22 24 28 67 65 74 5F 66 69 72 73 74 5F 65 73 73 65 6E 74 69 61 6C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 24 7B 5F 4F 50 54 5F 54 45 58 54 5F 44 45 56 49 43 45 7D 22 20 22 24 7B 5F 44 45 46 41 55 4C 54 5F 54 54 59 5F 44 45 56 49 43 45 7D 22 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 61 73 63 69 69 7C 63 70 31 30 34 37 7C 6C 61 74 69 6E 31 7C 75 74 66 38 29 0A 20 20 20 20 20 20 20 20 20 20 5F 64 65 76 69 63 65 3D 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 61 64 64 6F 70 74 73 3D 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 20 24 7B 5F 41 44 44 4F 50 54 53 5F 50 4F 53 54 7D 22 3B 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 24 7B 5F 64 65 76 69 63 65 7D 29 22 3B 0A 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 20 69 73 5F 65 71 75 61 6C 20 27 74 65 78 74 27 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 74 6D 70 5F 63 61 74 20 7C 20 65 76 61 6C 20 22 24 7B 5F 67 72 6F 67 67 79 7D 22 20 22 24 7B 5F 61 64 64 6F 70 74 73 7D 22 3B 0A 20 20 20 20 20 20 65 6C 73 65 0A 20 20 20 20 20 20 20 20 5F 70 61 67 65 72 3D 27 27 3B 0A 20 20 20 20 20 20 20 20 66 6F 72 20 70 20 69 6E 20 22 24 7B 5F 4F 50 54 5F 50 41 47 45 52 7D 22 20 22 24 7B 50 41 47 45 52 7D 22 20 22 24 7B 5F 4D 41 4E 4F 50 54 5F 50 41 47 45 52 7D 22 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 6C 65 73 73 20 2D 72 20 2D 52 27 20 27 6D 6F 72 65 27 20 27 70 61 67 65 72 27 20 27 63 61 74 27 3B 20 64 6F 0A 20 20 20 20 20 20 20 20 69 66 20 69 73 5F 70 72 6F 67 20 24 70 3B 20 74 68 65 6E 20 20 20 23 20 6E 6F 20 22 22 20 66 6F 72 20 69 73 5F 70 72 6F 67 28 29 20 61 6C 6C 6F 77 73 20 61 72 67 73 20 66 6F 72 20 24 70 0A 20 20 20 20 20 20 20 20 20 20 5F 70 61 67 65 72 3D 22 24 70 22 3B 0A 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6B 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 64 6F 6E 65 3B 0A 20 20 20 20 20 20 20 20 69 66 20 6F 62 6A 20 5F 70 61 67 65 72 20 69 73 5F 65 6D 70 74 79 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 65 72 72 6F 72 20 27 6E 6F 20 70 61 67 65 72 20 70 72 6F 67 72 61 6D 20 66 6F 75 6E 64 20 66 6F 72 20 74 74 79 20 6D 6F 64 65 27 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 74 6D 70 5F 63 61 74 20 7C 20 65 76 61 6C 20 22 24 7B 5F 67 72 6F 67 67 79 7D 22 20 22 24 7B 5F 61 64 64 6F 70 74 73 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 70 61 67 65 72 7D 22 3B 0A 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 3B 3B 0A 0A 20 20 20 20 23 23 23 23 20 76 69 65 77 65 72 20 6D 6F 64 65 73 0A 0A 20 20 20 20 64 76 69 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 7C 64 76 69 29 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 64 76 69 29 22 3B 0A 20 20 20 20 20 20 5F 64 6F 5F 64 69 73 70 6C 61 79 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 68 74 6D 6C 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 7C 68 74 6D 6C 29 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 6D 6F 64 65 66 69 6C 65 3D 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 2E 68 74 6D 6C 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 68 74 6D 6C 29 22 3B 0A 20 20 20 20 20 20 5F 64 6F 5F 64 69 73 70 6C 61 79 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 70 64 66 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 7C 70 73 29 0A 20 20 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 6D 6F 64 65 66 69 6C 65 3D 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 70 73 29 22 3B 0A 20 20 20 20 20 20 74 72 61 70 5F 63 6C 65 61 6E 3B 0A 20 20 20 20 20 20 23 20 73 74 61 72 74 20 61 20 6E 65 77 20 73 68 65 6C 6C 20 70 72 6F 67 72 61 6D 20 74 6F 20 67 65 74 20 61 6E 6F 74 68 65 72 20 70 72 6F 63 65 73 73 20 49 44 2E 0A 20 20 20 20 20 20 73 68 20 2D 63 20 27 0A 20 20 20 20 20 20 20 20 73 65 74 20 2D 65 3B 0A 20 20 20 20 20 20 20 20 5F 70 73 66 69 6C 65 3D 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 2E 70 73 22 3B 0A 20 20 20 20 20 20 20 20 5F 6D 6F 64 65 66 69 6C 65 3D 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 2E 70 64 66 22 3B 0A 20 20 20 20 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 63 61 74 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 67 72 6F 67 67 79 7D 22 20 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 22 20 3E 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 67 73 20 2D 71 20 2D 64 4E 4F 50 41 55 53 45 20 2D 64 42 41 54 43 48 20 2D 73 44 45 56 49 43 45 3D 70 64 66 77 72 69 74 65 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 2D 73 4F 75 74 70 75 74 46 69 6C 65 3D 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 20 2D 63 20 73 61 76 65 20 70 6F 70 20 2D 66 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 70 73 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 20 20 20 20 20 20 20 20 28 0A 20 20 20 20 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 28 29 20 7B 0A 20 20 20 20 20 20 20 20 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 2F 2A 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6D 64 69 72 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 20 20 20 20 74 72 61 70 20 63 6C 65 61 6E 5F 75 70 20 30 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 7D 22 20 24 7B 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 7D 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 20 20 20 20 29 20 26 27 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 70 73 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 7C 70 73 29 0A 20 20 20 20 20 20 20 20 20 20 64 6F 5F 6E 6F 74 68 69 6E 67 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 70 73 29 22 3B 0A 20 20 20 20 20 20 5F 64 6F 5F 64 69 73 70 6C 61 79 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 73 6F 75 72 63 65 29 0A 20 20 20 20 20 20 74 6D 70 5F 63 61 74 3B 0A 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 78 29 0A 20 20 20 20 20 20 63 61 73 65 20 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 69 6E 0A 20 20 20 20 20 20 20 20 27 27 29 0A 20 20 20 20 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 5A 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 58 2A 7C 70 73 29 0A 20 20 20 20 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 54 22 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 20 2D 5A 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 20 20 2A 29 0A 20 20 20 20 20 20 20 20 20 20 77 61 72 6E 69 6E 67 20 5C 0A 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6F 6E 67 20 64 65 76 69 63 65 20 66 6F 72 20 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 20 6D 6F 64 65 3A 20 24 7B 5F 4F 50 54 5F 44 45 56 49 43 45 7D 22 3B 0A 20 20 20 20 20 20 20 20 20 20 5F 67 72 6F 67 67 79 3D 22 24 28 74 6D 70 5F 63 61 74 20 7C 20 67 72 6F 67 20 2D 5A 29 22 3B 0A 20 20 20 20 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 20 20 65 73 61 63 3B 0A 20 20 20 20 20 20 5F 64 6F 5F 64 69 73 70 6C 61 79 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 20 20 2A 29 0A 20 20 20 20 20 20 65 72 72 6F 72 20 22 75 6E 6B 6E 6F 77 6E 20 6D 6F 64 65 20 5C 60 24 7B 5F 44 49 53 50 4C 41 59 5F 4D 4F 44 45 7D 27 22 3B 0A 20 20 20 20 20 20 3B 3B 0A 20 20 65 73 61 63 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 20 23 20 6D 61 69 6E 5F 64 69 73 70 6C 61 79 28 29 0A 0A 5F 64 6F 5F 64 69 73 70 6C 61 79 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 5F 64 6F 5F 64 69 73 70 6C 61 79 20 3D 20 30 20 22 24 40 22 3B 0A 20 20 74 72 61 70 5F 63 6C 65 61 6E 3B 0A 20 20 23 20 73 74 61 72 74 20 61 20 6E 65 77 20 73 68 65 6C 6C 20 70 72 6F 67 72 61 6D 20 66 6F 72 20 61 6E 6F 74 68 65 72 20 70 72 6F 63 65 73 73 20 49 44 20 61 6E 64 20 62 65 74 74 65 72 0A 20 20 23 20 63 6C 65 61 6E 69 6E 67 2D 75 70 20 6F 66 20 74 68 65 20 74 65 6D 70 6F 72 61 72 79 20 66 69 6C 65 73 2E 0A 20 20 73 68 20 2D 63 20 27 0A 20 20 20 20 73 65 74 20 2D 65 3B 0A 20 20 20 20 74 65 73 74 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 20 26 26 20 72 6D 20 2D 66 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 63 61 74 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 20 7C 20 5C 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 67 72 6F 67 67 79 7D 22 20 22 24 7B 5F 41 44 44 4F 50 54 53 5F 47 52 4F 46 46 7D 22 20 3E 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 43 41 54 7D 22 3B 0A 20 20 20 20 28 0A 20 20 20 20 20 20 63 6C 65 61 6E 5F 75 70 28 29 20 7B 0A 20 20 20 20 20 20 20 20 69 66 20 74 65 73 74 20 2D 64 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 20 74 68 65 6E 0A 20 20 20 20 20 20 20 20 20 20 72 6D 20 2D 66 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 2F 2A 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 20 20 20 20 72 6D 64 69 72 20 22 24 7B 5F 54 4D 50 5F 44 49 52 7D 22 3B 0A 20 20 20 20 20 20 20 20 66 69 3B 0A 20 20 20 20 20 20 7D 0A 20 20 20 20 20 20 74 72 61 70 20 63 6C 65 61 6E 5F 75 70 20 30 20 32 3E 2F 64 65 76 2F 6E 75 6C 6C 20 7C 7C 20 74 72 75 65 3B 0A 20 20 20 20 20 20 65 76 61 6C 20 22 24 7B 5F 44 49 53 50 4C 41 59 5F 50 52 4F 47 7D 22 20 24 7B 5F 44 49 53 50 4C 41 59 5F 41 52 47 53 7D 20 22 24 7B 5F 6D 6F 64 65 66 69 6C 65 7D 22 3B 0A 20 20 20 20 29 20 26 27 0A 7D 0A 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 23 20 6D 61 69 6E 20 28 3C 63 6F 6D 6D 61 6E 64 5F 6C 69 6E 65 5F 61 72 67 73 3E 2A 29 0A 23 0A 23 20 54 68 65 20 6D 61 69 6E 20 66 75 6E 63 74 69 6F 6E 20 66 6F 72 20 67 72 6F 66 66 65 72 2E 0A 23 0A 23 20 41 72 67 75 6D 65 6E 74 73 3A 0A 23 0A 6D 61 69 6E 28 29 0A 7B 0A 20 20 66 75 6E 63 5F 63 68 65 63 6B 20 6D 61 69 6E 20 27 3E 3D 27 20 30 20 22 24 40 22 3B 0A 20 20 23 20 44 6F 20 6E 6F 74 20 63 68 61 6E 67 65 20 74 68 65 20 73 65 71 75 65 6E 63 65 20 6F 66 20 74 68 65 20 66 6F 6C 6C 6F 77 69 6E 67 20 66 75 6E 63 74 69 6F 6E 73 21 0A 20 20 6D 61 69 6E 5F 69 6E 69 74 3B 0A 20 20 6D 61 69 6E 5F 70 61 72 73 65 5F 4D 41 4E 4F 50 54 3B 0A 20 20 6D 61 69 6E 5F 70 61 72 73 65 5F 61 72 67 73 20 22 24 40 22 3B 0A 20 20 6D 61 69 6E 5F 73 65 74 5F 6D 6F 64 65 3B 0A 20 20 6D 61 69 6E 5F 64 6F 5F 66 69 6C 65 61 72 67 73 3B 0A 20 20 6D 61 69 6E 5F 73 65 74 5F 72 65 73 6F 75 72 63 65 73 3B 0A 20 20 6D 61 69 6E 5F 64 69 73 70 6C 61 79 3B 0A 20 20 65 76 61 6C 20 22 24 7B 72 65 74 75 72 6E 5F 6F 6B 7D 22 3B 0A 7D 0A 0A 6C 61 6E 64 6D 61 72 6B 20 27 32 30 3A 20 65 6E 64 20 6F 66 20 66 75 6E 63 74 69 6F 6E 20 64 65 66 69 6E 69 74 69 6F 6E 73 27 3B 0A 0A 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0A 0A 6D 61 69 6E 20 22 24 40 22 3B 0A | #!/bin/sh # groffer - d isplay groff files # So urce file position: <gro ff-source>/contrib/groff er/groffer.sh # Copyrig ht (C) 2001,2002,2003,20 04 Free Software Foundat ion, Inc. # Written by B ernd Warken # This file is part of groff versio n 1.18.1.1. # groff is free software; you can r edistribute it and/or mo dify it # under the term s of the GNU General Pub lic License as published by # the Free Software Foundation; either versi on 2, or (at your option ) # any later version. # groff is distributed i n the hope that it will be useful, but WITHOUT # ANY WARRANTY; without e ven the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULA R PURPOSE. See the GNU General Public # License for more details. # Yo u should have received a copy of the GNU General Public License # along with groff; see the file s COPYING and LICENSE in the top # directory of the groff source. If no t, write to the Free Sof tware # Foundation, 59 T emple Place - Suite 330, Boston, MA 02111-1307, USA. _PROGRAM_NAME='gro ffer'; _PROGRAM_VERSION= '0.9.11'; _LAST_UPDATE=' 15 June 2004'; ####### ######################## ######################## ################# # Dete rmine the shell under wh ich to run this script f rom the command # line a rguments or $GROFF_OPT; if none is specified, ju st go on with # the star ting shell. if test _"$ {_groffer_run}"_ = __; t hen # only reached dur ing the first run of the script export _groff er_run; # counter for t he runs of groffer _gr offer_run='first'; ex port _PROGRAM_NAME; ex port _PROGRAM_VERSION; export _LAST_UPDATE; export GROFFER_OPT; # option environment for g roffer export _GROFFER _SH; # file name of thi s shell script export _OUTPUT_FILE_NAME; # out put generated, see main_ set_res..() export _C ONFFILES; # configurati on files _CONFFILES="/ etc/groff/groffer.conf $ {HOME}/.groff/groffer.co nf"; case "$0" in * ${_PROGRAM_NAME}*) _ GROFFER_SH="$0"; # w as: _GROFFER_SH="/usr/bi n/${_PROGRAM_NAME}"; ;; *) echo "The $ {_PROGRAM_NAME} script s hould be started directl y." >&2 exit 1; ;; esac; ########## ################# # _g et_opt_shell ("$@") # # Determine whether `- -shell' was specified in $GROFF_OPT or in $*; # if so echo its argumen t. # _get_opt_shell( ) { local i; l ocal _sh; case " ${G ROFFER_OPT} $*" in *\ --shell\ *|*\ --shel l=*) ( eval set -- "${GROFFER_ OPT}" '"$@"'; _sh=''; for i in "$@"; do case "$1" in --shell) if test "$#" -ge 2; then _ sh="$2"; shift; fi; ;; --shell=? *) # del ete up to first `=' char acter _s h="$(echo -n "$1" | sed -e 's/^[^=]*=//')"; ;; esac; shi ft; done; echo -n "${_sh}"; ) ;; esac; } ######### ################## # _ test_on_shell (<name>) # # Test whether <nam e> is a shell program of Bourne type (POSIX sh). # _test_on_shell() { if test "$#" -le 0 || test _"$1"_ = __; then return 1; fi; # do not quote $1 to allow arguments test _"$($1 -c 's=ok; echo -n "$s"' 2>/dev/nul l)"_ = _ok_; } # do the shell determination from command line and $ GROFFER_OPT _shell="$( _get_opt_shell "$@")"; if test _"${_shell}"_ = __; then # none fo und, so look at the `--s hell' lines in configura tion files export f; for f in ${_CONFFIL ES}; do if test -f $f; then _all=" $(cat $f | sed -n -e '/^ --shell[= ] *\([^ ]*\)$/ s//\1/p')" for s in ${_all}; do _shell=$s; don e; fi; done; unset f; unset s; unset _all; fi; # restart the script w ith the last found $_she ll, if it is a shell i f _test_on_shell "${_she ll}"; then _groffer_ run='second'; # do n ot quote $_shell to allo w arguments exec ${_ shell} "${_GROFFER_SH}" "$@"; exit; fi; _groffer_run='second'; unset _shell; fi; # e nd of first run if test _"${_groffer_run}"_ != _second_; then echo "$ _groffer_run should be ' second' here." >&2 exi t 1 fi; unset _groffer_ run ################## ######################## ######################## ###### # diagnostic mess ages # export _DEBUG; _D EBUG='no'; # disable d ebugging information #_D EBUG='yes'; # enable d ebugging information ex port _DEBUG_LM; _DEBUG_L M='no'; # disable land mark messages #_DEBUG_LM ='yes'; # enable landma rk messages ########## ######################## ######################## ############## # Environme nt Variables ########### ######################## ######################## ############# # Environ ment variables that exis t only for this file sta rt with an # underscore letter. Global variable s to this file are writt en in # upper case lette rs, e.g. $_GLOBAL_VARIAB LE; temporary variables # start with an underlin e and use only lower cas e letters and # underlin es, e.g. $_local_variab le . # [A-Z]* sys tem variables, e.g. $MANPATH # _[A-Z_]* global file variables, e.g. $_MAN_PATH # _[a- z_]* temporary variabl es, e.g. $_manpath # Due to incompatibilities of the `ash' shell, the name of loop # variable s in `for' must be singl e character # [a-z] local loop variables, e.g. $i ########### ######################## ######################## ############# # read-onl y variables (global to t his file) ############## ######################## ######################## ########## # characters export _BQUOTE; export _BSLASH; export _DQUOTE ; export _NEWLINE; expor t _LBRACK; export _LPAR; export _RBRACK; export _RPAR; export _SPACE; ex port _SQUOTE; export _TA B; _BQUOTE='`'; _BSLASH ='\'; _DQUOTE='"'; _NEWL INE=' '; _LBRACK='['; _L PAR='('; _RBRACK=']'; _R PAR=')'; _SPACE=' '; _SQ UOTE="'"; _TAB=' '; # f unction return values; ` 0' means ok; other value s are error codes export _ALL_EXIT; export _BAD; export _ERROR; export _ GOOD; export _NO; export _OK; export _YES; _GOO D='0'; # return ok _BA D='1'; # return negati vely, error code `1' _ER ROR='7'; # for syntax errors; no `-1' in `ash' _ALL_EXIT="${_GOOD} ${ _BAD} ${_ERROR}"; # all exit codes (for `trap_se t') _NO="${_BAD}"; _YES ="${_GOOD}"; _OK="${_GOO D}"; # quasi-functions, call with `eval' export return_ok; export retur n_good; export return_ba d; export return_yes; ex port return_no; export r eturn_error; return_ok=" func_pop; return ${_OK}" ; return_good="func_pop; return ${_GOOD}"; retur n_bad="func_pop; return ${_BAD}"; return_yes="fu nc_pop; return ${_YES}"; return_no="func_pop; re turn ${_NO}"; return_err or="func_pop; return ${_ ERROR}"; export _DEFAU LT_MODES; _DEFAULT_MODES ='x,ps,tty'; export _DEF AULT_RESOLUTION; _DEFAUL T_RESOLUTION='75'; expo rt _DEFAULT_TTY_DEVICE; _DEFAULT_TTY_DEVICE='lat in1'; # _VIEWER_* viewe r programs for different modes (only X is necess ary) # _VIEWER_* a comma -separated list of viewe r programs (with options ) export _VIEWER_DVI; # viewer program for dvi mode export _VIEWER_PS; # viewer program for ps mode export _VIEWER_HTM L_X; # viewer program f or html mode in X export _VIEWER_HTML_TTY; # vie wer program for html mod e in tty _VIEWER_DVI='xd vi,dvilx'; _VIEWER_PDF=' xpdf,acroread'; _VIEWER_ PS='gv,ghostview,gs_x11, gs'; _VIEWER_HTML='konqu eror,mozilla,netscape,op era,amaya,arena,lynx'; _ VIEWER_X='gxditview,xdit view'; # Search automat ically in standard secti ons `1' to `8', and in t he # traditional section s `9', `n', and `o'. On many systems, there # e xist even more sections, mostly containing a set of man pages # special to a specific program pa ckage. These aren't sea rched for # automaticall y, but must be specified on the command line. ex port _MAN_AUTO_SEC; _MAN _AUTO_SEC="'1' '2' '3' ' 4' '5' '6' '7' '8' '9' ' n' 'o'" export _PROCESS _ID; # for shutting dow n the program _PROCESS_I D="$$"; ############ t he command line options of the involved programs # # The naming scheme f or the options environme nt names is # $_OPTS_<pr og>_<length>[_<argspec>] # # <prog>: program name GROFFER, GROFF, or CMDLINE (for all # command line optio ns) # <length>: LONG (l ong options) or SHORT (s ingle character options) # <argspec>: ARG for op tions with argument, NA for no argument; # without _<argspec> both the ones with and without arg. # # Each op tion that takes an argum ent must be specified wi th a # trailing : (colon ). # exports export _OP TS_GROFFER_SHORT_NA; exp ort _OPTS_GROFFER_SHORT_ ARG; export _OPTS_GROFFE R_LONG_NA; export _OPTS_ GROFFER_LONG_ARG; export _OPTS_GROFF_SHORT_NA; e xport _OPTS_GROFF_SHORT_ ARG; export _OPTS_GROFF_ LONG_NA; export _OPTS_GR OFF_LONG_ARG; export _OP TS_X_SHORT_ARG; export _ OPTS_X_SHORT_NA; export _OPTS_X_LONG_ARG; export _OPTS_X_LONG_NA; export _OPTS_MAN_SHORT_ARG; ex port _OPTS_MAN_SHORT_NA; export _OPTS_MAN_LONG_A RG; export _OPTS_MAN_LON G_NA; export _OPTS_MANOP T_SHORT_ARG; export _OPT S_MANOPT_SHORT_NA; expor t _OPTS_MANOPT_LONG_ARG; export _OPTS_MANOPT_LON G_NA; export _OPTS_CMDLI NE_SHORT_NA; export _OPT S_CMDLINE_SHORT_ARG; exp ort _OPTS_CMDLINE_LONG_N A; export _OPTS_CMDLINE_ LONG_ARG; ###### groffe r native options _OPTS_ GROFFER_SHORT_NA="'h' 'Q ' 'v' 'V' 'X' 'Z'"; _OPT S_GROFFER_SHORT_ARG="'T' "; _OPTS_GROFFER_LONG_N A="'auto' 'debug' 'defau lt' 'dvi' \ 'groff' 'hel p' 'intermediate-output' 'html' 'man' \ 'no-loca tion' 'no-man' 'pdf' 'ps ' 'rv' 'source' 'text' ' text-device' \ 'title' ' tty' 'tty-device' 'versi on' 'whatis' 'where' 'ww w' 'x' 'X'"; _OPTS_GROF FER_LONG_ARG="\ 'apropos ' 'apropos-data' 'apropo s-devel' 'apropos-progs' \ 'default-modes' 'dvi- viewer' 'extension' 'fg' 'fn' 'font' \ 'foregrou nd' 'html-viewer' 'mode' 'pdf-viewer' 'ps-viewer ' 'shell' \ 'tty-viewer' 'www-viewer' 'x-viewer' 'X-viewer'"; ##### gro ffer options inhereted f rom groff _OPTS_GROFF_S HORT_NA="'a' 'b' 'c' 'C' 'e' 'E' 'g' 'G' 'i' 'l' 'N' 'p' \ 'R' 's' 'S' ' t' 'U' 'V' 'z'"; _OPTS_G ROFF_SHORT_ARG="'d' 'f' 'F' 'I' 'L' 'm' 'M' 'n' 'o' 'P' 'r' \ 'w' 'W'"; _OPTS_GROFF_LONG_NA="'so urce'"; _OPTS_GROFF_LONG _ARG="'device' 'macro-fi le'"; ##### groffer opt ions inhereted from the X Window toolkit _OPTS_ X_SHORT_NA=""; _OPTS_X_S HORT_ARG=""; _OPTS_X_LO NG_NA="'iconic' 'rv'"; _OPTS_X_LONG_ARG="'backg round' 'bd' 'bg' 'border color' 'borderwidth' \ ' bw' 'display' 'fg' 'fn' 'font' 'foreground' 'ft' , 'geometry' 'resolution ' 'title' 'xrm'"; ##### # groffer options inheri ted from man _OPTS_MAN_ SHORT_NA=""; _OPTS_MAN_S HORT_ARG=""; _OPTS_MAN_ LONG_NA="'all' 'ascii' ' catman' 'debug' 'ditroff ' 'help' \ 'local-file' 'location' 'pager' 'trof f' 'update' 'version' \ 'whatis' 'where'"; _OPT S_MAN_LONG_ARG="'extensi on' 'locale' 'manpath' \ 'pager' 'preprocessor' 'prompt' 'sections' 'sys tems' 'troff-device'"; ###### additional option s for parsing $MANOPT on ly _OPTS_MANOPT_SHORT_N A="'7' 'a' 'c' 'd' 'D' ' f' 'h' 'k' 'l' 't' 'u' \ 'V' 'w' 'Z'"; _OPTS_MAN OPT_SHORT_ARG="'e' 'L' ' m' 'M' 'p' 'P' 'r' 'S' ' T'"; _OPTS_MANOPT_LONG_ NA="${_OPTS_MAN_LONG_NA} \ 'apropos' 'debug' 'de fault' 'html' 'ignore-ca se' 'location-cat' \ 'ma tch-case' 'troff' 'updat e' 'version' 'where-cat' "; _OPTS_MANOPT_LONG_AR G="${_OPTS_MAN_LONG_NA} \ 'config_file' 'encodin g' 'locale'"; ###### co llections of command lin e options _OPTS_CMDLINE _SHORT_NA="${_OPTS_GROFF ER_SHORT_NA}\ ${_OPTS_GR OFF_SHORT_NA} ${_OPTS_X_ SHORT_NA} ${_OPTS_MAN_SH ORT_NA}"; _OPTS_CMDLINE_ SHORT_ARG="${_OPTS_GROFF ER_SHORT_ARG} \ ${_OPTS_ GROFF_SHORT_ARG} ${_OPTS _X_SHORT_ARG} ${_OPTS_MA N_SHORT_ARG}"; _OPTS_CM DLINE_LONG_NA="${_OPTS_G ROFFER_LONG_NA} \ ${_OPT S_GROFF_LONG_NA} ${_OPTS _X_LONG_NA} ${_OPTS_MAN_ LONG_NA}"; _OPTS_CMDLINE _LONG_ARG="${_OPTS_GROFF ER_LONG_ARG} \ ${_OPTS_G ROFF_LONG_ARG} ${_OPTS_M AN_LONG_ARG} ${_OPTS_X_L ONG_ARG}"; ########### ######################## ######################## ############# # read-wri te variables (global to this file) ############# ######################## ######################## ########### export _ADD OPTS_GROFF; # Transp. o ptions for groff (`eval' ). export _ADDOPTS_POST; # Transp. options post proc (`eval'). export _A DDOPTS_X; # Transp. opt ions X postproc (`eval') . export _DEFAULT_MODES; # Set default modes. e xport _DISPLAY_MODE; # Display mode. export _DI SPLAY_PROG; # Viewer pr ogram to be used for dis play. export _DISPLAY_AR GS; # X resources for t he viewer program. expor t _FILEARGS; # Stores f ilespec parameters. expo rt _FUNC_STACK; # Store debugging information. export _REGISTERED_TITLE ; # Processed file names . # _HAS_* from availabi lity tests export _HAS_C OMPRESSION; # `yes' if c ompression is available export _HAS_OPTS_GNU; # `yes' if GNU `getopt' i s available export _HAS_ OPTS_POSIX; # `yes' if POSIX `getopts' is avail able # _MAN_* finally us ed configuration of man searching export _MAN_AL L; # search all man pag es per filespec export _ MAN_ENABLE; # enable se arch for man pages expor t _MAN_EXT; # extension for man pages export _M AN_FORCE; # force file parameter to be man page s export _MAN_IS_SETUP; # setup man variables o nly once export _MAN_LAN G; # language for man p ages export _MAN_LANG_DO NE; # language dirs add ed to man path export _M AN_PATH; # search path for man pages export _MA N_SEC; # sections for m an pages; sep. `:' expor t _MAN_SEC_DONE; # sect ions added to man path e xport _MAN_SYS; # syste m names for man pages; s ep. `,' export _MAN_SYS; # system names added t o man path # _MANOPT_* a s parsed from $MANOPT ex port _MANOPT_ALL; # $MA NOPT --all export _MANOP T_EXTENSION; # $MANOPT - -extension export _MANOP T_LANG; # $MANOPT --loc ale export _MANOPT_PATH; # $MANOPT --manpath ex port _MANOPT_PAGER; # $ MANOPT --pager export _M ANOPT_SEC; # $MANOPT -- sections export _MANOPT_ SYS; # $MANOPT --system s # _OPT_* as parsed fro m groffer command line e xport _OPT_ALL; # displ ay all suitable man page s. export _OPT_APROPOS; # call `apropos' progra m. export _OPT_APROPOS_D ATA; # `apropos' for man sections 4, 5, 7 export _OPT_APROPOS_DEVEL; # ` apropos' for man section s 2, 3, 9 export _OPT_AP ROPOS_PROGS; # `apropos' for man sections 1, 6, 8 export _OPT_BD; # se t border color in some m odes. export _OPT_BG; # set background color i n some modes. export _OP T_BW; # set border wid th in some modes. export _OPT_DEBUG; # print de bugging information on s tderr. export _OPT_DEFAU LT_MODES; # `,'-list of modes when no mode given . export _OPT_DEVICE; # device option. export _ OPT_DISPLAY; # set X di splay. export _OPT_FG; # set foreground color in some modes. export _O PT_FN; # set font in s ome modes. export _OPT_G EOMETRY; # set size and position of viewer in X . export _OPT_ICONIC; # -iconic option for X vi ewers. export _OPT_LANG; # set language for man pages export _OPT_LOCAT ION; # print processed file names to stderr exp ort _OPT_MODE; # values : X, tty, Q, Z, "" expor t _OPT_MANPATH; # manua l setting of path for ma n-pages export _OPT_PAGE R; # specify paging pro gram for tty mode export _OPT_RESOLUTION; # set X resolution in dpi exp ort _OPT_RV; # reverse fore- and background co lors. export _OPT_SECTIO NS; # sections for man page search export _OPT_ SYSTEMS; # man pages of different OS's export _ OPT_TITLE; # title for gxditview window export _OPT_TEXT_DEVICE; # set device for tty mode. ex port _OPT_V; # groff o ption -V. export _OPT_VI EWER_DVI; # viewer prog ram for dvi mode export _OPT_VIEWER_PDF; # view er program for pdf mode export _OPT_VIEWER_PS; # viewer program for ps mode export _OPT_VIEWER_ HTML; # viewer program f or html mode export _OPT _VIEWER_X; # viewer pro gram for x mode export _ OPT_WHATIS; # print the one-liner man info expo rt _OPT_XRM; # specify X resource. export _OPT_ Z; # groff option -Z. # _TMP_* temporary files export _TMP_DIR; # gro ff directory for tempora ry files export _TMP_DIR _SUB; # groffer directo ry for temporary files e xport _TMP_CAT; # store s concatenation of every thing export _TMP_STDIN; # stores stdin, if any # these variables are preset in section `Prese t' after the rudim. test ##################### ######################## ######################## ### # Test o f rudimentary shell func tionality ############## ######################## ######################## ########## ########### ######################## ######################## ############# # Test of `test'. # test "a" = "a" || exit 1; ########## ######################## ######################## ############## # Test of `echo' and the `$()' co nstruct. # echo -n '' >/ dev/null || exit "${_ERR OR}"; if test _"$(echo - n 'te' && echo -n '' && echo -n 'st')"_ != _test _; then exit "${_ERROR }"; fi; ############## ######################## ######################## ########## # Test of fun ction definitions. # _t_ e_s_t_f_u_n_c_() { ret urn "${_OK}"; } if _t_e _s_t_f_u_n_c_ 2>/dev/nul l; then : else echo 'shell does not support function definitions.' > &2; exit "${_ERROR}"; fi; ################## ######################## ######################## ###### # Preset and rese t of read-write global v ariables ############### ######################## ######################## ######### # For variab les that can be reset by option `--default', see reset(). _FILEARGS=''; # _HAS_* from availabi lity tests _HAS_COMPRESS ION=''; _HAS_OPTS_GNU='' ; _HAS_OPTS_POSIX=''; # _TMP_* temporary files _TMP_DIR=''; _TMP_DIR_SU B=''; _TMP_CAT=''; _TMP_ STDIN=''; ############ ######################## ######################## ############ # reset () # # Reset the variables that can be affected by options to their default . # reset() { if test "$#" -ne 0; then err or "reset() does not hav e arguments."; fi; _ADDOPTS_GROFF=''; _AD DOPTS_POST=''; _ADDOPT S_X=''; _DISPLAY_ARGS= ''; _DISPLAY_MODE=''; _DISPLAY_PROG=''; _R EGISTERED_TITLE=''; # _MAN_* finally used con figuration of man search ing _MAN_ALL='no'; _ MAN_ENABLE='yes'; # do search for man-pages _ MAN_EXT=''; _MAN_FORCE ='no'; # first local fi le, then search man page _MAN_IS_SETUP='no'; _MAN_LANG=''; _MAN_LA NG_DONE='no'; _MAN_PAT H=''; _MAN_SEC=''; _ MAN_SEC_DONE='no'; _MA N_SYS=''; _MAN_SYS_DON E='no'; # _MANOPT_* a s parsed from $MANOPT _MANOPT_ALL='no'; _MAN OPT_EXTENSION=''; _MAN OPT_LANG=''; _MANOPT_P ATH=''; _MANOPT_PAGER= ''; _MANOPT_SEC=''; _MANOPT_SYS=''; # _OP T_* as parsed from groff er command line _OPT_A LL='no'; _OPT_APROPOS= ''; _OPT_APROPOS_DATA= ''; _OPT_APROPOS_DEVEL =''; _OPT_APROPOS_PROG S=''; _OPT_BD=''; _O PT_BG=''; _OPT_BW=''; _OPT_DEBUG='no'; _OP T_DEFAULT_MODES=''; _O PT_DEVICE=''; _OPT_DIS PLAY=''; _OPT_FG=''; _OPT_FN=''; _OPT_GEOM ETRY=''; _OPT_ICONIC=' no'; _OPT_LANG=''; _ OPT_LOCATION='no'; _OP T_MODE=''; _OPT_MANPAT H=''; _OPT_PAGER=''; _OPT_RESOLUTION=''; _ OPT_RV='no'; _OPT_SECT IONS=''; _OPT_SYSTEMS= ''; _OPT_TITLE=''; _ OPT_TEXT_DEVICE=''; _O PT_V='no'; _OPT_VIEWER _DVI=''; _OPT_VIEWER_P DF=''; _OPT_VIEWER_PS= ''; _OPT_VIEWER_HTML=' '; _OPT_VIEWER_X=''; _OPT_WHATIS='no'; _OP T_XRM=''; _OPT_Z='no'; } reset; ########## ######################## ######################## ############## # Functions for error ha ndling and debugging ### ######################## ######################## ##################### ############## # landmar k (<text>) # # Print <te xt> to standard error as a debugging aid. # # Gl obals: $_DEBUG_LM # land mark() { if test _"${_ DEBUG_LM}"_ = _yes_; the n echo ">>> $*" >&2; fi; } landmark "1: d ebugging functions"; # ############# # clean_up () # # Clean up at exit . # clean_up() { if te st -d "${_TMP_DIR}"; the n rm -f "${_TMP_DIR} "/*; rmdir "${_TMP_D IR}"; fi; } ######## ###### # echo2 (<text>*) # # Output to stderr. # # Arguments : arbitrary text. # echo2() { ech o "$*" >&2; } ######## ###### # echo2n (<text>* ) # # Output to stderr. # # Arguments : arbitrar y text. # echo2n() { e cho -n "$*" >&2; } ### ########## # diag (text> *) # # Output a diagnost ic message to stderr # d iag() { echo2 '>>>>>'" $*"; } ############# # error (<text>*) # # Pri nt an error message to s tandard error; exit with an error condition # er ror() { local i; loc al _code; _code="${_ER ROR}"; case "$#" in 0) true; ;; 1) ech o2 'groffer error: '"$1" ; ;; 2) echo2 'groffer error: '"$1"; _code="$2"; ; ; *) echo2 'groffer error: wrong number of a rguments in error().'; ; ; esac; if test _"${ _DEBUG}"_ = _yes_; then func_stack_dump; f i; clean_up; kill "$ {_PROCESS_ID}" >/dev/nul l 2>&1; kill -9 "${_PR OCESS_ID}" >/dev/null 2> &1; exit "${_code}"; } ############# # abort (<text>*) # # Terminate program with error cond ition # abort() { erro r "Program aborted."; exit 1; } ############ # # func_check (<func_na me> <rel_op> <nr_args> " $@") # # Check number of arguments and register to _FUNC_STACK. # # Argu ments: >=3 # <func_nam e>: name of the calling function. # <rel_op>: a relational operator : = != < > <= >= # <n r_args>: number of arg uments to be checked aga inst <operator> # "$@" : the arguments o f the calling function. # func_check() { local _comp; local _fname; local _nargs; local _op; local _s; if te st "$#" -lt 3; then error 'func_check() need s at least 3 arguments.' ; fi; _fname="$1"; case "$3" in 1) _nargs="$3"; _s =''; ;; 0|[2-9 ]) _nargs="$3"; _s='s'; ;; *) error "func_ch eck(): third argument mu st be a digit."; ; ; esac; case "$2" in '='|'-eq') _o p='-eq'; _comp='ex actly'; ;; '>= '|'-ge') _op='-ge' ; _comp='at least' ; ;; '<='|'-le ') _op='-le'; _comp='at most'; ;; '<'|'-lt') _op='-lt'; _comp= 'less than'; ;; '>'|'-gt') _op=' -gt'; _comp='more than'; ;; '!=' |'-ne') _op='-ne'; _comp='not'; ;; *) error \ 'func_check() : second argument is not a relational operator.' ; ;; esac; shi ft 3; if test "$#" "${ _op}" "${_nargs}"; then do_nothing; else error \ "${_fna me}"'() needs '"${_comp} ${_nargs}"' argument'"$ {_s}"'.'; fi; if tes t _"${_DEBUG}"_ = _yes_; then func_push "${_ fname} $*"; fi; } ## ########### # func_pop ( ) # # Retrieve the top e lement from the stack. # # The stack elements ar e separated by `!'; the popped element is # iden tical to the original el ement, except that all ` !' characters # were rem oved. # # Arguments: 1 # func_pop() { if test _"${_DEBUG}"_ = _yes_; t hen if test "$#" -ne 0; then error 'fu nc_pop() does not have a rguments.'; fi; case "${_FUNC_STACK}" in '') error 'func_pop(): stack is e mpty.'; ;; *!*) # split at first bang `!'. _FUNC_STACK="$(echo -n ${_FUNC_STACK} \ | sed -e 's/^[^!]*!//')"; ;; *) _F UNC_STACK=''; ;; esac; fi; } ### ########## # func_push ( <element>) # # Store ano ther element to stack. # # The stack elements ar e separated by `!'; if < element> contains a `!' # it is removed first. # # Arguments: 1 # func_p ush() { local _element ; if test _"${_DEBUG}" _ = _yes_; then if t est "$#" -ne 1; then error 'func_push() ne eds 1 argument.'; fi ; case "$1" in *'!'*) # remove all bangs `!'. _element="$(echo -n "$1" | sed -e 's/!//g')"; ;; *) _element="$1"; ;; esac; if tes t _"${_FUNC_STACK}"_ = _ _; then _FUNC_STAC K="${_element}"; els e _FUNC_STACK="${_ element}!${_FUNC_STACK}" ; fi; fi; } #### ######### # func_stack_d ump () # # Print the con tent of the stack. Igno re the arguments. # func _stack_dump() { diag ' call stack:'; case "${ _FUNC_STACK}" in *!* ) _rest="${_FUNC_S TACK}"; while test _"${_rest}"_ != __; do # get part befor e the first bang `!'. diag "$(echo -n "$ {_rest}" | sed -e 's/!.* $//')"; # delete part before and includi ng the first bang `!'. _rest="$(echo -n "${_rest}" | sed -e 's/^ [^!]*!//')"; done; ;; *) d iag "${_FUNC_STACK}"; ;; esac; } ##### ######################## ######################## ################### # Sys tem Test ############### ######################## ######################## ######### landmark "2: system test"; # Test th e availability of the sy stem utilities used in t his script. ########## ######################## ######################## ############## # Test of `true'. # if true >/dev /null 2>&1; then true; else true() { r eturn "${_GOOD}"; } false() { return "${_BAD}"; } fi; ### ######################## ######################## ##################### # Test of `unset'. # _test ='test'; if unset _test >/dev/null 2>&1 && test _"${_test}"_ = __; then true; else unset() { for v in "$@"; do eval "$v"=''; done; } fi; unset _te st; ################### ######################## ######################## ##### # Test of builtin `local' # _t_e_s_t_f_u_ n_c_() { local _test > /dev/null 2>&1 || return "${_BAD}"; } if _t_e_s _t_f_u_n_c_; then : el se local() { if test _"$1"_ != __; then error "overriding global variable \`$1' wi th local value."; fi ; } fi; ############ ######################## ######################## ############ # Test of g lobal setting in functio ns # _global='outside'; _clobber='outside'; _t_ e_s_t_f_u_n_c_() { loc al _clobber; _global=' inside'; _clobber='ins ide'; } _t_e_s_t_f_u_n_ c_; if test _"${_global} "_ != _inside_ || test _ "${_clobber}"_ != _outsi de_; then error "Canno t assign to global varia bles from within functio ns."; fi; unset _global ; unset _clobber; #### ######################## ######################## #################### # T est of function `sed'. # if test _"$(echo xTesT x \ | sed -e 's/^.\([Tt]e*x*sTT*\).*$ /\1/' \ | sed -e '\|T|s|T|t|g')"_ != _test_; then error 'Te st of "sed" command fail ed.'; fi; ############ ######################## ######################## ############ # Test of f unction `cat'. # if test _"$(echo test | cat)"_ != _test_; then error 'Test of "cat" command f ailed.'; fi; ######### ######################## ######################## ############### # Test f or compression. # if tes t _"$(echo 'test' | gzip -c -d -f - 2>/dev/null) "_ = _test_; then _HAS _COMPRESSION='yes'; if echo 'test' | bzip2 -c 2>/dev/null | bzip2 -t 2 >/dev/null \ && tes t _"$(echo 'test' | bzip 2 -c 2>/dev/null \ | bzip2 -d -c 2>/dev/null )"_ \ = _te st_; then _HAS_BZIP= 'yes'; else _HAS_B ZIP='no'; fi; else _ HAS_COMPRESSION='no'; _HAS_BZIP='no'; fi; ## ######################## ######################## ###################### _ t_e_s_t_f_u_n_c_() { : } ################### ######################## ######################## ##### # Definition of normal F unctions ############### ######################## ######################## ######### landmark "3: f unctions"; ############ ######################## ######################## ############ # abort (<t ext>*) # # Unconditional ly terminate the program with error code; # usef ul for debugging. # # de fined above ########## ######################## ######################## ############## # apropos _run (<name>) # # aprop os_run() { func_check apropos_run = 1 "$@"; if apropos apropos >/dev /null 2>/dev/null; then apropos "$1"; elif man --apropos man >/dev /null 2>/dev/null; then man --apropos "$1"; elif man -k man >/dev/ null 2>/dev/null; then man -k "$1"; fi; } ###################### ######################## ######################## ## # base_name (<path>) # # Get the file name pa rt of <path>, i.e. delet e everything up to last # `/' from the beginning of <path>. Remove fina l slashes, too, to get a # non-empty output. # # Arguments : 1 # Output : the file name part (without slashes) # base _name() { func_check b ase_name = 1 "$@"; loc al f; f="$1"; case " $f" in */) # d elete all final slashes f="$(echo -n "$f" | sed -e '\|.*|s|//*$||' )"; ;; esac; c ase "$f" in /|'') eval "${return_bad}" ; ;; */*) # delete everything be fore and including the l ast slash `/'. ech o -n "$f" | sed -e '\|.* |s|^.*//*\([^/]*\)$|\1|' ; ;; *) echo -n "$f"; ;; esac; eval "${return_ ok}"; } ############## ######################## ######################## ########## # catz (<file >) # # Decompress if pos sible or just print <fil e> to standard output. # # gzip, bzip2, and .Z d ecompression is supporte d. # # Arguments: 1, a f ile name. # Output: the content of <file>, possi bly decompressed. # if t est _"${_HAS_COMPRESSION }"_ = _yes_; then catz () { func_check ca tz = 1 "$@"; case "$ 1" in '') error 'catz(): empty fil e name'; ;; '-') error 'ca tz(): for standard input use save_stdin()'; ;; esac; if obj _HAS_BZIP is_yes; th en if bzip2 -t "$1 " 2>/dev/null; then bzip2 -c -d "$1" 2>/ dev/null; eval " ${return_ok}"; fi; fi; gzip -c -d -f "$1" 2>/dev/null; eval "${return_ok}"; } else catz() { func_check catz = 1 "$@" ; cat "$1"; eval "${return_ok}"; } fi; ##################### ######################## ######################## ### # clean_up () # # Do the final cleaning up b efore exiting; used by t he trap calls. # # defin ed above ############# ######################## ######################## ########### # diag (<tex t>*) # # Print marked me ssage to standard error; useful for debugging. # # defined above ##### ######################## ######################## ################### land mark '4: dirname()*'; ## ######################## ######################## ###################### ######################## ######################## ####################### # dirname_append (<dir> <name>) # # Append `name ' to `dir' with clean ha ndling of `/'. # # Argum ents : 2 # Output : t he generated new directo ry name <dir>/<name> # d irname_append() { func _check dirname_append = 2 "$@"; local _res; if is_empty "$1"; then error "dir_append(): first argument is empty. "; fi; if is_empty " $2"; then echo -n "$ 1"; else dirname_c hop "$1"/"$2"; fi; e val "${return_ok}"; } ######################## ######################## ######################## # dirname_chop (<name>) # # Remove unnecessary slashes from directory n ame. # # Argument: 1, a directory name. # Output : path without double, or trailing slashes. # dirname_chop() { func_ check dirname_chop = 1 " $@"; local _arg; loc al _res; local _sep; # replace all multiple slashes by a single slas h `/'. _res="$(echo -n "$1" | sed -e '\|.*|s|/ //*|/|g')"; case "${_r es}" in ?*/) # remove trailing slash ' /'; echo -n "${_re s}" | sed -e '\|.*|s|/$| |'; ;; *) echo -n "${_res}"; ;; esac ; eval "${return_ok}"; } ################### ######################## ######################## ##### # do_filearg (<fil earg>) # # Append the fi le, man-page, or standar d input corresponding to the # argument to the t emporary file. If this is compressed in the gzi p # or Z format it is de compressed. A title ele ment is generated. # # A rgument either: # - na me of an existing files. # - `-' to represent standard input (several times allowed). # - `m an:name.(section)' the m an-page for `name' in `s ection'. # - `man:name .section' the man-page f or `name' in `section'. # - `man:name' the man -page for `name' in the lowest `section'. # - `name.section' the man-p age for `name' in `secti on'. # - `name' the ma n-page for `name' in the lowest `section'. # Glo bals : # $_TMP_STDIN, $_MAN_ENABLE, $_MAN_IS_S ETUP, $_OPT_MAN # # Outp ut : none # Return : $ _GOOD if found, ${_BAD} otherwise. # do_filearg( ) { func_check do_file arg = 1 "$@"; local _f ilespec; local i; _f ilespec="$1"; # store sequence into positional parameters case "${_f ilespec}" in '') eval "${return_good} "; ;; '-') register_file '-'; eval "${return_good }"; ;; */*) # with directory part; s o no man search se t -- 'File'; ;; *) if obj _MAN_E NABLE is_yes; then if obj _MAN_FORCE is_ yes; then set -- 'Manpage' 'File'; else set -- 'File' 'Manpage'; fi; else set -- 'File'; fi; ;; esac; for i in "$@"; do ca se "$i" in File) if test -f "${_fi lespec}"; then if test -r "${_filespec }"; then reg ister_file "${_filespec} "; eval "${r eturn_good}"; else echo2 "could n ot read \`${_filespec}'" ; eval "${re turn_bad}"; fi ; else continue; fi; ;; Manpage) # parse filespec as m an page if obj _ MAN_IS_SETUP is_not_yes; then man_setu p; fi; i f man_do_filespec "${_fi lespec}"; then eval "${return_good}"; else c ontinue; fi; ;; esac; done; eva l "${return_bad}"; } # d o_filearg() ########## ######################## ######################## ############## # do_noth ing () # # Dummy functio n. # do_nothing() { re turn "${_OK}"; } ##### ######################## ######################## ################### # ec ho2 (<text>*) # # Print to standard error with f inal line break. # # def ined above ########### ######################## ######################## ############# # echo2n ( <text>*) # # Print to st andard error without fin al line break. # # defin ed above ############# ######################## ######################## ########### # error (<te xt>*) # # Print error me ssage and exit with erro r code. # # defined abov e #################### ######################## ######################## #### # func_check (<func _name> <rel_op> <nr_args > "$@") # # Check number of arguments and regist er to _FUNC_STACK. # # A rguments: >=3 # <func_ name>: name of the calli ng function. # <rel_op >: a relational opera tor: = != < > <= >= # <nr_args>: number of arguments to be checked against <operator> # " $@": the argument s of the calling functio n. # # defined above ## ######################## ######################## ####################### # func_pop () # # Delete the top element from th e function call stack. # # defined above ##### ######################## ######################## ################### # fu nc_push (<element>) # # Store another element to function call stack. # # defined above ###### ######################## ######################## ################## # fun c_stack_dump () # # Prin t the content of the sta ck. # # defined above ######################## ######################## ######################## # get_first_essential ( <arg>*) # # Retrieve fir st non-empty argument. # # Return : `1' if all arguments are empty, `0' if found. # Output : t he retrieved non-empty a rgument. # get_first_ess ential() { func_check get_first_essential '>=' 0 "$@"; local i; if is_equal "$#" 0; then eval "${return_ok}"; fi; for i in "$@"; d o if obj i is_not_em pty; then echo -n "$i"; eval "${retu rn_ok}"; fi; done; eval "${return_bad}"; } ################### ######################## ######################## ##### landmark '5: is_*( )'; #################### ######################## ######################## #### ################## ######################## ######################## ###### # is_dir (<name>) # # Test whether `name' is a directory. # # Arg uments : 1 # Return : `0' if arg1 is a direct ory, `1' otherwise. # is _dir() { func_check is _dir = 1 "$@"; if test -d "$1" && test -r "$1" ; then eval "${retur n_yes}"; fi; eval "$ {return_no}"; } ###### ######################## ######################## ################## # is_ empty (<string>) # # Tes t whether `string' is em pty. # # Arguments : <=1 # Return : `0' if ar g1 is empty or does not exist, `1' otherwise. # is_empty() { func_chec k is_empty = 1 "$@"; i f test _"$1"_ = __; then eval "${return_yes} "; fi; eval "${retur n_no}"; } ############ ######################## ######################## ############ # is_equal (<string1> <string2>) # # Test whether `string1' is equal to <string2>. # # Arguments : 2 # Retu rn : `0' both argumen ts are equal strings, `1 ' otherwise. # is_equal( ) { func_check is_equa l = 2 "$@"; if test _" $1"_ = _"$2"_; then eval "${return_yes}"; fi; eval "${return_no} "; } ################# ######################## ######################## ####### # is_file (<name >) # # Test whether `nam e' is a readable file. # # Arguments : 1 # Retur n : `0' if arg1 is a readable file, `1' other wise. # is_file() { fu nc_check is_file = 1 "$@ "; if test -f "$1" && test -r "$1"; then e val "${return_yes}"; f i; eval "${return_no}" ; } ################## ######################## ######################## ###### # is_non_empty_fi le (<file_name>) # # Tes t whether `file_name' is a non-empty existing fi le. # # Arguments : <=1 # Return : # `0' if arg1 is a non-empty exi sting file # `1' other wise # is_non_empty_file () { func_check is_emp ty = 1 "$@"; if is_fil e "$1"; then if is_n ot_empty "$(cat "$1" | s ed -e '/./q')"; then eval "${return_yes}"; fi; fi; eval "$ {return_no}"; } ###### ######################## ######################## ################## # is_ not_dir (<name>) # # Tes t whether `name' is not a readable directory. # # Arguments : 1 # Return : `0' if arg1 is a d irectory, `1' otherwise. # is_not_dir() { func _check is_not_dir = 1 "$ @"; if is_dir "$1"; th en eval "${return_no }"; fi; eval "${retu rn_yes}"; } ########## ######################## ######################## ############## # is_not_ empty (<string>) # # Tes t whether `string' is no t empty. # # Arguments : <=1 # Return : `0' i f arg1 exists and is not empty, `1' otherwise. # is_not_empty() { func _check is_not_empty = 1 "$@"; if is_empty "$1" ; then eval "${retur n_no}"; fi; eval "${ return_yes}"; } ###### ######################## ######################## ################## # is_ not_equal (<string1> <st ring2>) # # Test whether `string1' differs from `string2'. # # Arguments : 2 # is_not_equal() { func_check is_not_equa l = 2 "$@"; if is_equa l "$1" "$2"; then ev al "${return_no}"; fi eval "${return_yes}"; } #################### ######################## ######################## #### # is_not_file (<fil ename>) # # Test whether `name' is a not readabl e file. # # Arguments : >=1 (empty allowed), mor e args are ignored # is_ not_file() { func_chec k is_not_file '>=' 1 "$@ "; if is_file "$1"; th en eval "${return_no }"; fi; eval "${retu rn_yes}"; } ########## ######################## ######################## ############## # is_not_ prog (<name>) # # Verify that arg is a not progr am in $PATH. # # Argumen ts : >=1 (empty allowed) # more args are ignor ed, this allows to speci fy progs with arguments # is_not_prog() { func _check is_not_prog '>=' 1 "$@"; if where "$1" >/dev/null; then eva l "${return_no}"; fi; eval "${return_yes}"; } #################### ######################## ######################## #### # is_not_writable ( <name>) # # Test whether `name' is a not a writa ble file or directory. # # Arguments : >=1 (empt y allowed), more args ar e ignored # is_not_writa ble() { func_check is_ not_writable '>=' 1 "$@" ; if is_writable "$1"; then eval "${return _no}"; fi; eval "${r eturn_yes}"; } ####### ######################## ######################## ################# # is_n ot_yes (<string>) # # Te st whether `string' is n ot "yes". # # Arguments : 1 # is_not_yes() { f unc_check is_not_yes = 1 "$@"; if is_yes "$1"; then eval "${return _no}"; fi; eval "${r eturn_yes}"; } ####### ######################## ######################## ################# # is_p rog (<name>) # # Determi ne whether arg is a prog ram in $PATH # # Argumen ts : >=0 (empty allowed) # more args are ignor ed, this allows to speci fy progs with arguments # is_prog() { func_che ck is_prog '>=' 0 "$@"; case "$#" in 0) eval "${return_no}"; ;; *) if where "$ 1" >/dev/null; then eval "${return_yes}"; fi; ;; esac eval "${return_no}"; } ####################### ######################## ######################## # # is_writable (<name>) # # Test whether `name' is a writable file or d irectory. # # Arguments : >=1 (empty allowed), m ore args are ignored # i s_writable() { func_ch eck is_writable '>=' 1 " $@"; if test -r "$1"; then if test -w "$1" ; then eval "${ret urn_yes}"; fi; fi; eval "${return_no}"; } #################### ######################## ######################## #### # is_yes (<string>) # # Test whether `strin g' has value "yes". # # Arguments : <=1 # Return : `0' if arg1 is `ye s', `1' otherwise. # is_ yes() { func_check is_ yes = 1 "$@"; if is_eq ual "$1" 'yes'; then eval "${return_yes}"; fi; eval "${return_no }"; } ################ ######################## ######################## ######## # landmark () # # Print debugging infor mation on standard error if $_DEBUG_LM is `yes'. # # Globals: $_DEBUG_LM # # Defined in section `Debugging functions'. ####################### ######################## ######################## # # leave () # # Clean e xit without an error. # leave() { clean_up; exit "${_OK}"; } ##### ######################## ######################## ################### land mark '6: list_*()'; #### ######################## ######################## #################### # # `list' is an object cla ss that represents an ar ray or list. Its # data consists of space-separ ated single-quoted eleme nts. So a list # has th e form "'first' 'second' '...' 'last'". See lis t_append() for # more de tails on the list struct ure. The array elements of `list' # can be get by `set -- $list`. ### ######################## ######################## ##################### # list_append (<list> <ele ment>...) # # Arguments: >=2 # <list>: a varia ble name for a list of s ingle-quoted elements # <element>: some seque nce of characters. # Out put: none, but $<list> i s set to # if <list> i s empty: "'<element>' ' ...'" # otherwise: "$list '<element> ' ..." # list_append() { func_check list_appen d '>=' 2 "$@"; local _ element; local _list; local _name; _name=" $1"; eval _list='"${'$ 1'}"'; shift; for s in "$@"; do case "$s " in *\'*) # e scape each single quote by replacing each # "'" (squote) by "'\''" (squote bslash squote s quote); # note tha t the backslash must be doubled in the following `sed' _element="$ (echo -n "$s" | sed -e ' s/'"${_SQUOTE}"'/&\\&&/g ')"; ;; '') _element=""; ;; *) _elemen t="$s"; ;; esa c; if obj _list is_e mpty; then _list=" '${_element}'"; else _list="${_list} ' ${_element}'"; fi; done; eval "${_name}" ='"${_list}"'; eval "$ {return_ok}"; } ###### ######################## ######################## ################## # lis t_from_cmdline (<pre_nam e_of_opt_lists> [<cmdlin e_arg>...]) # # Transfor m command line arguments into a normalized form. # # Options, option arg uments, and file paramet ers are identified and # output each as a single -quoted argument of its own. Options and # file parameters are separate d by a '--' argument. # # Arguments: >=1 # <pr e_name>: common part of a set of 4 environment v ariable names: # $<p re_name>_SHORT_NA: list of short options withou t an arg. # $<pre_na me>_SHORT_ARG: list of s hort options that have a n arg. # $<pre_name> _LONG_NA: list of long options without an arg. # $<pre_name>_LONG_ ARG: list of long optio ns that have an arg. # <cmdline_arg>...: the a rguments from a command line, such as "$@", # the co ntent of a variable, or direct arguments. # # Ou tput: ['-[-]opt' ['optar g']]... '--' ['filename' ]... # # Example: # li st_from_cmdline PRE 'a b ' 'c' '' 'long' -a f1 -b carg --long=larg f2 # If $PRE_SHORT_NA, $PRE_SHO RT_ARG, $PRE_LONG_NA, an d $PRE_LONG_ARG are # no ne-empty option lists, t his will result in print ing: # '-a' '-b' '-c ' 'arg' '--long' 'larg' '--' 'f1' 'f2' # # Use this function in the fo llowing way: # eval set -- "$(args_norm PRE_ NAME "$@")"; # while test "$1" != '--'; do # case "$1" in # ... # esac; # shift; # done; # shift; #s kip '--' # # all pos itional parameters ("$@" ) left are file name par ameters. # list_from_cmd line() { func_check li st_from_cmdline '>=' 1 " $@"; local _fparams; local _fn; local _sho rt_a; local _short_n; local _long_a; local _long_n; local _resul t; _short_n="$(obj_dat a "$1"_SHORT_NA)"; # sh ort options, no argument _short_a="$(obj_data "$1"_SHORT_ARG)"; # shor t options, with argument _long_n="$(obj_data " $1"_LONG_NA)"; # long options, no argument _long_a="$(obj_data "$1" _LONG_ARG)"; # long op tions, with argument i f obj _short_n is_empty; then error 'list_fr om_cmdline(): no $'"$1"' _SHORT_NA options.'; f i; if obj _short_a is_ empty; then error 'l ist_from_cmdline(): no $ '"$1"'_SHORT_ARG options .'; fi; if obj _long _n is_empty; then er ror 'list_from_cmdline() : no $'"$1"'_LONG_NA opt ions.'; fi; if obj _ long_a is_empty; then error 'list_from_cmdli ne(): no $'"$1"'_LONG_AR G options.'; fi; shi ft; _fn='list_from_cmd line():'; # for error m essages if is_equal "$ #" 0; then echo -n " '--'"; eval "${retur n_ok}"; fi; _fparams =''; _result=''; whi le test "$#" -ge 1; do _arg="$1"; shift; case "$_arg" in --) break; ;; - -?*) # delete le ading '--'; _opt ="$(echo -n "${_arg}" | sed -e 's/^..//')"; if list_has _long_n "${_opt}"; then # long option, no argu ment list_appe nd _result "--${_opt}"; continue; fi; # test o n `--opt=arg' if string_contains "${_opt }" '='; then # extract option by delet ing from the first '=' t o the end _lop t="$(echo -n "${_opt}" | sed -e 's/=.*$//')"; if list_has _lon g_a "${_lopt}"; then # get the optio n argument by deleting u p to first `=' _optarg="$(echo -n "$ {_opt}" | sed -e 's/^[^= ]*=//')"; li st_append _result "--${_ lopt}" "${_optarg}"; continue; fi; fi; if list_has _long_a "${_opt}"; then # long option with ar gument if test "$#" -le 0; then error "${_fn} no a rgument for option --${_ opt}." fi; list_append _resu lt "--${_opt}" "$1"; shift; continue; fi; error "${_fn} --${ _opt} is not an option." ;; -?*) # short option (cluster ) # delete leadi ng `-'; _rest="$ (echo -n "${_arg}" | sed -e 's/^-//')"; while obj _rest is_not_e mpty; do # get next short option from cluster (first char of $ _rest) _optcha r="$(echo -n "${_rest}" | sed -e 's/^\(.\).*$/\1 /')"; # remove first character from ${ _rest}; _rest= "$(echo -n "${_rest}" | sed -e 's/^.//')"; if list_has _short_ n "${_optchar}"; then list_append _r esult "-${_optchar}"; continue; elif list_has _sho rt_a "${_optchar}"; then if obj _res t is_empty; then if test "$#" -ge 1; then list_append _result "-${ _optchar}" "$1"; shift; continue; else error \ "${_fn}"' no argu ment for option -'"${_op tchar}." f i; else # r est is the argument list_append _r esult "-${_optchar}" "${ _rest}"; _ rest=''; c ontinue; fi; else error "${_fn} unknow n option -${_optchar}." fi; do ne; ;; *) # Here, $_arg is not an option, so a file param eter. list_appen d _fparams "${_arg}"; # Ignore the stra nge option handling of $ POSIXLY_CORRECT to # end option parsing after the first file nam e argument. To # reuse it, do a `break' here if $POSIXLY_CORREC T is # non-empty . ;; esac; done; list_append _re sult '--'; if obj _fpa rams is_not_empty; then _result="${_result} ${_fparams}"; fi; if test "$#" -gt 0; then list_append _result " $@"; fi; echo -n "$_ result"; eval "${retur n_ok}"; } # list_from_cm dline() ############## ######################## ######################## ########## # list_from_s plit (<string> <separato r>) # # In <string>, esc ape all white space char acters and replace each # <separator> by space. # # Arguments: 2: a <str ing> that is to be split into parts divided by # <separato r> # Output: the resu lting list string # list _from_split() { func_c heck list_from_split = 2 "$@"; local _s; # precede each space or ta b by a backslash `\' (do ubled for `sed') _s="$ (echo -n "$1" | sed -e ' s/\(['"${_SPACE}${_TAB}" ']\)/\\\1/g')"; # rep lace split character of string by the list separ ator ` ' (space). case "$2" in /) # can not use normal `sed' sep arator echo -n "${ _s}" | sed -e '\|.*|s|'" $2"'| |g'; ;; ?) # use normal `sed' separator echo -n "${_s}" | sed -e 's/'"$ 2"'/ /g'; ;; ? ?*) error 'list_fr om_split(): separator mu st be a single character .'; ;; esac; e val "${return_ok}"; } ######################## ######################## ######################## # list_get (<list>) # # Check whether <list> is a space-separated list of '-quoted elements. # # If the test fails an e rror is raised. # If the test succeeds the argum ent is echoed. # # Testi ng criteria: # A list has the form "'first' 's econd' '...' 'last'". S o it has a # leading a nd a final quote and the elements are separated by "' '" # constructs. If these are all remov ed there should not be a ny # unescaped single- quotes left. Watch out for escaped single # q uotes; they have the for m '\'' (sq bs sq sq). # Arguments: 1 # Output: the argument <list> unch anged, if the check succ eeded. # list_get() { func_check list_get = 1 "$@"; local _list; e val _list='"${'$1'}"'; # remove leading and fi nal space characters _ list="$(echo -n "${_list }" | \ sed -e 's/^['"${_SPACE}${_TAB} "']*//' | \ s ed -e 's/['"${_SPACE}${_ TAB}"']*$//')"; case " ${_list}" in '') e val "${return_ok}"; ;; \'*\') echo -n "${_list}"; eval "${ return_ok}"; ;; *) error "list_get(): bad list: $1" ;; e sac; eval "${return_ok }"; } ################ ######################## ######################## ######## # list_has (<va r_name> <element>) # # A rguments: 2 # <var_nam e>: a variable name for a list of single-quoted elements # <element>: some sequence of charac ters. # Output: # if < list> is empty: "'<elem ent>' '...'" # otherwi se: "list '<el ement>' ..." # list_has( ) { func_check list_ha s = 2 "$@"; eval _list ='"${'$1'}"'; if obj _ list is_empty; then eval "${return_no}"; f i; _element="$2"; ca se "$2" in \'*\') _ element="$2"; ;; *) _element="'$2'"; ;; esac; if string_con tains "${_list}" "${_ele ment}"; then eval "$ {return_yes}"; else eval "${return_no}"; fi; eval "${return_ok }"; } ################ ######################## ######################## ######## # list_has_not (<list> <element>) # # A rguments: 2 # <list>: a space-separated lis t of single-quoted eleme nts. # <element>: some sequence of characters. # Output: # if <list> is empty: "'<element>' '...'" # otherwise: "<list> '<eleme nt>' ..." # list_has_not () { func_check list_h as_not = 2 "$@"; eval _list='"${'$1'}"'; if obj _list is_empty; then eval "${return_yes} "; fi; _element="$2" ; case "$2" in \'* \') _element="$2"; ;; *) _element="'$2 '"; ;; esac; if stri ng_contains "${_list}" " ${_element}"; then e val "${return_no}"; el se eval "${return_ye s}"; fi; eval "${ret urn_ok}"; } ########## ######################## ######################## ############## landmark '7: man_*()'; ########## ######################## ######################## ############## ######## ######################## ######################## ################ # man_d o_filespec (<filespec>) # # Print suitable man p age(s) for filespec to $ _TMP_CAT. # # Arguments : 2 # <filespec>: argu ment of the form `man:na me.section', `man:name', # `man:na me(section)', `name.sect ion', `name'. # # Global s : $_OPT_ALL # # Outp ut : none. # Return : `0' if man page was found, `1' else. # # Onl y called from do_filearg s(), checks on $MANPATH and # $_MAN_ENABLE are a ssumed. # man_do_filespe c() { func_check man_d o_filespec = 1 "$@"; l ocal _got_one; local _ name; local _prevsec; local _res; local _s ection; local _spec; local _string; local s; if obj _MAN_PATH is _empty; then eval "$ {return_bad}"; fi; i f is_empty "$1"; then eval "${return_bad}"; fi; _spec="$1"; _n ame=''; _section=''; case "${_spec}" in */*) # not a man spec when it contains '/' eval "${return_bad}"; ;; man:?*\(?* \)) # man:name(section) _name="$(echo -n "${_spec}" \ | sed -e 's/^man:\(. .*\)(\(..*\))$/\1/')"; _section="$(echo -n "${_spec}" \ | sed -e 's/^man:\( ..*\)(\(..*\))$/\2/')"; ;; man:?*.[0-9 on]) # man:name.sectio n _name="$(echo -n "${_spec}" \ | sed -e 's/^man:\( ..*\)\..$/\1/')"; _section="$(echo -n "${_ spec}" \ | sed -e 's/^.*\(.\)$/\1 /')"; ;; man:? *) # man:name _n ame="$(echo -n "${_spec} " | sed -e 's/^man://')" ; ;; ?*\(?*\)) # name(section) _name="$(echo -n "${_sp ec}" \ | sed -e 's/^\(..*\)(\(..* \))$/\1/')"; _sect ion="$(echo -n "${_spec} " \ | sed -e 's/^\(..*\)(\(..*\)) $/\2/')"; ;; ? *.[0-9on]) # name.sect ion _name="$(echo -n "${_spec}" \ | sed -e 's/^\(.. *\)\..$/\1/')"; _s ection="$(echo -n "${_sp ec}" \ | sed -e 's/^.*\(.\)$/\1/' )"; ;; ?*) _name="${_filespec}"; ;; esac; if o bj _name is_empty; then eval "${return_bad}" ; fi; _got_one='no'; if obj _section is_em pty; then eval set - - "${_MAN_AUTO_SEC}"; for s in "$@"; do if man_search_section "${_name}" "$s"; then # found if obj _MA N_ALL is_yes; then _got_one='yes'; else eval "${return_good}"; fi; fi; don e; else if man_sea rch_section "${_name}" " ${_section}"; then eval "${return_good}"; else eval "${r eturn_bad}"; fi; f i; if obj _MAN_ALL is_ yes && is_yes "${_got_on e}"; then eval "${re turn_good}"; fi; eva l "${return_bad}"; } # m an_do_filespec() ##### ######################## ######################## ################### # ma n_register_file (<file> <name> [<section>]) # # Write a found man page f ile and register the tit le element. # # Argument s: 1, 2, or 3; maybe emp ty # Output: none # man_ register_file() { func _check man_register_file '>=' 2 "$@"; case "$# " in 2|3) do_nothing ; ;; *) error "man_register_file() exp ects 2 or 3 arguments."; ;; esac; if i s_empty "$1"; then e rror 'man_register_file( ): file name is empty'; fi; to_tmp "$1"; c ase "$#" in 2) register_title "man:$2 "; eval "${return _ok}"; ;; 3) register_title "$ 2.$3"; eval "${re turn_ok}"; ;; e sac; eval "${return_ok }"; } ################ ######################## ######################## ######## # man_search_se ction (<name> <section>) # # Retrieve man pages. # # Arguments : 2 # Glo bals : $_MAN_PATH, $_M AN_EXT # Return : 0 i f found, 1 otherwise # m an_search_section() { func_check man_search_se ction = 2 "$@"; local _dir; local _ext; lo cal _got_one; local _n ame; local _prefix l ocal _section; local d ; local f; if obj _M AN_PATH is_empty; then eval "${return_bad}"; fi; if is_empty "$1 "; then eval "${retu rn_bad}"; fi; if is_ empty "$2"; then eva l "${return_bad}"; fi; _name="$1"; _sectio n="$2"; eval set -- "$ (path_split "${_MAN_PATH }")"; _got_one='no'; if obj _MAN_EXT is_empt y; then for d in "$@ "; do _dir="$(dirn ame_append "$d" "man${_s ection}")"; if obj _dir is_dir; then _prefix="$(dirname_ap pend "${_dir}" "${_name} .${_section}")"; for f in $(echo -n ${_p refix}*); do i f obj f is_file; then if is_yes "${_ got_one}"; then register_file "$f" ; elif obj _ MAN_ALL is_yes; then man_register_ file "$f" "${_name}"; else man_register_file " $f" "${_name}" "${_secti on}"; eval "${return_good}"; fi; _ got_one='yes'; fi; done; fi; done; else _ext="${_MAN_EXT}"; # check for directory name having trailing ext ension for d in "$@" ; do _dir="$(dirna me_append $d man${_secti on}${_ext})"; if o bj _dir is_dir; then _prefix="$(dirname_ append "${_dir}" "${_nam e}.${_section}")"; for f in ${_prefix}*; do if obj f i s_file; then if is_yes "${_got_one}" ; then reg ister_file "$f"; elif obj _MAN_ALL i s_yes; then man_register_file "$f" "${_name}"; else man_ register_file "$f" "${_n ame}" "${_section}"; eval "${retur n_good}"; fi ; _got_one=' yes'; fi; done; fi; done; # check for fi les with extension in di rectories without extens ion for d in "$@"; d o _dir="$(dirname_ append "$d" "man${_secti on}")"; if obj _di r is_dir; then _ prefix="$(dirname_append "${_dir}" \ " ${_name}.${_section}${_e xt}")"; for f in ${_prefix}*; do if obj f is_file; the n if is_yes "${_got_one}"; then register_file "$f"; elif o bj _MAN_ALL is_yes; then man_regis ter_file "$f" "${_name}" ; else man_register_fi le "$f" "${_name}" "${_s ection}"; eval "${return_good}"; fi; _got_one='yes'; fi; done; fi; done; fi; if obj _MAN_ALL is_ye s && is_yes "${_got_one} "; then eval "${retu rn_good}"; fi; eval "${return_bad}"; } # man _search_section() #### ######################## ######################## #################### # m an_setup () # # Setup th e variables $_MAN_* need ed for man page searchin g. # # Globals: # in: $_OPT_*, $_MANOPT_*, $LANG, $LC_MESSAGES, $L C_ALL, # $MANP ATH, $MANROFFSEQ, $MANSE C, $PAGER, $SYSTEM, $MAN OPT. # out: $_MAN_P ATH, $_MAN_LANG, $_MAN_S YS, $_MAN_LANG, $_MAN_LA NG2, # $_MAN_S EC, $_MAN_ALL # in/out : $_MAN_ENABLE # # The p recedence for the variab les related to `man' is that of GNU # `man', i.e . # # $LANG; overridden by # $LC_MESSAGES; overr idden by # $LC_ALL; this has the same precedence as # $MANPATH, $MANROFF SEQ, $MANSEC, $PAGER, $S YSTEM; overridden by # $ MANOPT; overridden by # the groffer command line options. # man_setup() { func_check main_man_ setup = 0 "$@"; local _lang; if obj _MAN_IS _SETUP is_yes; then eval "${return_ok}"; f i; _MAN_IS_SETUP='yes' ; if obj _MAN_ENABLE is_not_yes; then eva l "${return_ok}"; fi; # determine basic pat h for man pages _MAN_P ATH="$(get_first_essenti al \ "${_ OPT_MANPATH}" "${_MANOPT _PATH}" "${MANPATH}")"; if obj _MAN_PATH is_em pty; then manpath_se t_from_path; else _MAN_PATH="$(path_clean "${_MAN_PATH}")"; fi; if obj _MAN_PATH is_em pty; then if is_prog 'manpath'; then _ MAN_PATH="$(manpath 2>/d ev/null)"; # not always available fi; fi; if obj _MAN_PATH is_em pty; then _MAN_ENABL E="no"; eval "${retu rn_ok}"; fi; _MAN_A LL="$(get_first_essentia l "${_OPT_ALL}" "${_MANO PT_ALL}")"; if obj _MA N_ALL is_empty; then _MAN_ALL='no'; fi; _MAN_SYS="$(get_first_e ssential \ "${_OPT_SYSTEMS}" "${_M ANOPT_SYS}" "${SYSTEM}") "; _lang="$(get_first_ essential \ " ${_OPT_LANG}" "${LC_ALL} " "${LC_MESSAGES}" "${LA NG}")"; case "${_lang} " in C|POSIX) _MAN_LANG=""; _MAN _LANG2=""; ;; ?) _MAN_LANG="${_l ang}"; _MAN_LANG2= ""; ;; *) _MAN_LANG="${_lang}"; # get first two ch aracters of $_lang _MAN_LANG2="$(echo -n " ${_lang}" | sed -e 's/^\ (..\).*$/\1/')"; ; ; esac; # from now o n, use only $_LANG, forg et about $_OPT_LANG, $LC _*. manpath_add_lang_ sys; # this is very slo w _MAN_SEC="$(get_fir st_essential \ "${_OPT_SECT}" "${_ MANOPT_SEC}" "${MANSEC}" )"; if obj _MAN_PATH i s_empty; then _MAN_E NABLE="no"; eval "${ return_ok}"; fi; _M AN_EXT="$(get_first_esse ntial \ "$ {_OPT_EXTENSION}" "${_MA NOPT_EXTENSION}")"; ev al "${return_ok}"; } # m an_setup() ########### ######################## ######################## ############# landmark ' 8: manpath_*()'; ####### ######################## ######################## ################# ##### ######################## ######################## ################### # ma npath_add_lang_sys () # # Add language and opera ting system specific dir ectories to man path. # # Arguments : 0 # Output : none # Globals: # in: $_MAN_SYS: has the form `os1,os2,...', a comma separated # list of names o f operating systems. # $_MAN_LANG and $_MAN_LANG2: each a sing le name # in/out: $_MA N_PATH: has the form `di r1:dir2:...', a colon # separated li st of directories. # man path_add_lang_sys() { func_check manpath_add_l ang_sys = 0 "$@"; loca l p; local _mp; if o bj _MAN_PATH is_empty; t hen eval "${return_o k}"; fi; # twice tes t both sys and lang ev al set -- "$(path_split "${_MAN_PATH}")"; _mp= ''; for p in "$@"; do # loop on man path dire ctories _mp="$(_manp ath_add_lang_sys_single "${_mp}" "$p")"; done; eval set -- "$(path_s plit "${_mp}")"; for p in "$@"; do # loop on man path directories _mp="$(_manpath_add_lan g_sys_single "${_mp}" "$ p")"; done; _MAN_PAT H="$(path_chop "${_mp}") "; eval "${return_ok}" ; } _manpath_add_lang_ sys_single() { # To th e directory in $1 append existing sys/lang subdi rectories # Function i s necessary to split the OS list. # # global s: in: $_MAN_SYS, $_MAN_ LANG, $_MAN_LANG2 # ar gument: 2: `man_path' an d `dir' # output: colo n-separated path of the retrieved subdirectories # func_check _manpa th_add_lang_sys_single = 2 "$@"; local d; _r es="$1"; _parent="$2"; eval set -- "$(list_f rom_split "${_MAN_SYS}" ',')"; for d in "$@" " ${_MAN_LANG}" "${_MAN_LA NG2}"; do _dir="$(di rname_append "${_parent} " "$d")"; if obj _re s path_not_contains "${_ dir}" && obj _dir is_dir ; then _res="${_re s}:${_dir}"; fi; d one; if path_not_conta ins "${_res}" "${_parent }"; then _res="${_re s}:${_parent}"; fi; path_chop "${_res}"; } # end manpath_add_lang_s ys () ################ ######################## ######################## ######## # manpath_set_f rom_path () # # Determin e basic search path for man pages from $PATH. # # Return: `0' if a va lid man path was retriev ed. # Output: none # Globals: # in: $PATH # out: $_MAN_PATH # ma npath_set_from_path() { func_check manpath_set _from_path = 0 "$@"; l ocal _base; local _man dir; local _manpath; local d; local e; _ manpath=''; # get a b asic man path from $PATH if obj PATH is_not_em pty; then eval set - - "$(path_split "${PATH} ")"; for d in "$@"; do # delete the fi nal `/bin' part _b ase="$(echo -n "$d" | se d -e '\|.*|s|//*bin/*$|| ')"; for e in /sha re/man /man; do _mandir="${_base}$e"; if test -d "${_man dir}" && test -r "${_man dir}"; then _man path="${_manpath}:${_man dir}"; fi; done; done; fi; # append some default directories for d in / usr/local/share/man /usr /local/man \ /usr/share/man /usr/man \ /usr/X11R 6/man /usr/openwin/man \ /opt/share/ man /opt/man \ /opt/gnome/man /opt/k de/man; do if obj _m anpath path_not_contains "$d" && obj d is_dir; t hen _manpath="${_m anpath}:$d"; fi; d one; _MAN_PATH="${_ma npath}"; eval "${retur n_ok}"; } # manpath_set_ from_path() ########## ######################## ######################## ############## landmark '9: obj_*()'; ########## ######################## ######################## ############## ######## ######################## ######################## ################ # obj ( <object> <call_name> <ar g>...) # # This works li ke a method (object func tion) call for an object . # Run "<call_name> $<o bject> <arg> ...". # # T he first argument repres ents an object whose dat a is given as first # ar gument to <call_name>(). # # Argument: >=2 # <object>: variabl e name # <call _name>: a program or fun ction name # obj() { f unc_check obj '>=' 2 "$@ "; local func; local var; if is_empty "$2" ; then error "obj(): function name is empty. " else func="$2"; fi; eval arg1='"${'$ 1'}"'; shift; shift; eval "${func}"' "${ar g1}" "$@"'; } ######## ######################## ######################## ################ # obj_d ata (<object>) # # Print the data of <object>, i .e. the content of $<obj ect>. # For possible lat er extensions. # # Argum ents: 1 # <ob ject>: a variable name # Output: the data of <object> # obj_data() { func_check obj '=' 1 " $@"; if is_empty "$1"; then error "obj_dat a(): object name is empt y." fi; eval echo -n '"${'$1'}"'; } ###### ######################## ######################## ################## # obj _from_output (<object> < call_name> <arg>...) # # Run '$<object>="$(<call _name> <arg>...)"' to se t the result of a # func tion call to a global va riable. # # Arguments: > =2 # <object> : a variable name # <call_name>: the name of a function or pr ogram # <arg> : optional argument to < call_name> # Output: none # obj_from_output() { func_check obj_from _output '>=' 2 "$@"; l ocal result_name; if i s_empty "$1"; then e rror "res(): variable na me is empty."; elif is _empty "$2"; then er ror "res(): function nam e is empty." else result_name="$1"; fi; shift; eval "${resul t_name}"'="$('"$@"')"'; } #################### ######################## ######################## #### # obj_set (<object> <data>) # # Set the dat a of <object>, i.e. call "$<object>=<data>". # # Arguments: 2 # <object>: a variable name # <data> : a string # Output:: none # obj_set() { fun c_check obj_set '=' 2 "$ @"; if is_empty "$1"; then error "obj_set( ): object name is empty. " fi; eval "$1"='"$2 "'; } ################ ######################## ######################## ######## # path_chop (<p ath>) # # Remove unneces sary colons from path. # # Argument: 1, a colon separated path. # Output : path without leading , double, or trailing co lons. # path_chop() { func_check path_chop = 1 "$@"; local _res; # replace multiple colon s by a single colon `:' # remove leading and t railing colons echo -n "$1" | sed -e 's/:::*/: /g' | s ed -e 's/^:*//' | sed -e 's/:*$ //'; eval "${return_ok }"; } ################ ######################## ######################## ######## # path_clean (< path>) # # Remove non-ex isting directories from a colon-separated list. # # Argument: 1, a colon separated path. # Outpu t: colon-separated lis t of existing directorie s. # path_clean() { fu nc_check path_clean = 1 "$@"; local _arg; lo cal _dir; local _res; local i; if is_not_e qual "$#" 1; then er ror 'path_clean() needs 1 argument.'; fi; _a rg="$1"; eval set -- " $(path_split "${_arg}")" ; _res=""; for i in "$@"; do if obj i is _not_empty \ && o bj _res path_not_contain s "$i" \ && obj i is_dir; then case "$i" in ?*/ ) _res="${_res}$(dirname _chop "$i")"; ;; *) _res="${_res}:$i"; esac; fi; do ne; if path_chop "${_r es}"; then eval "${r eturn_ok}"; else e val "${return_badk}"; fi; } ################ ######################## ######################## ######## # path_contains (<path> <dir>) #- # Tes t whether `dir' is conta ined in `path', a list s eparated by `:'. # # Arg uments : 2 arguments. # Return : `0' if arg2 is substring of arg1, `1 ' otherwise. # path_cont ains() { func_check pa th_contains = 2 "$@"; case ":$1:" in *":$2 :"*) eval "${retur n_yes}"; ;; *) eval "${return_no }"; ;; esac; e val "${return_ok}"; } ######################## ######################## ######################## # path_not_contains (<p ath> <dir>) #- # Test wh ether `dir' is not conta ined in colon separated `path'. # # Arguments : 2 arguments. # path_not_ contains() { func_chec k path_not_contains = 2 "$@"; if path_contains "$1" "$2"; then eva l "${return_no}"; else eval "${return_yes} "; fi; eval "${retur n_ok}"; } ############ ######################## ######################## ############ # path_spli t (<path>) # # In `path' escape white space and replace each colon by a space. # # Arguments: 1: a colon-separated path # Output: the resulti ng list, process with `e val set --' # path_split () { func_check path_s plit = 1 "$@"; list_fr om_split "$1" ':'; eva l "${return_ok}"; } ## ######################## ######################## ###################### l andmark '10: register_*( )'; #################### ######################## ######################## #### ################## ######################## ######################## ###### # register_file ( <filename>) # # Write a found file and register the title element. # # A rguments: 1: a file name # Output: none # regist er_file() { func_check register_file = 1 "$@"; if is_empty "$1"; the n error 'register_fi le(): file name is empty '; fi; if is_equal " $1" '-'; then to_tmp "${_TMP_STDIN}"; re gister_title '-'; else to_tmp "$1"; re gister_title "$(base_nam e "$1")"; fi; eval " ${return_ok}"; } ##### ######################## ######################## ################### # re gister_title (<filespec> ) # # Create title eleme nt from <filespec> and a ppend to $_REGISTERED_TI TLE # # Globals: $_REGIS TERED_TITLE (rw) # regis ter_title() { func_che ck register_title = 1 "$ @"; local _title; if is_empty "$1"; then eval "${return_ok}"; fi; _title="$(base_nam e "$1")"; # remove direc tory part # remove extension `.gz' _title ="$(echo -n "${_title}" | sed -e 's/\.gz$//')"; # remove extension `.Z ' _title="$(echo -n "$ {_title}" | sed -e 's/\. Z$//')"; if obj _titl e is_empty; then eva l "${return_ok}"; fi; _REGISTERED_TITLE="${_ REGISTERED_TITLE} ${_tit le}"; eval "${return_o k}"; } ############### ######################## ######################## ######### # reset () # # Reset the variables tha t can be affected by opt ions to their default. # # # Defined in section `Preset' after the rudim entary shell tests. ## ######################## ######################## ###################### # save_stdin () # # Store standard input to tempo rary file (with decompre ssion). # if obj _HAS_CO MPRESSION is_yes; then save_stdin() { lo cal _f; func_check s ave_stdin = 0 "$@"; _f="${_TMP_DIR}"/INPUT; cat >"${_f}"; c atz "${_f}" >"${_TMP_STD IN}"; rm -f "${_f}"; eval "${return_ok}" ; } else save_stdin( ) { func_check sav e_stdin = 0 "$@"; ca t >"${_TMP_STDIN}"; eval "${return_ok}"; } fi; ################# ######################## ######################## ####### landmark '11: st ack_*()'; ############## ######################## ######################## ########## ############ ######################## ######################## ############ # string_co ntains (<string> <part>) # # Test whether `part' is contained in `string '. # # Arguments : 2 tex t arguments. # Return : `0' if arg2 is substr ing of arg1, `1' otherwi se. # string_contains() { func_check string_co ntains = 2 "$@"; case "$1" in *"$2"*) eval "${return_yes}"; ;; *) ev al "${return_no}"; ;; esac; eval "${re turn_ok}"; } ######### ######################## ######################## ############### # string _not_contains (<string> <part>) # # Test whether `part' is not substring of `string'. # # Argume nts : 2 text arguments. # Return : `0' if arg 2 is substring of arg1, `1' otherwise. # string_ not_contains() { func_ check string_not_contain s = 2 "$@"; if string_ contains "$1" "$2"; then eval "${return_no}" ; else eval "${ret urn_yes}"; fi; eval "${return_ok}"; } #### ######################## ######################## #################### lan dmark '12: tmp_*()'; ### ######################## ######################## ##################### # ######################## ######################## ####################### # tmp_cat () # # output the temporary cat file ( the concatenation of all input) # tmp_cat() { cat "${_TMP_CAT}"; } # ######################## ######################## ####################### # tmp_create (<suffix>?) # # create temporary fi le # # It's safe to use the shell process ID tog ether with a suffix to # have multiple temporary files. # # Output : nam e of created file # tmp_ create() { func_check tmp_create '<=' 1 "$@"; local _tmp; # the ou tput file does not have `,' as first character _tmp="${_TMP_DIR}/,$1"; echo -n >"${_tmp}"; echo -n "${_tmp}"; # o utput file name eval " ${return_ok}"; } ##### ######################## ######################## ################### # to _tmp (<filename>) # # pr int file (decompressed) to the temporary cat fil e # to_tmp() { func_ch eck to_tmp = 1 "$@"; i f is_file "$1"; then if obj _OPT_LOCATION is _yes; then echo2 " $1"; fi; if obj _OPT_WHATIS is_yes; then what_is "$1" >>"$ {_TMP_CAT}"; else catz "$1" >>"${_TMP_ CAT}"; fi; else error "to_tmp(): could not read file \`$1'."; fi; eval "${return_o k}"; } ############### ######################## ######################## ######### # trap_clean ( ) # # disable trap on al l exit codes ($_ALL_EXIT ) # # Arguments: 0 # Glo bals: $_ALL_EXIT # tra p_clean() { func_check trap_clean = 0 "$@"; local i; for i in ${_A LL_EXIT}; do trap "" "$i" 2>/dev/null || tru e; done; eval "${ret urn_ok}"; } ########## ######################## ######################## ############## # trap_se t (<functionname>) # # c all function on all exit codes ($_ALL_EXIT) # # Arguments: 1 (name of a shell function) # Global s: $_ALL_EXIT # trap_s et() { func_check trap _set = 1 "$@"; local i ; for i in ${_ALL_EXIT }; do trap "$1" "$i" 2>/dev/null || true; done; eval "${return_o k}"; } ############### ######################## ######################## ######### # usage () # # print usage information to stderr; for groffer option --help. # usage() { func_check usage = 0 "$@"; echo; versio n; echo 'Usage: '"${_P ROGRAM_NAME}"' [option]. .. [filespec]...'; cat <<EOF Display roff fil es, standard input, and/ or Unix manual pages wit h a X Window viewer or i n several text modes. A ll input is decompressed on-the-fly with all for mats that gzip can handl e. "filespec" is one of "filename" name of a readable file "- " for stand ard input "man:name.n" man page "name" in section "n" "man:name" man page "name" i n first section found "name.n" man pag e "name" in section "n" "name" man p age "name" in first sect ion found and some more (see groffer(1) for deta ils). -h --help print this usage message . -Q --source outpu t as roff source. -T --d evice=name pass to groff using output device "na me". -v --version pr int version information. -V displa y the groff execution pi pe instead of formatting . -X --X --x displ ay with "gxditview" usin g groff -X. -Z --ditroff --intermediate-output generate groff intermediate outp ut without post-processing and viewing, like groff -Z. All other short options are interpreted as "gro ff" formatting options. The most important grof fer long options are -- apropos=name start man 's "apropos" program for "name". --apropos-data= name "a propos" for "name" in ma n's data sections 4, 5, 7. --apropos-devel=name "apropo s" for "name" in develop ment sections 2, 3, 9. - -apropos-progs=name "apropos" f or "name" in man's progr am sections 1, 6, 8. --a uto choose mod e automatically from the default mode list. --de fault reset all o ptions to the default va lue. --default-modes=mod e1,mode2,... set sequence of au tomatically tried modes. --dvi displa y in a viewer for TeX de vice independent format. --dvi-viewer choose the viewer program for dvi mode. --groff process like groff, d isable viewing features. --help displa y this helping output. - -html --www display in a web browser. --html -viewer choose the we b browser for www mode. --man check f ile parameters first whe ther they are man pages. --mode=auto|dvi|groff|h tml|pdf|ps|source|text|t ty|www|x|X choose display mode. --no-man disabl e man-page facility. --p ager=program preset the paging program for tty mode. --pdf d isplay in a PDF viewer. --pdf-viewer choose the viewer program for p df mode. --ps display in a Postscrip t viewer. --ps-viewer choose the viewer pro gram for ps mode. --shel l specify shell under which to run this program. --text output in a text devi ce without a pager. --tt y display wit h a pager on text termin al even when in X. --www -viewer same as --ht ml-viewer --x-viewer choose viewer program for x mode (X mode). -- X-viewer same as " --xviewer". The usual X Windows toolkit options transformed into GNU lo ng options --background= color, --bd=size, --bg=c olor, --bordercolor=colo r, --borderwidth=size, - -bw=size, --display=Xdis play, --fg=color, --fn=f ont, --font=font, --fore ground=color, --geometry =geom, --iconic, --resol ution=dpi, --rv, --title =text, --xrm=resource L ong options of GNU "man" --all, --ascii, --ditr off, --extension=suffix, --locale=language, --lo cal-file=name, --locatio n, --manpath=dir1:dir2:. .., --sections=s1:s2:... , --systems=s1,s2,..., - -whatis, --where, ... E OF eval "${return_ok}" ; } ################## ######################## ######################## ###### # version () # # print version informatio n to stderr # version() { func_check version = 0 "$@"; echo2 "${_PRO GRAM_NAME} ${_PROGRAM_VE RSION} of ${_LAST_UPDATE }"; # also display gro ff's version, but not th e called subprograms g roff -v 2>&1 | sed -e '/ ^ *$/q' | sed -e '1s/^/i s part of /' >&2; } ######################## ######################## ######################## # warning (<string>) # # Print warning to stder r # warning() { echo2 "warning: $*"; } ##### ######################## ######################## ################### # wh at_is (<filename>) # # I nterpret <filename> as a man page and display it s `whatis' # information as a fragment written i n the groff language. # what_is() { func_check what_is = 1 "$@"; loc al _res; local _dot; if is_not_file "$1"; th en error "what_is(): argument is not a reada ble file." fi; _dot= '^\.['"${_SPACE}${_TAB}" ']*'; echo '.br'; ec ho "$1: "; echo '.br '; echo -n ' '; # g rep the line containing `.TH' macro, if any _r es="$(catz "$1" | sed -e '/'"${_dot}"'TH /p d')" ; if obj _res is_not_e mpty; then # traditional man style # get the text between the first and the second `.SH' mac ro, by # - delete up to first .SH; # - o f this, print everything up to next .SH, and del ete the rest; # - of this, delete the final .SH line; catz "$1" | sed -e '1,/'"${_dot}"' SH/d' \ | sed -e '1,/'"${_dot}"'SH /p d' \ | sed -e '/'"${_dot}"'SH/d '; eval "${return_ok }"; fi; # grep the l ine containing `.Dd' mac ro, if any _res="$(cat z "$1" | sed -e '/'"${_d ot}"'Dd /p d')"; if ob j _res is_not_empty; the n # BSD doc style # get the text between the first and the second `. Nd' macro, by # - de lete up to first .Nd; # - of this, print eve rything up to next .Nd, and delete the rest; # - of this, delete the final .Nd line; cat z "$1" | sed -e '1,/'"${ _dot}"'Nd/d' \ | sed -e '1,/'"${_d ot}"'Nd/p d' \ | sed -e '/'"${_dot }"'Nd/d'; eval "${re turn_ok}"; fi; echo 'is not a man page.'; eval "${return_bad}"; } ###################### ######################## ######################## ## # where (<program>) # # Output path of a prog ram if in $PATH. # # Arg uments : >=1 (empty allo wed) # more args are i gnored, this allows to s pecify progs with argume nts # Return : `0' if arg1 is a program in $P ATH, `1' otherwise. # wh ere() { func_check whe re '>=' 1 "$@"; local _file; local _arg; l ocal p; _arg="$1"; i f obj _arg is_empty; the n eval "${return_bad }"; fi; case "${_arg }" in /*) if t est -f "${_arg}" && test -x "${_arg}"; then eval "${return_ok}"; else eval "${return_bad}"; fi; ;; esac; e val set -- "$(path_split "${PATH}")"; for p in "$@"; do case "$p" in */) _file=${p}$ {_arg}; ;; *) _fi le=${p}/${_arg}; ;; esac; if test -f "${ _file}" && test -x "${_f ile}"; then echo - n "${_file}"; eval "${return_ok}"; fi; done; eval "${retur n_bad}"; } ########### ######################## ######################## ############# # mai n ###################### ######################## ######################## ## # The main area cont ains the following parts : # - main_init(): initi alize temporary files an d set exit trap # - pars e $MANOPT # - main_parse _args(): argument parsin g # - determine display mode # - process filespe c arguments # - setup X resources # - do the dis playing # These parts a re implemented as functi ons, being defined below in the # sequence they are called in the main() function. ########### ######################## ######################## ############ # main_init () # # set exit trap an d create temporary files # # Globals: $_TMP_CAT, $_TMP_STDIN # landmark '13: main_init()'; main_ init() { func_check ma in_init = 0 "$@"; # ca ll clean_up() on any sig nal trap_set clean_up; # determine temporar y directory umask 000; _TMP_DIR=''; for d in "${GROFF_TMPDIR}" "${ TMPDIR}" "${TMP}" "${TEM P}" \ "${TEMP DIR}" "${HOME}"'/tmp' '/ tmp' "${HOME}" '.'; do if is_not_empty "$d "; then if obj d i s_dir && obj d is_writab le; then _TMP_DIR="`m ktemp -d ${d}/${_PROGRAM _NAME}.XXXXXX`"; if t est $? = 0; then break; else _T MP_DIR=''; contin ue; fi fi; if obj _TMP_DIR is_not _writable; then _TMP_DI R=''; continue; f i; fi; done; uns et d; if obj _TMP_DIR is_empty; then error "Couldn't create a dire ctory for storing tempor ary files."; fi; _T MP_CAT="$(tmp_create gro ffer_cat)"; _TMP_STDIN ="$(tmp_create groffer_i nput)"; # groffer con figuration files for f in ${_CONFFILES}; do if obj f is_file; then echo '_groffer_op t=""' >>${_TMP_CAT}; # collect the lines s tarting with a minus cat "$f" | sed -e \ 's/^[ ]*\(-.*\)$ /_groffer_opt="${_groffe r_opt} \1"'/ \ > >${_TMP_CAT}; # pr epend the collected info rmation to $GROFFER_OPT echo 'GROFFER_OPT= "${_groffer_opt} ${GROFF ER_OPT}"' >>${_TMP_CAT}; fi; done; . "${ _TMP_CAT}"; _TMP_CAT=" $(tmp_create groffer_cat )"; eval "${return_ok }"; } # main_init() ## ######################## ######################## ###################### # main_parse_MANOPT () # # Parse $MANOPT to retri eve man options, but onl y if it is a non-empty # string; found man argum ents can be overwritten by the command line. # # Globals: # in: $MANOP T, $_OPTS_MANOPT_* # o ut: $_MANOPT_* # in/ou t: $GROFFER_OPT # landma rk '14: main_parse_MANOP T()'; main_parse_MANOPT( ) { func_check main_pa rse_MANOPT = 0 "$@"; l ocal _opt; local _list ; _list=''; if obj M ANOPT is_not_empty; then MANOPT="$(echo -n " ${MANOPT}" | \ sed -e 's/^'"${_SPACE}${_SP ACE}"'*//')"; fi; if obj MANOPT is_empty; th en eval "${return_ok }"; fi; # add argume nts in $MANOPT by mappin g them to groffer option s eval set -- "$(list_ from_cmdline _OPTS_MANOP T "${MANOPT}")"; until test "$#" -le 0 || is_e qual "$1" '--'; do _ opt="$1"; shift; case "${_opt}" in -7|--ascii) lis t_append _list '--ascii' ; ;; -a|-- all) list_append _list '--all'; ;; -c|--catman) do_nothing; shift; ;; -d|--debug) li st_append _list '--debug '; ;; -D|- -default) # undo all man options so far _list=''; ;; -e|--extensio n) list_append _ list '--extension'; shift; ;; -f|--whatis) list_append _list '--wh atis'; shift; ;; -h|--help ) do_nothing; shift; ;; -k|--apropos) # g roffer's --apropos takes an argument, but man's does not, so do_ nothing; shift; ;; -l|--lo cal-file) list_a ppend _list '--local-fil e'; ;; -L| --locale) list_a ppend _list '--locale' " $1"; shift; ;; -m|--system s) list_append _ list '--systems' "$1"; shift; ;; -M|--manpath) list_append _list ' --manpath' "$1"; shift; ;; -p|--preprocessor) do_nothing; shift; ;; -P|--pager|--tty-viewer) list_append _li st '--pager' "$1"; shift; ;; -r|--prompt) do_nothing; shif t; ;; -S|- -sections) list_ append _list '--sections ' "$1"; shift; ;; -t|--tro ff) do_nothing; shift; ; ; -T|--device) list_append _list ' -T' "$1"; shift; ;; -u|--u pdate) do_nothin g; shift; ;; -V|--version) do_nothing; ;; -w|--where |--location) lis t_append _list '--locati on'; ;; -Z |--ditroff) list _append _list '-Z' "$1"; shift; ;; # ignore all ot her options esac; done; # append the 2 l ists in $_list and $GROF FER_OPT to $GROFFER_OPT if obj GROFFER_OPT is_ empty; then GROFFER_ OPT="${_list}"; elif o bj _list is_not_empty; t hen GROFFER_OPT="${_ list} ${GROFFER_OPT}"; fi; eval "${return_ok }"; } # main_parse_MANOP T() ################## ######################## ######################## ###### # main_parse_args (<command_line_args>*) # # Parse arguments; pro cess options and filespe c parameters # # Argumen ts: pass the command lin e arguments unaltered. # Globals: # in: $_OPT S_* # out: $_OPT_*, $_ ADDOPTS, $_FILEARGS # la ndmark '15: main_parse_a rgs()'; main_parse_args( ) { func_check main_pa rse_args '>=' 0 "$@"; local _arg; local _cod e; local _dpi; local _longopt; local _mode ; local _opt; local _optchar; local _optar g; local _opts; loca l _string; eval set - - "${GROFFER_OPT}" '"$@" '; eval set -- "$(lis t_from_cmdline _OPTS_CMD LINE "$@")"; # By the c all of `eval', unnecessa ry quoting was removed. So the # positional she ll parameters ($1, $2, . ..) are now guaranteed t o # represent an option or an argument to the pr evious option, if any; # then a `--' argument fo r separating options and # parameters; followed by the filespec paramete rs if any. # Note, the existence of arguments t o options has already be en checked. # So a check for `$#' or `--' should not be done for argumen ts. until test "$#" - le 0 || is_equal "$1" '- -'; do _opt="$1"; # $_opt is fed into the option handler shift ; case "${_opt}" in -h|--help) usage; leave; ;; -Q|--sou rce) # output source co de (`Quellcode'). _OPT_MODE='source'; ;; -T|--devi ce|--troff-device) # dev ice; arg _OPT_DE VICE="$1"; _chec k_device_with_mode; shift; ;; -v|--version) version; leave ; ;; -V) _OPT_V='yes'; ;; -Z|--ditro ff|--intermediate-output ) # groff intermediate o utput _OPT_Z='ye s'; ;; -X| --X|--x) _OPT_MO DE=x; ;; - ?) # delete lead ing `-' _optchar ="$(echo -n "${_opt}" | sed -e 's/^.//')"; if list_has _OPTS_GRO FF_SHORT_NA "${_optchar} "; then list_append _ADDOPTS_G ROFF "${_opt}"; elif list_has _OPTS_GROF F_SHORT_ARG "${_optchar} "; then list_append _ADDOPTS_G ROFF "${_opt}" "$1"; shift; el se error "Unkn own option : \`$1'"; fi; ;; --all) _OPT_ ALL="yes"; ;; --apropos) # run `apropos' apropos_run " $1"; _code="$?"; clean_up; exit "${_code}"; ;; --apropos-d ata) # run `apropos' fo r data sections apropos _run "$1" | grep '^[^(]* ([457][^)]*)'; _ code="$?"; clean _up; exit "${_co de}"; ;; - -apropos-devel) # run ` apropos' for development sections apropos_run " $1" | grep '^[^(]*([239] [^)]*)'; _code=" $?"; clean_up; exit "${_code}"; ;; --aprop os-progs) # run `apropo s' for program sections apropos_run "$1" | grep '^[^(]*([168][^)]*)'; _code="$?"; clean_up; exi t "${_code}"; ;; --ascii) list_append _ADDOPTS_GRO FF '-mtty-char'; if obj _mode is_empty; then _mode='te xt'; fi; ;; --auto) # th e default automatic mode _mode=''; ;; --bd) # bo rder color for viewers, arg; _OPT_BD="$1 "; shift; ;; --bg|--backgr oud) # background color for viewers, arg; _OPT_BG="$1"; shift; ;; --bw) # border width for viewers, arg; _OPT_BW="$1"; shift; ;; --default) # reset vari ables to default reset; ;; --default-modes) # seq uence of modes in auto m ode; arg _OPT_DE FAULT_MODES="$1"; shift; ;; --debug) # buggy, on ly for development _OPT_DEBUG='yes'; ;; --display) # set X display, arg _OPT_DISPLAY="$1" ; shift; ;; --dvi) _OPT_MODE='dvi'; ;; --dvi-viewer) # viewer program for d vi mode; arg _OP T_VIEWER_DVI="$1"; shift; ;; --extension) # the e xtension for man pages, arg _OPT_EXTENSI ON="$1"; shift; ;; --fg|-- foreground) # foreground color for viewers, arg; _OPT_FG="$1"; shift; ;; --fn|--font) # s et font for viewers, arg ; _OPT_FN="$1"; shift; ; ; --geometry) # w indow geometry for viewe rs, arg; _OPT_GE OMETRY="$1"; shi ft; ;; --g roff) _OPT_MODE= 'groff'; ;; --html|--www) # displ ay with web browser _OPT_MODE=html; ;; --html-view er|--www-viewer) # viewe r program for html mode; arg _OPT_VIEWER _HTML="$1"; shif t; ;; --ic onic) # start viewers as icons _OPT_IC ONIC='yes'; ;; --locale) # set l anguage for man pages, a rg # argument is xx[_territory[.codeset[ @modifier]]] (ISO 639,.. .) _OPT_LANG="$1 "; shift; ;; --local-file) # force local files; s ame as `--no-man' _MAN_FORCE='no'; _MAN_ENABLE='no'; ;; --location |--where) # print file l ocations to stderr _OPT_LOCATION='yes'; ;; --man) # force all file param s to be man pages _MAN_ENABLE='yes'; _MAN_FORCE='yes'; ;; --manpat h) # specify search pat h for man pages, arg # arg is colon-sepa rated list of directorie s _OPT_MANPATH=" $1"; shift; ;; --mode) # display mode _a rg="$1"; shift; case "${_arg}" i n auto|'') # search mode automaticall y among default _mo de=''; ;; groff) # pass i nput to plain groff _mode='groff'; ;; html|www) # display wit h a web browser _mode='html'; ;; dvi) # display with xdvi vi ewer _mode=' dvi'; ;; pdf) # display with PDF viewer _mode='pdf'; ;; ps) # display with Postscrip t viewer _mo de='ps'; ;; text) # outp ut on terminal _mode='text'; ;; tty) # output on terminal _mode='tty'; ;; X|x) # output on X rof f viewer _mo de='x'; ;; Q|source) # di splay source code _mode="source"; ;; *) error "unknown mo de ${_arg}"; ;; esac; _OPT_MODE="${_mode}"; ;; --no-lo cation) # disable forme r call to `--location' _OPT_LOCATION='ye s'; ;; --n o-man) # disable searc h for man pages # the same as --local-fi le _MAN_FORCE="n o"; _MAN_ENABLE= "no"; ;; - -pager) # set paging p rogram for tty mode, arg _OPT_PAGER="$1" ; shift; ;; --pdf) _OPT_MODE='pdf'; ;; --pdf-viewer) # viewer program for p s mode; arg _OPT _VIEWER_PDF="$1"; shift; ;; --ps) _OPT_MOD E='ps'; ;; --ps-viewer) # viewer program for ps mode; arg _OPT_VIEWER_PS= "$1"; shift; ;; --resoluti on) # set resolution fo r X devices, arg _arg="$1"; shif t; case "${_arg} " in 75|75dpi) _dpi=75; ;; 1 00|100dpi) _ dpi=100; ;; *) error "only resoutions of 75 or 100 dpi are sup ported"; ;; esac; _O PT_RESOLUTION="${_dpi}"; ;; --rv) _OPT_RV='yes'; ;; --sectio ns) # specify sections for man pages, arg # arg is colon-separa ted list of section name s _OPT_SECTIONS= "$1"; shift; ;; --shell) # already done du ring the first run; so i gnore the argument shift; ;; --systems) # man pag es for different OS's, a rg # argument is a comma-separated list _OPT_SYSTEMS="$1 "; shift; ;; --text) # t ext mode without pager _OPT_MODE=text; ;; --title) # title for X viewers ; arg _OPT_TITLE ="$1"; shift; ;; --tty) # tty mode, text with pa ger _OPT_MODE=tt y; ;; --te xt-device|--tty-device) # device for tty mode; a rg _OPT_TEXT_DEV ICE="$1"; shift; ;; --what is) _OPT_WHATIS= 'yes'; ;; --xrm) # pass X resour ce string, arg; list_append _OPT_XRM "$1 "; shift; ;; --x-viewer|-- X-viewer) # viewer progr am for x mode; arg _OPT_VIEWER_X="$1"; shift; ;; *) error 'error on argument parsi ng : '"\`$*'"; ; ; esac; done; sh ift; # remove `--' arg ument if obj _DEBUG i s_not_yes; then if o bj _OPT_DEBUG is_yes; th en _DEBUG='yes'; fi; fi; # Remain ing arguments are file n ames (filespecs). # Sa ve them to list $_FILEAR GS if is_equal "$#" 0; then # use "-" for stan dard input set -- '- '; fi; _FILEARGS=''; list_append _FILEARGS "$@"; if list_has _FI LEARGS '-'; then sav e_stdin; fi; # $_FIL EARGS must be retrieved with `eval set -- "$_FIL EARGS"' eval "${return _ok}"; } # main_parse_ar gs() # Called from main _parse_args() because do uble `case' is not possi ble. # Globals: $_OPT_DE VICE, $_OPT_MODE _check_ device_with_mode() { f unc_check _check_device_ with_mode = 0 "$@"; ca se "${_OPT_DEVICE}" in dvi) _OPT_MODE= dvi; eval "${retur n_ok}"; ;; htm l) _OPT_MODE=html; eval "${return_ok }"; ;; lbp|lj4 ) _OPT_MODE=groff; eval "${return_ok }"; ;; ps) _OPT_MODE=ps; e val "${return_ok}"; ;; ascii|cp1047|la tin1|utf8) if obj _OPT_MODE is_not_equal t ext; then _OPT_M ODE=tty; # default text mode fi; ev al "${return_ok}"; ;; X*) _OPT_M ODE=x; eval "${ret urn_ok}"; ;; * ) # unknown device, g o to groff mode _O PT_MODE=groff; eva l "${return_ok}"; ;; esac; eval "${ret urn_error}"; } ####### ######################## ######################## ################# # main _set_mode () # # Determi ne the display mode. # # Globals: # in: $DISP LAY, $_OPT_MODE, $_OPT_D EVICE # out: $_DISPLAY _MODE # # _get_first_pr og (<proglist>) # # Retr ieve first argument that represents an existing program in $PATH. # Loca l function for main_set_ mode(). # # Arguments: 1 ; a comma-separated list of commands (with optio ns), # lik e $_VIEWER_*. # # Return : `1' if none found, ` 0' if found. # Output : the argument that succe ded. # landmark '16: mai n_set_mode()'; main_set_ mode() { func_check ma in_set_mode = 0 "$@"; local m; local _modes; local _viewer; loca l _viewers; # handle apropos if obj _OPT_AP ROPOS is_not_empty; then apropos "${_OPT_APR OPOS}"; _code="$?"; clean_up; exit " ${_code}"; fi; if ob j _OPT_APROPOS_DATA is_n ot_empty; then aprop os "$@" | grep '^[^(]*([ 457])'; _code="$?"; clean_up; exit " ${_code}"; fi; if ob j _OPT_APROPOS_DEVEL is_ not_empty; then apro pos "$@" | grep '^[^(]*( [239])'; _code="$?"; clean_up; exit "${_code}"; fi; if o bj _OPT_APROPOS_PROGS is _not_empty; then apr opos "$@" | grep '^[^(]* ([168])'; _code="$?" ; clean_up; exit "${_code}"; fi; # set display if obj _OP T_DISPLAY is_not_empty; then DISPLAY="${_OPT _DISPLAY}"; fi; if obj _OPT_V is_yes; then _DISPLAY_MODE='groff '; list_append _ADDO PTS_GROFF '-V'; fi; if obj _OPT_Z is_yes; th en _DISPLAY_MODE='gr off'; list_append _A DDOPTS_GROFF '-Z'; fi; if obj _OPT_MODE is_e qual 'groff'; then _ DISPLAY_MODE='groff'; fi; if obj _DISPLAY_MO DE is_equal 'groff'; the n eval "${return_ok} "; fi; if obj _OPT_ MODE is_equal 'source'; then _DISPLAY_MODE=' source'; eval "${ret urn_ok}"; fi; case "${_OPT_MODE}" in '' ) # automatic mode case "${_OPT_DEVICE} " in X*) if obj DISPLAY is_emp ty; then err or "no X display found f or device ${_OPT_DEVICE} "; fi; _DISPLAY_MODE='x'; eval "${return_o k}"; ;; ascii|cp1047|latin1|ut f8) if obj _DI SPLAY_MODE is_not_equal 'text'; then _DISPLAY_MODE='tty'; fi; ev al "${return_ok}"; ;; esac; if obj DISPLAY is_empt y; then _DISPLAY _MODE='tty'; eva l "${return_ok}"; fi; if obj _OPT_D EFAULT_MODES is_empty; t hen _modes="${_D EFAULT_MODES}"; el se _modes="${_OP T_DEFAULT_MODES}"; fi; ;; text) _DISPLAY_MODE='tex t'; eval "${return _ok}"; ;; tty) _DISPLAY_MODE='tt y'; eval "${return _ok}"; ;; *) # display mode was giv en if obj DISPLAY is_empty; then e rror "you must be in X W indow for ${_OPT_MODE} m ode."; fi; _ modes="${_OPT_MODE}"; ;; esac; # only viewer modes are left eval set -- "$(list_fro m_split "${_modes}" ',') "; while test "$#" -gt 0; do m="$1"; s hift; case "$m" in text) _DISP LAY_MODE='text'; eval "${return_ok}"; ;; tty) _DISPLAY_MODE='tty'; eval "${return_ ok}"; ;; x ) if obj _OPT_VI EWER_X is_not_empty; the n _viewers="${ _OPT_VIEWER_X}"; else _viewers ="${_VIEWER_X}"; fi; _viewer="$( _get_first_prog "${_view ers}")"; if is_n ot_equal "$?" 0; then continue; fi; _DISPLAY_P ROG="${_viewer}"; _DISPLAY_MODE='x'; eval "${return_ok}" ; ;; dvi) if obj _OPT_VIEW ER_DVI is_not_empty; the n _viewers="${ _OPT_VIEWER_DVI}"; else _viewe rs="${_VIEWER_DVI}"; fi; _viewer ="$(_get_first_prog "${_ viewers}")"; if is_not_equal "$?" 0; the n continue; fi; _DISPL AY_PROG="${_viewer}"; _DISPLAY_MODE="dvi "; eval "${retur n_ok}"; ;; pdf) if obj _OP T_VIEWER_PDF is_not_empt y; then _viewe rs="${_OPT_VIEWER_PDF}"; else _viewers="${_VIEWER_PDF} "; fi; _ viewer="$(_get_first_pro g "${_viewers}")"; if is_not_equal "$?" 0; then contin ue; fi; _DISPLAY_PROG="${_viewer }"; _DISPLAY_MOD E="pdf"; eval "$ {return_ok}"; ;; ps) if ob j _OPT_VIEWER_PS is_not_ empty; then _v iewers="${_OPT_VIEWER_PS }"; else _viewers="${_VIEWER_P S}"; fi; _viewer="$(_get_first_p rog "${_viewers}")"; if is_not_equal "$? " 0; then cont inue; fi; _DISPLAY_PROG="${_view er}"; _DISPLAY_M ODE="ps"; eval " ${return_ok}"; ; ; html) if obj _OPT_VIEWER_HTML is _not_empty; then _viewers="${_OPT_VIEW ER_HTML}"; else _viewers="${_V IEWER_HTML}"; fi ; _viewer="$(_ge t_first_prog "${_viewers }")"; if is_not_ equal "$?" 0; then continue; f i; _DISPLAY_PROG ="${_viewer}"; _ DISPLAY_MODE=html; eval "${return_ok}"; ;; esac; d one; error "no suitabl e display mode found."; } _get_first_prog() { local i; if is_equal "$#" 0; then error " _get_first_prog() needs 1 argument."; fi; if is_empty "$1"; then return "${_BAD}"; fi; eval set -- "$(list_f rom_split "$1" ',')"; for i in "$@"; do if obj i is_empty; then continue; fi; if is_prog "$(get_firs t_essential $i)"; then echo -n "$i"; return "${_GOOD}"; fi; done; return "${ _BAD}"; } # main_set_mod e() ################## ######################## ######################## ##### # main_do_fileargs () # # Process filespec arguments in $_FILEARGS . # # Globals: # in: $ _FILEARGS (process with `eval set -- "$_FILEARGS "') # landmark '17: main _do_fileargs()'; main_do _fileargs() { func_che ck main_do_fileargs = 0 "$@"; local _exitcode; local _filespec; lo cal _name; _exitcode=" ${_BAD}"; eval set -- "${_FILEARGS}"; unset _FILEARGS; # temporary storage of all input to $_TMP_CAT while test "$#" -ge 2; do # tes t for `s name' arguments , with `s' a 1-char stan dard section _filesp ec="$1"; shift; case "${_filespec}" in '') continu e; ;; '-') if register_fil e '-'; then _e xitcode="${_GOOD}"; fi; continue ; ;; ?) if list_has_not _M AN_AUTO_SEC "${_filespec }"; then if do _filearg "${_filespec}"; then _exitc ode="${_GOOD}"; fi; continue ; fi; _n ame="$1"; case " ${_name}" in * /*|man:*|*\(*\)|*."${_fi lespec}") if do_filearg "${_filespec }"; then _ exitcode="${_GOOD}"; fi; continue; ; ; esac; if do_filearg "man:${_na me}(${_filespec})"; then _exitcode="${ _GOOD}"; shift ; continue; else if do_filearg "${_filespec} "; then _exi tcode="${_GOOD}"; fi; contin ue; fi; ;; *) if d o_filearg "${_filespec}" ; then _exitco de="${_GOOD}"; f i; continue; ;; esac; done ; # end of `s name' t est while test "$#" -g t 0; do _filespec="$ 1"; shift; if do _filearg "${_filespec}"; then _exitcode="$ {_GOOD}"; fi; done ; rm -f "${_TMP_STDIN} "; if is_equal "${_exi tcode}" "${_BAD}"; then eval "${return_bad}" ; fi; eval "${return _ok}"; } # main_do_filea rgs() ################ ######################## ######################## ######## # main_set_reso urces () # # Determine o ptions for setting X res ources with $_DISPLAY_PR OG. # # Globals: $_DISP LAY_PROG, $_OUTPUT_FILE_ NAME # landmark '18: mai n_set_resources()'; main _set_resources() { fun c_check main_set_resourc es = 0 "$@"; local _pr og; # viewer program local _rl; # resource list local n; _titl e="$(get_first_essential \ "${_O PT_TITLE}" "${_REGISTERE D_TITLE}")"; _OUTPUT_F ILE_NAME=''; set -- ${ _title}; until is_equa l "$#" 0; do n="$1" ; case "$n" in ' ') continue; ;; ,*) n="$(e cho -n "$1" | sed -e 's/ ^,,*//')"; ;; esac if obj n is_emp ty; then continue; fi; if obj _OUT PUT_FILE_NAME is_not_emp ty; then _OUTPUT_F ILE_NAME="${_OUTPUT_FILE _NAME},"; fi; _O UTPUT_FILE_NAME="${_OUTP UT_FILE_NAME}$n"; sh ift; done; case "${_ OUTPUT_FILE_NAME}" in '') _OUTPUT_FILE_NAM E='-'; ;; ,*) error "$_OUTPUT_FILE_NAM E starts with a comma."; ;; esac; _OUTPU T_FILE_NAME="${_TMP_DIR} /${_OUTPUT_FILE_NAME}"; if obj _DISPLAY_PROG is_empty; then # for exa mple, for groff mode _DISPLAY_ARGS=''; e val "${return_ok}"; fi ; set -- ${_DISPLAY_P ROG}; _prog="$(base_na me "$1")"; _rl=''; i f obj _OPT_BD is_not_emp ty; then case "${_pr og}" in ghostview| gv|gxditview|xditview|xd vi) list_append _rl '-bd' "${_OPT_BD}"; ;; esac; f i; if obj _OPT_BG is_n ot_empty; then case "${_prog}" in ghos tview|gv|gxditview|xditv iew|xdvi) list_a ppend _rl '-bg' "${_OPT_ BG}"; ;; x pdf) list_append _rl '-papercolor' "${_O PT_BG}"; ;; esac; fi; if obj _OP T_BW is_not_empty; then case "${_prog}" in ghostview|gv|gxditv iew|xditview|xdvi) _list_append _rl '-bw ' "${_OPT_BW}"; ;; esac; fi; if obj _OPT_FG is_not_empty ; then case "${_prog }" in ghostview|gv |gxditview|xditview|xdvi ) list_append _r l '-fg' "${_OPT_FG}"; ;; esac; fi; if is_not_empty "${_O PT_FN}"; then case " ${_prog}" in ghost view|gv|gxditview|xditvi ew|xdvi) list_ap pend _rl '-fn' "${_OPT_F N}"; ;; esac ; fi; if is_not_empt y "${_OPT_GEOMETRY}"; th en case "${_prog}" i n ghostview|gv|gxd itview|xditview|xdvi|xpd f) list_append _ rl '-geometry' "${_OPT_G EOMETRY}"; ;; esac; fi; if is_em pty "${_OPT_RESOLUTION}" ; then _OPT_RESOLUTI ON="${_DEFAULT_RESOLUTIO N}"; case "${_prog}" in gxditview|xdit view) list_appen d _rl '-resolution' "${_ DEFAULT_RESOLUTION}"; ;; xpdf) case "${_DEFAULT_RE SOLUTION}" in 75) # 72dpi is '100' lis t_append _rl '-z' '104'; ;; 100) list_ append _rl '-z' '139'; ;; es ac; ;; esac; else case "${_pro g}" in ghostview|g v|gxditview|xditview|xdv i) list_append _ rl '-resolution' "${_OPT _RESOLUTION}"; ; ; xpdf) ca se "${_OPT_RESOLUTION}" in 75) list_append _rl '-z ' '104'; # ' 100' corresponds to 72dp i ;; 100) list _append _rl '-z' '139'; ;; e sac; ;; esac ; fi; if is_yes "${_ OPT_ICONIC}"; then c ase "${_prog}" in ghostview|gv|gxditview|x ditview|xdvi) li st_append _rl '-iconic'; ;; esac; fi; if is_yes "${_OPT_ RV}"; then case "${_ prog}" in ghostvie w|gv|gxditview|xditview| xdvi) list_appen d _rl '-rv'; ;; esac; fi; if is_ not_empty "${_OPT_XRM}"; then case "${_prog} " in ghostview|gv| gxditview|xditview|xdvi| xpdf) eval set - - "{$_OPT_XRM}"; for i in "$@"; do list_append _rl '-x rm' "$i"; done; ;; esac; f i; if is_not_empty "${ _title}"; then case "${_prog}" in gxdi tview|xditview) list_append _rl '-title' "${_title}"; ;; esac; fi; _DISP LAY_ARGS="${_rl}"; e val "${return_ok}"; } # main_set_resources ### ######################## ######################## ##################### # main_display () # # Do t he actual display of the whole thing. # # Global s: # in: $_DISPLAY_MOD E, $_OPT_DEVICE, # $_ADDOPTS_GROFF, $_ADDO PTS_POST, $_ADDOPTS_X, # $_REGISTERED_TITL E, $_TMP_CAT, # $_ OPT_PAGER $PAGER $_MANOP T_PAGER # landmark '19: main_display()'; main_di splay() { func_check m ain_display = 0 "$@"; local p; local _addopt s; local _device; lo cal _groggy; local _mo defile; local _options ; local _pager; loca l _title; export _addo pts; export _groggy; export _modefile; if obj _TMP_CAT is_non_emp ty_file; then _modef ile="${_OUTPUT_FILE_NAME }"; else clean_up; eval "${return_ok}" ; fi; case "${_DISPL AY_MODE}" in groff) _ADDOPTS_GROFF="${ _ADDOPTS_GROFF} ${_ADDOP TS_POST}"; if obj _OPT_DEVICE is_not_empty ; then _ADDOPTS_ GROFF="${_ADDOPTS_GROFF} -T${_OPT_DEVICE}"; fi; _groggy="$(t mp_cat | eval grog "${_o ptions}")"; trap_c lean; # start a ne w shell program to get a nother process ID. sh -c ' set -e; test -f "${_mod efile}" && rm -f "${_mod efile}"; mv "${_ TMP_CAT}" "${_modefile}" ; cat "${_modefi le}" | \ ( clean_up() { if test -d "${_TMP_DIR}"; then rm -f "${_T MP_DIR}"/* || true; rmdir "${_TMP_ DIR}"; fi; } tra p clean_up 0 2>/dev/null || true; eval "${_groggy}" "${_ADDOPT S_GROFF}"; ) &' ;; text|tty) case "${_OPT_DEVICE }" in '') _device="$(get_first _essential \ "${_OPT_TEXT_D EVICE}" "${_DEFAULT_TTY_ DEVICE}")"; ;; ascii|cp1047|la tin1|utf8) _de vice="${_OPT_DEVICE}"; ;; *) warning \ "wrong device for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}"; ;; esac; _addopts="${_ADDOPTS_GRO FF} ${_ADDOPTS_POST}"; _groggy="$(tmp_cat | grog -T${_device})"; if obj _DISPLAY_MOD E is_equal 'text'; then tmp_cat | eval " ${_groggy}" "${_addopts} "; else _p ager=''; for p i n "${_OPT_PAGER}" "${PAG ER}" "${_MANOPT_PAGER}" \ 'less -r -R' 'more' 'pager' ' cat'; do if is_p rog $p; then # no "" f or is_prog() allows args for $p _pager ="$p"; break; fi; done ; if obj _pager is_empty; then error 'no pager program found for tty mode'; fi; tmp_ca t | eval "${_groggy}" "$ {_addopts}" | \ eval "${_pager }"; fi; clea n_up; ;; #### viewer modes dvi) case "${_OPT_DEVIC E}" in ''|dvi) d o_nothing; ;; *) warning \ "wrong device f or ${_DISPLAY_MODE} mode : ${_OPT_DEVICE}"; ;; esac; _groggy="$(tmp_cat | g rog -Tdvi)"; _do_d isplay; ;; htm l) case "${_OPT_DE VICE}" in ''|htm l) do_nothing; ;; *) warning \ "wrong devi ce for ${_DISPLAY_MODE} mode: ${_OPT_DEVICE}"; ;; esac; _modefile="${_mode file}".html _grogg y="$(tmp_cat | grog -Tht ml)"; _do_display; ;; pdf) case "${_OPT_DEVICE}" i n ''|ps) do_nothing; ;; *) warning \ " wrong device for ${_DISP LAY_MODE} mode: ${_OPT_D EVICE}"; ;; esac; _modefil e="${_modefile}" _ groggy="$(tmp_cat | grog -Tps)"; trap_clea n; # start a new s hell program to get anot her process ID. sh -c ' set -e; _psfile="${_modefi le}.ps"; _modefi le="${_modefile}.pdf"; test -f "${_psfil e}" && rm -f "${_psfile} "; test -f "${_m odefile}" && rm -f "${_m odefile}"; cat " ${_TMP_CAT}" | \ eval "${_groggy}" "${ _ADDOPTS_GROFF}" > "${_p sfile}"; gs -q - dNOPAUSE -dBATCH -sDEVIC E=pdfwrite \ -sOutputFile="${_modefil e}" -c save pop -f "${_p sfile}"; test -f "${_psfile}" && rm -f " ${_psfile}"; tes t -f "${_TMP_CAT}" && rm -f "${_TMP_CAT}"; ( clean_up( ) { rm -f "$ {_modefile}"; if test -d "${_TMP_DIR }"; then r m -f "${_TMP_DIR}"/* || true; rmdi r "${_TMP_DIR}"; fi; } trap clean_up 0 2 >/dev/null || true; eval "${_DISPLAY_P ROG}" ${_DISPLAY_ARGS} " ${_modefile}"; ) &' ;; ps) case "${_OPT_DEVICE}" in ''|ps) do_nothing; ;; *) warning \ "wrong device for ${_DI SPLAY_MODE} mode: ${_OPT _DEVICE}"; ;; esac; _grogg y="$(tmp_cat | grog -Tps )"; _do_display; ;; source) tmp_cat; clean_u p; ;; x) case "${_OPT_DEVICE}" i n '') _groggy="$(tmp_cat | gro g -Z)"; ;; X*|ps) _g roggy="$(tmp_cat | grog -T"${_OPT_DEVICE}" -Z)"; ;; *) warning \ "wrong device f or ${_DISPLAY_MODE} mode : ${_OPT_DEVICE}"; _groggy="$(tmp_cat | grog -Z)"; ; ; esac; _do_ display; ;; *) error "unknown mo de \`${_DISPLAY_MODE}'"; ;; esac; eval "${return_ok}"; } # mai n_display() _do_display () { func_check _do_di splay = 0 "$@"; trap_c lean; # start a new sh ell program for another process ID and better # cleaning-up of the tem porary files. sh -c ' set -e; test -f "${_modefile}" && rm -f "${_modefile}"; cat "${_TMP_CAT}" | \ eval "${_groggy}" "${_AD DOPTS_GROFF}" > "${_mode file}"; rm -f "${_TM P_CAT}"; ( cle an_up() { if tes t -d "${_TMP_DIR}"; then rm -f "${_TMP _DIR}"/* || true; rmdir "${_TMP_DIR}"; fi; } trap clean_up 0 2>/de v/null || true; ev al "${_DISPLAY_PROG}" ${ _DISPLAY_ARGS} "${_modef ile}"; ) &' } #### ######################## ######################## #################### # m ain (<command_line_args> *) # # The main function for groffer. # # Argume nts: # main() { func_c heck main '>=' 0 "$@"; # Do not change the seq uence of the following f unctions! main_init; main_parse_MANOPT; ma in_parse_args "$@"; ma in_set_mode; main_do_f ileargs; main_set_reso urces; main_display; eval "${return_ok}"; } landmark '20: end of fu nction definitions'; ## ######################## ######################## ###################### main "$@"; |