diff --git a/NileCAM25_CUXVR/Makefile b/NileCAM25_CUXVR/Makefile new file mode 100644 index 000000000..ea213abe1 --- /dev/null +++ b/NileCAM25_CUXVR/Makefile @@ -0,0 +1,10 @@ +ifneq (,$(filter $(CONFIG_VIDEO_ECAM),y m)) + ccflags-y += -Wno-unused-variable -I$(srctree)/drivers/media/platform/tegra/ + obj-m += ar0234.o + ar0234-objs := ar0234_common.o serdes.o pca9685.o +endif + +ar0234: + make -C $(KERNEL_PATH) M=$(PWD) modules +clean: + make -C $(KERNEL_PATH) M=$(PWD) clean diff --git a/NileCAM25_CUXVR/NileCAM25_CUXVR.txt b/NileCAM25_CUXVR/NileCAM25_CUXVR.txt new file mode 100644 index 000000000..b982bb6e3 --- /dev/null +++ b/NileCAM25_CUXVR/NileCAM25_CUXVR.txt @@ -0,0 +1,2224 @@ +":020000040800F2\n" +":40040000203200204D050008494000087F28000800000000000000000000000000000000000000000000000000000000D542000800000000000000000B05000849440008E4\n" +":40044000694B00085F0500085F050008410900085F0500085F0500085F050008FD080008000000005F0500085F0500085F0500085F0500085F0500085F0500083945000837\n" +":40048000494500085F0500085F050008000000005F050008A52800085F050008812800085F050008C54200085F0500085F050008594B00085F050008000000000000000005\n" +":4004C0000348854600F0FAF8004800477D72000820320020084B19680868203080F30988022080F31488BFF36F8F3FBCAE4608BC04BC62B6184700000C000020EFF310800B\n" +":4005000072B6704780F310887047EFF309800E4B1A6820381060F0C044464D4656465F46F0C008B572B607F035FF62B60CBC116808681030F0C8A046A946B246BB4680F33C\n" +":4005400009882038F0C818470C0000200448804704480047FEE7FEE7FEE7FEE7FEE7FEE7E5440008C104000830B50B46014600202022012409E00D46D5409D4205D31D46DE\n" +":400580009540491B2546954040191546521E002DF1DC30BD70B500242546002801DA01244042002901DA01254942FFF7DDFFAC4200D04042002C00D0494270BDF0B51FB466\n" +":4005C0000646002082B005464024019100901BE0019922460F46304600F05EF8049A059B801A994110D310461946224600F044F8361A8F410197224601200021009F00F0AF\n" +":400600003BF838184D4100902046641E0028DFDC019B00982946324607B0F0BD03460B439B0703D009E008C9121F08C0042AFAD203E00B780370401C491C521EF9D270478A\n" +":40064000D2B201E00270401C491EFBD270470022F6E710B513460A4604461946FFF7F0FF204610BD0321001D401E037812021A43491EF9D51046704710B5202A04DB01462C\n" +":40068000203A9140002010BD914020239C1A0346E3401943904010BD10B5202A04DB0846203AD040002110BD0B46D340D0402024A21A91400843194610BD0000064C01252B\n" +":4006C000064E05E0E36807CC2B430C3C98471034B442F7D3FFF7F8FE002A0208202A020810B5364CE069000267D4A069C007FCD16368334A334934A004F03EFA6068C007D9\n" +":4007000004D03C48E0603C48E06005E02C4A2D49921D3AA004F030FA6368294A29490A3241A004F029FAA069C007FCD16368244A2449143224A004F01FFA6068C00704D044\n" +":40074000292252011F4944A00BE06068400704D54A4860614A48606105E0194A19491C3248A004F009FA6368154A164922322EA004F002FA4E49042003F098FC104A1149AE\n" +":4007800026324CA004F0F8F9E2690120C005E16902434DA004F0F0F9094A0A49283245A004F0EAF960680121890408436060044A04492C323FA004F0DFF910BD0020024075\n" +":4007C000010500000B8D0008202D2D2D2025732825642920464C4153482D3E50454352203D2030782530387820202D2D2D200A0D00000000EFCDAB8905040302202D2D2D2A\n" +":40080000202573282564292050454B45595220556E6C6F636B656420416C7265616479202D2D2D200A0D0000202D2D2D20257328256429204E6F772C20464C4153482D3E6F\n" +":4008400050454352203D20307825303878202D2D2D200A0D00000000202D2D2D202573282564292050454C4F434B204C6F636B6564202D2D2D200A0D00000000C8D9EAFB59\n" +":4008800027262524202D2D2D20257328256429204F50544C4F434B20416C726561647920556E6C6F636B6564202D2D2D200A0D00F0800000202D2D2D20257328256429204F\n" +":4008C0002D2D2D200A0D00002056616C20416674657220556E6C6F636B204F7074696F6E204279746573202E2E2E2030782530387820307825303878200A0D0010B5012038\n" +":40090000800200F0FBF910BD04A004F035F97D24E400204606F066FDFBE7000020556E7265636F76657261626C65204572726F72204F636375726564202121200A0D000083\n" +":4009400010B500F02DF910BD10B5084900224A6107494B684C1523434B604B68082423434B60C009C001026010BD0000D80000200020024010B5214A00219069C3052048FA\n" +":4009800004D54169022319434161911593699B0505D543690124234343616302194393695B0505D54369082423434361E301194393691B0505D54369042423434361630248\n" +":4009C000194393699B0405D543691024234343616302194393699B0304D5446920231C43446119439369DB0305D54369402423434361A0020143916110BD000000200240E3\n" +":400A0000D800002008B517A004F0B6F800F042F91C48416842151143416041680822114341600021130619608169C907FCD18169890714D50221816141684122D200914308\n" +":400A4000416018680090104A104911A004F094F81EA004F091F800F011F903F019FBFFF753FF000020466C6173682045726173652042414E4B312053746172742021212022\n" +":400A80000A0D000000200240BB040000EC8C0008202D2D2D20204166746572202573282564292041742041646472657373203078253038782056616C7565203D2030782524\n" +":400AC000303878202D2D2D200A0D000020466C6173682045726173652042414E4B312053756363657373202121200A0D0000000070B50024024620325179022903D004214B\n" +":400B0000C16301243CE001680B680E25AB430B6001680B685B085B000B601A4B0168994201D1012121E0174B1433994201D110211BE0144B2833994201D1891515E0114B6D\n" +":400B40003C33994201D189140FE00E4B5033994202D10121090408E00A4B6433994202D10121090501E001210906064B083B59600121517100211171816B002900D08847C8\n" +":400B8000204670BD0800024031B500F095F9044600F092F90099001B8842F9D338BD7047F8B5344CA0690026C005334D002811DBA06980050ED4A06940050BD4A0690005D9\n" +":400BC00008D4A069800405D4A069800302D4A069C00309D5287801282BD0AF68FFF7CAFE384600F055F82E70A069800712D50220A061287800280DD0287801281ED06068F7\n" +":400C0000082188436060A868FFF7C9FF0020C043A8602E70287800280AD160684121C90088436060606803210904884360602E74F8BDEF680020C043E860CFE76868401EC7\n" +":400C40006860686800280DD0E868FFF7A8FFE8688030E86061680122520291436160FFF773FED7E70020C043E8602E70FFF797FFD0E7000000200240D8000020034841680E\n" +":400C800002221143416000207047000000200240704700000948416889070CD54168C90703D00749C1600749C160074901610749016100207047012070470000002002401D\n" +":400CC000EFCDAB8905040302BFAE9D8C1615141310B501218902884204D1034A034904A003F04AFF10BD000027040000D58C00082025732028256429200A0D0010B5044928\n" +":400D00004A69024202D04861FFF7E2FF10BD000000040140F8B500230124A7E027469F403A4070D04D68022D01D0122D14D1DD08AD002D1800952D6A5E07AC46F50E0F266B\n" +":400D4000AE46AE406546B543AC460E697546AE4065462E43009D2E624D68012D05D0022D03D0112D01D0122D16D185680326AC465D00AE46AE406546B543AC46CE687546D7\n" +":400D8000AE4065462E43866046680D79BE43ED06ED0F9D403543456006685F000325BD40AE46AE430D79B446AE07B60FBE4065462E430660C6687546AE438D68BD40354390\n" +":400DC000C5604D68ED0050D52B4D6E6B26436E639E082A4DB6007519AC46AD689E07360F0F27B740BD4305273F07B84201D100271AE0234FB84201D1012715E0214FB842D9\n" +":400E000002D1022710E030E01F4FB84201D103270AE01E4FB84201D1042705E01C4FB84201D1052700E00627B7402F436546AF60184D2E684F689643FF0300D516432E6043\n" +":400E40006E684F689643BF0300D516436E60AE684F689643FF0200D51643AE60EE684F689643BF0200D51643EE605B1C0A681546DD4000D052E7F8BD001002400000014096\n" +":400E80000004005000080050000C005000100050001C0050000401400069084000D00120704742694A4042617047002A01D08161704781627047000001480068704700009B\n" +":400EC0000400002070B5024640325378202B1CD11378012B19D00123137024245470046825689D432560046825681E03B5432560046825680D432560006801681943016048\n" +":400F0000202050700020107070BD022070BD70B5024640325378202B1BD11378012B18D0012414702423537003681D68A5431D6005682B680F263602B343090219432960BA\n" +":400F40000068016821430160202050700020107070BD022070BD000010B5034A034904A003F00AFE10BD000021040000BB8C00082025732028256429200A0D0010B5034A86\n" +":400F8000034904A003F0F8FD10BD00000D040000578C00082025732028256429200A0D0070B503689A691968D40507D50C0605D5446C01252C4344642C02DC61530508D565\n" +":400FC0000B0606D5436C082423434364E3010468E361920508D5090606D5416C02221143416411020268D161416C0B22114202D0416C01F02DFD70BD026891691268436B32\n" +":40100000002B00D01847704770B5054600681449144C884213D1284600F054F80346124A124913A003F0A8FD6078042803D0A07860700420A07003F00FF90020686418492C\n" +":40104000286888420BD1284600F03CF8064A03460F32064913A003F08FFD0320207070BD0054004060000020F6030000418C000820257328256429202D2048414C5F4932DD\n" +":40108000435F4572726F7243616C6C6261636B20202D20307825303878200A0D0000000000780040202573202825642920457272436F6465203D20307825303878200A0D77\n" +":4010C00000000000406C704770B5040006D02546403568780026002802D005E0012070BD2E70204600F06EF924206870206801684908490001600F216068090688432168BD\n" +":40110000086121688A680120C00382438A60E1680129A16808D021229202114322689160E168022902D005E00143F7E701212268C902516021684A680F4B1A434A602168A4\n" +":40114000CA688243CA60616920690843A169090208432168C860216AE069084321680860206801680122114301606664202068702663AE70002070BD0080000210B5034A5C\n" +":40118000034904A003F0F8FC10BD0000120400006C8C00082025732028256429200A0D0000680649884205D105480178092902D00321017070470B21FBE700000078004059\n" +":4011C0009000002000680649884205D105480178052902D00321017070470721FBE700000078004090000020F8B50546044640356878202830D120688069C04300042BD50C\n" +":401200002878012828D001202870222068701020A87000266664626263851048E06210486063608DFF2804D9FF20012320851B0603E0608D012320855B0609208002009052\n" +":40124000208DC2B2204601F09BFF2E700221204601F07EFB0020F8BD0220F8BD0000FFFFD12E0008FFB5054604464035687881B020287ED1287801287BD001202870FFF7F1\n" +":401280001BFE0746012200901923D103204601F089FF00283FD1212068701020A8700026666403986062049860856663618D01204003FF2903D9FF222285009034E0618D46\n" +":4012C0002185009036E02046029901F059FF36E001F0B3FF002803D0606C042847D01AE0606A411C6162017820688162608D401E6085208D401E0004000C20851FD1608D00\n" +":4013000000281CD000970022802120460A9B01F049FF002802D0032005B0F0BD608DFF2805D9FF222285009601231B06CBE7608D20850096208D0123C2B25B06C3E7608DD0\n" +":401340000A9900283A462046C2D101F04FFF0028C2D121682020C86121684A68064B1A404A606870AE702E700020D5E701E00120D2E70220D0E7000000E800FE10B5034AB1\n" +":40138000034904A003F0F8FB10BD00001C040000A18C00082025732028256429200A0D0010B5034A034904A003F0E6FB10BD000017040000878C00082025732028256429C1\n" +":4013C000200A0D00F0B5234A0168122403200125214E85B0914215D1C02100910021029103900194049569461C48FFF793FCB06B69050843B06300220321172000F058F93B\n" +":40140000172022E0164A914221D189156A4632C20320072781C2052069460007FFF77AFC1020694631C103200390694604970B48FFF770FCB06B012189070843B06300225E\n" +":401440000321152000F034F9152000F027F905B0F0BD00000054004000100240000400500078004038B500680D49884213D10D4CA3780A2B10D0A08900900B4A0B490C48C5\n" +":4014800003F07AFB6078042803D0A07860700420A07002F0E1FE38BD63700C20A07038BD0054004060000020D3030000258C00088427020838B500680E49884214D10E4CFA\n" +":4014C000A378062B11D0A089ED22009092000B490B4803F051FB6078042803D0A07860700420A07002F0B8FE38BD63700820A07038BD00000054004060000020098C00083E\n" +":40150000EC270208F8B5034640335C78202C1ED11C78012C1BD001241C7022245C7020249C700024446405686E680127FF03BE436E6041624285418D01850649C1620649D0\n" +":4015400041631C701F2101F003FA0020F8BD0220F8BD00000000FFFF61300008F8B5034640335C78202C1ED11C78012C1BD001241C7021245C7020249C700024446405685B\n" +":401580006E680127FF03BE436E6041624285418D01850649C162064941631C70172101F0D7F90020F8BD0220F8BD00000000FFFF6130000802480168491C01607047000041\n" +":4015C0000400002010B506480168402211430160002000F007F800F03DF8002010BD00000020024000B5014687B00022102000F05FF8102000F052F81148816B02221143BE\n" +":40160000816305A9684600F071FA00F095FA0D49FEF7AAFF0D490C4A0A600D4A401ECA604860002008618860084600F0EBFD002802D0012007B000BD044800F0FEFDF9E7C2\n" +":401640000010024040420F00000400400C190020E703000010B51048416B012211434163816B02041143816300221146501F00F01FF803210022481F00F01AF80321002222\n" +":40168000081F00F015F803210022084600F010F8032000F003F810BD00100240C106C90E01208840014908607047000000E100E010B502F0CBFC10BDF8B54E49074601259A\n" +":4016C0000020ED034A4B4B4A4031082F7BD00EDC012F48D0022F60D0042F22D1CC680326B602344065D07F02BC424ED064E0102F77D00126032436042404202F09D0FF3FC9\n" +":40170000012F0ED1C968214053D07400A1423CD06BE00B6909692140B14203D199052EE02846F8BD01256D04A94203D19907F8D53148F8BDA142FCD111688903F9D511686D\n" +":4017400003200005014001200005091A09D0091A05D0814201D12948F8BD2948F8BD2948F8BD2948F8BDCC68A407A40F0AD0022C0BD0012C0ED0032CF4D10969890500291C\n" +":40178000CEDBF8BD00F0E8F9F8BD11684907FBD51846F8BD00F0F0F9F8BDCC680C26344007D0082CF1D0042CF4D00C2CE5D0F8BD09E000F0C1F9FAE7012292029442E9D015\n" +":4017C000B442DAD0F3E7C968032424032140F0D001256D036C10A942D7D0A142DAD0E6E7FFE7916B4902E4D4E1E7B142D2D0DEE70024F400001002408890000020A1070080\n" +":4018000000093D0040420F0080841E00F8B504460078594D800672D5574E0027403EB06BC00004D4B06BA9050843B063012753480168C90511D40168821511430160FFF71F\n" +":401840003BFB009005E0FFF737FB0099401A642837D84A480068C005F5D532680321090560680A400140914208D08103890F032904D13168890301D50120F8BD2A6903210F\n" +":4018800009040A4022D0084090421FD0207880061CD528692A6988430121C9040A432A612A698A432A612861C0050FD5FFF704FB009008E0FFF700FB0099411A3048814267\n" +":4018C00001D90320F8BD28698005F3D561688803800F032805D132680005824301400A4332602869032261681204114008432861002F04D0B16B012000078143B16320787F\n" +":40190000C00705D0E868A168800880000843E8602078800705D5E8680C218843E1680843E8602078400706D5E86803218902884321690843E8602078000706D5E86803216B\n" +":401940000903884361690843E8602088C00506D5E868032109048843A1690843E8602078000606D5E868032189048843E1690843E8600020F8BD00004010024000700040C9\n" +":4019800088130000F8B5054653480E460068C007C00FB0420AD25048016849084900314301600068C007C00FB0426FD128784B4C800705D5E068F0218843A9680843E060E1\n" +":4019C0002878C00752D06868022817D0032818D02168012818D08905002957DAE168890889000143E160FFF767FA69680746022912D003291CD0012926D033E0216889031E\n" +":401A0000EAE721688901E7E74907E5E7FFF754FAC11B3348814223D8E0680007800F0228F4D123E0FFF748FAC11B2D48814217D8E0680007800F0328F4D117E0FFF73CFA83\n" +":401A4000C11B274881420BD8E0680007800F0128F4D10BE0FFF730FAC11B2148814201D90320F8BDE0680007800FF3D11A480168C907C90FB1420BD9016849084900314381\n" +":401A800001600068C007C00FB04201D00120F8BD2878400706D5E068072109028843E9680843E0602878000707D5E0680721C90288432969C9000843E06000F05DF8E1684D\n" +":401AC000084A0906090F515CC840074908600020FFF788FD0020F8BD002002400010024088130000A48B00080000002010B50F2202600C4AD3689B079B0F4360D368F024C3\n" +":401B000023408360D46807231B021C40C460D268D2081A40026104480068C007C00F086010BD00000010024000200240014800687047000000000020044805490068C9689D\n" +":401B4000044A4905490F515CC84070470000002000100240BD8B0008044805490068C968044A8904490F515CC84070470000002000100240BD8B000810B5184AD1680C2023\n" +":401B8000084004280BD0082810D00C2810D050680004410F0120C003491C884010BD1068C00601D50E4810BD0E4810BD0E4810BD88020E4B000F185C0902D368890F491CA2\n" +":401BC000DB0301D5084A05E01268D20601D5044A00E0044A5043FEF7C7FC10BD0010024000093D000024F40000127A00B48B0008F8B504460078F24DC0074AD0E8680007D5\n" +":401C0000800F022807D0E8680007800F032809D1E868C00306D5286880033AD56068002873D036E0012062680004824203D129680143296011E0052301211B0489049A4228\n" +":401C40002A6802D10A432A60F1E782432A602A6802400092286888432860606800280CD0FFF72AF9064604E0FFF726F9801B64287ED828688003F7D50BE0FFF71DF90646EF\n" +":401C800004E0FFF719F9801B6428F1D828688003F7D42078800741D5E8681F270007800F3F02012807D0E8680007800F032809D1E868C00306D42868400717D5E0680128BC\n" +":401CC00023D113E0E068002817D029680922914301432960FFF7F0F8064604E0FFF7ECF8801B0228C4D828684007F7D568682169B84309020843686010E0286840084000E2\n" +":401D00002860FFF7D9F8064605E090E0FFF7D4F8801B0228ACD828684007F7D42078C00676D5E868A74E0007800F0BD0A06900285DD02868FF21013108432860FFF7BCF8EA\n" +":401D4000074644E02868800502D5A06900286ED0206A69683140884212D902F045FA0028AED16868216AB04308436860686800E0BBE00002217F000A0906084368600FE0D5\n" +":401D80006968B143014369606868217F0002000A090608436860206A02F026FA00288FD1206A410B0120C003491C8840E96809060A0F8549895CC840844908600020FFF729\n" +":401DC00011FC25E0FFF778F8C01B02288AD828688005F7D56868216AB043084368606868217F0002000A09060843686010E02968FF20013081432960FFF75EF8064604E08A\n" +":401E0000FFF75AF8801B02286FD828688005F7D420786F4E000723D560690028306910D0012108433061FFF747F8074605E0C5E0FFF742F8C01B022857D830698007F7D556\n" +":401E40000EE0400840003061FFF736F8074604E0FFF732F8C01B022847D830698007F7D42078400762D5A86B0027C00005D4A86B012109070843A863012756480168C90556\n" +":401E800011D40168821511430160FFF715F8009005E0FFF711F80099401A642825D84D480068C005F5D5FF20A2680130824203D131690143316111E001218902002A07D008\n" +":401EC00005231B029A4203D132690A433261EFE7326982433261306988433061A06800280FD0FEF7E9FF009007E060E0FEF7E4FF0099411A3848814259D830698005F5D5E9\n" +":401F00000DE0FEF7D9FF009006E0FEF7D5FF0099411A314881424AD830698005F5D4002F04D0A96B012000078143A963606A002842D0E9680907890F03293FD001263606C5\n" +":401F40000228286805D0B0432860FEF7B5FF04462FE0B0432860FEF7AFFF074604E0FEF7ABFFC01B022822D828688001F7D4E16AA06AEA680843216BFD231B049A4311439E\n" +":401F80000843E860286830432860FEF795FF044604E0FEF791FF001B022808D828688001F7D509E0FEF788FF001B022801D90320F8BD28688001F5D40020F8BD0120F8BDE4\n" +":401FC0000010024000E00000A48B000800000020401002400070004088130000704738B501684A68D243520609D48A68D243D20705D18A68D243520601D5816C08E04A6800\n" +":40200000D243120606D48A68D243920702D4C16C884738BD4A68D2439206FAD48A68D243D20606D4426D02231A4342651022D2438A6001688A680123D2439206002A08DB0A\n" +":40204000426D1A4342658A6800920A684024A2430A6001688A68D243540602464032002C09DB547C122C06D0446D04252C434465CC688C6800948C68E443E40505D4446D50\n" +":4020800008252C4344658C680094446D002CC0D04C68E025AC434C605374FFF79FFF38BD70B5040006D025464035687C0026002802D005E0012070BD2E74204600F032F80A\n" +":4020C0000220687420680168402291430160A168606822690843E16811430843616901220843A169520211400843E1690843216A0843A16A084321680860A0690421000CAD\n" +":402100000840616A0843216848602168E06A08612068C16992009143C161666501206874002070BD00B50068104985B088421AD10F48416B821411434163A0200090022022\n" +":40214000019000210320039002910491052069460007FEF7DFFD002203211920FFF7A8FA1920FFF79BFA05B000BD00000030014000100240042204490428086902D090435E\n" +":40218000086170471043FBE700E000E0094910B5401E884201D9012010BD074C60610321081F01F053FF0020A06107202061002010BD0000FFFFFF0000E000E070B5024681\n" +":4021C0002032137D012B1BD00123137502245475046865687026B5436560046865680E68354365600468A5688026B543A5600068846849680C43846053750020107570BDE5\n" +":40220000022070BD70B5040005D025462035687D002802D006E0012070BD00202875204600F00AF802206875211D206802F094F901206875002070BD70470268D36801215C\n" +":402240000B43D360006802680A43026000207047704770B50446006801690025C9438907002915DBC168C943890711D4E91E016101202075206880698007204602D0FFF7C4\n" +":40228000E7FF04E000F08EF8204600F025F9257520680169C943490717D4C168C943490713D40421C943016102202075206880698005800F204602D0FFF7CAFF04E000F091\n" +":4022C00071F8204600F008F9257520680169C943090716D4C168C943090712D40821C9430161042020752068C0698007204602D0FFF7AEFF04E000F055F8204600F0ECF8A3\n" +":40230000257520680169C943C90617D4C168C943C90613D41021C9430161082020752068C0698005800F204602D0FFF791FF04E000F038F8204600F0CFF8257520680169D4\n" +":40234000C943C90708D1C168C943C90704D1891E0161204600F0C2F820680169C943490609D4C168C943490605D44021C9430161204600F0BDF870BD00B500680121890758\n" +":4023800085B088420CD101200090002002210290039001910491052069460007FEF7BAFC05B000BD7047F8B5064604462036307D0D4601280DD001203075022070750427BB\n" +":4023C000002A08D0042A16D0082A2AD00C2A4DD137E00220F8BD206802F0EEF82068816908221143816120688169B943816120688169EA6812E0206802F0F6F82068826946\n" +":402400000121C9020A43826120688169012292029143816120688169EA6812021143816124E0206802F0F9F82068C26908210A43C2612068C169B943C1612068C169EA6803\n" +":4024400012E0206802F004F92068C1690122D2021143C1612068C269012189028A43C2612068C169EA6812021143C1610120707500203075F8BD70B5040005D025462035B8\n" +":40248000687D002802D006E0012070BD00202875204600F00BF802206875211D206802F05BF801206875002070BD000010B500680121890788420CD10648816B0122114367\n" +":4024C0008163002203210F20FFF7F2F80F20FFF7E5F810BD001002407047000010B500680249884201D1FFF765F810BD000400407047704770470000F8B502680446D06994\n" +":4025000011680607360F07D1830605D58B0603D5204602F066F9F8BD95682023002E65D0EE07F60FFF2721370F4037435ED0C70706D0CF0504D501271762E26E3A43E266A7\n" +":40254000820708D5EA0706D0276802223A62E26E04273A43E266420708D5EA0706D0256804222A62E26E02252A43E266020709D50A461A40324305D0236808221A62E36EEA\n" +":402580001343E366E26E002AC5D0800604D5880602D5204602F025F9E06E000703D42068806840061CD5204602F00CF920688168490611D5826840218A438260606E00286D\n" +":4025C0000AD01D498163606EFEF792FA0028A2D0606E816B8847F8BD2046FFF78BFFF8BD2046FFF787FF0020E066F8BD2646C7026036002F0ADA6D0208D501200005106236\n" +":402600007372B3722046FFF774FFF8BD050605D50D0603D5204602F03BFAF8BD4006FCD54806FAD52046146840218C431460737200F0D3F8F8BD0000B147000870B50400C2\n" +":4026400005D025466035687A002802D006E0012070BD00202872204600F026F82420687220680168490849000160606A002802D0204602F008F8204602F0F2F80128E7D0FF\n" +":40268000206841680922D20291434160206881682A229143816020680168012211430160204602F055F870BD00B50068164987B0884227D11548C26A01210A43C262C26AAB\n" +":4026C0000A400592C26A0A43C262C26A0A400592826B4B041A4382630C2000900220019003200390042004900291052069460007FEF710FB002203211C20FEF7D9FF1C20FB\n" +":40270000FEF7CCFF07B000BD00440040001002407047FFB5064604466036707A83B00D46202858D1002D0CD00598002809D00120A1680003814207D12069002804D1E80733\n" +":4027400002D0012007B0F0BD307A012843D0012030720020E06621207072FEF7ADFB019027464037059838820598788218E0788A401E788206980090002280212046019B8B\n" +":4027800002F0B9F9002818D10120A1680003814202D12069002812D02168287888626D1C788A0028E3D106980090002240212046019B02F0A0F9002808D00320C2E72888DA\n" +":4027C0002168C005C00D8862AD1CE9E72020707200203072B6E70220B4E7704710B5064CE178002901D000F045F8E078401EE07001F032FD10BD00006000002010B501680E\n" +":402800004A68D243920507D48A68D243D20703D1921E8A60FFF7E2FF10BD10B504000FD000F010F8E0688021084321680860616820690843A168084321684860002010BD99\n" +":40284000012010BD10B50068084988420CD10848816BC21411438163002203211046FEF727FF0020FEF71AFF10BD0000002C004000100240C1680068016000207047FEE7DD\n" +":4028800010B5074800688069172109020842044802D0FEF785FB10BDFEF7AEFB10BD0000E00D002010B50648006880694005400F034802D0FEF774FB10BDFEF79DFB10BDAE\n" +":4028C0002C0E002010B5806A01684A680123DB031A434A60826B00219163C26B9163014640314A78602A02D0FEF78EFB10BD20224A70FEF731FB10BDF0B503460022CE0798\n" +":4029000040332824B025002E05D05E7842222746B74300D0F2228E0705D544265B7832439C4300D02A434B0701D5B8231A4311238B4301D190231A4312238B4301D16021A4\n" +":402940000A4300680168914301600020F0BD000070B5164D1223446B002220268B43AC4202D0134DAC420DD14C0700D5B82211248C4301D190210A43002B11D132434021F0\n" +":402980000A430DE04C0700D5B822CC0701D0F2242243890701D5F4210A43002B00D132430068016811430160002070BD0D2E0008F92F000801688A69D243920701D400223C\n" +":4029C0008A6200688169C943C90703D081690122114381617047F8B5054604464035687828218143206804D00821C16100202870F8BD8169C903CF0F8169FE230E0C816896\n" +":402A00001E408A05C168920D19408C46E168022912D10621D3090E400B409E420BD1A16C491CA164A16C0229E2D10021A1640823C361297007E0664604212046FFF75CFF28\n" +":402A400000202870324639462046FEF797FAF8BDF8B50026054640350446AE702C48E0626685606C0843606468782027282823D06878292820D068782A281DD00721204657\n" +":402A8000FFF73AFF6878602800D06F7026636663206801684A041F49026817D501239B039A430260A06B81632E70A06BFEF720F800281DD0A06B19E003212046FFF71CFF27\n" +":402AC00028206870266314486063E1E7120410D502680123DB039A430260E06B81632E70E06BFEF705F8002802D0E06B816B8847F8BD6878602804D02E702046FEF784FA2E\n" +":402B0000F8BD6F702E702046FEF726FAF8BD00000000FFFFC52800086130000870B504461548E062002525632022204640300646427085706563480711D52068416A606AE7\n" +":402B4000421C62620170208D002808D0401E2085608D401E6085606C04210843606407212046FFF7C9FE21681020C86135702046FEF704FB70BD00000000FFFFF8B5064692\n" +":402B800000682027C76130684268224B1A4042600025356320487563F062C80606D531681020C861706C0421084370643046FFF701FF03213046FFF79FFE706C002814D107\n" +":402BC00034464034607860280FD06078212811D06078222808D16770A078A57040282570304614D0FEF7DCFAF8BD716C3046FFF72FFFF8BD6770A078A5704028257030462D\n" +":402C000002D0FEF7DFFAF8BDFEF7CAFBF8BDFEF7B5FBF8BD00E800FE0000FFFF70B50025064640360446B57071782020212970700BD012202063022120466563FFF75CFE93\n" +":402C400035702046FEF7ACFA70BD11202063012120466563FFF750FE35702046FEF7B2FA70BD0000F8B50446006820260F46C66121680820C86107212046FFF73DFE20681E\n" +":402C80004168B20211434160206841682D4A114041602046FFF78EFE20680168254649044035002902DB0168090406D5697821292FD0E16B096849686185628D0421002A0F\n" +":402CC00002D0626C0A4362647A070FD5426A606A431C63620270208D002807D0401E2085608D401E6085606C0843606400202063A8706063616C00290DD0616C2046FFF77C\n" +":402D0000A7FE6878282803D139462046FFF706FFF8BDA16BCEE7E26A0B498A4206D0E1626E7028702046FEF729FAF8BD69786E7022292870204602D0FEF7BCFBF8BDFEF736\n" +":402D400091FBF8BD00E800FE0000FFFF70B50026044640340546A6706178282029290ED061782A290AD160702220286302212846FFF7C2FD26702846FEF774FB70BD607024\n" +":402D80002120286301212846FFF7B6FD26702846FEF790FB70BD0000F7B5044600680E468069C043C0062CD420272546403520688069C04380060FD5701CF8D0002E05D09D\n" +":402DC000FEF77AF80299401AB042F0D96F700020A87028700320FEBD21681020C8612068C7612046FFF7E6FD20684168064A11404160042060646F700020A8702870012033\n" +":402E0000FEBD0020FEBD000000E800FEF8B50546044640352878012816D001202870C8060026002812DAD00610D521681020C861606C04210843606412212046FFF788FD3E\n" +":402E40002046FFF7B7FD3FE00220F8BD080634D5500632D520680168402291430160608D002825D0206840688105608D890DFF2803D9FF202085930403E0608D0123208516\n" +":402E80005B060096208DC2B2204600F079F9608D218D401A6085687822282068016804D001229203114301600EE00122D203F9E740212046FFF7CCFD06E0880604D59006CD\n" +":402EC00002D52046FFF75AFE2E700020F8BD0000F8B5074604464037387815460E46012810D001203870F0060ED5E8060CD521681020C861606C0421084360642046FFF702\n" +":402F000059FD5BE00220F8BD700708D5680706D52068416A606A421C6262017009E0B0070ED5A8070CD5606A411C6162216800788862208D401E2085608D401E60853DE016\n" +":402F40002C4A30062FD568062DD5208D002825D1608D002822D0206840688105608D890DFF2806D9FF220020228501231B06009010E0608D2085E06A904205D00020009040\n" +":402F8000E36A208DC2B205E000200090208D0123C2B25B06204600F0F3F80FE020684068800123D506E0700608D5680606D5608D00280ED040212046FFF74AFDB00605D586\n" +":402FC000A80603D531462046FFF7D8FD00203870F8BD206841688901F0D4E16A914205D141680122920311434160E7E72046FFF715FEE3E70000FFFF10B50446403423783A\n" +":40300000012B15D001232370CB0618D5D30616D5617821290ED0C16B09684968102200290AD00168CA61416C04221143416414E0022010BD816BEFE70068C2610DE00B0733\n" +":4030400005D5130703D500680821C16105E08B0603D5920601D5FFF705FE0020207010BDF8B5054604464035287816460F46012811D0012028704149F8062DD5F0062BD554\n" +":40308000628D1020002A08D02168C861606C04210843606467E00220F8BDE36A01225206934202D0E36A934202D16A78282A08D0E26A8A4202D06978292907D02168C86109\n" +":4030C00051E039462046FFF729FD4CE02168C8612046FFF76FFC43E0780719D5700717D5608D002820680BD0426A606A431C63620270208D401E2085608D401E608500E0C2\n" +":40310000406A608D00282ED1E06A884228D12AE0380706D5300704D539462046FFF75BFC21E0B8071FD5B0071DD5608D00280CD0606A411C6162216800788862608D401EF0\n" +":403140006085208D401E20850DE0216862208862E06A01210906884202D0E06A002802D12046FFF7F3FDB80605D5B00603D539462046FFF777FD00202870F8BD0000FFFF50\n" +":4031800070B50568049C68688905890D1204044E11431943304021430143696070BD0000009800FCF8B51C4617460E46054611E0601C0FD0002C05D0FDF77EFE0699401A6E\n" +":4031C000A04207D92020403568700020A87028700320F8BD286881693046884304D00020B842E5D00020F8BD0120F9E770B516460D4604461AE0324629462046FFF7CCFD80\n" +":40320000002801D0012070BD002D04D0FDF754FE801BA8420AD9616C202001436164403460700020A0702070032070BD20688069C0438006DFD4002070BD70B516460D4660\n" +":4032400004461CE0324629462046FFF7A5FD002801D0012070BD681C11D0002D04D0FDF72BFE801BA8420AD9616C202001436164403460700020A0702070032070BD2068FF\n" +":403280008069C0438007DDD4002070BD96B000206946088788870746C3481090002001241190E403C1A001F067FCC84D002202212846FDF7FAFD012211462846FDF7F5FDEF\n" +":4032C000012004F08FF8002201212846FDF7EDFD012004F087F8012202212846FDF7E5FD012004F07FF8C8210120019100900223B74A0021782003F0AFFCB64E050004D072\n" +":40330000B5A001F039FC357101E000203071B04D7822AD1FE988B9A001F02EFC2021AB48FDF7BAFDE8700146C0A001F025FCE878012833D1C8212A4601910090022308322B\n" +":4033400000211C2003F088FC050004D0C2A001F013FC357101E0002030719D4D1C22AD1F2989C7A001F008FC2989D54A914203D0D4A001F001FC3EE302F0DCFF050008D050\n" +":403380008D22D200DB49DCA001F0F6FBE64F357104E0E6A001F0F0FB002030718C48801F8178EEA001F0E8FB8948801F807801287DD1D049F1A001F0DFFB012004F012F8E7\n" +":4033C000824D002202212846FDF76FFD012211462846FDF76AFD012004F004F8002201212846FDF762FD012003F0FCFF012202212846FDF75AFD012003F0F4FF00206946AE\n" +":4034000008870EA9E34801F081FE002805D0E24AB849E2A001F0B0FBB6E26846008FE64DA84203D1E5A001F0A7FBADE2EB4AECA0109901F0A1FBFAA001F09EFBDE496A4604\n" +":403440001187FE48129102F0A7FC00206A4610870EA9D04801F05AFE00200190032003F0C1FF119800282FD020462030F449149088427DD9481C001B1390242102A8FDF7A4\n" +":40348000E6F8210A684601724472D4490198139A091802A80230FDF7C1F87D2040010090139802AA801C83B27821E64800E0C9E2FDF7D8FE050075D0E248FDF703FE5B2287\n" +":4034C0002B46120100905BE20025032003F08AFF00200A210B900C9069430D900819020A08AB1A735873BD480A2209180BA80230FDF794F87D20400100900C230BAA782112\n" +":40350000D048FDF7AFFE1390002808D0CD48FDF7D9FD00902A467749CBA0139B32E26D1C632DD2D32A460A2042431F204001824229D0811AD2A0139101F01EFB13990BA82F\n" +":40354000891CFDF784F81F2013994001411A0819030A08AA13735073A048139A09180BA80230FDF75BF87D2040010090139900E0B8E1891C8BB20BAA7821B248FDF772FE83\n" +":4035800013900028C2D102216846824D0187284602F002FC0021684601870EA9284601F0B5FD8DE198E10000A817010041503133303220546872656164204372656174651E\n" +":4035C00064202E2E2E200A0D000000000004005096000020902C00202041503133303220495350202D204572726F7220434849502049442052656164200A0D0049535020D6\n" +":4036000043484950204944203D2030782530347820616E6420536C6176652041646472203D20307825303278200A0D0020675F68775F6465746563742076616C75652073C2\n" +":40364000657474656420746F203D20307825303278200A0D0000000020546F736869626120427269646765202D204572726F7220434849502049442052656164200A0D0044\n" +":40368000546F7368696261204D495049204272696467652043484950204944203D20307825303478202D20536C6176652041646472203D20307825303278200A0D0000000F\n" +":4036C000014400000A0D20546F73686962612042726964676520436869702049442030782530327820213D20307825303278200A0D000000652702080A0D20257328293A93\n" +":40370000202564204661696C656420746F20496E697469616C697A65204D49504920427269646765200A0D00F11F00000A204D4950492042726964676520636F6E666967E7\n" +":4037400075726174696F6E205375636365737366756C202121200A0D000000002063757272656E7420495350205374617465203D20307825303278200A0D000025732045C6\n" +":403780006E746572656420546872656164202E2E200A0D00026000009A040000257328256429204572726F7220696E20493243202121200A0D000000FFFF00000A0D2053CA\n" +":4037C0006B697070696E6720426F6F742044617461202E2E2E200A0D00000000B00F01080A20312E20496E697469616C20426F6F7420446174612053697A65203D2030783F\n" +":403800002530347820426173652041646472657373203D20307825303878200A0D0000000A0D20577269746520626F6F746461746120766961204932430A0D0052F000005E\n" +":40384000FF9F00002C0E00200A0D25733A2025642E204661696C656420746F206C6F616420706C6C5F696E69745F64617461202D20256420307825303878200A0D200000DA\n" +":403880002057726974696E672052656D61696E696E6720504C4C202D20307825303478204279746573202D205772697474656E20307825303478204279746573200A0D0084\n" +":4038C000012003F08FFD012011901F20400121188CB20199081868E0012413990198E403401862E00198109920301390884226D308460199451A242102A8FCF7A8FE200A91\n" +":40390000694608724C72BE4801992A46411802A80230FCF783FE7D204001AD1C0090ABB202AA7821B748FDF79DFC050043D0B548FDF7C8FBB9222B46D200009020E02421C3\n" +":4039400002A8FCF784FE200A694608724C72AC4801992022411802A80230FCF75FFE7D2040010090222302AA7821A648FDF77AFC050017D0A348FDF7A5FBA34A2B46009019\n" +":40398000A249A3A001F0F8F8002F34D0AE480090019768469C4A838F23329C49ABA001F0EBF83FE0149884B21398019001461098814200D252E50025684685870FA9B3481E\n" +":4039C00001F0A4FB6846818F9F4AB1A001F0D4F800270EA9062001F099FB2946B6A001F0CBF8BC4968460187BB48129902F0D4F9012003F0F7FC9448009001976846824A53\n" +":403A0000838F27328149B5A001F0B6F80EA9062001F07CFB3946BFA001F0AEF801F028FF00F0C0F9C64DC821286803F027FDC548002F817841700AD01221817087802868C4\n" +":403A400003F0F6FCBF4DA878092805D020E01021817000218180F2E700220221BA48FDF724FA01221146B848FDF71FFA022003F0B9FC0020B071B248C821006803F0FEFCEF\n" +":403A8000A87868701220A870AD48006803F0D0FCA87802280ED10020F071A948C821006803F0ECFCA87868701020A870A448006803F0BEFCA87803280ED100203072A048CC\n" +":403AC000C821006803F0DAFCA87868701020A8709B48006803F0ACFCA87804280FD101F083FF70729648C821006803F0C7FCA87868701020A8709248006803F099FCA878F6\n" +":403B000005280FD101F028FB70748D48C821006803F0B4FCA87868701020A8708848006803F086FCA87806281FD100200121874A00900191137A51887820121D03F08CF8B3\n" +":403B40000090002802D082A001F016F80098F0747B48C821006803F091FCA87868701020A8707748006803F063FCA87807281ED17FA001F001F8002202217348FDF795F988\n" +":403B8000012211467048FDF790F9642003F02AFC002070756A48C821006803F06FFCA87868701120A8706648006803F041FCA878082801D0FFF7F8FB74A000F0DDFF0022C0\n" +":403BC00001216148FDF771F9022003F00BFC012202215D48FDF769F9042003F003FC0020B0755748C821006803F048FCA87868701220A8705248006803F01AFCDAE70000AF\n" +":403C0000B00F01082C0E0020DE050000652702080A0D25733A25643A204661696C656420746F206C6F6164206932635F626F6F745F64617461202D202564203078253038A0\n" +":403C400078200A0D200000004D3400000A0D20257328293A2564204572726F7220696E20435243203D2030782530347820213D203078253034782C2020535441545553201B\n" +":403C80003D20307825303478200A0D0052F000000A0D20426F6F74204441544120435243203D20307825303478203C3D3E20307825303478200A0D000A0D20426F6F7420A0\n" +":403CC000537461747573203D20307825303478200A0D0000FFFF0000026000000A0D20257328293A256420435243203D20307825303478203D3D203078253034782C2020B3\n" +":403D0000535441545553203D20307825303478200A0D00000A0D20424652205365742044656661756C747320426F6F7420537461747573203D20307825303478200A0D00D8\n" +":403D400084000020900000200004005044190020204572726F722052656769737465722052656164204572726F72200A0D00000020506F776572696E6720446F776E204906\n" +":403D80005350202E2E2E200A0D0000002057616B696E6720557020495350202E2E2E200A0D00000010B508210148FDF77AF810BD00040050F0B5274887B0C16A012421436F\n" +":403DC000C162C16A21400591C26A02210A43C262C06A002508400590202000900195694602951D48FCF796FF1020052703263F07009001946946039602943846FCF78AFF31\n" +":403E0000019400966946144803960294FCF782FF012210213846FDF748F8002202210E48FDF743F8012211460B48FDF73EF8A00200900A480190694602953846FCF76AFFAD\n" +":403E4000002203210720FDF733FC0720FDF726FC07B0F0BD00100240000400500000111010B512481049016011494160842181600121C1600021016141618161C161016221\n" +":403E8000FDF722F900280BD100210848FDF71AF8002805D100210548FDF739F8002801D0FCF732FD10BD000000540040E00D00202A12B00010B511480F49016010494160A1\n" +":403EC000002181600161416181610122C161C2600162FDF7F9F800280BD100210748FCF7F1FF002805D100210448FDF710F8002801D0FCF709FD10BD007800402C0E00209C\n" +":403F0000330F600010B50F480D490160FF21053141600021816002220261C16001224261C161016252024162826181620721C162FEF7B6F8002801D0FCF7E6FC10BD0000DA\n" +":403F400000300140780E002010B5164A164886B0910706C02021016000241E21846041600838FEF788FA002814D1049404A90E480594FEF723F900280CD160200090042047\n" +":403F8000019003900022694602940748FEF70BFA002801D0FCF7B8FC0348FEF7EDF906B010BD000055D00000D00E002010B50C480A490160E1214902416000218160C160E3\n" +":403FC00001618161C1610C22016242614162FEF735FB002801D0FCF797FC10BD00440040080F002010B50CA000F0C6FD0F480E490160FF21813141607F218160C1600121EE\n" +":4040000049020161FEF709FC002801D0FCF77CFC07A000F0B1FD10BD20494E49542057574447200A0D000000002C0040780F002020494E495420575744472053554343452C\n" +":404040005353200A0D000000704700008307FF22DB0E9A408907090E994000280BDA0007000F0838830808489B001818C36993430B43C3617047830804489B001B18186865\n" +":40408000904308431860704700ED00E000E400E0BFF34F8F04490348C860BFF34F8F00BFFDE700000400FA0500ED00E038B50D461A494418206800902346194A19491AA0D0\n" +":4040C00000F05AFDE8430004284320602068144A00902346521D134922A000F04DFD2E4CA069C007FCD10E4A0E490D322BA000F043FDA069800702D50220A06105E0084AF8\n" +":40410000084914322AA000F037FD4F22120105492EA000F031FD002038BD00000000F81FD9040000FC8C0008202D2D2D20204265666F7265202573282564292041742041A1\n" +":40414000646472657373203078253038782056616C7565203D20307825303878202D2D2D200A0D00202D2D2D2025732825642920417420416464726573732030782530387F\n" +":40418000782056616C7565203D20307825303878202D2D2D200A0D0000200240202D2D2D20257328256429202D2D2D200A0D0000202D2D2D204552524F52202D202573286B\n" +":4041C000256429202D2D2D200A0D0000202D2D2D205355434345535320257328256429202D2D2D200A0D000070B517490023CA681206120F18D18A6B154CD500134A02D584\n" +":404200001268224009E08E6B01252D072E438E6312688E6B2240AE438E63A24204D103218903884200D101230A48016849084900194301600068C007C00F984201D0012049\n" +":4042400070BD002070BD00000010024000700040001800000020024070B512A000F08CFC154D28680168490849000160286800248462286844624B2149011048FCF7E7F9F2\n" +":404280000F4805210482818141818471FF210171417129680A6801231A430A6081784170847070BD524553455420534C41564520493243200A0D0000E00D00208C0F00204A\n" +":4042C0006000002010B50248FDF789FE10BD0000780E00207047000030A000F04DFC0025344C0426A078042801D1FFF7B5FFA289002A04D0A078082805D00C2803D0A0788D\n" +":40430000002802D010E06070A5706281A58165700A20A07028492948FDF7F4F8002803D027A000F029FC2EE0A0780C2804D008282DD1A08900282AD11E4B61890C331A1D8C\n" +":404340001D4802F0E9F8002808D06922D200284928A000F011FC3348208111E0228A002A15D0E2812582A07860700620A07012491248FDF7F3F8002809D02BA000F0FCFB3B\n" +":4043800060780428AED0A0786070A670AAE70520E07009481438FEF76DFAA3E720456E746572656420736C617665207468726561640A0D00600000208C0F0020E00D0020DB\n" +":4043C0004572726F72204F6363757272656420696E2048414C5F4932435F536C6176655F526563656976655F4954200A0D000000F88B000820257328256429204572726FCF\n" +":4044000072206F636375726564206F6E20686F73745F6672616D65776F726B202121200A0D00000008200000204572726F72204F63637572726564206174205472616E739E\n" +":404440006D6974200A0D000010B503F04BF810BD10B523489AB001680322D2029143C21489180160012102200391102100900491099040040B90000100240C900A946846B8\n" +":40448000FDF7B6FB002817D10F20159003201690179418940121199415A8FDF773FA00280AD1FF200B3012940D90109413940DA8FDF7ACF9002801D0FCF726FAFDF736FBFC\n" +":4044C0007D21C900FCF750F8FDF760FE0420FDF751FE03210022081FFDF7EAF81AB010BD0070004010480168821511430160C1680E4A1140C16001680D4A1140016081687C\n" +":4045000049084900816001680122920491430160C168FD2212049143C160002101610549C003886070470000001002400C40FF88F6FFF6FE00ED00E010B50248FDF789FEBE\n" +":4045400010BD0000D00E002010B50248FDF781FE10BD00000C190020F0B502680124A407124D134E134FA04205D0A84203D0B04201D0B84204D11346702293434A681A4305\n" +":40458000A04205D0A84203D0B04201D0B84204D103231B029A43CB681A4302608A68C2620968816201214161F0BD000000040040000801400014014030B5026A5208520029\n" +":4045C0000262026A456883697024A3439C080B68A40023430224A2438C6845601443836149684163046230BD30B5026A10239A430262036A4568826973242402A2430C6850\n" +":4046000024021443202293438A68456012011A43846149688163026230BD30B5026AFF2301339A430262026A4568C3697024A3439C080B68A400234301246402A2438C68E7\n" +":40464000456024021443C3614968C163046230BD30B5026A01231B039A430262036A4568C26973242402A2430C68240214430122520393438A68456012031A43C4614968F3\n" +":404680000164026230BD10B5818CC90707D001684A6801235B049A43836A1A434A60818C890707D501684A6801231B049A43C36A1A434A60818C490707D501684A680123FC\n" +":4046C0009B049A43036B1A434A60818C090707D501684A680123DB039A43436B1A434A60818CC90607D50268916801231B039943836B19439160818C890607D501688A68DA\n" +":4047000001235B039A43C36B1A438A60818C490612D503685A6801210905046C8A4322435A60026C8A4207D10268516803235B059943436C19435160818C090607D50168F5\n" +":404740004A680123DB04806C9A4302434A6010BDF8B500260446C666FCF7AEFB054620680068124F000709D501212B46002249052046009700F0BFF900280DD120680068FB\n" +":4047800040070BD501212B46002289052046009700F0B1F9002801D00320F8BD202060346072A07226720020F8BD0000FFFFFF0110B5806A0022014640314A834A82FDF7EE\n" +":4047C00099FE10BD01680A68FF2321339A430A6001688A68520852008A60202160308172704770B50246403201466031938B8D7A0C460168222D05D088690822104388613F\n" +":40480000022070BD496A01268568360389B2B54202D10569002D0BD01940436D5D1C45651970518B491E0904090C518307D015E0456D19402980416D891C4165F1E7016806\n" +":404840000A68FF2321339A430A6001688A68520852008A602021A172FDF75AFF002070BDFEB50446016880682269E36910436269102700261A4310430A683546784B1A40D0\n" +":4048800002430A6020684168032212039143E26811434160734A2168A069914201D0226A10438A680B231B029A4302438A606E4A20686E4990420CD1C8688007800F06D0EE\n" +":4048C000012843D002283FD0032826D124E0012723E0674A90420AD1C8680C21084031D0042833D008282FD00C2816D114E0614A904227D0604A904224D05A4A90420CD14A\n" +":40490000C9680320800201401CD01015091A1DD0091A19D0814200D108270220FCF7CCFE0190504B514922684039D81300929A4235D1002F0CD0022F0DD0042F12D0082F04\n" +":404940001CD113E00027E8E70227E6E70427E4E7FDF7F2F808E00868C00601D5474805E0474803E0FDF708F9002873D0626851005118814202D81103814201D2012569E023\n" +":40498000010E06025008002330185941FBF716FE032109023B4A411A914259D9EEE7E26982422DD13B0000F0F7F80906080B24192424241F2400019812E0FDF7CDF80FE02C\n" +":4049C00008686168C00602D548082F4A01E02F4A48088018FBF7C8FD86B20BE0FDF7CCF8616840004A08F4E76168012248081204EFE70125310909013007400F084327E0A4\n" +":404A00003B0000F0C9F809070A0D061D060606290600B3E7FDF790F814E0FDF79DF811E008686168C00602D54A08144801E014484A081018FBF798FD81B20098C16009E0E4\n" +":404A4000FDF79AF861684A088018FBF78DFD80B22168C8602846FEBD61684A08E9E70000F369FFEF00480040003801404010024000440040004C00400050004000093D00C7\n" +":404A80000024F400FFFC0F0000127A000048E8016921095C212901D00220704702464032518A002912D0012381681B03994202D10169002915D0C16C4B1CC364006809789F\n" +":404AC0008162508A401E50820020704701680A6880239A430A6000680168402211430160F2E7C16C03680988C905C90D9962C16C891CC164E5E7FFB581B017460E46044601\n" +":404B00000A9D1DE0681C1BD0002D05D0FCF7D4F90499401AA84213D920680168FF22A1329143016020688168490849008160202060346072A07200202072032005B0F0BDDE\n" +":404B40002068C1693046884304D00020B842D9D00020F3E70120F9E710B50248FDF7CCFC10BD0000080F002010B50248FDF746FE10BD0000780F00200FB410B503A9044BA3\n" +":404B8000044A029800F024F810BC08BC04B01847FD640008D400002030B47446641E2578641CAB4200D21D46635D5B00E31830BC184702E008C8121F08C1002AFAD17047E9\n" +":404BC0007047002001E001C1121F002AFBD17047FFB591B00F460546002606E025280AD0149A139990476D1C761C28780028F5D1304615B0F0BD002400940121F34A029426\n" +":404C000000E004436D1C2B780846203B98401042F7D128782A280ED0022128780246303A092A15D8009A0A235A43303A80180C436D1C0090F1E701CF0090002805DA0120F3\n" +":404C400040030443009840420090022004436D1C28782E2815D10420044368786D1C2A280AD101CF6D1C02900BE002990A225143303940186D1C02902878014630390929A2\n" +":404C8000F3D928786C2810D006DC4C281AD068280ED06A2817D104E0742813D07A2812D110E00120400504430CE00121090501E0032109050C436978814203D1012000054B\n" +":404CC00024186D1C6D1C287803906E281ED00CDC632831D004DC00288AD0582811D1B2E064287BD069280CD178E073282DD004DC6F2870D0702804D1A7E075286CD078288C\n" +":404D00006BD0149A13999047761C62E06002400F022807D003280AD0042838680AD006603F1D56E03868F11706604160F8E738680680F5E70670F3E7387869460874002003\n" +":404D4000487404A80390012003E0386803900020C0433F1D61070FD5002101E00199491C029A0191914213DA8142F7DB019A0399895C0029F2D10BE0002101E00199491CBE\n" +":404D800001918142FADB019A0399895C0029F5D101990098139A401A00902146149B00F03BF901998019461807E0039803990078491C0391149A139990470198401E0190E2\n" +":404DC000401CF2D12146149B139A009800F014F986196D1C09E741E033E034E00A200021049005916002410F022905D001CFC2179446032905D007E0FF1DFF08FF0003CF56\n" +":404E000006E000B2C2179446042902D140B2C1178C4600226146944506DA0A460021404291418C462D2102E0210504D52B216A461176012103E0E10701D02021F7E7019151\n" +":404E400054E00A200BE0102009E01020049000210420044308200591029003E008200021059104906002410F022905D001CF00229446032906D006E0FF1DFF08FF0003CF80\n" +":404E80008C4603E080B2042900D1C0B20021019121072BD50399702906D0049A1021059B4A401A4305D00EE040216A461176012108E06146014306D030216A461176039915\n" +":404EC000517602210191049A0821059B4A401A430CD16146014301D1610707D530216A461176012101910299491E02910399582904D037A103910FA90F910DE039A1F9E7DD\n" +":404F00006146059B049AFBF759FB039B8C469B5C0F9A521E0F92137061460143F0D10F9807A9081A20300390600704D5012000048443029801E0012002900399884201DDFC\n" +":404F4000401A00E0002041180290019809180098401A0090E00306D42146149B139A009800F05AF886190020049008E006A9085C149A139990470498401C761C049001991F\n" +":404F80008842F3DBE0030CD52146149B139A009800F042F8861904E0149A302013999047761C0299481E02900029F5DC08E00F980F990078491C0F91149A13999047761C76\n" +":404FC0000399481E03900029F1DCFBE60928010030313233343536373839616263646566000000003031323334353637383941424344454600000000F8B5044600251E468F\n" +":405000001746880404D405E039462020B0476D1C641EF9D52846F8BDFFB50446002581B01E46C80301D5302700E02027880404D505E038460399B0476D1C641EF9D528469F\n" +":4050400005B0F0BD70B50D46002812D001780446432903D015A0FFF78FFD0AE00221A01C01F052F921790246914204D017A0FFF783FD022070BD22480178052901D0214ABC\n" +":4050800011706178017061880802090A084381B2012901D9012100E000214018801C2880194901200870002070BD000020496E76616C6964205369676E617475726520308D\n" +":4050C0007825303278202121200A0D0020476976656E2020435243203D2030782530327820213D2043616C63756C6174656420435243203D20307825303278200A0D000068\n" +":405100006500002064000020660000207CB50546C8220120019200900A4602232946782001F09AFD041E04D0294602A0FFF724FD20467CBD204572726F7220526561646946\n" +":405140006E67207265676973746572202578202121200A0D00000000F0B5FE4F85B0388E00216A4611810D229201034653430391FA4CF94EF94A1C19D2583346316825791B\n" +":405180001B79914201D1AB4204D0F5A00095FFF7F3FC06E3012B0BD1B168E268914202DCA368994207DAFEA0A368FFF7E5FCF8E2092005B0F0BDE7497822488650434418AE\n" +":4051C00020468C30E449FBF729FAE24D8034FA4AE1682F462E46881A203760364035914272D01EDCF54A881A914263D00FDCF44A881A91424AD005DCF248081833D00128D9\n" +":405200002CD13AE00A287CD00E2827D15DE0EE4E012871D0022870D007286FD008281DD13DE023286BD00EDC012869D005260F27E1213602FF010901072875D0082874D056\n" +":405240000C280BD13DE1252870D0C2498031009129286CD02C286BD030286AD0DB49DCA0FFF78AFCA4E7207D0006010C0720000300F092FD207D387771E2207D0006010C29\n" +":40528000D94800F089FD207D787768E2207D0006010CD64800F080FD207DB8775FE2207D010268460181D1480A3000F075FD207DF87754E2207D010268460181CC4800F09E\n" +":4052C0006BFD207D28704AE27DE064216069FBF761F90007060C08036421FBF75BF90105090D314368460181C048001D00F054FDA08A688033E204E048E028E01DE0CBE0F6\n" +":4053000099E06069002815D0BA49684601815120000200F041FDE98868460181B64800F03BFD207D28711AE2DDE0FDE0A9E097E17BE1B4E0AF490839E7E7A08A81B26846B4\n" +":405340000181AD4800F028FDA08AE88007E202A93046FFF7DBFE6069002802D001280DD106E068460089C107C90F6846018105E0694608890221084369460881684601897C\n" +":40538000304600F009FD207D2872E8E102A93046FFF7BCFE6069002802D001280BD104E0694608890221084003E069460889012108436946088168460189304600F0ECFC0B\n" +":4053C000207D6872CBE1207DB072606900F046FDB07A012804D0002816D0022814D0BEE1288F002807D1A98D002904D0FF203930A885288700E0A885A98D642041437C4890\n" +":40540000801D00F0F9FCAAE16069524D002801D0022888D17D21C9017848E96700F0ECFC7748E96FFBF7A0F80006010C7348801F00F0B2FC93E1B07A012802D0A08AA8858F\n" +":4054400098E104216F4800F0A7FC60696421484367490A2700260390042303AA891D01970096782001F0F8FB042303AA634978200197009601F0F0FBA08AA885A08A28875B\n" +":405480006DE1B07A022863D1324861690167B17B606900F08FFD62E1207DB0735FE12D4D5648616900F0A8FC55486169FBF772F80006010C5148801F00F06EFC6069E867C0\n" +":4054C0004DE1244D6069E8642969B14201D0B94227D1642825D16520E86400F0C3FDE86C401EE8643BE16069FBF754F800901A21695E01208003401AFF216931FBF74AF80D\n" +":40550000E8830099484301214903401828831148616901657CE0B84203D10E4CE06C64287BD000F09FFD1AE16069FBF733F800901C21695E01208003401AFF216931FBF790\n" +":4055400029F8E8830099484301214903081A5BE00CE162E044190020A42D0020B08D00080A0D204374726C2049442030782530387820213D20307825303878206F722043D9\n" +":4055800074726C20547970652030782530327820213D20307825303278200A0D000000000A0A0D202564203E20256420203C202564200A0A0D00000001099A001309980005\n" +":4055C0000209980000F767FF0C1000007327020825733A20756E6B6E6F776E206374726C2069642E0A0D0000DA52000006700000065000005F1100000A51000028200000D7\n" +":4056000040420F0040540000288467486169416565480069B04280D07DE76520E06400F021FDE06C401EE06499E061695F48002907D05F4900F0B0FB6069072803DD0838B4\n" +":4056400002E05C49F6E7083000036946088168460189594800F0A0FB0098616901607EE056A06169FFF788FA606902287ED800210191002830D05EA0FFF77EFA02A96148B2\n" +":4056800002F016FD022001F0ADFE684601890920000201430420814368460181594802F0A5FE022001F09EFE00216846018155480199B43002F09AFE02A9524802F0F8FC62\n" +":4056C0006846018950A0FFF757FA61693648022917D0002915D03FE053A0FFF74DFA58496A461181474802F081FE012001F07AFE00206A46108143480199B43002F076FE47\n" +":40570000E3E7B27A012A04D0002A0AD0022A08D022E0298FA985642041434A4800F06CFB1AE0002903D00546022925D014E07D21C90105464248E967343800F05DFB424873\n" +":40574000E96FFAF711FF0006010C3D483A3800F023FB01200099C8720099207D087202A90620FFF7D3FC6846018900E019E037A0FFF702FA00201CE538783C490228D9D279\n" +":405780002F48E967343800F037FB2F48E96FFAF7EBFE0006010C2A483A3800F0FDFA0220D8E7022005E50000441900200A100000FDFF0000FDFA00000C7000006973705F6F\n" +":4057C0006C6F63616C5F646174612E637572725F6374726C5B696E6465785D2E637572725F76616C203D202564200D0A00000000496E20747269676765727272206D6F64FF\n" +":40580000650A00001A30000056616C756520726561642066726F6D2030783330314120697320307825780A00496E20467265652052756E6E696E67206D6F64650A000000F1\n" +":405840005C2000000C50000040420F000A0D204354524C20426F6F7420537461747573203D20307825303478200A0D00803E0000F0B585B000246846039404813221464837\n" +":4058800000F08AFA454D46A0A96BFFF775F9A86B03900A200190042303AA45490094782001F0DAF90126052176030902304600F073FA2D210901B01C00F06EFA36480F2103\n" +":4058C000C902103800F068FA334800211C3800F063FA314830211E3800F05EFA0021354800F05AFA2C488621203800F055FA324F02A93846FFF70AFC68460089FF21C0B29B\n" +":40590000090241186846018189B2384600F044FA684604812146294800F03EFA1E4C2849083C204600F068FA0721A71F0902384600F032FA1F482C21563800F02DFA1D4891\n" +":4059400020494C3800F028FA1A480F210902123800F022FA3146701000F01EFA02A90620FFF7D4FB6846018917A0FFF705F97D21C9012046E96700F03FFA1A48E96FFAF7CB\n" +":40598000F3FD0006010C384600F006FA00F026FE002005B0F0BD000030200000441900204D69706920636C6B3A253038780A0D0038600000585000000A1000000C700000FE\n" +":4059C0006A040100148200000A0D20426F6F7420537461747573203D20307825303478200A0D000040420F00F0B585B00020694600908881994C9A4F20462038838D18202F\n" +":405A00004343BD68FA6839683869267D7F68002EBC4631D0934EF6582346203B04969F8D18235F438F4B32E0DE88B54236D0D8889A8800920290634601958B48049AFFF72B\n" +":405A40009BF816E059898A4202D1998988422BD086A00CE0D9898A4224D859898A4221D3198A884202D8998988421DD287A0FFF783F8022005B0F0BD7A4E4836F658774BC3\n" +":405A80000496203B9F8D18235F43764B4833FB18B142CCD19E88B445C9D1C5E7197A0129D8D1CFE782A0E2E76C4814226C491438FAF7B4FD694D8748203DE968C14215D1F4\n" +":405AC0003021854800F068F9052629693602834F881B15D0721090420CD187216869C900411A7F4816D0782932D121E07DA0FFF743F803E085A06A69FFF73EF80920B9E7AA\n" +":405B000000206884A8842070288B0F2180B2C90200901AE000216984A98401212170002100F03AF9288B412180B2090200900CE000216984A98402212170002100F02CF90E\n" +":405B4000288B0F2180B289020090384600F024F9288A81B20120400300F01EF9A88A81B25D48103800F018F95B48698C801C00F013F95A48A98C001F00F00EF92869B04227\n" +":405B800008D00F21C901884204D0512168690901884202D1E86C642811D000F063FA2F4E4036B07A00F05AF9B07A7D21C901203601280CD0002820D002281ED032E0652069\n" +":405BC000E86400F04FFAE86C401EE864E7E7234A337AFF27393757482032002B02D0022B03D01FE09785544904E02378022BF9D2A023938500F000F914E03848327A08306B\n" +":405C00004E4F002A01D0022A0CD1E96700F0F4F83846E96FFAF7A8FC0006010C2F48801C00F0BAF86A69296945A0009BFEF7A4FF01214903481000F0AFF803A90620FFF7C2\n" +":405C400065FA684681894BA0FEF796FF307A002801D000F089FA00200CE7000064190020902D0020208D0008B0280208496E76616C6964204672616D652052617465202D93\n" +":405C80002044495343200A0D00000000496E76616C6964204672616D652052617465202D20434F4E54206D696E200A0D00000000496E76616C6964204672616D652052610B\n" +":405CC0007465202D20434F4E54206D6178200A0D00000000ABA6A9A61220000020200000322000005468697320666F726D617420307825303878206973206E6F74207375A6\n" +":405D000070706F72746564200A0D000020576964746820256420486569676874202564206973206E6F7420737570706F72746564200A0D000C500000E079000040420F0053\n" +":405D4000204368616E676564204672616D652053697A6520746F2025642078202564204672616D652052617465203D202564200A0D0000000A0D2053545245414D20426FDE\n" +":405D80006F7420537461747573203D20307825303478200A0D0000003EB5044668460181C821002001910090022302AA2146782000F052FF030005D068460289214602A03C\n" +":405DC000FEF7DAFE00203EBD4572726F722057726974696E6720726567202578203D203078253034782020657272203D20307825303278200A0D00003EB505460291C821CE\n" +":405E0000002001910090042302AA2946782000F023FF040007D00346294604A0029AFEF7ABFE20463EBD00203EBD00004572726F722057726974696E67207265672025781E\n" +":405E4000203D203078253034782020657272203D20307825303278200A0D0000FEB50446002548480A26484F0295002C04D0022C02D0012C54D083E00621FFF78DFF2C215E\n" +":405E80004248FFF789FF40214148FFF785FF3F4800213430FFF780FF3C4800213630FFF77BFF3A48012189033830FFF775FF3748012189033A30FFF76FFF2046354C02286C\n" +":405EC00005D120466030817B206F00F073F8314820300078002804D0012805D0022808D11CE07D21890100E02B492748001FFFF783FFE06F0290042302AA394601960095D5\n" +":405F0000782000F0A9FE2548E16FFAF72DFB0006010C1D48801FFFF73FFF31E02049E4E70421FFF739FF20211848FFF735FF00211748FFF731FF194C13482146001FFFF7CC\n" +":405F40005BFF21463846FFF757FF124C15A04034A18DFEF711FEA08D642148430B490290042302AA0A3101960095782000F074FE042302AA394678200196009500F06CFE16\n" +":405F80000020FEBD405400002820000002500000E4520000441900204D3A000040420F00153400004578706F73757265203D2025640A0D00F8B50C462749884249D80104ED\n" +":405FC000264F0E0EC5B269463846FFF79FF8694608887911084381B23846FFF7DDFEB6086408301B00B269460880002800DA002008800006010C1A48FFF7CEFEAD08281B12\n" +":4060000000B269460880002800DA002008800006010C1348801CFFF7BFFE301900B269460880402800DD402008800006010C0C48001DFFF7B1FE281900B2694608804028F6\n" +":4060400000DD402008800006010C0548801DFFF7A3FE0020F8BD0000FFFF00001020000036500000F8B53E487D220078D200002804D0012802D0022804D005E08B25114641\n" +":40608000ED0001E0114615467D204004FAF782FA6421484332492039CF6C3946FAF764FA06B22F4C7D202034668329464004FAF771FA642148433946FAF756FA05B220461C\n" +":4060C000A5834038E121006D0901FAF763FA074601208003FF21801B6931FAF75BFA0121784349034718204627834038E121406D0901FAF74FFA009001208003FF21401BFB\n" +":406100006931FAF747FAE0830099484301214903081AF10F891949107A1A20846284EA0F52195210831AE3847918A18480182085618C0C48FFF730FE0A48E18C801CFFF7F0\n" +":406140002BFE0848A18C001DFFF726FE0548218D801DFFF721FE0A2001F044F90020F8BD6419002004200000F8B50546002468460480294647A0FEF7FFFC022D76D800276F\n" +":40618000494E002D2BD049A0FEF7F6FC69464C4801F08EFF022001F025F9684601880920000201430420814368460180444802F01DF9022001F016F96846048040483946B2\n" +":4061C000B43002F013F969463D4801F071FF684601883CA0FEF7D0FC022D13D055E041A0FEF7CAFC454968460180354802F0FEF8012001F0F7F86846048031483946B43040\n" +":4062000002F0F4F828482038807A012804D000280CD002280AD038E023484038018F8185642041433648FFF7E7FD2EE01E4C33487D210127803CC9013438002D17D0022DDA\n" +":4062400023D1224620321278022A10D2E167FFF7D3FD2C48E16FFAF787F90006010C27483A38FFF799FD0220F0720EE00FE0E167FFF7C2FD2348E16FFAF776F90006010C89\n" +":406280001E483A38FFF788FDF7723572F8BD0220F8BD00006D656E7520696E646578206973202564200D0A00C4190020496E20747269676765727272206D6F64650A0000AB\n" +":4062C0001A30000056616C756520726561642066726F6D2030783330314120697320307825780A00496E20467265652052756E6E696E67206D6F64650A0000005C2000001A\n" +":406300000C50000040420F000346002010B50246002B05D0002903D04B246401A14205D9002010BD9C5C6040521C92B28A42F9D310BD0000FEB50120694608810024C825B0\n" +":40634000022302AA19461C200195009400F084FC434E070069D10A2001F044F868460481022302AA19461C200195009400F074FC07005AD10120009002233A4A0021019582\n" +":406380001C2000F069FC07004FD13648364A08380189914205D035A0FEF7EEFB02203071FEBD492069460881022302AA04211C200195009400F050FC070036D1312069463D\n" +":4063C0000881022302AA08211C200195009400F043FC070029D131A0FEF7CEFB3A4869460881022302AA16211C200195009400F033FC070019D1354869460881022302AA37\n" +":4064000018211C200195009400F026FC07000CD1052069460881022302AA20211C200195009400F019FC070005D029A0FEF7A4FB37713846FEBD304869460881022302AA52\n" +":4064400060211C200195009400F006FC040005D01FA0FEF791FB34712046FEBD0020FEBD902C002098000020014400000A0D20546F73686962612042726964676520436877\n" +":4064800069702049442030782530327820213D20307825303278200A0D000000204D4950492042726964676520434F6E6669677572656420666F72203732204D687A2021D1\n" +":4064C00021200A0D000000003B4000001302000020546F736869626120427269646765202D204572726F7220434849502049442052656164200A0D000285000013B5044B84\n" +":40650000012269460348FCF704F900981CBD0000FFFF0000080F0020F8B51D461446002825D0002923D0002C21D04B267601052903D1114A1278002A09D0224600F0F6FFC9\n" +":4065400007000ED00DA0FEF717FB3846F8BD1946FEF778FD070001D012A0F4E70020208002E02088B04202D82888B04201D90220F8BD0020F8BD0000660000204572726FC5\n" +":4065800072206F6363757272656420696E2070726F636573735F636F6D6D616E64200A0D000000004572726F72206F6363757272656420696E20616E616C797A655F6C65AB\n" +":4065C0006E6774685F7061636B6574200A0D0000EFF30580002800D001207047F0B50023304C0A20237760771020A077E0772046203001210170DC214180012101712A491A\n" +":40660000C1801A460272064642722036FF21B272393181850546403501462A72234F40390F670827B7736A260A65CE647D264A65F601CE672F60BF022270078342847E007F\n" +":406640008684C284068546838683C28307840120174AE8720D2080011D46454378205843565940188030AD18C6602E790674012E15D02E7A0676ED68C5615B1C282BE9D3F9\n" +":40668000257D05220B4C12022D231B01CC604B610A6101227820CA6188610020F0BD2D694561EAE764190020F811000080800000B08D00085559565970B5002808D00F4989\n" +":4066C0000F4C8978002905D00320E075002070BD022070BD417802780802104341BA09480025022906D00121017507A0FEF744FAE575EBE7057506A0F8E7000090000020DD\n" +":40670000902C002064190020346C616E650A0D00326C616E650A0D00F8B5002805D017498978002903D0032124E00220F8BD417802780802104346BA314611A0FEF71CFA43\n" +":406740000E480724124F0C30E1000D18083D2988B14208D80FA06968FEF70EFA6868B863002C04D005E0641E2406240EECD16868B86300210B4801760020F8BD90000020E9\n" +":406780006374726C5F76616C3A2564200A0D000044190020636C6B5F6C6F6F703A253038780A0D00902C002070B5104CA078102808D00F49112814D0122814D00120887130\n" +":4067C000002070BD0B4D0121286800F057FE002801D0012070BD0920A070286800F028FEEEE70320EBE70820E9E7000090000020902C002084000020FEB500220446684618\n" +":4068000002811646002907D003200880002C41D02578FF2D02D004E00220FEBD1E48057825701E498878FF280CD00F23002822D0122820D0F027112820D0C00621D467700B\n" +":40684000A27022E0164869460881012000900190022302AA0621782000F0FEF9060003D010A0FEF789F915E068460089000A60706846008908E06370F12005E06370A770DD\n" +":4068800003E08888010A6170A0700E48405D002800D006463046FEBD6400002090000020F10F0000204572726F722052656769737465722052656164204572726F72200ADE\n" +":4068C0000D000000902C002010B500290AD0234B9B78102B0CD02248D90605D401210174084610BD022010BD03210174084610BD0023282802D30B800A2010BD78246043CF\n" +":40690000184C00198030047C012C02D0022C15D001E009230B80002A1ED0C168090E1170C168090C51708189090A9170017BD170017C1171017C012903D00DE00B80092033\n" +":4069400010BD4169090E51714169090C9171818A090AD171007D1072002010BD90000020902C00204419002070B50024002905D0282805D3002008800A2070BD022070BDF4\n" +":406980000D239B01344D584343191E79012E02D0022E05D101E0152601E09E890A360E80002A56D02958090E11702958090C5170295A090A9170285CD07018791071187945\n" +":4069C000012802D0022844D12CE09868000E50719868000C90711889000AD071187A1072D868000E5072D868000C90729889000AD072187B10731869000E50731869000CB5\n" +":406A00009073188A000AD073187C10745869000E50745869000C9074988A000AD074187D107516E0187A5071D868000E9071D868000CD0719889000A1072187B507205E052\n" +":406A4000181920301119007C8872641CD868A042F6D8002070BD0000B08D0008F8B500271646002905D0282805D3002008800A20F8BD0220F8BD0D22920150431E4A8518E5\n" +":406A800028792C46A034012802D0022809D11CE0207E032801D0232002E0A07E400124300880002E25D02946983120223046F9F7B5FD3046217E2030017000214170617EBE\n" +":406AC0008170217E032905D013E0A8890A3008800920F8BDA17EC17008E078012918801920222430BB31F9F799FD7F1CA07EB842F3DC0020F8BD0000B08D00087CB50024BD\n" +":406B0000054600291ED002200880002D18D0C82101200191009002230B4A0021782000F09BF8040004D009A0FEF726F80D484470054E0DA0B61FF188FEF71EF8F08828803C\n" +":406B400020467CBD02207CBD960000204572726F72204348495020494420526561640A0D00000000902C002043484950204944203D20307825303478200A0D0030B500299F\n" +":406B80000AD0334B18241D7D00234443002D28D0032828D22F482BE0022030BD0D2500E015250D80002A51D00159090E11700159090C5170015B090A9170005DD0709888AF\n" +":406BC000000A107118795071D888000A90719879D071187A1072187A01280ED0022835D116E0032802D30B800A2030BD1948483023181D7A012DD3D1D0E75889000A5072A5\n" +":406C0000987A90729889000AD072187B10731DE05889000A5072987A90729889000AD072187B1073D889000A5073987B9073188A000AD073187C1074588A000A5074987C6D\n" +":406C40009074988A000AD074187D1075002030BD64190020208D0008FFB585B01D460E980F9B14460E4601280DD8042D0BD8002C09D0604A00215164320AF1B2002872D0ED\n" +":406C8000012860D102E0022009B0F0BD6846027141710093022301AA56480599FAF7E2FA07001FD05348FAF70DFA0446059800903346224639465048FDF75EFF4D4D28685E\n" +":406CC0000168490849000160012000F08BFB286801680122114301601EE0042C7ED0032F7CD081E000200190029003904348092101702B4601AA3F480599FAF775FA0700C9\n" +":406D00000DD03C48FAF7DEF904460096024639463B48059BFDF730FF202C67D0DDE700F000FC364E02E0012000F05CFB30780928F9D0012D04D0022D06D0042D58D108E051\n" +":406D400068460079207053E06846808840BA20804EE00198694600BA000AC97900020843206045E0FFE720686C4622716171012D04D0022D04D0042D0DD105E0A0710AE0F2\n" +":406D8000020AA271E07106E0020EA271020CE271020A227260720093AB1C01AA15480599FAF760FA040023D01248FAF78BF905460598009033462A4621461248FDF7DCFE86\n" +":406DC0000C4E30680168490849000160012000F009FB306801680122114300E006E00160202D03D0032C01D005204DE707204BE7002049E72C0E0020042902089000002026\n" +":406E0000AC29020858290208F8B5154C154DA078002807D0122805D011281ED0082028710820F8BD104E0121306800F027FB0127002805D00DA0FDF79FFE2F710120F8BD8A\n" +":406E4000A770306800F0F4FAFF22A378F6320E490EA0FDF791FE0020F8BD0320DFE7000090000020902C0020840000200A0A0A0D2053656D2057616974204661696C656421\n" +":406E8000202121200A0D0000582702082573282564292049535020696E697420675F6973705F7374617465203D20307825307832780A0D0070B50D4C0725A078102806D029\n" +":406EC000122804D0002802D00948457506E0094E0121306800F0D2FA002801D0072070BDA570306800F0A4FA002070BD90000020902C002084000020FEB505460F46002054\n" +":406F000069461C460881002A0BD01F4901268B780321102B0AD01D48DA0604D486740120FEBD0220FEBD81740320FEBD012F05D0022F05D0042F05D01080F2E7118003E054\n" +":406F4000042000E006201080002C1AD011882046F9F77DFB280A2070657000963B4602AA294678200196FFF777FE050004D008A0FDF702FE2846FEBD68460089010AA17086\n" +":406F8000E0700020FEBD000090000020902C0020204572726F722052656769737465722052656164204572726F72200A0D000000F8B504462148224E8078102807D0C006F1\n" +":406FC00002D401207074F8BD03207074F8BD607821780002084345BA282D02D30A207074F8BDA01CF9F73EFB00BA000A61790002144F08433860A0793871012802D00920EA\n" +":407000007074F8BDE01DF9F72DFB00BA000AA17A00020843B8600C480C4C05860121206800F02CFA002801D00720F8BD034805218170206800F0FCF90020F8BD900000203E\n" +":40704000902C0020A42D00204419002084000020F8B504000AD0284E2848B17810290BD0C90605D4012141720846F8BD0220F8BD032141720846F8BD617822780902114371\n" +":407080004DBA0A21032D02D341720A20F8BD1C4F0121386800F0F2F9002801D00720F8BDA01CF9F7DFFA00BA010A60790902014314480160E179A2790902114349BA416083\n" +":4070C000617A227A0902114349BA8160E17AA27A0902114349BAC160617B227B0902114349BA0161084885850420B070386800F09FF90020F8BD000090000020902C002078\n" +":4071000084000020902D00204419002070B50E4C0325A078102808D0C1060C4802D40121017209E00572032070BD094E0121306800F0A4F9002801D0012070BDA5703068BA\n" +":4071400000F076F9002070BD90000020902C00208400002070B50F4CA078102809D0C1060D4802D40121C1710AE00321C171084670BD0A4D0121286800F080F9002801D01E\n" +":40718000012070BD0220A070286800F051F9002070BD000090000020902C00208400002070B50C4C0825A078112803D00A488575082070BD094E0121306800F05FF9002818\n" +":4071C00001D0072070BDA570306800F031F9002070BD000090000020902C00208400002070B5224E0446B1782148102909D0C90603D40121C174084670BD0321C174084684\n" +":4072000070BD61782278090211431A4D49BA6980A1782972012907D0022907D0042914D00221C174084670BDE07804E02079E1780002084340BA104C68600121206800F02E\n" +":407240001DF900280AD0072070BDE01CF9F70AFA00BA000AA17900020843ECE70620B070206800F0E5F8002070BD000090000020902C0020441900208400002092B03F4955\n" +":407280003D488860002080F3108862B6FAF79AF9FDF7DEF8FCF78AFEFCF78CFDFCF7E0FDFCF708FEFCF750FEFCF72CFE3448C26A02210A43C262C06A324C084000900820CE\n" +":4072C0000D9001200E900320002510900F950DA92046F9F71FFD002208212046F9F7E5FD2948C069009029480368C12228492948FDF742FC28A22BA12DA0FDF73DFCF9F77E\n" +":40730000EFF91F4C40342069400002D50120F9F73BFC20690121C90508432061FCF762FE2B4C20222B486169F9F778F90520A0810BA80B9500F063F8206201210CA80C95D2\n" +":4073400000F062F8124960621422083101A8F9F765F9002101A800F0CDF80D49A06114221C3106A8F9F75AF9002106A800F0C2F8E06100F03FF8FEE70004000800ED00E057\n" +":4073800000100240000400500020024000000140C88B00085028020831323A32343A3130000000004D61722032362032303231004275696C64204461746520616E64205427\n" +":4073C000696D653A202573202573200A0D00000060000020EC18002001460020842900D0C81C704710B5002800D1012000F036FF002010BD10B500F09FFF002010BD10B558\n" +":40740000012001F04BF810BD10B5012901D0002010BD03220021012001F052F8040004D000231A46194601F03FF9204610BD000038B5002405460094FFF7CAF800280FD016\n" +":407440006946284601F0BCF9012801D0FF2038BD009800280DD0012007490007486008E000231A461946284601F01EF9012800D0FF24204638BD000000ED00E038B50546C2\n" +":4074800000200090002D11D00024481C10D0002900D00C46FFF79CF8002814D06A460021284601F0C7F9012815D104E0802038BD0024E443EEE7009800280ED0012008491D\n" +":4074C0000007486009E0002322461946284601F019F8012801D0FF2038BD002038BD000000ED00E010B501F033FA012801D000F0C3FF10BD3EB5044608200D46205EFFF722\n" +":407500006BFF02A901910090208A2B4682B22168606801F0F5F9012801D000203EBD02983EBD10B500F08EFE002010BDFFB5044689B000276846878007831D4616460297C8\n" +":40754000002C11D00A98C4420ED02178432903D0F0A0FDF711FB07E0F64861780278914205D0F5A0FDF708FB02200DB0F0BD0A980B00C01E0490F748808807900A98201801\n" +":407580000246F548203A0078FDF706FB190E2A67A6F7F6F5F4F3F2FEF0F0F0F0F0EFEEEDECEBEAE9E8E7F000012802D0022803D085E20120400328E0E84902980A5C201851\n" +":4075C00082700298401C02902028F6D32021A01CFEF79AFE029961188870CF7024203AE0012802D002281DD069E201A90020FFF785FA002804D0DAA0FDF7BEFA68460783D7\n" +":40760000684681880802090A084360800221A01CFEF77AFE2071677106203080CE4902200870F5E101A906A8FFF768FA0290002804D0CBA0FDF7A0FA684607836846008B91\n" +":40764000010AA170E0700221A01CFEF75DFE2071029860710620308081E2012802D0022822D07CE20592D17F0498039181B2A01CFEF74AFE0399814207D005980A99C27FCB\n" +":40768000BFA0C91EFDF778FA8DE0E178A27808021043B04940BA8880002201A9FFF76EFA94E06846878095E0A21C01A90798FFF765FA9BE069468988A01CFEF725FE694604\n" +":4076C0008988611888706946898802986118C87069468888001D34E0012802D002284DD03DE2D17F0498039181B2A01CFEF70CFE0399814207D0ADA0FDF73EFA68468780DA\n" +":40770000022002900FE0E178A27808021043914940BA8880002201A9FFF726F90290002801D068468780684680880102000A014361800221A01CFEF7E7FD2071029860713D\n" +":407740000620308084480178012956D0022988D068468088002884D0B1E1F2E1DFE1DBE1D7E1CCE1BDE16FE15FE198E0F9E10BE083E07FE07BE077E04AE043E0A21C01A90F\n" +":407780000798FFF7F1F831E0012802D0022828D0E5E1D17F0498039181B2A01CFEF7B4FD0399814207D081A0FDF7E6F968468780022002900EE0E178A27808021043654943\n" +":4077C00040BA8880002201A9FFF748F90290002800D066E7684681880802090A08436080A7E7A21C01A90798FFF738F90290002800D15FE7684687805CE769468988002940\n" +":407800007ED1ACE1FFF700FB53480770378054E150484088002810D06CA0FDF7ADF9FF20A0704C4841880A0AE270217103216A46918002210291478004E001A9A01CFEF74A\n" +":40784000DBFF029069468988A01CFEF75DFD69468988611888706946898802986118C87069468888001DF6E6FEF79EFF76E1FFF771FC73E1FFF74AFC70E1D17F0498039130\n" +":4078800081B2A01CFEF740FD0399814203D047A0FDF772F94DE1A01CFFF7DAFB5EE1012802D0022835D00AE1D17F0498039181B2A01CFEF729FD0399814207D03BA0FDF797\n" +":4078C0005BF9684687800220029012E0E178A278080210431F4940BA8880002201A9FEF7F3FF0290002804D03FA0FDF745F968468780684680880102000A0143618000E0D0\n" +":4079000084E00221A01CFEF7FFFC207102986071CCE07FE020496E76616C6964205369676E617475726520307825303278202121200A0D0065000020204944203D2030789D\n" +":407940002530327820213D20307825303278200A0D0000008800002066000020EC1800204572726F7220696E2047657474696E672053656E736F72204944200A0D000000C9\n" +":4079800020435243204C656E677468203D203078253032782C206F72696720637263203D20307825303278200A0D00002043524320766572696669636174696F6E20457287\n" +":4079C000726F72202121200A0D0000004572726F7220696E204D435520697473656C66202121200A0D0000004572726F7220696E2047657474696E67204374726C200A0D76\n" +":407A00000000000069468988002955D0022101702F8054E0A21C01A90798FEF755FF0290002800D10EE7504856E0D17F0498039181B2A01CFEF768FC0399814200D026E71F\n" +":407A4000A01CFFF7B5FA89E0012802D0022838D035E0D17F0498039181B2A01CFEF754FC0399814202D040483C380FE0E178A278080210433D4A40BAD0802179117000234B\n" +":407A800001AAFFF739FA002804D039A0FDF774F868468780684681880802090A084360800221A01CFEF730FC2071677106203080354801780129A5D00770052028800020D1\n" +":407AC00053E52A48A31C017801AAC088FFF714FA02900028A6D026A0FDF74EF868468780B0E6D17F0498039181B2A01CFEF70CFC03998142A3D1A01CFFF772FB2EE023A003\n" +":407B0000FDF73AF8274928A0FDF736F8F8F77AFF24E0FFF7CFF921E0FFF742FB1EE0D17F0498039181B2A01CFEF7EEFB0399814203D00E492448488010E0A01CFEF7BCFD05\n" +":407B40000CE0D17F0498039181B2A01CFEF7DCFB03998142EDD1A01CFEF7DEFD37800A48AAE7092001E50000E8790008880000204572726F7220696E205265616420495322\n" +":407B800050200A0D00000000660000204657205570647420496E69746961746564200A0D00000000050A0008204669726D776172655F757064617465203D20307825303864\n" +":407BC00078200A0D000000000A200000F8B5134C0F46E66805462068001D00F0A1FA681C07D1002F05D021680D48091D00F0D0FAF8BD2068751945602168B54204D2A06B93\n" +":407C0000091D00F0ADFAF8BD606B091D00F0A8FAA06A8542F7D2A562F8BD00000C000020CC010020F8B5054600F0BEFA2A4CA068401CA0602068294F002803D0606900287A\n" +":407C400027D02CE02560A068012828D1002614207043C01900F076FA761C072EF7D31F488C3000F06FFA1D48A03000F06BFA1B48B43000F067FA1948C83000F063FA1748D8\n" +":407C8000DC3000F05FFA15488C3060631430A06305E02068E96AC06A884200D82560606A401C60626864E86A2169884200D9206114214843C019291D00F06AFA00F080FAEA\n" +":407CC0006069002806D02068E96AC06A884201D200F0B8FAF8BD00000C000020F000002070B5114E114C18E000F04CFB3068002817D000F001FF00F057FAF068C568281DD6\n" +":407D000000F00EFAA068401EA0606068401E606000F056FA284600F056F860680028E3D170BD00F0E9FEF8E7B80100200C00002010B5026C0C46002A0CD0C1688B18C3600D\n" +":407D400041688B4201D2194601E00168C1602046F8F764FC10BDF8B5856B174604460026026C002A11D0002F19D0E068F8F756FCE168206C091AE1602268914202D26168B7\n" +":407D8000081AE060022F17D019E02068002816D1606800F04BFE0646002060600FE0A068F8F73CFC216CA0684018A0606168884205D32068A06002E0002D00D06D1E6D1C9B\n" +":407DC000A5633046F8BD10B50446006B00F006FA204600F003FA10BD03210E488902420705D0C01DC0080B4AC000821A891A0A4A0023411809C20839C908C900183A116071\n" +":407E00004B600B600B1A0AC093600120C0075360D0607047E001002058000020044CFFF75FFF20680128FAD900F00CFAF7E70000F0000020FFB581B097000C9C0E460A9D24\n" +":407E4000A5223946206BF8F7FBFB206B3F1FC019C708FF00780701D072B6FEE72218315C20321175315C002902D0401C1028F5D32046403000260090C670072D00D30625E8\n" +":407E8000E5622665201DE56400F067F92046183000F063F924610720401B6462A0616665009806763846049A019900F0F1F820600B98002800D0046005B0F0BD30B51149C4\n" +":407EC00000E011460A688242FBD34B685C18844203D1406818184860084643681C18944209D1084C103C2468A24209D052689A1842600A6812680260814200D0086030BDFC\n" +":407F00000460F9E75800002010B5044600F04CF9A06B002804D0002400F052F9204610BD0124F9E70648416B0968002905D0416BC968C9684968816270470021C943FAE7D3\n" +":407F40000C00002003480068401C72B600D0FEE7FEE7000008000020F8B5044600F024F9254640350526AE57274624370BE0606A00280AD0384600F08DFD002801D000F068\n" +":407F800085F9761E76B2002EF1DC0027FF436F7100F016F900F008F90426AE572046103000900BE0206900280AD0009800F072FD002801D000F06AF9761E76B2002EF1DC7E\n" +":407FC0002F7100F0FDF8F8BDF8B50546002700F0D9F9284E3068002801D1FFF7FDFEF06805423FD1002D3DD00835680708D06807400F0821081A4519680701D072B6FEE74C\n" +":40800000002D2FD0706885422CD81A48103001460C6801E020460C466168A94202D221680029F7D131688C421CD007682168016060680837411B102908D96019420701D0BD\n" +":4080400072B6FEE741606560FFF738FF61687068401A7060B268904200D2B060F0680143002003C400F048FD780701D072B6FEE73846F8BD4800002004490868002803D05F\n" +":408080000868026D521C0265086870470C00002010B50124031F24061C601B1F1960191F024B0B60143940380A6010BD457F000870B50446002008800D4602211748FDF7BC\n" +":4080C0009BFE002829D1200A1921000249054118E0B2014311480838FDF78EFE00281CD10E4C241F20462146FDF786FE002814D10A4E3221361D3046FDF74EFE00280CD10C\n" +":40810000C820FFF76FF929462046FCF7FFFF002803D130213046FDF73FFE70BDA86000004368826801699A60836842685A604A68824201D182684A60002202610868401E93\n" +":40814000086070470146083100224160D243C1608260016100210160704700210161704730B50B685A1C02D00246083202E0026904E02246546825689D42FAD953684B6094\n" +":4081800099608A60516008610168491C016030BD42684A6093688B6093685960916008610168491C0160704772B604480168491C0160BFF34F8FBFF36F8F704708000020B6\n" +":4081C00005490868002804D0401E086000D162B6704772B6FEE700000800002070B500281AD004460D4D083C6068E968084201D172B6FEE72268002A01D072B6FEE788436C\n" +":40820000606000F0BFF860686968401868602046FFF754FE00F070FC70BD00004800002010B506487D21C9000068F8F79DF90449401E48610720086110BD00000000002047\n" +":4082400000E000E00120044900074860BFF34F8FBFF36F8F7047000000ED00E010B502000FD00948006B002801D072B6FEE700F089F800211046FFF7A9FC00F03DFC002821\n" +":4082800001D1FFF7DFFF10BD0C00002001490120C86170470C00002010B50C46002809D0054909681831FFF75BFF01212046FFF78DFC10BD72B6FEE70C00002070B5040002\n" +":4082C00025D0154DE06A2968C96A88421FD2A069002804DB28680721C06A081AA061E06A14220E4E504361698019814210D1201DFFF716FF2868C06AE0622969884200D95A\n" +":408300002861142148438019211DFFF741FF70BD2868C06AE06270BD0C000020F0000020002805D003490A6A0260C9684160704772B6FEE70C0000201CB50E480024019098\n" +":40834000234680220CA100940D4800F0D9FA012803D0401C0CD172B6FEE772B600210548C9432C38816201214161C46000F06CF81CBD00003800002049444C4500000000E3\n" +":408380001D7E00080248016B491C0163704700000C00002010B51348016B002902D00121C16110BD0021C16101690F4A02E0002915D0491E14234B43D358002BF7D01423AA\n" +":4083C0004B439A18536814465B6808345360A34201D15B685360DA680260016110BD72B6FEE700000C000020F000002070B50D46044602211248FDF7FFFC00281ED1104890\n" +":4084000029460838FDF7F8FC002817D1200A1921000249054118E0B201430948001FFDF7EBFC00280AD106480649001DFDF7B4FC002803D1C820FEF7D5FF002070BD00000C\n" +":40844000A86000000103000010B50948016AFF22120411430162016A120211430162FFF7DFFE044900200860F8F734F8002010BD00ED00E00800002010B5F8F73FF8044671\n" +":4084800000F076FA002803D001200349000748602046F8F737F810BD00ED00E010B502460021012000F00CF8041E07D00021416001600B460A46C16000F0F6F8204610BDF5\n" +":4084C000F8B517460E46050016D0002E16D070435030FFF779FD04000CD020465030002E0ED02060266420460121E56300F0A6F84C2007552046F8BD72B6FEE70020E7E768\n" +":408500002460EFE7FFB5002583B0040003D00498002802D006E072B6FEE7206C002801D072B6FEE700F014FA0026002804D10598002801D072B6FEE7FFF736FEA76B002FB4\n" +":4085400026D0E56820460499FFF7F2FB0698002810D0E560606A002807D02046243000F099FA002801D0FFF76DFEFFF729FE012007B0F0BD7F1EA7632068002802D1FFF7C5\n" +":408580007BFD606020690028EFD020461030E6E70598002802D0002D03D006E0FFF710FE27E06846FFF7BCFE0125FFF709FEFFF7E9FEFFF7F9FD2046403004214156491CD7\n" +":4085C00000D1067105214156491C00D14671FFF7F7FD05A9684600F069F9002820460AD0FFF7BAFC00F088FA2046FFF78DFC0028A2D00020BCE7FFF787FC002818D0206818\n" +":40860000002806D1FFF7D0FD6068FFF757FEFFF7D7FD204624300599FFF73EFE2046FFF79BFC00F069FA002886D1FFF70BFE83E72046FFF791FC00F05FFA7DE770B50D46D5\n" +":40864000040025D0FFF7B0FD216CE06B48432168411861600021A1632168A160E06B216C401E484321684118E1600021C94320464030017141713038002D0BD0FFF762FDD9\n" +":4086800020462430FFF75EFDFFF79AFD012070BD72B6FEE721690029F6D000F0FBF90028F2D0FFF7CFFDEFE7FFB5002683B01D46040003D00498002802D006E072B6FEE718\n" +":4086C000206C002801D072B6FEE7022D04D1E06B012801D072B6FEE700F03AF90027002804D10598002801D072B6FEE7FFF75CFDA06BE16B884207D3022D05D00598002895\n" +":4087000017D0002E18D01BE02A4620460499FFF722FB616A002903D02046243000F0BAF9002801D0FFF78EFDFFF74AFD012007B0F0BDFFF745FD22E06846FFF7F1FD012668\n" +":40874000FFF73EFDFFF71EFEFFF72EFD2046403004214156491C00D1077105214156491C00D14771FFF72CFD05A9684600F09EF8002806D02046FFF7EFFB00F0BDF900209F\n" +":40878000D5E7FFF711FDA06BE16B884210D1FFF717FD204610300599FFF77EFD2046FFF7DBFB00F0A9F90028A0D1FFF74BFD9DE7FFF706FD2046FFF7CFFB00F09DF995E7F8\n" +":4087C00070B50D46040004D0206C002803D072B6FEE772B6FEE72068002804D16068002801D072B6FEE7F7F789FEA26B0646E06B904219D92146403105200856521CA2638A\n" +":40880000421C03D0401C487101240EE0606A0028FAD02046243000F03DF90028F4D0002DF2D001202860EFE700243046F7F76AFE204670BDF7B582B0040003D003980028EE\n" +":4088400002D006E072B6FEE7206C002801D072B6FEE7F7F753FE0090A66B002E1FD02046403004254557074620460399FFF760FA761EA663681C03D06D1C3D7101240FE02B\n" +":4088800020690028FAD02046103000F003F90028F4D004980028F1D001210160EEE700240098F7F72FFE204605B0F0BD70B50D4604001AD0002D1AD0FFF776FC0F4AD168CC\n" +":4088C0002868431C0FD02368126A934202D062688A420ED96268891A81420AD2401A28602046FFF71DFD002404E072B6FEE772B6FEE70124FFF764FC204670BD0C000020BF\n" +":40890000FFB585B0164690000F9FFFF75DFB05001AD05C20FFF758FB040012D0256300210E9803910197009002943246089B06990598FFF77FFA2046FFF774F9012009B0C2\n" +":40894000F0BD2846FFF74AFC0020C043F7E7000006484169002904D0006B002803D000207047012070470220704700000C000020F8B52C4C0027206B002808D0A069401C54\n" +":40898000A061E069002800D001273846F8BDE668761CE6600ED1606B0068002801D072B6FEE7606BA16B6163A063206A401C2062FFF7B8FAA06A86420AD3606B0068002824\n" +":4089C00010D0606BC068C568686886420DD2A06220681421C06A4843134908580128D0D90127CEE70020C043F1E7281DFFF798FBA86A002803D028461830FFF791FBE86AC1\n" +":408A00002169884200D920611421484306494018291DFFF7BDFBE86A2168C96A8842CCD30127CAE70C000020F000002070B500210446002828D0154D2868844201D072B640\n" +":408A4000FEE7206D002808D0401E2065E36CE26A9A4219D0002802D016E072B6FEE7201DFFF75EFBE06C0721E062081AA061E06A2969884200D92861142148430449401872\n" +":408A8000211DFFF785FB0121084670BD0C000020F000002070B5C068C468002C0BD0204618300646FFF73CFB114D286B002804D0314610480FE072B6FEE7201DFFF730FB6C\n" +":408AC000E06A2969884200D92861142148430949B4394018211DFFF75BFBE06A2968C96A884202D90120E86170BD002070BD00000C000020A4010020F8B5284C0025206B34\n" +":408B00002E46002808D0FFF74FFB206B401E2063206B002802D03DE072B6FEE7A168204F00291DD136E0F868C56828461830FFF7F7FA281DFFF7F4FAE86A2169884200D9EF\n" +":408B40002061142148431649B4394018291DFFF71FFBE86A2168C96A884201D30120E06138680028DFD1002D01D0FFF7DBF9A569002D09D00127FFF7FBFE002800D0E76101\n" +":408B80006D1EF8D10020A061E069002802D00126FFF758FBFFF714FB3046F8BD0C000020A401002000000000000000000102030406070809030406080C10182030000000AB\n" +":408BC00000010203040000006D61696E00000000A4280208D9420008000000000000000000010000982802088D32000800000000000000008000000053746172744465669E\n" +":408C000061756C745461736B0048414C5F4932435F536C617665547843706C7443616C6C6261636B0048414C5F4932435F536C617665527843706C7443616C6C6261636B7D\n" +":408C40000048414C5F4932435F4572726F7243616C6C6261636B0048414C5F4932435F4164647243616C6C6261636B0048414C5F4932435F4C697374656E43706C744361BC\n" +":408C80006C6C6261636B0048414C5F4932435F4D656D547843706C7443616C6C6261636B0048414C5F4932435F4D656D527843706C7443616C6C6261636B0048414C5F4918\n" +":408CC00032435F41626F727443706C7443616C6C6261636B0048414C5F4750494F5F455854495F43616C6C6261636B004669726D776172655F557064617465004F70746905\n" +":408D00006F6E4279746550726F6700424642325F636865636B5F656E61626C6500000000555956590005D0020100780001000000000000000000000055595659800738043D\n" +":408D400001004600010000000000000000000000555956598007B00401003C00010000000000000000000000555956590005D0020100780001000000000000000000000027\n" +":408D8000555956598007380401004100010000000000000000000000555956598007B00401003C000100000000000000000000000009980001000000F1FFFFFF0F000000DB\n" +":408DC0000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072\n" +":408E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032\n" +":408E400000000000000000004272696768746E65737300000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000B8\n" +":408E800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B2\n" +":408EC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072\n" +":408F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031\n" +":408F400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F1\n" +":408F800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1\n" +":408FC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071\n" +":409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030\n" +":4090400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0\n" +":4090800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0\n" +":4090C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109980001000000000000001E000000AF\n" +":409100000A00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024\n" +":4091400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EF\n" +":409180000000000000000000436F6E747261737400000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000040\n" +":4091C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F\n" +":40920000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E\n" +":4092400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE\n" +":4092800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AE\n" +":4092C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006E\n" +":40930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D\n" +":4093400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ED\n" +":4093800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AD\n" +":4093C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006D\n" +":409400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209980001000000000000003C0000004C\n" +":4094400010000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DB\n" +":4094800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC\n" +":4094C000000000000000000053617475726174696F6E0000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000021\n" +":40950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B\n" +":4095400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EB\n" +":4095800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB\n" +":4095C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B\n" +":40960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A\n" +":4096400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA\n" +":4096800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA\n" +":4096C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A\n" +":409700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029\n" +":409740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0998000100000000000000010000003A\n" +":4097800001000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7\n" +":4097C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069\n" +":40980000000000000000000057686974652042616C616E6365204175746F0000000000000000000000000000020000000000000000000000000000000000000000000000A6\n" +":4098400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E8\n" +":4098800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A8\n" +":4098C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068\n" +":409900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027\n" +":4099400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7\n" +":4099800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7\n" +":4099C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067\n" +":409A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026\n" +":409A400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6\n" +":409A8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100998000100000028000000F4010000D7\n" +":409AC000DC00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089\n" +":409B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025\n" +":409B4000000000000000000047616D6D61000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000E1\n" +":409B800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5\n" +":409BC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065\n" +":409C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024\n" +":409C400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4\n" +":409C800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4\n" +":409CC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064\n" +":409D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023\n" +":409D400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3\n" +":409D800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3\n" +":409DC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A099800010000000A0000001027000066\n" +":409E0000F81100000A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F\n" +":409E400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E2\n" +":409E8000000000000000000057686974652042616C616E63652054656D7065726174757265000000000000000120000000000000000000000000000000000000000000000C\n" +":409EC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062\n" +":409F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021\n" +":409F400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1\n" +":409F800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1\n" +":409FC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061\n" +":40A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020\n" +":40A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0\n" +":40A0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0\n" +":40A0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060\n" +":40A100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B09980001000000000000007F000000E3\n" +":40A1400010000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CE\n" +":40A18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009F\n" +":40A1C000000000000000000053686172706E657373000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000087\n" +":40A20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E\n" +":40A2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DE\n" +":40A28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009E\n" +":40A2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005E\n" +":40A30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D\n" +":40A3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DD\n" +":40A38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009D\n" +":40A3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D\n" +":40A40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C\n" +":40A4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013099800010000000100000028000000FE\n" +":40A48000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009A\n" +":40A4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C\n" +":40A5000000000000000000004761696E000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000007B\n" +":40A5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DB\n" +":40A58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009B\n" +":40A5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B\n" +":40A60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A\n" +":40A6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DA\n" +":40A68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009A\n" +":40A6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005A\n" +":40A700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\n" +":40A7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D9\n" +":40A7800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001099A00010000000000000002000000F2\n" +":40A7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059\n" +":40A800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018\n" +":40A8400000000000000000004578706F73757265204175746F0000000000000000000000000000000000000003000346756C6C20464F56204175746F204D6F6465000000C2\n" +":40A8800000000000000000000000004D616E75616C204D6F6465000000000000000000000000000000000000000000524F49204261736564204175746F204D6F646500004E\n" +":40A8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058\n" +":40A900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017\n" +":40A9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D7\n" +":40A980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097\n" +":40A9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057\n" +":40AA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016\n" +":40AA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D6\n" +":40AA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096\n" +":40AAC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002099A0001000000010000001027000078\n" +":40AB000038010000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DB\n" +":40AB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D5\n" +":40AB800000000000000000004578706F73757265204162736F6C757465000000000000000000000000000000012000000000000000000000000000000000000000000000BA\n" +":40ABC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055\n" +":40AC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014\n" +":40AC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D4\n" +":40AC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094\n" +":40ACC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054\n" +":40AD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013\n" +":40AD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D3\n" +":40AD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093\n" +":40ADC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053\n" +":40AE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D099A0001000000000000000F00000032\n" +":40AE400008000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9\n" +":40AE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092\n" +":40AEC000000000000000000044656E6F697365000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000006A\n" +":40AF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011\n" +":40AF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D1\n" +":40AF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091\n" +":40AFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051\n" +":40B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\n" +":40B0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0\n" +":40B080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090\n" +":40B0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050\n" +":40B10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F\n" +":40B140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001409980001000000000000000100000018\n" +":40B18000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008E\n" +":40B1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F\n" +":40B200000000000000000000486F72697A6F6E74616C20466C6970000000000000000000000000000000000002000000000000000000000000000000000000000000000037\n" +":40B2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CE\n" +":40B28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008E\n" +":40B2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004E\n" +":40B30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D\n" +":40B3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CD\n" +":40B38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008D\n" +":40B3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004D\n" +":40B40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C\n" +":40B4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC\n" +":40B4800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015099800010000000000000001000000D4\n" +":40B4C000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004B\n" +":40B50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B\n" +":40B540000000000000000000566572746963616C20466C697000000000000000000000000000000000000000020000000000000000000000000000000000000000000000E4\n" +":40B58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008B\n" +":40B5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004B\n" +":40B60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A\n" +":40B6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA\n" +":40B68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008A\n" +":40B6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004A\n" +":40B700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\n" +":40B7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9\n" +":40B780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089\n" +":40B7C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026099A000100000000000000FFFF000081\n" +":40B800008080000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007\n" +":40B8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C8\n" +":40B880000000000000000000524F49204578706F73757265000000000000000000000000000000000000000001200000000000000000000000000000000000000000000002\n" +":40B8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048\n" +":40B900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007\n" +":40B9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7\n" +":40B980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087\n" +":40B9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047\n" +":40BA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006\n" +":40BA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6\n" +":40BA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086\n" +":40BAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046\n" +":40BB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024099A00010000000800000040000000F5\n" +":40BB400008000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5\n" +":40BB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085\n" +":40BBC0000000000000000000524F492057696E646F772053697A650000000000000000000000000000000000012000000000000000000000000000000000000000000000E7\n" +":40BC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\n" +":40BC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4\n" +":40BC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084\n" +":40BCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044\n" +":40BD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003\n" +":40BD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3\n" +":40BD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083\n" +":40BDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043\n" +":40BE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n" +":40BE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031099A0001000000401F000040420F00FD\n" +":40BE8000803E0000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3\n" +":40BEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042\n" +":40BF000000000000000000004578706F7375726520436F6D70656E736174696F6E000000000000000000000001200000000000000000000000000000000000000000000075\n" +":40BF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C1\n" +":40BF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081\n" +":40BFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041\n" +":40C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n" +":40C0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0\n" +":40C080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080\n" +":40C0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040\n" +":40C1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF\n" +":40C1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BF\n" +":40C180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A099A00010000000000000002000000AF\n" +":40C1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F\n" +":40C2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FE\n" +":40C2400000000000000000004672616D652053796E630000000000000000000000000000000000000000000003000344697361626C65204672616D652053796E6300000094\n" +":40C2800000000000000000000000004672616D652053796E6320333020487A000000000000000000000000000000004672616D652053796E6320363020487A000000000061\n" +":40C2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E\n" +":40C3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FD\n" +":40C3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BD\n" +":40C38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007D\n" +":40C3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003D\n" +":40C4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FC\n" +":40C4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BC\n" +":40C48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C\n" +":40C4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003C\n" +":40C5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FB\n" +":40C5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BB\n" +":40C58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B\n" +":40C5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B\n" +":40C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FA\n" +":40C6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BA\n" +":40C68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A\n" +":40C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003A\n" +":40C7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F9\n" +":40C7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B9\n" +":40C780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079\n" +":40C7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039\n" +":40C8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8\n" +":40C8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B8\n" +":40C880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078\n" +":40C8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038\n" +":40C9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F7\n" +":40C9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B7\n" +":40C980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077\n" +":40C9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037\n" +":40CA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6\n" +":40CA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B6\n" +":40CA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076\n" +":40CAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036\n" +":40CB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F5\n" +":40CB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5\n" +":40CB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075\n" +":40CBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035\n" +":40CC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4\n" +":40CC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4\n" +":40CC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074\n" +":40CCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034\n" +":40CD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3\n" +":40CD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3\n" +":40CD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073\n" +":40CDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033\n" +":40CE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2\n" +":40CE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B2\n" +":40CE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072\n" +":40CEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032\n" +":40CF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F1\n" +":40CF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1\n" +":40CF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071\n" +":40CFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031\n" +":40D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0\n" +":40D0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0\n" +":40D080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070\n" +":40D0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030\n" +":40D1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EF\n" +":40D1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AF\n" +":40D18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F\n" +":40D1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002F\n" +":40D2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE\n" +":40D2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AE\n" +":40D28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006E\n" +":40D2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E\n" +":40D3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ED\n" +":40D3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AD\n" +":40D38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006D\n" +":40D3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D\n" +":40D4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC\n" +":40D4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC\n" +":40D48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C\n" +":40D4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C\n" +":40D5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EB\n" +":40D5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB\n" +":40D58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B\n" +":40D5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B\n" +":40D6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA\n" +":40D6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA\n" +":40D68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A\n" +":40D6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A\n" +":40D7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E9\n" +":40D7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A9\n" +":40D780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069\n" +":40D7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029\n" +":40D8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E8\n" +":40D8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A8\n" +":40D880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068\n" +":40D8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028\n" +":40D9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7\n" +":40D9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7\n" +":40D980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067\n" +":40D9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027\n" +":40DA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6\n" +":40DA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6\n" +":40DA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066\n" +":40DAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026\n" +":40DB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5\n" +":40DB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5\n" +":40DB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065\n" +":40DBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025\n" +":40DC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4\n" +":40DC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4\n" +":40DC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064\n" +":40DCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024\n" +":40DD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3\n" +":40DD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3\n" +":40DD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063\n" +":40DDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023\n" +":40DE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E2\n" +":40DE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2\n" +":40DE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062\n" +":40DEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022\n" +":40DF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1\n" +":40DF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1\n" +":40DF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061\n" +":40DFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021\n" +":40E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0\n" +":40E0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0\n" +":40E080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060\n" +":40E0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020\n" +":40E1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DF\n" +":40E14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009F\n" +":40E18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005F\n" +":40E1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F\n" +":40E2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DE\n" +":40E24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009E\n" +":40E28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005E\n" +":40E2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E\n" +":40E3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DD\n" +":40E34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009D\n" +":40E38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D\n" +":40E3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D\n" +":40E4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DC\n" +":40E44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C\n" +":40E48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C\n" +":40E4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C\n" +":40E5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DB\n" +":40E54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009B\n" +":40E58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B\n" +":40E5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B\n" +":40E6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DA\n" +":40E64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009A\n" +":40E68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005A\n" +":40E6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A\n" +":40E7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D9\n" +":40E740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099\n" +":40E780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059\n" +":40E7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\n" +":40E8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D8\n" +":40E840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098\n" +":40E880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058\n" +":40E8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018\n" +":40E9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D7\n" +":40E940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097\n" +":40E980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057\n" +":40E9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017\n" +":40EA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D6\n" +":40EA40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096\n" +":40EA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056\n" +":40EAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016\n" +":40EB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D5\n" +":40EB40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095\n" +":40EB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055\n" +":40EBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015\n" +":40EC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D4\n" +":40EC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094\n" +":40EC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054\n" +":40ECC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014\n" +":40ED000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D3\n" +":40ED40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093\n" +":40ED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053\n" +":40EDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013\n" +":40EE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D2\n" +":40EE40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092\n" +":40EE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052\n" +":40EEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012\n" +":40EF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D1\n" +":40EF40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091\n" +":40EF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051\n" +":40EFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011\n" +":40F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0\n" +":40F040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090\n" +":40F080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050\n" +":40F0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\n" +":40F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CF\n" +":40F14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008F\n" +":40F18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F\n" +":40F1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F\n" +":40F2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CE\n" +":40F24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008E\n" +":40F28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004E\n" +":40F2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E\n" +":40F3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CD\n" +":40F34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008D\n" +":40F38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004D\n" +":40F3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D\n" +":40F4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC\n" +":40F44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C\n" +":40F48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004C\n" +":40F4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C\n" +":40F5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CB\n" +":40F54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008B\n" +":40F58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004B\n" +":40F5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B\n" +":40F6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA\n" +":40F64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008A\n" +":40F68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004A\n" +":40F6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A\n" +":40F7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9\n" +":40F740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089\n" +":40F780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049\n" +":40F7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\n" +":40F8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C8\n" +":40F840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088\n" +":40F880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048\n" +":40F8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008\n" +":40F9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7\n" +":40F940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087\n" +":40F980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047\n" +":40F9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007\n" +":40FA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6\n" +":40FA40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086\n" +":40FA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046\n" +":40FAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006\n" +":40FB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5\n" +":40FB40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085\n" +":40FB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045\n" +":40FBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005\n" +":40FC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4\n" +":40FC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084\n" +":40FC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044\n" +":40FCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\n" +":40FD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3\n" +":40FD40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083\n" +":40FD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043\n" +":40FDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003\n" +":40FE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C2\n" +":40FE40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082\n" +":40FE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042\n" +":40FEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n" +":40FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C1\n" +":40FF40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081\n" +":40FF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041\n" +":40FFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n" +":020000040801F1\n" +":4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0\n" +":400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080\n" +":400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040\n" +":4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n" +":4001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BF\n" +":40014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007F\n" +":40018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F\n" +":4001C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF\n" +":4002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE\n" +":40024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007E\n" +":40028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E\n" +":4002C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FE\n" +":4003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BD\n" +":40034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007D\n" +":40038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003D\n" +":4003C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FD\n" +":4004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BC\n" +":40044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C\n" +":40048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003C\n" +":4004C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FC\n" +":4005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BB\n" +":40054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B\n" +":40058000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B\n" +":4005C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FB\n" +":4006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BA\n" +":40064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A\n" +":40068000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003A\n" +":4006C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FA\n" +":4007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B9\n" +":400740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079\n" +":400780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039\n" +":4007C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F9\n" +":4008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B8\n" +":400840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078\n" +":400880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038\n" +":4008C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8\n" +":4009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B7\n" +":400940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077\n" +":400980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037\n" +":4009C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F7\n" +":400A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B6\n" +":400A40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076\n" +":400A80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036\n" +":400AC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6\n" +":400B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5\n" +":400B40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075\n" +":400B80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035\n" +":400BC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F5\n" +":400C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4\n" +":400C40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074\n" +":400C80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034\n" +":400CC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4\n" +":400D000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3\n" +":400D40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073\n" +":400D80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033\n" +":400DC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3\n" +":400E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B2\n" +":400E40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072\n" +":400E80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032\n" +":400EC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2\n" +":400F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1\n" +":400F40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071\n" +":400F8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050003D800000000000003CC54A20B334E\n" +":400FC000543E000771E40C0071DC00005002029C501C0F00502B000200400006503E00015018FD9A501F0006000000010100000200800000502E010050450002100000339C\n" +":4010000050410002FD00030050340800500A02005030208054403C0E505A0E3E507500030CCC0CCC080071CC14085088001150930004000CFFBEFAE1399950A6399950A06A\n" +":401040003FEF507E0199507B00020CCC100050FE00C850F4033350F100020CCC1CCC50FA014750F700020B33133350EE033350DC012C50C8033350C500020CCC1CCC50D021\n" +":40108000033350CD000213331CCC50D800A350D5000206660CCC50A8000250BAFFFF50AA400450B8020C50BD0002640C001852CA043F53160147531CFFD8531A0CCC52D6C7\n" +":4010C0000FAE5322200053410002D80004007078000453240C0053280400714B000204000400551000CC52B700025DE77EEF52BF000401990199019901995539000310006D\n" +":401100001000100053E5000200CC00CC54B201475514040055120080544E0019544C00035049000500000000023200CC2000548900088000F8008000FE6709997E668000B7\n" +":401140007E6654A81000300E00BB20090002400040003009000240004000400900024000400010128000118D00020080008011670004000000004000400011910003010071\n" +":4011800000800080F039000200003390E0010002000100001186038961140006118900020000000060F1000280008000610B0005000009C407D0012C00146116001960FC8E\n" +":4011C0000FD76126000860E000A660E500020186A00060E20CCC613296003016303F601D00020000653860164000201000705398370F202E000140100000100900020001D0\n" +":40120000FFDD20300014302E0014403000145344004F52AA0000202C03F1302C03F1402C03F111750006FFFFAFBAFFFFB0FEFFFFB18260180001600C1211604A032050327F\n" +":40124000400071C400C1201400002012005120010002078004B02022080020206400202500040000208D0000208D3014000030010002078004B030201E0030250004000019\n" +":4012800082350001046A30220419300E000040140001400100020280019040203C0040250004000040F1000040F140220419401200527078000460B10008A41CAF3C000076\n" +":4012C0000000000000000000A32060004F3820100160601640005440000071C205A671C002006025000200300000602D0002002F030160390002001C0200205100080001AC\n" +":4013000000030001000300010000000100032065000A00030000000100030000003E0000002D000100FF30550008000100030001000300010000000100033069000A000360\n" +":401340000000000100030000003E0000002D000100FF40510008000100030001000300010000000100034065000A00030000000100030000003E0000002D000100FF6029AE\n" +":40138000000200010000000006000008000100010300B6300000000000006538380000F8443038CB4086A201AE129A0129AC130EE086F84C89CE069980F26469ABD03B821C\n" +":4013C0000310C680423E9C5E66103080D20877A5411040C1681E083D6AD65E9C291EF4D5105041404A88115BB47244C938059F46B5887C0F04081520686C0F702891344199\n" +":40140000634016EC93D90839886882A6882C6902DE8B619EC0099F4329082C69C300C06C1FFD024220A9A0C10430301072757105671105403BFD0060EF2163F486D18CA1C0\n" +":40144000C0856A82004B92721000C133AFB01003B748E11747C678083170548219BD24B872000A07847D36C0433610990BBD240C43023D186D32C00918F36B40D320357CD9\n" +":4014800007E523303C6800FD13B63E0FFC13600102CE6A2206D17642B00113B3C814A60490A080EF3F110065040D4501B45804841078011A21C0180506BC72A04D50DF9E10\n" +":4014C000CE881A370261276A8A9106401C3BF5F8840059DD1A0391D2329FBE8D3F225494404D0D7A775443CEAD2E40DA98130A80B32940276019A840E39922C7AF51C7BA69\n" +":40150000D346605BD618486FAFA20FEFCD82081A20F785124B7F98104FD233423103E10230822D267F9D2050F40F744C988027686BBECC203906A86F57A20891BD4DB046AD\n" +":401540001F339B23D011340142400B3FCC3EAE3B104CA0083A6F68B7FAB104792CB0822697A81BC7A25C480C20824083AC5504A196853812834AE860376DF68F85548C394F\n" +":40158000182A190038F7440E3E20800F11BD27B88D530E2C232D309B11A04D9A24E7A1D78A0D12752275913CA279913EA27D9141BDBB0940693141058E87771283C366A27B\n" +":4015C000507A20B46240A148A18344A248A26451A8A3645228A46452A8A5645328A66453A8A7645428A86454A8A9645528AA65C987CDC7C6F8230A056245641A256A456B05\n" +":4016000022B95E16971821019201D55580C45A06915F0625794204C108149016A030D0445A0691610625829162A2C59164A2C99166A2CD9168A2D1916AA2D5916CA2D991E2\n" +":401640006EA2DD9170A2E19172A2E59174A2E99176A2ED9178A2F1917AA2F5894206C1081C901E9348BE891620D12FD22FCA1040D02FE15060C048C028411821049204D4CC\n" +":401680000A2ADC00C46A06918306260A9184A308A1B7F81850A81A461C18986A46228C465E2613160C5523194633128417821060D043B793AB96F61EDA4C23D868D70040F8\n" +":4016C00011EF6F841009A1EF8C5C16B3B647DC13C202709F011F4DC47828410FBCE2B858D24808FDD81EC210650F08FD70409017120DD7E5E853A2206E941216CD02434103\n" +":40170000091A0C23E67F62243819A163161240C067BD108891F2FAA15D88248990CFA5130897930F6DACCC2012895C7C24C77CCE224C090CF9A098AF2A1BD526107A45E824\n" +":40174000A4C24C7666514309322623ACB89609A4806E0AA824DF7F7C14109373C1516126E28406B5D0947D7DB8537094E1E23CDCDA8A73B19F0B8911540623C01A88AD11E9\n" +":4017800011F4405115B4A84ADE28CC53E095D1821134570588F9A1B08AE0F11F42DA115C4423DE94C457C6095F8E8C4AF93095F87204AF1E11EF4AA22C01067D0B944585F1\n" +":4017C0001C12C26212C24025852A1E421538CB4CB0E32D4202D2012C2A70405A082588388F9A2008B10A11F249F11662C23E94DC22CF840D14C425A4D0555C25A61441EEE4\n" +":401800008B83E102C52612D78954150212E02047D0BB045C8588FA2C688BA4BD104445E7A17D0A9D097856354C04BE0A1A97097C2E354B04BF3B11F4304118064242A24CD3\n" +":4018400011E153F098A2A3898A702898D1855602631288F80EB88D91611F139611B5D430E53109B73508454004DB2A11F467811BB50426EC409BD3A09BDE8D0429F84DEE71\n" +":40188000AB40268DFA182134609BF4E04E1DFC20426C859138A76109A084E79709D291D93E09DBD0AB43DC04F2001F12C2EFA981CCCC20988C600100AA78426241000403D0\n" +":4018C0008822511012386F5A263A2BEA407F433F11590824A25BBFA0B1408582F11026A5058A300C01B5E02C19888212423411054EC4FA1A405805BB79590639D0D0803E23\n" +":40190000A2DC1007A2B14608094284193400C3480CB4B0B0C034D03689A406C38B10681420E340EA57BC0300184B7BA01A3BE49884DD20C420EF29C91E94231006C305E8B0\n" +":401940006C41004232511F43650DEF304E30008A5480452E81D5115098BC012EDD6A2C02B03A8D2380346B7AC51C40C1981DEBA391EC920123CFF3FCFAF18DA884401F7444\n" +":40198000E490F7B1B1CF9FB708FA314703A410F5CC5A072728F74810F5F04A2691C06D821CA7C933780C3E81FF454789A46DA06EA060EEAC53EDF96101CFE40E0374011FED\n" +":4019C0004C0F27510FA816C801E84C62068C102CF29E4380440980011D21AF9BB38FBE9287B202C407347AED6C4DEDEDEC7ACD70799948998340BBE2FFD101872ECFA1328D\n" +":401A0000E0E4084C2010220AAD061D66E43E169921E87A2E0EF36780F51F8AD48878130700BFA9699108835C0A40348EA146973041408830DF2408FA3502310014057B4782\n" +":401A4000A44560700F09C34E974723E8F00840AC3641E1DD61EDCB3191226E18252F146D1E6F862040AC0EFAF5C889A084300BFD40AE46C7100512B25630C2C1E5E31B237E\n" +":401A800063B5D5C8080BA4663D1BC019E004732C2263858D0F66751F9CE3C4270C24E6720EA648504201200F33752F49830F8A3FC6284E8EB9A6106BB2FF47D410A7430368\n" +":401AC0009B08898A48025D170C4079540EFAF39881508C411C4220868DA25EF508F0CB12BE3E0F13B0C5E46483C050C7A60BC40F1FA4E437065BD85889A5F0C23283B2342A\n" +":401B00004EC038E524033EB2A511AA6931693F0BAE8915293129309FA5F18E868751940F7E908CE881F83A47885C9F615FA5D52364078351240084A1AF5F858F86B354AAB6\n" +":401B4000C0AAB468F91C1D2FE8218741AF14D00140880387D3480E06078860C40308C30ECD4632D0238E33F4781C469F3BDE146881A12A162723F83CE2EF9357A04101A0F1\n" +":401B8000374EC10CCA67E169D2F9A54C83A12CCBBB6284431889A28860E994953D5B5461D06BC1DC93C62003A0D6121040F02A527B01FCBCFC5040A8E20444870C6428606A\n" +":401BC00007C142E42A2B0209019A9C1940AD9310C60A75AFA082FD5DAE5DD2142201A21D45075715946003A8786945518238B9CC98F1923102456077CB9A83E8A431E7B7BA\n" +":401C000063E0DCD207FC215C5C91244E802C090FA3442D402B60052BA6609066540112413A02560072A2C5824070060100FBAC20458F11F48CDA4441B008EFD907E72B6134\n" +":401C4000C3AA38D24005A1E40E02949401B068B6163BFEC8BA0A4441A2C0584306F80A6C033121E62E62E841610650263C1A582098360D96DDAE762780776720B700007866\n" +":401C80008EB1F5D6818957C00F9E23C814EB8204307405BC87D3C8445C49043347D88004018B3042407485217A5430C3BECE0D2A0A6118260CF66108CDA0C0556551F4B1C5\n" +":401CC000C10260D76834884E3E86A3A8C6129040D82852F49D98CF80581B0058FA408A7484BD2B8C22D9D0701735143D14A041B7772418F43A5BD80230C83FB04918908307\n" +":401D00006302317D57E24789A34E8ED53064003E74972E26162691D5257440ED6281038743242420814048B400252602A065280E472B9E960DF5FE113420693A1384C1A790\n" +":401D40004C7611F6384B807A08A5E44E8505A787A2842620BB4D60400A9F2AA810477F8B100E9B088099FC7428011A452AB201C863B3741000C5560D5A805E00B13D19DB43\n" +":401D8000C55E48DA37EE3609E007A0D293BC81BFDAD463BB50C9A25D840417458789A41A623000709D008741AF7CCD1B120591849D00E1900713013B6C1A7D58E220012470\n" +":401DC0004E80BE4E421E50BC380DA0120383100426ED01B109BBBDD88CAF5FE3880D5FC40DC9C47432A107B89584CC0221481A4400330095832AA485DA76241302BDDF2484\n" +":401E000033E071CE010179DCD0C581664C1CC4262901F467109EC0A498818401C402BE3202201C230C28F1930700023A0D67010F34082BE52A310A8A48E20BFA4974785071\n" +":401E400038F542C889151065B0E03D0CE5C0CC5CC319663C02751E3E2121A3002E21011B71087E41233187642B0DBB461D1271009C791547118C190B6A78024ED11099F1B2\n" +":401E800041A801A4C40C82B8B0A0813CCA4E7E202380C6085B1E682A46EC4A54D44BD23FB8B8087F288A438074EA3A3100C55EE2D3298444009AEB633ECD8841AB9160D421\n" +":401EC000028D207460E591E8015EA35B1F60CD1F66640B0434315CD237380E2940862032E5C1B998780538FA98C04903C808EC39B20289697173CE61238EF04F8E43082727\n" +":401F000041112318F5A1708F279F5D289768FC0CCC03723D79CA3D368420685BD8A1420C841244890EC91319290667800BEB9D228700284692A5EBAC52E0B962015D1A54BE\n" +":401F4000244AAF167D99E57599F8D630F95A688567B1083F9E6138280A19F12800C481FE6584A274D003F02878887DA0BE60276ABC989850A00305DD4EA0406F70BE0D5CFF\n" +":401F8000176E0B0F3C8C109D0EDC3A12D7B548079E34092DD3AFE33E103E169200C7678509DB5228988A4680E635F89064583401AE17A24401403C8792046E9102080E056D\n" +":401FC0002186D1A466789D307C5D223E7F271050D5047BFA384111E46025815AD5206015870292E79160164C17660BF7F4C17A93290F5E892170D09489795570888F6094D9\n" +":4020000023E53531333CAF4A2381750820725DB9582C01E3A194380356064016C6822D82D66C13C2C0291516451006290B0D2052211A95944003142AA222C817979D9D846A\n" +":40204000AABF503BF71C4151CC9308C000D0CF05C5EE747B26354210124303A201B83F8404079F6EC430B659F3C49900C0486121122B0B811FC966821F4FA57FA073BC2127\n" +":40208000206311283C59A03D04C621130170803C8053D225804BDB74260B91FD02AC254810354DC61503A30737BC113E6F29C866C41B2806737C213D4033066F09784AC01A\n" +":4020C000233330C1850A1300100B48696905C98107950B64A4562C0B844BC180067D53BB4B0D892A24A0E23102332981E7321C0F18582994E802A524C24CF953884CF98DFD\n" +":4021000042DC20EE292103C081D81D18380F015194A4A03FC853EED5C22C0E0B8502AB10C01007310E030F07F9956F4303AF482B080DF882C1D1D3CDE91B00E1B203D4F14D\n" +":4021400002A0AD1F8B182270571A10E24724724601EA1A825EBB82137C003A40FAC04AAF92ABD2ABA2094F5E865518A43D6BD8216009CB2D06B8C092489304D053200E3F2E\n" +":40218000A99901E612000571B8CDC628958301F0809957C97496690F3D1EB433E1622A01F040A12409D8884E1F3883A36FC09E46C6E6092409F7ACB8F6B4409353998B4AD0\n" +":4021C000754CAFB04B07A97146190C0700358C26CCB0011056C28AF76DD0CEC06601DE9389300C243D4233026D204130B5807CC0027C60362928C94C616F623A008AC844A9\n" +":40220000BC090F5B8BCC844ABEC0A9EC77F204A6A1034EE9A480E2B94EC42B332844BC1C06208414007B2C306D66184F88E8ECC39108CD20387A6020AFE607010BBB5484F5\n" +":40224000CFEAEF7101EBC0BD3CAE91E43C605B3C07601BA67E808041C2804224C03E814E103F90AD080F7EEBC5D0163AF4EC51B2481832311E0D21E578401DA449787C88E8\n" +":4022800086F348717FE26D62480DA0B7313B3B9983D786A2690D1E68624AE5F0B938882282E57003014AB3002C14B9802E5401B856A8144D0A9C44C8841C25E5D0FD426878\n" +":4022C0008B7D2CBA361240CC2C4121887A264742E8442C4533AC85264753AC832C4144055340540609F0C01CA7C801DE133722F8F213B0661D3E00C933F0C5411AA031816F\n" +":4023000080A10DFAE960C8C8873603196196E740551074D00A13C0103403595BC98EB5EC9110700F40783C1A1406C8451091A2170303F006421A4171340B162505F6405866\n" +":402340008024D02E58F5050980A50869C2C3CF932A8851CCF8C4442447AEA2AF113B8180962BA120F276CA200622EA242EFE020065EDDE81310B116BC42C898B4C79ED7096\n" +":4023800081B21BC805027411607621C134019BC100A6390A62940C2781D28380950CDA04070904401CEB07D2E036B3DD3248765F58841EB82E210803C371167203FCEEE18C\n" +":4023C00009C8710244038EFCD420111BBD0BBA020B0921764C3175D8D103D84A0EF061BC0047AECF404400F0C8A09A006F0EB82C2C418D540A2032B8E3C145E3DCBCA3D9C1\n" +":402400006582048F02AF93EF0420028F9E8E551F4E74A003A73B97461F27EB3D83F5A1021C22B8834E370CA153EAFAE47D66DE89A024F6BF988A2870B1F3E8EA41200F22A2\n" +":4024400070081440404BD591EEF7C9C197471845E03131E19CE2201E44475D3E9841EAC8D234439F58120800879E7584D00DC782D0900ABC1F3047111E790EDE9D9D23C05A\n" +":402480007302077E81F410CBA57C4BC89D62274C645C0086A05E3303C3313C4B087D1DE224011C87443A1E7DD491C0111C70F4942177F129743DA1799B9881DC6E23D8B55D\n" +":4024C0004228A1D7D5E2068450E04B048C5C401E14362187C64602201A40FF891C4C05384022E4C11E83424822E889D2EE4FD22C822A42E8409842220040177DB21023CEE2\n" +":40250000F40813000DEEF80D107A92A1DFAC820451F44C3F2C42883C0585A01F437089E1B1F6C85D934021778EAA91EF63A20A86CAD61EDFE63E7B403220040B00A80B380A\n" +":4025400081DCBD81F59EDA8018CA1A1409FAC819E56281F100C70BA43FAFB6007A48D8400F183B150230254CB83FC783000A1C01E307D050CA01435069EBF9031CC1A54036\n" +":402580003D5D92524435C485EBF9138721D94041E23AE207F56E720040CD1262175471218F9461CBD7F2A6065B2C5B0086B0D12E0C6880127F069EBD9A740A398345E028A8\n" +":4025C000CE0D180EA8EA55F2EF3E32E85EB3184B62840A2D834F5ECC3211F56348E2F90F1F6797AF665098038C4D97345B1E85711010C61E40EF16E2104040F1886114B9CE\n" +":40260000B769751A48F911A67A8E1C4C02DBC4DCC88025FD4724048CC1A7AB3A0BD67583E55A530807833FB6D0458E5D4E3D650663F7AD1B44790BD002381E1089C3F1A06D\n" +":402640006B87837805C0D14401F4920175E721807D289222A834607A56C8401F54E3ADCA1AD03C056E109C4031066886206877E050E103BCAB58885EA0243F64130101D026\n" +":402680003B91E427806C13F802A4788530CB8010BCE12030E4008C23C02A9B0809213A42044110343D8F0F21048F82F310F270721E1D0C9008C08A22E4A806426E8C0518C4\n" +":4026C000D23DD21F8F2BC8C3AB3387D09CE254C6177BEE8CC62C303A8200401001183C1DAC785851019C5B244BEC3F62050005686840668923E55AC47C48BC65E220F1084C\n" +":4027000090E440CD282B410F0DA0208834F405E23E32FC44D9532F80440546A9D7E804F1600E1981C3813F402A901C2D4310EBE32FC4C6106471E730C207085165D4B146A4\n" +":40274000030387023E32F91E732020705D167C24208EE6EE1A0F197BA0732817CC4D4099267772679346D26039D21A70B863E4126A63800BFC2322107A8148BA279C4B238C\n" +":402780000023EC34510832278CFF1923111E3A8174C7CF301A0C620C35929C43A0E4178F0361B07F8C24C8E4138444010008045E8526301CFF2E84B438714A3D26C2875055\n" +":4027C0003828071E41A7754C2057FA46D12EA06E32A87640DC103B1C40F13E801E0B75CBB0F9A56CB8735894C049440F5D4401D9A052F5AA88F44AB8930021A4527A23D4EA\n" +":402800004A4552683CEAD6A2E9A823007A14504462683DE203E20CC421D94FE4C07DE89071F44479F4D1E158CC24405800FA2EB90BC19403000B8D43882BE681320948A057\n" +":402840006CB8E350C20C782B6C487929055CA244803F4487A5D9EDE34160520D387060DA70286882FE8D4E2E95871F27B4885C1678DAC0BA3A7CB98EE10404504409FA3522\n" +":402880005C7D121A4C053309005D8EC24D001D430C3E43AF447E3387830A6B003C0699CA9B881BD7FEC438903D409256C8110BA7DB47D10F6615CD223F0040D8D5D2B32407\n" +":4028C0003981D0E23F0EC87752C9D0A3038C6A0C80F2567A35E4A5052611B11C8371028780EF1BA08C97D841A0300F01A7561599E240F81B28A9B09E061FA2478B956E20C6\n" +":402900003A8A7D44AA2057925104564010EAF772E97D4227821A4001A10E10B003002E3E1705162A054018140397BD11A29F5B90884409B202CCA43F515320980BC30609B5\n" +":40294000E00EA20BD8FBE5189FA0788590840E0FFD1332880DE892223DAA1D1EB2DB10147EA884BA2AD4589C0BA2B185962A1826429C0CFE4FC57C644F00B530548113FB0F\n" +":40298000D12068D1A3034A6A2C874B2D154925450BA34407D136C27090C03DCBA0650CA5D0F01D8F42A1A60B54C1F6F290FA240503C4F234413C0A61DA7963D29A226A012C\n" +":4029C000E3E9683293A0489E0188BC5B30BC6648A64BB08216EE13C38E41200E8688FA2598BC81BC40C8E9E8A31267A68C0BC81C8418F3D4022D3A16C880E3698380D91EE0\n" +":402A00000D80FFA8118AE97004494EED1813D89A147AA9607A70447D584A206F512516637881F76E0980058C56E601C06AEB0FD2C85011431A4085BE23CD2F0035888BD8F4\n" +":402A400031624A7700A1E327102C3E918F44F18806290161942877F6B0981D3F18228F9A55CB08D45C16615014075C567DF5049095D193E4107511E186A007A30C058CF09C\n" +":402A8000C12AC98148D03541012480200E826704E88297D445439566C1B87FE1ED100BB5D585B1238C8C11A8664B4862260A8EF31B236C8804BBDDA07A3B244D0320602A59\n" +":402AC0000680EEEDC0C0943D0B3A201002CF6ECC9E4BB20749A85FF482C10CA4C1CBD0F962069AE4C76835180616DC7CA797B2C43C24046E82F43EB2881F1B948F73DC88F8\n" +":402B000003E8F3D3E1F5A468167E34D02F622A203FFA9511238834E1E5AAF808644ABEAB021034D32ABB3CB8BD1B525C48E0405F46CE10FC3010631743EA0DDB200F9A450E\n" +":402B4000360718EFDA53027D87548105C93DCBA87CCBA32A4C8208BAB0A0BB5C70E1048208FB2E54BC21D87EAD8D2266601097D1BAC4741430664F9A44BCCCF2FABBFF98C8\n" +":402B8000A39099888A47C3EEE9170165FB724A1A043712E010368E1F7FFD0F7FFAA5C74547BFFD8731A880B3C834183D849280042A869E6D2C50B6A8050D11DEE800EBDB6E\n" +":402BC00092EA522116036103D172E5D45743C6AC047606BC57103C753950C00D63D55943D44E03C4C048A447A8B348D11AF89870F8AE0458231224181289E6DDA3CC1CCF4E\n" +":402C0000982A882DE30432E376646EA0388117CEA001031E863B1EE9FD124007F096509A3B1294881E8FD920B4000504D363448B40031E87811EFBED267D0F283E2C0919A5\n" +":402C4000B80B104021F47EB1F6FE20B3EAB112648E2C503584F4C9C4A2684D40590CC43E73323480044EA2B5287163B91C0BC61C82017692F912C117725288BC6808DE5807\n" +":402C80009011188A180E806BC040C2417B0FC44C1E57A538F2C0F02D8E2258E31BC46C0C81100338BE3D7A02404002C8B6639F338DB4400F8E21E8152D84318478348392E5\n" +":402CC000E0C12A98C14204B081DD85420970D352EE95311087F143863E09084B087C338CA6000A80201802EE946121390820FAA774404EEE8031E39F9A18122F068A03F903\n" +":402D0000FB86E0415F02D3080439981D8BF8201776F0889BD96283DCB6221A7B3EA882343220C7B243CBBD5610F2D3F1796A08B64F01601F3BBA0EE0B0030880CF9B090B1F\n" +":402D4000D1FA47E8FC6484C47D1F906D7A4960F4118580888306400F01B023C51010B8D90F47E52C1A0392212525026A23E47242F20352400979C507C7A1EB84D039AAAC8E\n" +":402D80000D539BA1C34404A1A360547D54526587141F32D11E3942859253F410E8F10112A5A22871F31438A169714272F482818C4780063A834681A7E90522D35B57406A34\n" +":402DC0008F4B6D4841DD3C07C38B86C5221A0B20B99961A09513210766458DEF60C63591E98BE1F0D940F85F184171C02B05F8A27AB0E1C393840EB3817102219920E5004B\n" +":402E0000010344BFF441521866842B020FA8D32D790440DBA47B2F61221423057D238A7320BB727CF291BCB3E8F58390A401A66030F48ECA9E8F584BAE1A4815E3DDAB8624\n" +":402E4000003D41A26010A81A04B731AB47BFDE47A1F80BAB75078AB9A1E19BC1B190841DD5047DD78E5D323E24B0450E4036A3D659E995B2E37D63CA65884A070A04470029\n" +":402E8000EBA652CA2478ADF906CDFA2C34804104B60809608610C214022E2870208FB0D8C42225BA49A07ABA504002D823EB8B9403CB53884FE02D010D020F485089988FBA\n" +":402EC0004C629018130399C087C5788400F0BC710180B441935DFBD046F005C33E04DEECE4B3ECE481F3B2D15321ED164131BC040A3E906921C86AE9DFA2F484E8F6BD70E5\n" +":402F0000F169F100FA3D1498183D20A08FA1B746A70B8B001557AC688B3E9050678AFCA3C57DCCF060049CD00E15BBF7907D20A087A2E64BC5EF03429E52039000B20CBC6B\n" +":402F40000C26542C4364BC278A41FB91CCA61B390D1D71597478ACB1715A629D100DD5BD89B6203F5FF41900803E7B02734174B908829D194C2077483F082DE6B9D2F5EDEA\n" +":402F80009888D18586D4462AB91040D007FB52EC7C041E37B90889E2EC32F28D5179B5204A6AB833E3A330CBAB9FCBA438CBCB93C21071310444A363AD9C84F012342686D0\n" +":402FC0005223D24BC5A1022F15361FA59E08867101834F47F43CAF6645ECEA91B1E643E1283D267AC74C981537120BA6754F873B11707800F45C8D0377A671C4022E424212\n" +":40300000E73D584D136E880545978BCA88D136491083B85609A110C2EC8F11E1FBE5D33FA20355091B15D65788155189A0687A5BE9200C690D3A764140DAA34434E8BB35F7\n" +":403040004C81D811F45E5901A19069DD0B2215003D17C85E0C131E8BE31F3C2B0F8E910803F65F19750E98F605E0D4A00F207E028109405CDFE1F485E8978A05492035813E\n" +":40308000A74A0C22407F58166EB03B7AE305100BB358C7A13A4C7A177D21868F44258FAC9D1112415EB07D13C012F481E9301636070800593C1A786FC04792EFD218626CDD\n" +":4030C00097201668E0960E06A9208745A6130502A5FE00131D272B47673A461BF9CC11EE7641EF4F92EBB5043A6CC86C823C7A5CABF84E6F48629FA43F08899E4C19E1E40C\n" +":4031000025E2E8C2F4855130181A2471022035D8B6E984BD06303C5EAC735004182C305D19964812612E0F31C186226F4A21881BDDFEC7E90AC3F1712196AE26A0F3E90A71\n" +":40314000B74D257028C2A5C4DFA0008B0FE80D459771C28D6F04E41DEE2C3CC2088031250B97C0C0028EB20C72E92A6900395F18F86A246C4006B8D009F20C2400221C36E2\n" +":403180002E8281E4580205AB2F0F0FBD10472A304111902043D45FA8E6419042398C76ED0F48483DE0A7D1160980286E2C828100820007518F8843200A9E048742A510D40A\n" +":4031C0000E66A2883A7812156641682087516D09B7D5D882498D603F6A2B1612E1A0A0010DD84C88F02000D1F454060F020FAC6684F13C6C5C206D9186D923ECAC729D8245\n" +":40320000CA203A9A2C78776458F337A89C244785D408D30F7AAA6C43E34BCA3DE3900C455842550417AB8023DF36C3E812A109FA98B0A4E5E0CCD23D021F174B1410824747\n" +":40324000477E5E8828201B21081243069E61CA11F415EADE41203C501C204FAFC1C614C091BA3040950918B0045FEC38B3801534428E8D732198B8A924582E4281E03AF109\n" +":4032800040488407480DE725D2EE0AF101BB703C6EDE1AF11B8E0020F1F61102FDD7A03C8E9C4CE047D2106881C4D0399C3660B9C1ECDC52EF4CC2E8BDA3E920644060E27E\n" +":4032C000FE642FFA4BA1F18BC8890982180011F2EEE108180690EF2783DE7804DF006080EE43448087A47992C00C0069F556E4689EF8EC5001CFD0CFA26A14F509919A0725\n" +":4033000094191FA13713204326D14B5CC041E0CCF134CEC344EC24FBCF7849310CD13ACB1100D23AC930A4B2EF8E4124C6A2C860CFA9100892103CDB5C98438094095100B4\n" +":40334000EA277C692A81E8029A47274539881BE6DB1440EE92142880E39AE26F92287465F89BE3805049841E22F9236485EB10E9C30C25AD0E40A153F3E63194412A1D069C\n" +":40338000465D1E803EA3801EF3FC134490F50C9119FD2A4A2047A252880A15FA29D88080ED0357C4D448F4E4E9B005EAAB4C14815E61030C980998EDFFB16030C00C46D72E\n" +":4033C000ACBA84172B6F18022C001E43D8A01A45A2E83DEB745130BC90DA455F0D653F64A8094A90DC19981C808940FD01C85A1D8A8F3E7F903626063C4EE87D1E008F4AC6\n" +":403400004088EA14305D740521F9CB18C2322F9DE80F3BC21093C966E20DF787B4C84034303D1E1EB8D468942805440FA47E078A6C8814009806813FC812C496C3E23E8F70\n" +":403440000C5DAF478590E0871F56160193B80F256F569EC85A1C5C20300E415DFCC5C37A04432F86106C70C7CE0098E92203B810EAA3F110095ED2C210300EAF62BFBCBB66\n" +":403480006FBCA4223A23C441C582181BF47819F8C688486071C352A724303ADFA3C20C80F47832238290E8C87B50E0C074643BB3EF37B160155F7E91A9035320A98DFBA0E3\n" +":4034C000C0E4878CAF85862908F42EA88F1E08F2104C76EA0D33108B5F4783A40A1B5D270A6058754ACBD1F6C44AFA3C192061301940583D1C628237B417A36546611C6F61\n" +":4035000043ECF03236AF6B2F4787A0058551246B895C5A14440F47832265429B605240BAFD1DA862A21E8F08440A3DA545E8EE41630628055D19B65E8EE51F4B401B801470\n" +":403540006D4E47EC9A01094809ECBD92C85414FA54F46B58BD1E448579445156F875423175B878915EC9652892E9E1B202862852A961F496897817FC80FF476B173D64295C\n" +":40358000518423383F291E7AD854FCF4528405065293F4778240A74AB21780CB88312830FA08108EBF76BB8718FD15E097A2BB91F0BF91910905C90D044C434B79C9791FA3\n" +":4035C00047B134107A3A7CBA104058024BE9E487020BCE8865E8F5A2C6A21D52AE2078126F53E1F44C68FA5B84B1A880126743930417642F17196A1123A5A78B17D08903D4\n" +":40360000C9E03F820048579B4687402C8883E2E0C30B0F633422D16F23C52EC790FE8F1D502958D9A202D92A23990080EE8ED5963331CF31705837D0E2EFC412B5976021D8\n" +":4036400050122D55F964801546054281EC207A3D3940912F432B0E5BF08121B489001BA84B84F613FD1E9AB048A80119A068D00E8D2900C89085A0046701A2A4520EAC19CA\n" +":40368000E8080C4D83FF42522099AC25759018833E8F4C2F47A817442B13463E5F68FA3D38EE840810B0D07A3D388064238B92D59FA3D3881A218C0501B18DBCC095ED8BD4\n" +":4036C000F2F47A715CD41DEE3C3C94E87D1E9C874E6A8B372B00E651697BC61408223C7F1E850EAAA32089A1A4DA2FBBF7888E41E4D02E842254E0F569C112A50DD311E428\n" +":4037000007711EB1D408F9D3F2623F7A3D311208B6F47AA1B8100848008648882D21008AE95511230B5E945110104DF47AB179D3F07AE5D87BA374444E26C822AFA58D8A9C\n" +":40374000D485E79FA12107030BD1E94A16A222A78CF445825121218102058E419B4B8522EE04B4D00238633E264060938B8D1FA7980FA4C78CB0F516D8F169923FCA9F08FB\n" +":403780001C109448782BCCBB71984A9EE4E92BE8004702086070E0F530808880092A19E2320282F521113CA9EE5C8A147A6A507AFEA0BD68C8602F51390F883DC4FF3AAFAE\n" +":4037C0005A2E3F208F8B9507C5CB05EC3882A0D00F100688726807250047EA2262EE97629980D93FCD00DB0808030417501008A401A06806868F87E1C4D60D736E86100C69\n" +":40380000935D006028F0D13886853D91C6E68029FC38B620B8800C05912218A005A716A8761E10C3005E862A08601C20100D1416A00D46DD652C07010205381C6885530855\n" +":403840000301E733A11154A703CF002D8154173080930B04B842002DC65D4FD862E40685A0A75B944FA91244BA4F493A39C286740E9EB0BF40273C013104F7197B28E08FE3\n" +":40388000139581F433F18181F4FFB08019CF487A9538F4C8021889DEA550403426AAB049C478B96112E287151843945F1E967042A362380041A35FFB7B0F110022276B2E2A\n" +":4038C0000F5ECBC8021FE97A043C881167DAE107C64444C60CC80354F802C52080E0254C0EE5EE1EB4C2220FD08A447966620B1DCCF43CB5F0CA20CD0E68BA3D080A3B7123\n" +":40390000411AA779EE6DDCC60691DE10EBD104B5F43260C591A60A79E3944432C8623DCD6E773481FE5F759B68C48976434791C6704689949677489F6C840810A0400659CE\n" +":4039400063330B6B8788B0C7B265441EC46620078A4E10BF8C31198F755D1680784D0367CF0C840392219F46BB2007514134C21F39540B17F081A9CB964452EBBB11B82670\n" +":403980004D634878F5B0A0821CDB6C711B01B59DC230617F4001434843D394426999D802441F008F529860F4537217B60300A0FA800C0303E0F03BE7293BB1147900E4417E\n" +":4039C000B34CC624C60340C6F35FA883E699790A05D9D211F9BBE860842143A7D5080334CC02EC8A2EC892EC882EC87608640854109E18D21300A69B40BC2AEEB60160E7BE\n" +":403A0000E8D0E2F394A1085E9B441F1D8909A05BF9CA4D290830059A65ACD825AF9A4747C1796205817E798B12CE100EA013CA0182001A454E0950EA22919E00A048E459B9\n" +":403A4000E402171A104134CAB20C602ECEA88138423F3942197043C501770C24050833C8102E084994409F3485890A5331D3ACC201F936A44032ED83549FF46CC8D600135B\n" +":403A8000A80881201A59941C659441F3488AF202A89D21179BD78BCE5107810827A1EDE681F2D4A09190A24A914301A04A9503000C0C86650155D17102059EDE7B9F93873E\n" +":403AC000A851CBD309620F74900081C7479A49C80CF2FD588BE6811B083EA5481EC04323D0124074E9A8012A0B163B7CAC4882451C90533B4FFEE69E121522B13D06B2358C\n" +":403B00007E0421D2441A6421065F1A44214450126269E1DB19E4289A6411065F9A4404418129122698FE690FB2106CB010BA46D84792442A400B603C428F8A44E582450130\n" +":403B4000DC9147A0FB4476ED4D710240107C90EFAFA1EE61A115CB0EB0791ED9B443C54FA3E733A108E85900C38891A3D190187A0C25022DFA94147A310C422143056C44BE\n" +":403B800011A03380A2ED3202A3928111C5660119490043416690107A004011AA3101C150425011A6000A188665015A6078B4D912283350E31807E0BA5105BD08543C946435\n" +":403BC000BA3E88413EFBC72EFB99113E184143544B093A6E2512FFB46544D6140F0377C52342280EDD987C3D6EF027EE53F220871B1F22F8270A3A4EC48DACBA943A519C95\n" +":403C0000BC895E5CA3F47D0746202999D3F9A3E98A72C2FC06D5CB400512C0E686B0411C8F01EC90A20A6EC410AB6F4091E8DA1CBCEFEA880A656351035836C1AC3D36C8BE\n" +":403C4000420783B34BAB8D880A0A81C08398431744B321D7624405035125E58A910547043ABF04714C40B9E882E40342FB4F444C869903C20EE000482247A5820806C014E1\n" +":403C80008F8B3A8835F669D4EEBC261079D07C58C39F0144311E8815417F96B20844F39FD889BE73EC1137AFBC900D46C47CE6A864CA44D27A61A8B417C5D30D8669221A06\n" +":403CC00005989410F083517730517ADB812F40C21930D0888F987C8EE621EF8E22C08C3AE8EB0D3C2252359617C901A27561971047BA67C8220242E1487012B0A801684025\n" +":403D00000167F468855DD348414F2BCC2128208D01401B2827C802456AA02EB03A2F488D1779F6888D1057E68E130013BB672CC02A953AA73E49242048486504A66016102B\n" +":403D4000840290164960730344D1024169397A45A0CDA921835ED5792EF191110C15F3D30A607F686648E19FA045B484BA5B5458EB1502F5B2C181202DDEE006810694C4F9\n" +":403D80005E8E141013C0E7E51860400A8782D94821F68BE2825461F763B8F6AD717A5C64BD2F5244E84DC7890440B2F080638905982A5D1130385D4752BA60369B2C6400E6\n" +":403DC00013AFB0F62090F77FA0F5C09102643005CAD20448F2EF48803D5D589728501F47DF0F5F7E8E67422187AC92043422BAC00C48002026A2C5E3FAF2CD032F1B9896E8\n" +":403E00003C513781BCF0811C05BEED5F11022513393F4F97951101C04BEBF56203CBA892A10038077E9E9628932A93871C08A00106DDF33E581C40A2C4525CA70CA9B1F110\n" +":403E4000EEA1ED64031EBA7CD8BA621C580D0C2E3ECA597DC240622C2E33A421D067A0721E87C3116433400B0BA1880F2FAB320BF1222483200500797D4C9A3914820F0130\n" +":403E8000C119885C1C9D96E62621E4361A233F965804851080629828343AF858BCF1367E66CA2B2F01AC3161C5034462EADEC29691A02CDE345B19A882A16B0120FDD1C9C2\n" +":403EC000C50C20CF319312DAC48215E71688106B8B1CD0A441602C0F098242DD8ECA741EF0E710AC050987EEED5929089543C821E970C207BA6FACA24082482A95116E003D\n" +":403F000021EB8BA108C0CE82B62E32CC40198680580E84A9017B4260C700CB08AA00198805828805290144925FA049CF93B60F3A9A3EB7D72EA6952EA53243A8BA88BAF3EF\n" +":403F4000C648F5BBF89007915BED3F82F4A80162D39CDC5121BA26B07C7D007E02D6325C20CF4812063CC6650B7D8085E78C853A270C823F5EC5A1E791D100CCD609807719\n" +":403F8000A8AE47D703A314A19C05108A3E7CC23308EA08BA32F445121BAF4FC8C0F155A9773441746E08F70170DD84162C01C062A5E0789EC43045D5C24208C3A0C60C8811\n" +":403FC000006F5D13465080E21114C111A206F9CB78C30E8DAC4016F0E2511C9ACCA2D6BF21E9C2C30D321992C0902766C71380624872B4C1DD68898E73FE3D698F36FC82DC\n" +":404000000423E551E58C384F9C61A5CAA349B21862EC5661C0DA1CCD3CBCA9C43935C24264D291A0791119A685DC2E639B04202307531E9AFC1340EE30441C0A0195AC3CBF\n" +":40404000AD74F2B00406E56B85D99602748ED95B03E1E40262EE0013FA96847CC0E640717E0401E1DE8CAE6BD80810381D04CE3EAF6C2BC442CC64135BA90202DC05E6E267\n" +":404080003100AAC8826B7420405BD8BB4B84BC4DAC36C800A17D8011E26851900052BEC009340C7243C3DE08051E79661364D6313BF62C4580582A04457AFC00C08F058222\n" +":4040C000804456EEB011244160B011153BC6CC4931E0F3EE4451366E441F0AFA080A0D726C12243B86F84202438D7F8F580188181751A21C40825817F31FC08AD458BAC252\n" +":40410000A8BDB6CC438897E795E303A408E390160364F973D0C8440C0A81BCEF24C72020F615F43D64384D0205DC0074B8076023B052CCD28721FBC53863D558526984D5E1\n" +":40414000380689E00DF5F971890059D53017A624487012FAE594A56614A9134CC0524D863683C456376E016D3D98B5D82F65D4B386395C6E64D2212442031280B54003C124\n" +":40418000AF02D8A49CD613687837C9060424C663E67C1EDBE8233F904697666989079960571B0985DB55C4C8462276D58206A8E160A11C3DB3CA87A1C1C461214201AC092E\n" +":4041C000E3EB0914BA3AB1E835F21CF234D1EB0441950186528C3D92422110D034C8C7CA7026C04470E7C226C1155BC5EDEDB11772D9D2010990CFBF5B92B82818340583ED\n" +":404200004858F541E08C24062CA829480F6F7B892627FA7158406DE7E87C4F0243114462904630FA7284C0712067144337563C9104338FA62846071002194413F6444110AB\n" +":404240004140F652842075B840A2023C44946329A61FF93C0058248D4CE3D1300B21CBA5A288170A0F600C790149204E2C3B168CA30BCE4FE87AAF544202C873F39A50893C\n" +":40428000C59068A002E69E080242CD207590A5184E812027A02B9FC8820B07E396703F4517143801A3C98BE741E1303D718481040714436F9CD1C44034C2B4E721079128DC\n" +":4042C0008AE9F4C7E4EB8222841F44D509580FEB9F042224460F58624B0418865894148482301770FB10518382A004A2200C320811288F1F3A0C179CD688823CBCE6B654AF\n" +":40430000184CF407260398F08EA5962C82C2CA624C34C83C2B8684A867025174C481642C1FA79108C48C1B8C089CC048874C481FA4D5138A1213D739A221A63C0CA410E8D0\n" +":40434000511670E241A742440D34C8224F3AC84A2352EEC0C46006B1004B180070EE0993FD2ED43736419458815E73E422440B4EB140D61EC96F39DA110058997E682E30F1\n" +":404380001718408EF4984A140C2CE13101C82058A23DA93A67BA8D778305BA81703C202503893237CE72043C14A41172511B10E04899A0D0C9DAAA031263C01E6A8CC6B084\n" +":4043C000CC471D04694013D8247CEBC07EAED292B8A8AC022C475F5BCB1E1B5017C91DC7EA7CE7725DFEF62019620B5824C1C40E5F427091B3D3F827E2DBC115F9185914AA\n" +":4044000041E79CF1D434054B0D002C0AF9CF4D08B30553E951D113C8207885283CE72094B408207CA22FA6523544A52124A20FEB740900831D30043E73B91354464FCB114F\n" +":40444000C55CE816050A66A885E589328944A2500F9431B228D710232124A10E8130C634482C0A4648020CB0116248D20CE280921E490118B019BD7402A3017904300F632F\n" +":40448000E910276259075EC7A92D96464422A06E3CB8D9E8FAD2450004990CFD5B90804BCA0B4BCDD385CA538993402322302C89A1E25A311E8C0E5E3C2109C3CBC7C7C659\n" +":4044C000B5E21078A740EE098BA483A114481724402F3FBD91705196201698512CBA633712CBA846F4A3D6941148D11DE740C56F5421E2304C44BC430890E48E8F38B0BB23\n" +":40450000102C4033976041AEB51040C107C3B1C7E89D23CBB820D42CF39EF365B247A3D3A01CC54D0118501605E1986C1E9E10142188A238922609E2A9E02E8BE30C418C00\n" +":404540006338D8388EC3D90042914471264B133E73DF92A4AE2D4B9300C73800018C5B3C0CC1EC423C310100D839D4D018D8D702EDB80CF9F3709E015F9CF64EFD902F9C8E\n" +":404580000F6508702D9C0F0510380A06F3C5C5805530383206F38EC5803C7BC0E40520F6229E0510F6239E05074A1309867813C3D8E51024D74A4497182D1258EA1FCF0066\n" +":4045C0001FCE7A887A26C86F5F023BBE3D048C1EC583C08A1EC5A3C0881EC593C181CC50EC81123C082AF92AF823C07E892ED90323C0788544CB3C07452328F01B9919877A\n" +":4046000080D4C8CD40C8C8C53C2ED006023F39EA90B912899C780ACD106780A992F030602879F2004713C04E0388206CA0F39E9101C1B421B40715C0D940A03190090F1139\n" +":40464000E252E1605720110E51DB71E3E194192940909B4C3E3250286E930F39E5A0040755C50C136A6069B576EC926FC7A2008B6019981C3F037C7518581EE60400C2DA94\n" +":40468000AA8BDA4CA5101D432289E619E73799AA0D81F7CE0F9CF6D202345564279E22FFB85A900CFC5818A0264885DEAB5C1CC971F34AF91BFD92B03C91E440F35BA86A1B\n" +":4046C00044160C811044B6064D50370E800425072EC62F6B348D960021F0FEE97645E0901EB11C1080B606705209F88EB240A10B1511684808353934CDCB7A92FC4FC47B55\n" +":404700001C2441FE53FCD813EA46313934CDC5E87BB1034D0018180C804113A95B500CFC1A309F8D488FB1FA85829833D31889AE37729A81013BA9887CF7603A01010A7CDE\n" +":404740006DB890EA1477F3C89F65E851EBE8321C498EF6A913DC871102CC6F8021FA2B32482ED5823C63D03179C64040E3B405BD220D3182144083B486422805F4A0C05E2B\n" +":4047800047DB298810E108F26A96200B60293B4043B0089003432A9652E6A0BEF00B5117CDED820114A120F4281D004F9EC8442140833404F03CBE070A0364AFEA5D411376\n" +":4047C000890333BC22480A2C8FD3BC78340A5004B5313BEA4CA140FF344E60049501583E7AB1E10C38214BD0C7E8899419F22E51F533797B3DE04371C81AEA86912788606C\n" +":404800000C86186990E1B80607B2D6104423403A0380606CE024FC61F023C16A581C28007EBF9018F1CD3A10B2A0541C828EBCF1160BA43172010043FA8DBCAA0408640BAC\n" +":40484000B0A6A004425001CD30A90505322F330F0827E4FDA9040EB2187B3BCD509BCE260205819D5F78350C21220501E2789AA118F7E28D016FD94627BA72C867CAC90F15\n" +":40488000AB9544611EC1524CA124C20D3430881E36211EDC4690049F2482AC098059054690311607F99C020FA19801E394263C309A867B7884FADB82D0FB100FED8AC47C59\n" +":4048C0004FA47E27D62CC0E1EFB57901800D014165660F83C2E7C6134D4605D002576D73E4130F0581FE6F757948F40288DF041ECFB8100BB91891F1BC02598A227402BE76\n" +":40490000D056102B93ED080C6EB0541406800BE38781EA4AE30E099A008745AE14C8054CA48C0EAD9442C6897789F20698224988BA81A1BF72044EA0081108083C480F249F\n" +":40494000E68F221A2ED11310A3D81D29F8E4F91F06B5182D60E43AAE5074C0C76D209D100880CF53DF97514D2FEDE4B9E4F943EB5F62182D0E5EC0DF1302090B4101506050\n" +":404980007B5FF8E46048F53A31655016C2D45BF49D51820E09BA901293D821222B1FE379520074FB39869D920060F79B3B90D1D919F34912D39F8E34200BCE925BC7A5E26D\n" +":4049C0000197672F531597A5DE08D20B00B024011788214A938104289402EF88E04C02F11728F2DCA12803DEA392109490D91C07D5FEC212A3E3B80308490098D0086204AC\n" +":404A00002151CB5C1C70A167E007C0F1C825608D300022367602B78DE20FA29487D0F283DCB7A581880F4030D2067D553E3E913C2E9C61206352D6455041CAF9CBB20D44B0\n" +":404A40009E02C4A06F645D1E43C8958410E3D9C35328045C88E14F5AA025D7FEC87B66890A7C20A33B230157019335C4958611CF2623E2AD8BA96FD635407236C0C3770089\n" +":404A80005081B03910D6041180ADF1DBD0F6B748EF6F0413581949A02343D0300997A19840A6071E588100D01573BC045501C4B3FCEF2C021CEFC2CEBF2EF0124450207DD8\n" +":404AC000700C3DAA824C744C809800077205932C803C71466445D751287B4200440F3BD2357B4003606060007AA1ACADAE14682D491DCED02348020F9AA1F90BE84C84038F\n" +":404B0000E02BAFEB44711A3D50C63EA8651EBF1F1004130437FE3103030D26C99A21D4F612F2D24C088019C59001300D8E461CBB31404400D103402993157481A0184B04B8\n" +":404B4000022804B9AD002722704D00B7A9561136E992468853A002108071023C370535CC413F2C562F49248D6F8060030B7E318E4180911CFC21087966316075001843E468\n" +":404B80005982137ABCD0C1F208263A495D93048A201B96A59DF060303803680EDE617C9680605E6103FCF0C6F510600301FE3AD05B0CE2003889A41028210619B7715721FF\n" +":404BC00086F1021023B162176A2D902986D840511E2870380801A42822B208434ADC42C2045806199BC638F2F593BD220D335470F542B901A341FA410120903C20431012A1\n" +":404C0000147054593A432303B2588832F387589AA34F8472C6DC600D748A689CC0F78D718798AF900E588647014BE3D00218F94BD98C7EE5DE3EE56610CBAB1910183D534E\n" +":404C400048A8BC89AA2F285E618AF4C95F563820289A22DACE2C00F3EAE087A020A06B0AFE39511E8A5110385606FC204D2688A9E4FA31F3EBCA821451F9CF047CFAF488D9\n" +":404C80006510626A3E581F29C444D4FD52BCB7AA69CA0D31213257D5380806268876B5C946C8426020B1993420AA7AA681E5F6DE7E132A00887506A872AC1C360DDB06CDB2\n" +":404CC000835F54DD221A2A0921966E42628F43F521EA992309BD86CC8FAAB98BD5360D74C89178F6B92D3AE1794EB0CB44434F55F42BEA9B26BB9E509FD7DFBF736941F3EE\n" +":404D00003FD98182A04260E85510038660038EB68817B5E04819EE03A1F1FE591A271F4F2A21EC84D10102821402070D1B83458CF021F1C7809BF5F23EB25E1C42E26F9A6F\n" +":404D40000700422C807E2EF11880ECF581034D237A147D10DA3105064C4804731236703137F789622804534CDE6024348DE2886082234E483180518813101A788F08E02825\n" +":404D8000CA099880430E4E4C300300485818267360DE852010D5ABE02804FF055D1045CA7707AB6B848B44F1F4ECF908C1977EF489A66C7B1A404D8EBCD04C2CEC486238FA\n" +":404DC000484F0A808E0210B83C3C44723E08771F483698F4127A6BB48D5344F2028D23448ACD21100410368042B840F3B91090052A06919A490803C88814EA958836344CC2\n" +":404E00009980009196FF60364082BBC926F25C901D594C335018DCC47C8E901668260242390348BF3A406EF3561F3FC58B0101AA6002A2A82040F82284E2930549A046F7BC\n" +":404E4000F00840307A203C7978206F5EA3891DE68482BAB20ED01BAF534BCD08C52C12B885103C579688043D04C6896048981E85B940A5EC54C1004DEF3ECA08C407072005\n" +":404E800090EBD5CCC607F9F6552F3419A86C9813A83000CCE4D9724D17242C31374D02610F6A1A10F0121460000644865E1D2A308B985A0911C8B2CFB9E688D01EC80F1849\n" +":404EC0008189A04A033E84E02006E9E400A3BAE2240D62409E501CBCBC22553402DE05F03448C24759D8240089E57E71EF3BB2208D3224E2210D72279EBB8824117743F192\n" +":404F00000206C750D0CDA543D13D22431301078FB8521E00E344842642040140370E3C79965C64011E23FA1E7A8A1364101E4BA2AC202BC201E0B8E6C605AA2612E0790BA7\n" +":404F40008D71C30EE002FDCB312C7A32A879B2011C444045D9A6E40582FE0A671087C58AA90824197C79018680E06DFAF6E04A302395FD08C7C8CC04123406E28413AC7039\n" +":404F80003406DF4B378FAC1CCBBB6987B028C40CE993510607804C0924AE502D4C121EE7A0128B9879981530203C1665C19DC8884C0536863F13AC8864510260B8B64BE885\n" +":404FC0005E8842E92AF1204B9310E142ECB82FCC42E0C4E9A112279039C01F069D0DD1C02793420206076F3410F5B78C8840470E4179CC4204DCB8904F4F4FFC880460C18A\n" +":4050000000060717426F6F47885839111A97D1107C753043889DE126D21C4421F8D02F810C37A03D18A518923C8606B08851855E6C772A1080F25164CA90FE1713DD999047\n" +":4050400030C1D82C230E3AC3D90B3B946C8F01DAE2C401C3D32C210CD3E2EF9E42EB3A22156E1011089047ACE988380E11F0FC71071EE6FE1EF70416038D1B2082591DC212\n" +":405080000A090C86F8EE8AF4E112BBCD10A5021BE689086F920C20B0908F6002107B2C2ECC202EC46847BADD8BCDE944258F9220D9580703517997913E06FB5D7BD85E68EF\n" +":4050C0003E4BAF810BA86E8BAC65081CD2D223DE6F065C23C0EAC837B980437F0DBE0F0D781618A4821B96DE65FC21FCFB1FFB25F8608819EED744406E85B41038DA06F5D9\n" +":40510000F6644D03684300D05E72534132A20C8A06D0ECB611F08C80F9B3C88B60C0B6F2FEC1E10D00C9D31A505EF889906E8DE48035E85A72F31741798854410EC02A2EBF\n" +":405140005A905CC8A089842CD046B79A90C47A0B22072F4C48E43D80CA830C7322E2BF2489B180963847B033CCD14878D3EC59F5F130F99FC8BC6B16260F7206091E529C2C\n" +":4051800085280E3D0CBDC71C452F99A2C7A52146FD80E6E94330013A061AE5642801E130361072CEE260502E065E63EC2079AA5414A1E13FE8E931F38839D26166BDC2D722\n" +":4051C000604F8164B79C44102DA2510489F03244894CA40813E06B22497E59FD1EAFD8108FCEC9431C200795D9043D60612E0CCF5F9B1171E68802014D0A1801F5AAC3D0DA\n" +":405200009FE3EBD702A86063C8494245FB51B0B99FF081DDB1A244375C178F38442D2A309327B5C9000906470724A423B48F0580D91015DE37B128300349E439D37881E82F\n" +":4052400093DE838D127BC06083301F9E9744AEB5200EA4C78260449905EB72099060B6EAA771087BADE84D01D088082692B1341A439F6341A56F002698EA0E42F1D8F156C8\n" +":40528000D817260B1E435512E4052EAA600253446B34C6BF323819405C62B5809CBD63DCC6E592CA233F5D5411263117A0579C4B1110FD8818252F4A37088BE712040D81B2\n" +":4052C000BFD722C668865D3AA08095081D0BB03D366C7D2AE624F1B034E85F0406E48FE20117060F453A8F5C1189702179F59440F60531D812F62F6CF881687D37422289DE\n" +":40530000A028F67908885EBF50107A9D212F334C0327BB5BEC7B92EC4D71339542910E10660088408F30261240D61208602C0E33832283CBF964430320718D0A5E1D281113\n" +":4053400064F643B934840CF1AD9949C00B3F948952180C038A2908955A24210680E26A14C022D40D04F506272413594890401A070F4AF52B70B00D81C39253501F1DCAA0A7\n" +":40538000207586C09DF373C2427206DB0EBC2E12D46FCC1A1B3E081849232001A0DC2740E02CC288320AD0889023F1A65A8603F4EA068FA1B10FC32B4351489BC0B80FD1F4\n" +":4053C00064A3E22CA9E55E1248F97A88794FB8F2F0C1100A10080517432E7A347E67B44B2C68B21D87CD40C625E4EB081E12239E405D4AC45E71125BB2D98837C9F2103C01\n" +":4054000048476FB7A6054406FE659C4061AD3401A6799A4799360013410135A6B51340F2260AA260EC1943D094402408DA151DACAE27217A2114250136508CC5F130558CA1\n" +":40544000A6EC594522509345131EE23B1194FD8A56240C3268A3260ED8B65860C440A4260EE745220C5268A5260EF7452A0C6268A641E0E8A640CE811D0088C43D75BD3802\n" +":40548000B1C95327AF2A8CA101C04206A18B347C8DB007994019FB923C27F79A460BA00F4881EE74C1D8A313EA24B30884600C422E3CC0663E66CE1F33758F99B74C7C4B26\n" +":4054C000CC4B04C176B5E50E2400B26832D81A542B071368722E87326BB697C822F523B90808E95E0C4447DB15E4C09018A1E1671129BC31D4406D8484DA063CB7CA866E2F\n" +":405500004881DD3B445A8041F290C0EA3CCBA68984416BB1224756EC5CAE48B57325CBDB8BB13747A90AC717486944C4C1034360CB3C08C71328722ABC91565EEAED361AB8\n" +":40554000EF4DC108CE0640443CA0942C7941387B389473714BCA0885E504810447106B472A43C8199A9A57FC00E21781227037B5FA8F4B26195BD72EC220813E6AB92C8646\n" +":40558000F91DC52CA46439C280801E50E3487B097A00A441701062D007082A02512013031EA30E16052831F287320328140E8467122078368A4E0243444026274189080922\n" +":4055C0008A1E50EC797D3A7CF1640A39407EB9371327CA12C8808A6010F6197ABE09215BC34D822B68040BBBD010F33CF3CBB78E1892DF4EAE1972058FD82484463444329C\n" +":40560000601C2670FE8019E689913313CB0F1F338D0D7981A420144009A5E1B3F1F29340FA12AD4EA7431F072B15204069153B25CC4152071B5810DA13B11972BC04062E10\n" +":40564000C07F299C91A41A134301A213135DF2723B101880458804680624C774A71D5581A41796231C7046880B18232300376826138962339FE12FAAD40CC0F12124F5A6E5\n" +":40568000E8D3010A020137D2294614F9856073938421871EE5892F3510150F034C22F41C20F50621E63D089BD94BE5C1F2241FF574A185F2C4BD83025E66051090D106898F\n" +":4056C00090825E4780656F0003410C9644356E83E66D41C6EC8040900A2C272F58BA9DB8C886700208C1B6BA565F217686A4B007020888980B8793860F99B390F326721E37\n" +":4057000066DA3F326829D895A581E42F031368A3F3A1293010D0D422802FF3317972D7A6C72BBD0490D9BC459AAA1358CECEE21144F6010D0334B605AEB6008BA0DC4C8096\n" +":40574000EA2432110DAED1D420789D40DAE9E0942F361EBB3A1E96843E5BDE24FE3A30D81650F326A09825D03DE7E542354BEED3A2120C85098EB014150A41020CEB208B65\n" +":405780009286348B934079117CCC54767F818402078D72D897054D12DBB25744E2B150634C1124040409E04FCC4CE5D133A5E0D3D1F2F958E3B10068E0F313118744B82909\n" +":4057C000ADF31A121CBEFC47803FCF52444B8271024928F97B784C5F1013CFB8C6C760751F3287980E7C864207356A4CAC4297A363923D807F3281A60D8104B045E0AFB11B\n" +":40580000E86CD133C21D4780FA8328AEF81F3FDB8F4E1A975FA68D5EC81023065D5FA225C1945C79EE646567EDEB4301CBD0C860EC0CA60C12A01B38360261EC0BE40F0586\n" +":4058400003F07A0C62113E0790C7D49AC50E89E9D810C512620F6044B17DD0DF0A1CB099020700F137E64791EAC3B160A4F323AA2362892470301A555C70348F073D79919E\n" +":405880002421799A58447F343310F7E355211EFCCCEA2680C79AF023C9BA31976631760460D30F3350898DD703E45EF790C8DFD6052F66B58841D9DCE2101BFDCDA2468F52\n" +":4058C0006B1389E02C7409E9121D8478776A01A62ADDAA45C84F7671126611701405C010202B12661F2FF012061458BC580270BC253046737C7F0E89B09798D28824308B27\n" +":405900003D76EE208785D8C826022300D6123D8AC444F02207815526167E01C86AECBE12F323C2188C05AE781E2018D01D04CC04660177D5B3A447DDE503F8CA529CC6B85E\n" +":4059400078479C1A0E42D77F099C3D80A528CE0B046081060B042081005D811E75751F2FC61F971507CC8C4252E7D50F7A678E2F2827CA5E53BA26805A480E4481A65D990D\n" +":405980007E5FBC224014F34BE0B1606199C2D860149AE1579917C98A18067799174C8B5022981865DA3A64104D32F982F91314A5F32188F990BDA34C1C29411EB86D13AD88\n" +":4059C0000040111D00115425F32172209844008A64DF761309EC625D2A04A1A47A051ED70E1020F0167C13446612386A83B33810C8382D7D0130585FD88F31C04414213CEE\n" +":405A0000C8E4A796FD8B3C88BB2178B46C8587283B0348B03CC065D384E3ED6CD43996F8E16118830EB54A8411EC1548EC15220601A5946174A30889DED3652DA4B0C5FD37\n" +":405A400033691C03F01A4D4681B23FF44BC08140691D3321D32E42434296CFC62155EF030A3D29FA43F19E5F0103C98BE5BDA2B4B0F991C84A5154D13389900C991094FC29\n" +":405A800012602C17466D5B0B0CD590991E646D1150903112154A33009041A062F5C3688C1AB6613A482F6DC7901FDA6E424193770E81825C0863F0AA537991A04D32FE480C\n" +":405AC0001E6466290911087769411AC5E76AF6083E018BDE6466225920282E068E06804E6A38835B4840F9919CFCC8CC979918D402EE0149C09654259814A0C783624580B9\n" +":405B0000388A08B9E07891DE646444A506496480E1DA28A24096F3232A252A00A27C75AA247305C241430027C72BA24B3814A87426D0CA80424C8EF3231A2528384B281428\n" +":405B4000A82580E038268D3F323219724C1724CC78F99199E40A56452B000C450CB5ED098160B065E8C9446DCA5B187088850B16908F2FF0CE63F9739B82047CC63423B9B4\n" +":405B8000301917222173EA5FA1B9480DA1A68987B387479D1589A239798D3441824420F64AD0E3CB3F1DEECB0411837A7063CC0E54FC2019365B1366A60FC026CB726C78A7\n" +":405BC000F00CD08C5E1B5F2F24AB90F2606C9065E611F42FBE1F308F207E865A0FE440A22AE340605FEFC534306419836F42B7981E40F1D04E7381110349500FCB2E4207A8\n" +":405C00007A302C40327405D6F78C2000A4EA14D000B3B82238214B5BF05085749016BE9D8A11E01D9181E0109D24E9D00EF88E6865A421A40EB2070790F3B87884B69611B2\n" +":405C40002C0113A12A1EA99C1969836A1380B0018164D045434065432E007DB3DE7DADFE373B21EB1381B9D47D627640094211F8F4A0AE8E1C5311D9DA2219922049D002E7\n" +":405C8000122559E001922526B0A111DD4B1CD0121E3E811007CCF362101A413F2C5E5092E78B23DBE1A201F99B7488B1812ED10E9180D835BBA69C81021BC948C5D3BDC53C\n" +":405CC000DE00030C1E981332A7D4692200FB8860BB60DC6E4D03F7B896887F014DA077947889CA3C87B6250F381A1D548D0B0A345D8B709F997D87CCBD45E65E52F3233387\n" +":405D00007E627253AA6288FAD085221123CF0A8C14F14B61065DDBDC3EBC3122EC8D21702081B66D04E401D9CB90C405DB8184CEBA203B973045E20826F51F4884A3C8C862\n" +":405D4000071C6480820085B7B7101059064207A59F9635CCF23C0D358CDF22A511AA6692BD60D888E1AF781C8A6124EE0F1F0C75080862C20927DEFD6372A81C9D904D20F0\n" +":405D80008FBAD8CAD7A07904F2C0F231C09241302A08803EE79B9C8FD10BC9147BCB7042202436B8604880A44128BC4F922790792311D4003488F0B486F08818847D963E97\n" +":405DC0002C7722310823C0858DBC460E907E12887DF762A0F47C389750427B9DA0DF35151103C236476DF0D7819F8A178588830C93D86E4404D4BBA0009FE8093A28B1C831\n" +":405E0000E11F10F48C8500493F2278A03E9785315B8AA440021BC1B46802B6604BD1F783E30B11F248B0F8A2647B7748B26C840DC5902490E0459FE5D1A2481022B855AD66\n" +":405E4000482EEB3A1034FA06B40385DC1B6450F9238112208005F5AAE878945043C2000E014D590969F50C6A0CBCFEC8AF4638975C0891FE531A43C0EC04025E69FA13A073\n" +":405E800027831F5D57896021778A888476C5407040B90B2AA848338402EE4AA1DD4B2618481C28204179FE8442BEFADF1F149F899E43F80E4447709C7F28BA1DA04F120034\n" +":405EC0004203CFA0CBBD0CC76788119880068E8033DBA7C26C14408F7FF79105AF801F6175090B9B743EE34B908C80E68C45CB2C0797C5980E188659A6CA1A4197777D0B37\n" +":405F0000001F80BB9112D0F02E388FA601E812788AB44183484EEC9A14882D1D1119554646889A3E82608F92C787B81792F37B4887C7A01DE86FF1C73024B0720614D22221\n" +":405F4000F7104965F90E070004C0637432F4E6E22070CCC31DF27C21E9000B9AA1ED4BA21C24010183B271D890040793BD94FC26B063DABC8216818314510CE0F93A0D903A\n" +":405F8000C17171D8DA82060A510403112197BACA46663078329280504701B8718357CE2590EA3482226752B2894607CAC36CE020A13C3CE06904249007DFCE064891C16FC6\n" +":405FC0008EF40492ED7702948010769002844081E007402F09A20C9021D1D2878CF18705691403293A52800030621967DD204756E2A5F69094C0D3540F243C7E683E5FDC0A\n" +":406000001C08C171441F008023E8ED71143A9A5449040082001AF4B9927D890627803587187BF7BA40DD28123EBA48481EC38C5A9FE20A11B69002DE46BF218EFB433350CA\n" +":40604000F26F51F7BC588426FE55F090A1B83C26020012990A1F69870B4C443CBF8841AF75EE1E775AC0D97059EAF6CEFD203FCEFD62D0F8A3747985D8859D54BE576C01BF\n" +":40608000101E7ABA044CCF3AA58824749079E5E205F8C5A44203A47DEB1AA2A1C80704C7A5BAC4B42C0422A0FCCEEA2EB06E1D8964486E73543AA791100E823BC6C60208AF\n" +":4060C000F53AC90E275016054F861D03C24029B36D090C1877C9591D3AD58199C580535CF2253061EEB5B2028AEAD12F28C09794A58C2A8A32693F4189093DCA7A84BC2CC3\n" +":406100003DD6DE60510D14406FB77B4475EF09C9EAA133D24F0FBC9251107BB024482D86D0B554C3E53101EFA0A9310B640750287D1087DEDAEB12CFDAA5C408788058809D\n" +":40614000A1DA8496B8487A46DC40D1BABE83CE48434900DAEE51610580A1743004416137AB3F442AE7BDA3B49229769402BE4E4A2B44010C0A7856D4C36980B610821E81F4\n" +":406180001344B0EBB182EB3729F32994961E4FFD19EC07A0081E03B1510428B1A55A2E64305102022009042096B50041306CD42D08421BD34D22049E54090E7C3E3E229021\n" +":4061C0003026A010658D8A00492EB10D2EB042298CB699E202492B964C3BF38368826180200A0C1E1FE740091EA547CD46C70FA07803747C45D633017946CCA7113AB9AB3D\n" +":4062000021480A20983510103C6D364C138599819CD924A7AA9FCFD9C2C5D00306680F9906E2541A03FF64B2895BE5CF811F87102898B4D08120F27D8B947AD081E5CEC36F\n" +":40624000E0F381F1C0F08373E98049FB32E0870EB1022BAAC3D5FFE201F5D9891818AF0465DA2FCBB1764BC79D87D2C7C278060050AA100213B881E3F945DA82621ED631D8\n" +":406280005ECC12F2B29A5E2C78138C1B3A25E0069CE4B085B250974CB2152E3F664588F278F9999CBA7CD86651F1E9988154D88F0023D9A6E5D77EE539156B103C2682C029\n" +":4062C00017A3A98AA38AD705A5CE2F54B1A162243C44726035924AE2E0A004069EF88840081FEA243DCD2438B907CCD18620FA4819002C5E068E0D8068AFBB800040F34E36\n" +":406300001A185D8BBC594AF133F21AD0F6E3D9CCCB920217B3AF88A62D0A6057B321D0AEB8AEF2F104C8CD23E02613B42981E7F21AD6D2621C40D3C3B05A440A01EC6E16EC\n" +":406340009901C022F76889D8001AA08478775C89003526879C904402BD884049D90034FB24CE2F115F1598866602C93F34408D9A40DAF014B25E276D304BC2CA053C224763\n" +":40638000276940A025DD81422C8022F1E00C67B023BAC8080A3DA3A3C82CE3820E327C0400322E2E2821D49A0EFAA841C0E1B46E9595400F12A8D9F66850C3087C98E40419\n" +":4063C00004BE297F1B418B038895B31115E9458148A72138D195A20927D137020755395CB30780C71E20C80287B916480E3DA390B410B415181A9F71F1E7C969CD4433F6F1\n" +":4064000072C109643EC31A5EEB8519384984CA523196146D2685E22E112D00002877F632748161290BE38E810672F8C825267B5894AFD5119AA9080816C06F4E578FBB61AE\n" +":40644000CC56AAC33F158EC6002551901C37273C0550A53D222B290A4B0A8C0043D9D4074300F12413900039C6120700D0F851CCBBDB547CB9BE20403C2602661753C14828\n" +":406480004163B29F0080066E76229810C7968063D7328913418E6281F6B20882A480078E90F00B8146802A9F00EC8F817E44D1044890B4E120BAF7D640BF3F8111A20691E6\n" +":4064C000379D9B0061020B9BE007A48BD22043EC53C25D56423EE7E83D10821DA81A5A4AA2BB30AF16003462A74577A2FA1D91AD32B0D81FE57F50681300D5DB440408C773\n" +":40650000F99FEAD8930CAA68CA2BAA90BAA06C9E0075353F66088FB699CF6E861034429EC877E60E33E2C5D139480148770EBD0210800E0ED304B40D02776081263DA9CF3C\n" +":406540002681DA689DB7B5812253CC0007815E214E2344EBD20E19440383218FA36008E8347A1E2C4D03A60C42D36415E6748221743CC88806D7B7C927CB80C2039B04FFA3\n" +":406580008D5A07ADCC1068D036490E7FEE3E37BB43DE432201759010901CC5BD12B51F6B700F319926183618CA5B1F26C48F5E74083216001DCB38806C189C1E37A440D565\n" +":4065C000344AD0724858CA008011BD5DB6357A2300B1D547E26654F880FDEAA4241906049743094605673588A6468983578E12CC00198AD0308D036FD112C8A132B122018A\n" +":40660000020176C0590187954F07824A044F0381304CC5DC944484EA1CE1313CC3425ABEA1294D9F2439118BE2610122375BF1034ADE62CA37000305AFB559D0A9050D5200\n" +":40664000BFAA6904C0EEDCE32BF01920CDB0E240056B1DF150893C4A80789FCCFB473CF8711B8150061FDDA36C201C5A27BA5D73842C153D31D8250757E7900A64863E7DC5\n" +":406680007A262C5881AA4792B62B48A5404F41A2681319FD8538C803D430E3E9DEE408FF3F9609265420091C1D9128782847CFD0E582882EC1020B9AB4905C0D6861102399\n" +":4066C00018D7D289B201E02E336CF0330D62049615CEA03CD31E49302BC5D809D5F0305981577285EC51E75EF105CE2200F42E80B358FFBAC87B3404437E8107104AEEB41F\n" +":40670000812033A1300BB62504D2068601CBD610C24366500FA193271E081853A910DB0F29005D9E9A38660044EF62913179CA64909B82F95F36001FA924C40F01C1021633\n" +":40674000A400E807303A0904680C20557681244A887DE65241579D20080EF22928F54670F6B350863D4F1C246DD74261760BF0F53BC96ED6027802C6C81131862053631093\n" +":406780001014400DA8C45335451AE708E0EDA411227CA31435DC006D2E329012BFC8F6D944456AF812A40214815077B20710D6060DFEE1E22D41D23288CA3C754BA8B0737C\n" +":4067C000EA686490218681E8E29E471D741D3D3E6143D9C5B0241648818B03C0C5D32B620F53412EBAC9E8414F776A901B7810FA4F9C4E8F313C175BCA0E316014400F3866\n" +":406800004E0B3DFC765CC030421D83344331E054024EAB5620127540A8818714A4BD06E2619F7A5488060E83A0A8840F05C0A889D5B883DA3B630E5DB8C25CBFD08AD0771A\n" +":406840001F2991362E4B9FA1083C8F55BF96BB8041E4005D1AE8D8C0F46B4A1A003DB38C65B060F111893A0B1EFC371C1060701B38DD803CEB0A432011C5F85B67A172566E\n" +":4068800043CB041354D4D741206B0B98521264052C70A021B55810005E614C40D2D2CF0B0612595E826A839B45B081BD508A2490126158243BC4548A5038150F79B0491B96\n" +":4068C0001E30B41F012315D781DF39445A82E0181B65E20288E40E036C15D8BB870DD00925D8223D0485009241945E20642E632C3EE488211CA6EB43C11E4A4BFF87C8DA12\n" +":40690000A3CE360B72212F52550F8DD3513C81BEBD99300FBD504BD1B3645F84811E0240607B12CF203F1A507A7110B4A585A76922E02A08007EAC692F719A88067F97BE97\n" +":40694000E48D2F72778FB13A0C021C680014DAF8613F8F503C520C4403C469A8610AB362081D218D1F7AFF0DC9E37250F94A3C5AB8D82E3B5B4610872F361EB3541358946E\n" +":40698000A942F62B31063A39D1EE99911A0D11A3129001E6F034106A860BD06EC233104068FC111C0C1440681C7B92022FBA4A4B1EC83276807DFC1420F6D7A25E7E732384\n" +":4069C000B407F3F37267C81E6D0359BE82688B03C1705081C009C218F42BF8F66BC106373AA013100629AA298C26C90BCF07CCFF38FDD16022714A60100269AA27E31B0208\n" +":406A0000944A254332940B0871618972864B68877E09841EDD3C134C4404FD9D4636C940133439A9588398C4D0043414641F0F1779C7AEB9C68FC05770390F3702962BC1F7\n" +":406A4000C56200D7B951442CEC881114B733E29B03C420821CF909448B8028D10E00F0EA87910BE1BC9190088A42E96806D70174F848832D34756B62C1F3E8DE813C0BD314\n" +":406A8000024A216A00933D724080A42B16C60F33F48E7560FB2698409AFE23684DBBC8424F40A80F8AEF04B9237AEB3045E288253FCC6030560736E143A6E6129A00C5E252\n" +":406AC00083D014E2CF4031085D148EF0F42C0264009468E280802CA113748A62071A0C1A20A56B3C9F94200421D194081C507B5D14842F53142203942C33A3D220347864AB\n" +":406B00001EF284121ABBA3F02294D9F8CD7342CD43EBED22343D52F0418E6F2A851DF56B78E1C879B6611CB3B984B82CCB6D9D2F5EBB975BC308BDE604A939628E204D6E48\n" +":406B4000E761121BA75B47DC87437D30181E417410127E2298E0BF0CAFA333C50F56C1284948C2F06105CD0060850BBAD66042A03496B12910A16853A1EF2A262039AA1839\n" +":406B80009403804F901C5E4D5D1A5E016901DF66D25C0600378F2C0788274F40EA11F45C090031830E3518004646D082E5D2177B214202BC00051F6B28B4EE485362018C9A\n" +":406BC0004F06B1153053BF37C4C01D816348C00586063C148E2481006897F9D3244C8405C0840B0D01071EAE9978769728FB43FC4D12E91C89520FD0F18F3091C691697C51\n" +":406C0000700341076D8E15EF40C818735182367C2B048972486C7C0873BCB1F263B0F6713082B9C72249F6B4F10F25DE9F504941C0EA0345AA142011BE1097E0910FD1F585\n" +":406C40002243F9E08C416D5950F919587C27603D0BD630A2092880C385B9400E1B43A030BA9415E4E03C19E5C025390F14829C0C41903631436BE125C90C65604982C44542\n" +":406C8000DD85B2A70817DAE3C832CB26C813D78843E8F611D94DCA7B0030724CD22180C0DA103AB4EC4010B3AA85C72D204EAEF07E22E43D1C427DC8608B910C0C2FA76432\n" +":406CC00037A2C1204900E7573C2068196803C17E3AB674423230F636BA10B080C08A30BDE9CC5D82C656FE3327AE59481AD7401F4FA8095206005212F0A4F88264380868EA\n" +":406D00008D1D6DFA880192B65E7624229C0408408093399CC0529431E7634B81623049959080C4480A2480E0157315B3F1FAA9140131D6035262D5D91656714C61101E4221\n" +":406D4000262F0CCB97A1BF8410CE072F30B5084A9E6D729B278A1EB803118C0A0F7B06384304803F49BCA4C01A80280A6A6A87CC238602F6C0B96C32E20C78F198A24FA670\n" +":406D80008D0850821243B067910912089410C108549056A0B3BA578831EDBB622E8714076120731EBBA584BB9DD8F3DD07B6170404E7D9821F67BF10281720069E58028365\n" +":406DC00050EA47D85981DC4F40D0E62602633097088F40C32EA4709B80CD50417A700FEC76737898238A1E54974343A22040EA19764660F90C28842F111417890144C9F7B3\n" +":406E0000D2E9901D917840417C128419EDC5E17BE1320750CBC23BC462C898E9F6238A633E28C8696200207AC7B7248F9E2421951022423ED1441F68A41F8E8392079100F8\n" +":406E40003DAF3C55D8169A43A7DCC7DA0242688859E3663A823A4CB1347A5F84799A78809E0EE71070ED01BDB79E20F4315210BBE10C73A2635824B3E9C44F03EE908057E4\n" +":406E8000D3C42221036101B2147B38287C3BD22049551C44B061B37C20008098B1200020469157777D1BD283C76963A9A01F198E8948307585A081200A0059EA400087401E\n" +":406EC0001634153EA7E011380203BB6DFC48D8F3F08FD0B079FA11D07762F11EC35DCA48FDBB8827010DCEB48AA244A62F402F3587A5A5B82CD0D2F3284082FDA396260705\n" +":406F00008D184A7200381B04CE408FBCDD07CD5825BA9B480E5104E528C851786EC860C3C2AB0578F814A11FA56F4BD99605E6BF2108F021186A87560E220F089A7804AE49\n" +":406F40009E13728D0861043D60344046038122C0904AD6606800C4C045040580468FB9680B5654905DDC38888118D3040D1F3DDAC6418A1EE4712F74BA1766D894F2010148\n" +":406F8000E01078C9207D01F027C9064101625063CFE386E140ED4A3133F37D84FCF07E908D1EAD341036442617892A8BD661043E89871F8437447D2B07109C0B3B7C00C6C8\n" +":406FC0002455AF0BB4A78B7008311AAC8BD6B225CDEF880216431F17490F79F696BB78402E7C702219E0044196D11E3DCFD67DD36086E0285EDC474F649D458120012087AE\n" +":4070000000A344B03813002A9C0AD66A783E3CBB85A10A480681F79E8A241E79509F4805BDBE0246B1F44314BD810A5E9DDE132820280860C7C7F2C21690DDF7503CF9D0C0\n" +":407040004BA8810C816EFBA8448E513BF75B61260A1F3B270839952A40F04221F9BD48460357671C1254771E4542C46035D02186B1FC5529C6034CEAED8711C7CF02A12A24\n" +":407080000C78068A444E9874101086033BEBBC8950781B8610048D0C7453C770645081387BED4CF0BA031DFA584041434340D53548DB7A8749148FAA85C808F39A64811DCA\n" +":4070C0001A7D24EF7DA8A20789C0C9C099A06577DA8258B9C01938191DD0DD6D480F3E819F04368F75608F686997613C0DE4800CEDF187DF6A02612607ACC6D7228D9C002D\n" +":40710000A39BCAAFC0D6CDB51ECC3B19281849F7E0F161D31207CCAC624065D9A2554622609AC5C8FC1AB16A690C7A3650862830354B62545909BBE0EDE512AD407B020958\n" +":4071400047C8140DA7D09822C13039A24C06481F49805101E201E2FD0780BBE09161EF83A40A4409B6C47A88B7ED8987EC0936A63008C6D1705F0850A03C81C80386000422\n" +":407180005A9BC5C207B03900E92A7C8F067736C23E04F433D889C5FF7C1D111C471825A9F3E6EEA1013BE0F0B485C2279E005F7C08A168E8A3406D80A5DC28753148B00F21\n" +":4071C000015DB41C47CF7C08978A468BBE02443CD8D787B6D5C63C3B5491090877BFE0F7C08AC08F7C01A182B4590F2384C34FC22D62C8FA977C0FA80F626B1207C3F646B5\n" +":407200002B9A03201190383A39022741B2743DD2EE21E6D149008D91FCB901FB6918C59F4FF60877DB56C549809D0F89D073BFC9C65880AF681171073B6994DFC3C50EF852\n" +":407240004831D94876640738039B606300C4606F7D9B2E887410CB5254230A039750091E30901540010FD15A4220F7D729D271054FC24001F151C998B85EC485F310108688\n" +":40728000A8025E2B4D11C82B939817D1A102C0EA8042DB0FEC7A9BB48CDCAD21217ABD0501010DE4D10034D20C44053C6D43E3D511304BD2E0E20140CB7EC76FE50F3CCE55\n" +":4072C00043CCACB25C9D1AC181007D66E85B6328803E7DCC2EF9144BC2E387DD8FC77340921DFA2C87795A2C1A1A57480E3BC1133BCAE91EB9224BBE498F100C82BE1EC827\n" +":4073000010A89F9109E50400303DED9AE4424677B5C212C9802411EF83548041F53D87705C0D134BD0AF022077A32176DF88F63E5102556C458E4FE16C2963A18A2EF75E74\n" +":407340002CEE71323ADC00F4AEA30420865ED1021E1A9919108E46B189DA0F8860650067C8A0C278780620B7D041CA0E904FA164080CB7E8F7C1D09340877F9F88167F439E\n" +":40738000177763082DED5BD205B73CD3083BE0E13C0FE00CEDF0A3D30033DF070B842B61C2FBE0EC441EFF4E53D06FE58E303C6F4620C78B47CBBE0AC72C884D0287738B07\n" +":4073C0001251108E250CAB31609E489C4848C08608B3268A50864EA1663B975B7488352840128922A24C96D1926484BC4B04725CC58DC244409343D50993262AE32D9E0821\n" +":4074000040992976A000813D29B45B836955C075EAF0FB8BF887B263DD5A05DF0A68016388649096C84A02826BA50808D0FA90DE180872702D840C75D00888E11494427E06\n" +":40744000DD1F30408BDE41844584102BCB50E6C9164EF8FEC8416128E1203B45C882088182102B2DA48D21B338E44062098F404D0909E29742E9F9C1003D9D36582502B9DA\n" +":407480000C50EA670124085881EF72F2F2D97913AC73F1F101025E8875127463D13F91760204FE418C9D70821E20311EB65E1F262F1899DBB182008430E3A34F43A20E441C\n" +":4074C00042F59440F59630843E1F794043C91523CCD9363C71BC25768B2CBD1C4832502B8203AC05087DA11A23C89E57080768085C905A89E11141E02014E8EE61063778AD\n" +":4075000011CAA6206B70641363BD84840443BE049733A85850706683393FA20680A2191D2619D40EB0121048144E95CE00C7AFB3840A048EE046D600159700277C981920D7\n" +":407540008F9019CAD6507B0B24E811EBE0B28C01CC10CD102B8EC09D01E443EB4792ED21C230244629FA64E0A50889B996C3EB5C02EF03D13D847EF8DF29121E22889E7A25\n" +":407580002C3D165C238F1B37903081182A307C27503E1ED1118CA11808501B9C1715AC874EA4225EF5382069088F7C361096467785523A192112EDD0225E868844BC7F4218\n" +":4075C00025968CF743819408E06002140502C9F003B185C40CEB9B51EECE51F063C0F7C14A84E8885D77C77103C090FDD87203D6F1C64ED251EFEB620487A04443EE282412\n" +":4076000009D188BB91113C090F8088823CEBCF4D8094B9441500843EF0932274A0C2FA6359EC4C74D6708879106200932105908BB67FC40E1C8B2080CC216F7D033082023A\n" +":407640008F6216D943D729A5EE2DD16002EF8413EAE381D58717B1B00BCB39C5D85007DF01257FD01FADFBDFBC9C00EE723C55DE55DCB576966801758C21430981B83217DD\n" +":40768000656E978A52D00C73DF11020A20C7DFF80787DC41A20BBBD5CC25EF7D2687A404A03F2B74591D5430000940E3B8B70F8AC80486187C2C9A2208F61610C310E3DEAF\n" +":4076C000F4C3E834816441400CDB2C8BBDE9D029BBDF4912995BD8A622E2256E7946394D2977BE9224126432FBDFF44867021968A6645336F44B68827DED0281A0533187C1\n" +":407700001C0E0EDB4F122EE841EA30F160130981409497218A2D18A0981DBA7E220E9E607CBFC22380460417418F8331C47016EE6D8250C0D8CB8401F3EA4A20100A4A0CC5\n" +":4077400021CF839708652E078EDEFB1DCAD06ECE024A4A63D1BBB95E1E30803C013EEA1E36023F19A99F6EB7195548C818E0B9F7212DA1C045B04CC31C04BEF7A1602CDC62\n" +":40778000DB46211DCB145820FBDF78C7848FE5449F4E1809FCF3DB4E824A901B17788600181056F88C584D3F62E789D92057DFCA220047966D09105DEF96772F4093D77232\n" +":4077C000C25F6E1DE3DEF9643F2214A769F7160810343AAE42E8769203432AE9400DEFEFE2057BDF2D1164091CAA6C80D400631431CFDC48820C75E203E2DE52070F42C024\n" +":40780000C8EEBAE209BD51F2404063E87D23EFB871C012055764D21047D3D7838F003B3E4C606001B9A4440C8181EF7A910804DB88C440DAFF040509E083A2B747B00A04A5\n" +":4078400042F06880831D8D047D0A103D65B858B9C0C3107C55CA7142380B716975E0113639F9195CAD143BDCE0881EB3A91DE8C84262000E02FBBF0C825303067846178541\n" +":407880009846818F96EE4BAA1104160082AEE06520948CAF5009441EDE5B2F0EB1956617610B088A7713E048761803DD9F785DC53C61582221F6C6909036A20207701C1EE8\n" +":4078C000E6A993C7C3F382329EE428C20CEBB08484E7D9E4059BE407881604F015C76328F015C0E3FC9110C093ECB0D1128F9FA707A309840B127B95BC7C4A6E2091F98286\n" +":407900008C082383AD0704021DF6A462980086F27D155434006626CEBC5E8C52120BC7E4C86CE044130B0880BC5D104001111003B1D34E44370E080201A1B79F8E16A09336\n" +":4079400001D665F82B58A870852A430311CD01133AF203100A38FD063E20254896ADF4403E7E684050BF45400E16C911071DD863DC112C0B114200440910430EBDDA11DC8D\n" +":4079800068EE14630E66733076531101081103C9ADD582D829B08DA800D470401D087C8894DCE8B0300601A101A1E523511440B0242110876068F013B1BD8161D70C83A4AC\n" +":4079C000B8100BB40A8431A7264182691069CA9B960704A630015200F6B461A7258E500DB200C26004A5CCC5816A4020751B1DC17A5E0C1A4021A1020A1834BC86107E9758\n" +":407A00001CC6385243B6804444A5CE8F24020058EA50883E471813440A1B4B4D95D8699076DE31786B64E6410408E21860F77118F5A7C8E8620445218E102C1700CC4AF7A1\n" +":407A40001307D50B524176F960988430454B47D77D621878EC7482AEAC991C825200BD53F42099D3EE8D92000C2048EA03BB0388452F65AEA1E55092B310EC0DE260FB4B05\n" +":407A8000244C1054E9DDAE04C1050E903337D4452EF8A24A4034947C998A39C3E377A4063EBD202F44B110FC18F5762A9EFE2811D448E77E8252FAAA4080D0FC101107530D\n" +":407AC00047C4A182669EE6CF8392901E0BD1E43D024AEB6095C4643B67E0118C10F92CA0A3089650CC3B1F34E08847D809A2028121F807302062A02CA702E089CC03A3C90C\n" +":407B00007A048DCABDEDAE5C1024A30C5650980BC165038490B4F66776A8729049F5E82257478063E0E0B543A0171EC959EC423F44DC0F75520E82AC7DFC8246776E6F90E6\n" +":407B4000F068FB049C418EBF8412AD00633F64BCE1502051C2101A46E76E53088434064388C71A1DCCF624C0265596C00ED686221F898C440101CE23FEB00408008E128329\n" +":407B8000B5BEC8F13B3C884440E009042C326B19E0E019EFB6F2EE6591F27FC0820046D72A3B9D4918BB3BC098C385C0A04C6CCEA4391F1BAE29634E8348C5D820C7049CB6\n" +":407BC0006DEF03D7EE8339219DE23DBEEF5D00073390F8181458381008184C8221A21C08B3B2D3A910DEE8671A1C5E0268126072F21E31FA7658BDBAFA5B9CC97472E0ED6E\n" +":407C0000C5243E16081A256612F11620C4AD44910AA30AD220C1592C0C2062058223C003E32A71F186A91B1D6F143DD86A2571600C7414A17436588320D95F0C38E3C41115\n" +":407C40001A30AA89610C20424320600103658A49DF5DB390800D9650A200A04A208006CB350048F5DED17B055441B2D7C252865D418C7816CCEE48025D16C875A3888B76D9\n" +":407C800092428D90E2397A872440C08F991CD70CE49F03CF11E00453B1004E042EAD112A0840BA24354602D00201F8D80044E02CC9ED56411E3B70D8BC15CE5E1D191CDC07\n" +":407CC0007109B75B99EA8199D32B0D530D3A02CCB6034782D76E8129D8BD245C208F7FAA9494C0659EBFB02A1E8494B01484B00081B6FF5004CAD2DB33807C32203301E141\n" +":407D0000BC1007C49C07CDB666B28712D0D8962ECA0060240966513950EB5D7267792019E832684779971EC78B18F10ACF6F6D65883007C8081332B44C05221134082FC854\n" +":407D4000310C21F47F51009D783045D9C47910B431EEB5EA1048132D2B28776279EEF3220383A067391061C2EF40EB1E2110FB9228A523E5A2A171D1140F6E030CAC0D00DD\n" +":407D8000D37F1F120A8EA1D6430260060349EC094991A90626B1E87813EFBC410C00C04CB19D000A20C30F8120842623CF0F48B50F7C3488A5DB22634C9DA44542D0F3C3F5\n" +":407DC00090B40694C98DA14F55758E14D0A6E0435A154EC32C33C3DB2D825990021F7D8F8D4325322268015B1551514400924C8000EA20980B54817C690800024222642158\n" +":407E00000808F75BF1969794218D502A4D5360F005C132C8B64027640682CB09C1548365BD9B83629C1ED0791C21656F71B19016C86DAB45A9DB13C01A386CA44201E00B57\n" +":407E40005473D331748D70CB10E7B2820DF84CA84D9F702C181131A50C3DC55A5E55851F5AF80C38168401E0290E0145042EF91D324A8115752200A800273202154DA220EB\n" +":407E8000A00FB2F00260DE385410C1D2E461843064132DCB6F78191067DF720360866859776388886E1D95AC2EDE26291EC3D33A0840773D241A128011E16721002465BE9C\n" +":407EC0006217AEA544AF2DBBC5C480204CAE2D903A08D871F19450F687A0C58970010143A84118806DB48C94296D4422309D018678C8D82101557D81789B051966884EC8A7\n" +":407F00000BA803B41957D990C9002C04A908D4001675EE86FE542007A40BA7CF5E235385DF8FA2C016472394FC38A10018047BC3224111B030EC2F8128416C55C5C2E6846C\n" +":407F400023F706E904DA1CE2AD5183009BC127C3B4B389177028F6A5B902612D5A900F3AA0D0961288450129B7C20B012080147AAF90424F62EB8849291DAE9840BACC4459\n" +":407F8000035000CE64046C400ACE282120AB0440F84130F6919105FD5CD658ED840604CB52DBBB79CC252080200CE0218F42CFDC17065C761C091EC2AEE0DE816D75089E05\n" +":407FC000C27D4E8F66358F724E0839123E325B302886A8621C0B1EFEFA23C095E89601A5803A23A3C32EC4352D37C0E0248202287DC0985A36E1E890410CFC8F3E54D1CD98\n" +":40800000EA50433F1A29080A12D958EB010684BEA7FF18C26024949534261B69903DC002B12371418CB80A883005444A5AC018017BB31467F02ED00618010DEDC0AD72A39A\n" +":4080400082747E067510A0019E8C014F6C6B16374831921CEE383AC18C3142451AE4BEDCD8222F6B40088438951E05F6287120C27427E30353F817CC7182C58F80BB40016B\n" +":40808000F48A811E88781E50AC1E409955E10EA10D404306CA043C027D27202415F105A2591DC38C7C367081008742870D96D00193B2C8943084009647F983E92FF47BC550\n" +":4080C00016430381BC00466343062BC8F0C3B2B9B2A2399F03A911AC722DAD7844E1FB651B1F48CD88E5E0E7E2C086269F5A0B881A70041EDA873050D01986A1CB1B1C0EFC\n" +":408100006318363A101A8CA229C0320FDB094211E3C8123C620E3645A1EDEF12367D691E373F00077E89994789CA06E0C1034BD037A3AA0B2F268B49A62AEA504F01100050\n" +":408140007BC4D10303A21DC4C642FCC63CE0BA661101140DB70746E836340047A057D59146238C0200DE290E4C616E006A808D93E013A00918433A875D8F8BD01C29EA894B\n" +":40818000C43B9716089234439F1ADD1E0190DAA50433008813837C9C21FC60D16498274B4373DD1F319B10E9D0C90226784868874EC8943DFD6CC4DA725E8EA612080D2AEB\n" +":4081C0004101480D2941034EE592EC972236BB6C18CF623F820B16D6C0323139482D34F89069C68F941EC802F05BA90D137947800672A1E52A21211B08D0E7EDD36740EA03\n" +":4082000062622000B01C033106F1A7CBDCA6630E4385EC4383AC30A68018520C18A744CBEFF2F105D010BDE9125143E6C97138D8F2F7510167BC601E0375E14226652C21BC\n" +":40824000E07744311814508700693B57624C822804544D13650F5AA2191CEC4229EB15CA88883C341E43BA00B8E84801E8213BA2345C28F0022C822901A9EB46F1606B3AA2\n" +":408280004723C6FAE1634A3883865148B06490680420BA08DCA081D2BA88122721E22BD1A2E205A5ADCA164622EBA4D68819DD4B08F1A3420A60F32C1DE540CA443D9260BA\n" +":4082C0003D9C3A31A4036E00A2467BE3EE774F723DF797C43641E11DC30EDC5A67AD1AC469DEE9CB89BED763A1935CD42A77BB73383CBEF43935027B18752217E239D3BF89\n" +":40830000320133E403C9D37E11D975987B79A8860260A00837BB45AD2040790C878681550CC0606FC180020D889E64C21F0BF98F566D0F7C340F7F0891C04C045A56D108DC\n" +":408340008C24082EF95721F41106CA22CC58D984C4A03D812EC71A1203BBC3CFC32A63EC7D12D5C1963670B3F974E9C081D994A2070D74FC6A300182B4832600B0870E78EA\n" +":4083800076FB090C767E428C81BAE007260191483A76FE92CA8E10600CF4FC7083652DFC80C01783EC73E3933CCF8C244252A20994A5B7896ACEEDA008C053A023F811DC24\n" +":4083C000ACE201E185B60308B21B086386E75823895359020A8D769C1EC5672048ADD9BA046C38ECE0D764430834569000C0166E9078F540B4401706C78EC773126020BF4F\n" +":40840000BCC17251000773043141105FAC74A4DEF2B288841B97F21B986882E54041D8FEC5270292284644B7308160B048C82D31E68B43625EC1BD163839CCE9A3CA6F00AC\n" +":4084400083CDB387DB66E3E692612CFC35A021A181EC7CA1303C1F9A26065810E19310E016C3C410C0391958B78408C33420AEE7AC587D47C5FE821918BDDD1A41110407BA\n" +":40848000809DE9F85E743F4BD8F2420C7723A89013C94E246C009B69796CF043AAF79EE2611F5EE0CF6E20A2386F45E5DF63E240018150339FF88768A811D40CB40D09059C\n" +":4084C000021DC744241761F90815E64A610674F3C4710403C0AAC588800218B123A55200C01215D6C86E78A201FBBFD8581B8171CBB84F884A3DBC60002051AF5BA01123F9\n" +":408500008D3C30A095C780726F67424904A2C05E218F66A84A2CF81C4441500C84094580BBC2EFA442C40F90968886A78B5382A6E54BCA9E05302F2552A2C0440004C69734\n" +":408540009B8A8C16C57E2288DC0BFBCAB086E1587A0D0D113FBFEE480B0BA8F1059C198C863066B7C7CE34C40678D9286888B0D5F98368800140A40431C482EB6511F81CD1\n" +":40858000E8408002D0C6051E26DD07113FB955058A06F2AF7B7710E7E4AEB31CCF8A8944543483118812A88792059B1B2E0E51CCAA08FA3CC46A1C828301442F65A8DC9794\n" +":4085C0002A8D120078354C0106833D51299800D1685075A828EF3564091185020097B00004121F0A070048842810068408A1160A0003C59B85E13F04322F9112373EE43369\n" +":408600003A12C35080E011FB86CC812F42450C28773058E9D2C66A2DFA78C0D9B472EAC86E024FEB0B1745DE8889BA5A88808001A36C2AAA21C10D46F8941D96A638B34CE7\n" +":408640000526F44262C53E002BC967620B9B23B78C248F432A20CE9154B5AC447806204877805401329316E1F6A08903D0C5ECB6520407863B5D847CCFCC5EC8ED1007C18B\n" +":40868000BF447B79523883BF091F180A10F6EFB1868C6F00A218758DD09843CDB083BD2F86720F16000F36F39E902422E4818401C0DA35CBD25C2B25C0AF06BE1771B010ED\n" +":4086C0000A0D01A50034156059132829A32177C90F8400044B8D60D94F69401CF368082DEBF7D10B4F7030970A871EB8A510802E3DCC9EF9BD31880905819D0C9993E13965\n" +":408700003E036F44A2086E14C3B69E0810654580E40513E63201497C040CC0F13E04322D98051DFFEC7720814E8820245BB6010182BEC3C11105BBD1082A0AD6380000AD3D\n" +":408740006680020A8A050755F60ECA82201F7EAE1803EEFCF3CCF02063D4A725E13F2127AD8C87B8C188081799EA06F10810F628089600A047E3F4512EFA0E5869B858BC22\n" +":40878000802E99AD1AC210340E9B40C39E04010449C20256009EA0C08F70132144AAA06282AB83B9A0085E04CA8860F0E14888740040325C2AEDF17911415B0D8007E1C162\n" +":4087C00082F314590081162F61DC9646EE11B42C07FDB3A421D82001CA46F5100CC1000DA0049702BC588C202F8870C869068B8CEAA1D63F0EFBF078C3E3D94EE25363A1EC\n" +":40880000120F6FE32EC0CE22E8E106CA92C0183C88BA6C2025538F8462240001A611F05171554801D3517882926EC78F46860DE00169E205C62B89C6D3EF25AF551202D430\n" +":408840000A9AAB071F6A2D1F761B8D053004BE043BDAAC4A31D8021DBA3B844300A7D48962618EDB6CA10534B07B3B2840500EF18008C83C7C834387C2F3663B84069F80DE\n" +":40888000578826EA92E202FB3090491F0D4E0F8B2188702800E1D8022F850DE0B8EF0B1A781D6F54222D202F7ACD8B3B3F6881C670319FDC54BC620B48F83E55152ED194CD\n" +":4088C00011A2F261BC90402F29CF0E577881C37926218DD1290C240089D841C27B81013D6D8D82CBDFB5C367B3B39A007A74D82B908F0170132A70AD08275525A73F1346C1\n" +":4089000031202009D478093A12F669CCC2001668A169D01D0D0EE62E1F3E3F09205C6B76476E54110768A82D1C31779831687D084B2F6651BFB80050DBD19B6270122790D7\n" +":40894000A07B019332474023986E39B802027073C1CC181110F20D0F602F5FBE52048F2F096389E1EE25B1210043C81BF10F0180D1A91E27A9A07D0E2357941490F631E04C\n" +":40898000D0E4C04D5E58F835FC439F3B4608519C7643D8239CB48484B3A544E3A5A7DC1D851A2122A99A4030F39F3881E114ADA2C639100AE1A2F27E68F6021CE8B9C404DA\n" +":4089C0008710046BE97261862ECC371107C41E022167DF187FD41622289A06A7C06B267079B0107C38063DB4042055F1247805E0588BDC29625A141E54CE320462F10D81EA\n" +":408A0000807E54C83007D725281E8036999C40E2F850D4A78947E95791308730A880F6EBA8CC443B17130981E803A8344D02F024E11A23D63EE51A5E5AEC1117019080C3A0\n" +":408A4000F881E685A440C0189F0C3C9A7C9104180C1B4958947E02CE12C10ED67A1084446003344AF244E002C1744D02B888183CD1A4444013F0431978E8747DC66E30A239\n" +":408A80007B91230176308C02C9CFE553B3F2B089776AF9FA88448410286FF39478805E358112081C01C30208C218BC132A201134261A64EF9E94CBB68EC7C6B2226D1465EF\n" +":408AC000D11C418C1E7A572ACC122FCAA8274C400D34095F6EB50EF9826391D397E82546DEF224C746B60DAEC7C05D03E02B5338498ED9711F4AD208025116A0CFBB4844F9\n" +":408B00002D0C3B69A04D022256A658794B0BC9CCA4741E3E01DC4CD721903407FD5238FBE4A085B3C4E5D01A0E10F0E09425D547E248825B8F40F01A1230CB104810F00E48\n" +":408B4000249AA387BC00440F24412D0850825E76FC104BBFEFCBC741C606A5DFF828009E0E822EFFC030D380DF1011ACBD2DD03C7DB2B244C1E05FE5C00F834848D017C79C\n" +":408B80007263A45848D01931C58F7EC79027D137E5BC249993BD4C111424F734B1F7FE722680BBBACA91117244DCA81D4CCE22D596464663D8C09005B8D88823D48F83D909\n" +":408BC000AF03ACF111480A11C2027FCC83621077FE8A45A8351C46A89E0C17D7D0010A2077FE9222D428B87B95F8BA4580AD021232A5C0C17E5021A752111939C8004354C9\n" +":408C000030E8D5A42C000C7053B1F629B092409418803D971C9164091A1EA8521F43DF08C83C0C5DF1585AF9329080F032C601254F51EBA4120BFDFF3267A717739D0EA00B\n" +":408C4000921D439E2607A6F2480D07830183BFFE4C1D40C9A852F83754C213441AE91E7222420EFFF340D009C88E90CB1EF8082077D5E5C4107C18E680082A861A3F423AEC\n" +":408C8000830E9ADA1F1FDA08406AB1DFFE6647A40CD072F585A8D0C003411F068189200C8123BFAA970430470020ECD782007839091CCD8212F74141B86C2084584741F497\n" +":408CC0004041888F7FE11ED188225E83D844B2ED109B485C2136D1D859E602C64E5084C3E33A12038222F11EFFD442C480689EDE001E1F01F58ED5B8400F7DDB0F8007114E\n" +":408D0000159683728E02C56215814D00CBBE0C47629613D3D9E943EC10C2F779119CA3B75D470F7F9C177FFC180FE68B31E062A818BE87521080D6383BFFDD51C140406F8D\n" +":408D4000DFFE0258F7FFB2A55A914EC0A5EEB342EFFF7549D50267D129C2100EA45F7A7B0881DFF4A860400AB140F023688A3D8C042C07280808EB92F135CC125C04D48819\n" +":408D80004F7FFB9F9F730402EF4F021DBBFFD88C943D9C5032C03C4ACD9ADC7BFFD4800358B5EFFF46CB03D93F7CE70B0542457302DD815E9EBB582EFFF5544F489B513043\n" +":408DC000AA1E4502A684E04F12C7BFFCD0E9AC8103BB74C845E3449DDD67846B0009F36410EFFF7302D44D0267A3EB04941E3DF9AE3DD65840B9207B021DFFF281A24AA9B1\n" +":408E0000EF888664FB5B8122BCDE2A37D14200BBFFD8FB44AC618CA94F5A8A24174978A0C0545797FE7C952F6DAE993DD6E3A3E1CA43004C10C3BF5ACFA5348FA25E44B00A\n" +":408E40000E7CCC6833510F30663DE87A4BAB70910DAE2A2605AF794997BCA448D01D4DD636D2411D20846A2403534073DAC4C58280A0F82C6C8D11AFBFC80440562A50295E\n" +":408E8000A2E910EFF8A12C9021B42EA5DFF125D84382688D0408C1DDA1C62514E00031DFF128E2F880C3BFCA0FA2578830EFF54604256F5D3389A2294E6CD4380A2541818E\n" +":408EC000DFEA2E52A89A50ED14444560C3BFD4963EBC557461D04AD04CAE2A31EFF47308FBFD104C0CC701007BFCC92C34A4E01CED81A411F7F9788FC0EF7F9810107B0617\n" +":408F0000089143383FDFE62B4200664367DB08220A8060797A5210413F09F913C4DC0201109805E9CDA2028A20673DA040E27AB58026D229081C1F0319EF466804BD98786C\n" +":408F40005F07C58921EE09A1EFF364C0E07A3C877EF3DA3EB721109B4E503DFE2460700C0C6B7D8D80651034C6060A04FC13CC6C7621121C38B0787191302597ACF7CC012E\n" +":408F80006046209890D17D28130A99DF850424023DFF60425F7DF50897E106A2D4DC0897ED7122822D0A108965633DFB8C86B5F080D17A742F806E8FD92CA70E5EFF6E1ECC\n" +":408FC000FF2C4040F4F540821AFEA2CF8443BFCD12E16393D7A14919C182A66F78DDCC23A851C00C441705FBFA8C71EB89809766AF096397285782018E048FD52440303F5B\n" +":40900000A3331D9F3488035BBEE006C4804B0F5DF70E386D63BFA907B7AECEE9C02FC85100880800AEFE9C305D40F604BC3C0A25D77F4D265027BCD8880639051BD400F8F8\n" +":4090400065A08602C1000CCBF64B94F7F4D8CC460A1A05727D1B0C2413A1609153DFD229B4C1BE709024F0A47B1C842F9D624FC0F3A41288410893E13A09EFE3B1DEDECB6E\n" +":40908000B50E040138CE1370719A48DC1CE0CB06B079D7CC87106F14A81E0039B5907A589D001B1C43B34895DF8E0416C838120346AC20179EA00822F22B721875802806C9\n" +":4090C000C7A28082E93B711ECA02081BC2E404102DE7F4D1CA0C1C05820D9EC5828650709086910DB8E90F020E10A350D624B60681EFDD14C0FD1C10EF93B440F7F330FB1D\n" +":4091000043547B3E487BD68040DEC2D41DBA48716181A1E1F0B11E3214849AC0506258E2158E405F5C712181111116E161063DB19E80604C81C1F061E2B0F1BDC046D0A419\n" +":40914000400D003BFB4C4BF246608D43B77D491EF6F6202F7D230F44E20B0708263814040D3A0EFA48361B370758331DD33D3B77C4890C9091F2D1E0B1DA51223C0D8117A6\n" +":409180005F7A8EC40B3E78E51F650B0EF5C03DE77A2269B25B81F9E5825C917E681B40D8DEE54B1028F96EB0704D800FEDB5A22837C931F55BA101BF04B0902A10123B8528\n" +":4091C000909045B033B67189406C0467882A7514E7404F5B246887BD30AB5E8BB9100B7521168D310089CF70900CE3DC184BBF8ACBC031C5DFD7EA6DC342701E06E37187B1\n" +":40920000DFD7C91E95501DFD7E20E02C89076382CE48130CE2A02679025DF7723E05D919C90DB84866A014FBF8590F2E0689C0C0E6816DDFD6C20DCB1D04520B0F6F4E66C5\n" +":40924000931E9C021183B2DA87BF87CFD499A27030391E04D56F262BA91065C23C7EF82C4BD112C16EFEA744D203ECE8045041E0FD83BF886FFA47C0F585D7E4E213150CA0\n" +":40928000E41116008419C0043BBE8184C5A3456236E801E7C091035361D22AC201D4E96F82A5DFBA6208021EA9F31EBD1622E8482A2A6CB80B8100108222763CE08475369A\n" +":4092C000974B1F177F63088C9C31B2202A08BD943661B6C0908519443B43BFB151E04763D9ADE3DBA633E61A312AF467F3B54514E26361E1D9FD83C9FDC4042587A38F87CF\n" +":409300002F09D448CA44029F04432E848BEE44C3DBC567D84B24004F088E280111067FA90E16E42CD9116872EC1882B72882D77D896C0C6C7F4654DC689303733EA4522EAE\n" +":409340009CAA105014EFDC04BC13BE6C78766C77E291BF68F5A22200FA6D98B4F9A3DFB82409A901A9A2A5DC8AE5E13322EFDC1205CDB1D8168A2F0DCC17A5ACC8E0007CAD\n" +":409380003C3C4681ADDFB7E568F2EFDC12EB9B11014721ABBF6FD0340D1C2E623538ED51620C02E67300AF753108A26919BE6EB843B13D44021E40FEFDB75E75800CBA12EE\n" +":4093C0000D3319CEB041C8024B1FB0145E633B1EC97E9F1A8E8801DF6FC5732859FC422EFDBA30A87D4804201053FC232A22077E9294807A61648B5200609401E04C78771C\n" +":40940000A0413DAA98417D5D58923D8B3260079CE588A6EEAE12EFD6E4C1F63D3C9623A764B988C164F4300A959404603C052F108789A32B4878089580565D830E35B212D3\n" +":40944000C369819140613C036340973449734898C9812C1D257CA81242068A64FC3C8E44177EE20EEEA05D5C66218E817C784C90887DFB9240A284EC43968F306248F63711\n" +":409480007743D23C80307FD717E426E2341A042410C1E00724BCB3FE53B08E35045F07D798543FD422011CACC04500FD176E80C00B801DFFB49753FA14A8470F0B2488DB81\n" +":4094C000D18F63DFB787D933646863A319F4B0241953D2164589B4345BE4000D21877EDF24115EB88798CE8BBF6FCC621D814510148E59AA2FF642E96BB0C7BF6F87C344CD\n" +":409500006411F7EDE1E57B1980CFBE1D4BB63510B8C033BFC7BF6F0F6B251047BF6F460C010606C4CB42014413329C751D4AB80D5C04788797D22C0DD2F59B8141CC7928FC\n" +":40954000E08ABB63112C06B7251547077EDEB23E9A217913E41CC2181C0F334C2CE0740409F4C77A1DFB369F7ECCAA329A2111A4114CA91A61127DFB64D77E111CC2278922\n" +":40958000CE6883137082CA47577ECA2222A908381090EFDEC3C8A0470261E0462F6D9B1139A03243C1464977EF725A5A832111B9E8B03016DA584C179DFB74882EA409F9ED\n" +":4095C0009698891157D6F8C454EF9EA5A2512A0A06DCDF12043BF6F4B49325E425D32430A90F7EE00FC1DD92C14400280E479172A3447604DC9BFDFB7E26FFBF8508D8CD37\n" +":40960000E030FF627C3323C26F644C09A3D059DFB8A4778084C08FDFB6C221EF11A50C223242120EA61DDD502C76ECA8B8092908A83B8B0413025EC2363060252079284C96\n" +":40964000C0004C09C3D059DFB7E885869165DFB80441080F407AA1440409A00A013F75E08F7EC3190EC1787B6C6526790054E82F8F12E2D1257AF21ECC2B3283BF625AECF0\n" +":4096800043820E4051FFBA3524F01F8081240114413EFDAB4FCCB8E20177ED6A1C074C4A6990AF6741C08E5F6171180B5A8152F3EC5177ED5AE276D8484CF9F655068F5489\n" +":4096C000483301B07CABA641835C74BD48011EFDAA4C17308114C13DFCE858EFDA940D21C4234AFE20EE3CC1644AD8D90B151831DFB52373100220165929F7ED49842A60F4\n" +":40970000677EC925A34F2EFD9344E7F1A839F6FF789A230628C424097795411C0509E84312D8D0C88235C5A27C20278121C0303D07E23FD7F0A2790F4680AF4E87D981458A\n" +":40974000EF8841EDDA01F46E90F4D4C902FAA3F1343B76E043B04F85D2886550A20AEF5165E4FF42F0D301687E4BBBE3C6E431BA30BAED486A36047C84C10D0D30EFDC9FE5\n" +":409780006229027A2E84023F59041F8D76C6ADC8D00FEF2A0C82B10A8732A91E093E61B4A44032481C05CC41C017BED0C44BC301923D431A3C1240F13C7960210BC78008D9\n" +":4097C00009703E85D6C58D80A632EFEAF5382EC15770818310711855C094598C1ECC9F2D630100A200FFE00E433401BA8C441A51EFE026742CC3B2AA8881DFC02A80EBE8D7\n" +":40980000089021A702F218160BBF6391E292478140981811C8462DF118C24C0E080002E71238438A400E42F095A0F77F0F186602103B0BA1856D13EAC078101915A9A042A2\n" +":4098400056F762C18045E85EA1DFC3884A4983BD40ED481C49050834008DADD44082C4098422C40A343A497E4B102E0C801064FF2BCB10319EFDCE207BD3CF8BE02810A8BE\n" +":409880002F303CDB6845C1C66094C791B5D927E7E3364264111FC13DA37480922818DC0107A61B47C66C6573E40E5ED3611048091DA28B56E6235F95B10B80AD962DC1F8E3\n" +":4098C0002EC8408148181811F1D68A0C0240C0C0CD6C87062E2D886870DF8EE09C43B153A6841E0FB0217921E332723405CD8FF041E9511AFD74BA243B1E0D63206336A87C\n" +":409900004D1163C2AFAA4D60079F480409EF9993B8F60EE0633160FDB8964741052932A9404B6C5481E653026B70C1108CD611C6D3C87E2D4702ABC8AD263F031AE2E31D1D\n" +":40994000C83F8105848A8931A9329C0335C3E21FAF6310028D10F4792D4A14087C8F133443B8603974A7220697E481A5EA0652637072213A545E3308235434277C663040A1\n" +":409980007983C3E746250274013076C7920400F12A210951807DC0524C06C9EF45E38F3C314480550C61D49C40503C1E6EAE458BCCC07DF815207C2DB42698FE798F25A859\n" +":4099C000FC5AE3F582C8202C8C22C8E13481DEB3891038B2D5BF8C701A60D8F009A63C16A598405998259805DEFA725C85E7078CC59034015D4A4901C7004A20F0E1A43684\n" +":409A0000C3C2F499325B6221048C78CF816D02E09008F0A0E209034F498A29AAAC2DB1414642E2D3B755882FE32A35B927C9F4379825E6F4D627E20101A47E0F2824817E7D\n" +":409A40001C743B5DC898020F7BB017976C0C90008E40002A3010368102E890308432E011F4EDD1788D084FF08BCE1B225D62C203C076F1F3F08602C8520206C5F02E770EF8\n" +":409A8000DC44E0475D0BC978F3A04B010B6329115238702E07BBD108903004567D06EA2230042F80010665E94788B1D229220B0DC70CB80343FBB8B38FBE1107C46C45C203\n" +":409AC0008A8BA44F87B8D1C8C50941404444F67FC974396CC20040846079FBF47C31C84130041302DDB28E32C22482540142101C0B24486FCC24C0612E5438520D141E2629\n" +":409B0000D70041901EAD622F0AAA978C2D040226401073CFC9A3DAB1E61F76AFD917008180288E01781E7705E50751B7C8A46C0027390DEAC0B230053B71418209F79E604D\n" +":409B4000DD7101C18204CB06EB903F881E9353234079F13964F89B24BBE8F865A02A245B2BD08B8553C02A845C0C384C102E4E44CEC4E43BE7C14804964A6D0158C10358DF\n" +":409B8000EC5E61F55934CCC8C80BC4DB64C0EC902810FBDACC77B6A1F398A17B39BC428A688101460BBD5A4610B07700B81F08146C8050F8E1F8331885803C3E0BF83110E6\n" +":409BC0009802C9800B8C07C480785CA084660490B384C644336083C9031E722F1F27BA09C0437AB1D9018419E9FD821C42F3045A184D91D802938882129EA099040E0D8111\n" +":409C0000A783ED04C1F0E8B88F5E3B231F534B085E071C52E0F2F3A983460837379F4A170C944C1A7C203789E6C80E30A404610326082461F7C8C8F8FED90C44A03D0B9EEF\n" +":409C40009D2F1057CE65C51404228760D608F46182D4D0AF18821003F1CE2A1A673120073DBD1C864F42358FA6F40789D90D4A15E4C01398403172270F226767C88CA0472E\n" +":409C800020BEB4087209CBA13BC38DC3D9F303EF0089148B8010C2F6A5A88F40A181A459208CB2080C1107B6AB920144CE23E03F09740985E525C1D8C9CACB01AD99370E02\n" +":409CC000A4E41010162FACA699E68E20C83FCCFEF86447BE7547DADF827C908098D40A187829047B0509B63C0B2C56162E17927C6D224043E42F280C02F3AE5C482FEFC51C\n" +":409D0000257C13943C3B407BF5F8B75E313C020EFD793384C03D8BC3BBA573872CA46960E76509FA400A61089DE44A81126E0F809C4EB3F405DF0D2C8FBA484823D2368828\n" +":409D4000F07C01A355510895E0FDE2293BFA74983D8B60B2B845814A2CBE08503327E1947402FF06A1242D05FE3D123C6122318EA247BB86440606732A0403123D4DF85E67\n" +":409D8000F3CD2F69F810F00868E2C441F5AB295D0E5D6F323E3F271B2D0174281E008713604B37D8BC95205ACB012F3DECC08803EE8A6391000DE10E72F1956887DB28380B\n" +":409DC000805DDB805C5000A694C0A4C040D6E22103803E9F16440B2D82FF56512C446C0F821D0E43D0EBB0879D4701EC2378E0A87DEF66770310EBBFCC22118928841E6D68\n" +":409E0000331EAFAC13BAEA540772A76FE01EF85D12F496E9C2313A71A50FC167A2CC58652E0918526849CAA34045038E527CD01D4423C4F0C6CE0481412D02F40CEFD3A1C8\n" +":409E40002BAF2044D094978DD70C22E9B0A50031BC2FD84913028FE0BF448AA87B290318731ACD13182320809020D531743F0442E87E4428EAED51207B065C472F3A988F5F\n" +":409E800013C91ECE401D26B9694AC4560E01AF12A609226817A3BCA80BD960787708885E23B62054A04723A481EC0231F1BC60F8F03C403E49383C204C414D0CB88363716D\n" +":409EC000643A8C7831A096DFDA8FDC1373B10419724A5ED620823A85F20547825A958EA115007C792401807478820A6400A044508827B146098EC5B4B1027967445C5E2686\n" +":409F0000B62E9B542AC0064201365A04A7696F8C50825C1798414821058D243BB68C44E26820D14A91AE4B1345093E04ECBBA221F0DF221C8001E06CEF26D40790380E0EB4\n" +":409F40004100C8B2F44AACEDF9024761D5027C2FDBFB0BC135880F00713E15F0DB91D19989A24454201025077F4329C397880E32FBFA7881448D120B0B789304F8164C8432\n" +":409F800001400A1807DE2D321C30C03997C2C0137C30EB12C4744018F32FD8B1E26832F1341101030F997F8478267829C0F80378899030BA4C190840909BBE3BC8811C0495\n" +":409FC000803CEA05CE0F006E280794C0B9C0A015AC0F26A1C9CC79050131D2A38444440F20A30A75318BC480C2507A0930AB0C007033431C403811953A3240013CE3EA25AA\n" +":40A00000002639F88EB440B2E42C1C8AA8F28C00547929803EFEEC304C1042A5444DEA7441F769B0840290EBDF80C5EAB8A2BB3C0B81F50E142E3E86F93F48FC10042F01B3\n" +":40A04000BAEC92068F007014100A1107E0908110C1410AA0007928BB21DCBA893C7CC5045D74CE2058FD6C420140A1D4029D0037F76BC0866220263896E26F7F8490289C7F\n" +":40A08000C20C13E0777F8421592068871E4C071C1063DFE0E81AE1AA44093E08973B9350F810BC758FA6300F05B823E1DA94008324011428A0887E339A2F0090211C15C044\n" +":40A0C0003DFE2820F21AA0E17261C224AC0C2000EC589701317066F6B610FAA7707BFC512F595809560F79A0C47B461D0F64082185740F40CBCCBE840E9158590464C044C5\n" +":40A1000020623E00BE3292207860311FD143B1EA08187C320E7897B8D90036C9A479202904C7677EF921DD0A040CFB9C884001A19DB2A8BBCA18CC4B3195041338D1394B2E\n" +":40A14000104F63F132D42FCF74440F1C82FE9D2350DF1DBD718A592B0400F9CDDC422EE4A53E17BA874D000FBB020FB9C78FBB470B48E0592CF2056C5203C1460F0D5085A7\n" +":40A180009E1EF0407009E5045C08B6620B5F00D01A17C478F261778FB8E1890D3E488422480669FAA7CCB7AF29207CAD1C20B843B813897285F763641006027CC691DA2356\n" +":40A1C00008DDF097B9626982EF6BFA29A9761C66909A1104940CFD5FF138164802ADBC2BE6218805DE1086C632A8F48A716B254454DD6E48623EA1C481D61095EC4368315C\n" +":40A200009B400C30ACE461DF84BF8652B8CE2FF78C61F1577193A1C397CA5064928047E14872EEE421C25E04A7064B4AD14176D07909F0B8B47893DE5D65402F50D61E18C5\n" +":40A240005417FBB4B11ECB3B10389ECDE72F538B0F127440F227BC7B4C243F5D309788CA08F4258D51FC85080E923C122602163845288FDEA7423014122BA1C8FD1CC71D68\n" +":40A280009C1E4E1200F2210D71D06DF08E48DCCE017F01A12218F6044E802BD46DC39B8031640798C870C9A1B2D11BFB74D2037F7E7E96FCA644F0DBB60A08D970A0176036\n" +":40A2C000417202758EC080431877D29E45D7E13206F821607D05A42041EBE10DF9F472C0904011E00BF92330882F6F69090A20F0C9BA1E7A6F886E0D22144421422F5C5ADE\n" +":40A300002005915508442F886487CA11081DE0213C1AF8FE74ADAC45CEF52C4021E40193C19792A3C70100816494B88122A3C237A6027C200437159DF7A2089A2255588875\n" +":40A3400085BA648804680905D08FC444C8D111F430C4680883C169DC4762107BD3B48F6138D00EFC61F8220766BA080F3E082499DE72DD121E04251D9144829B3325802040\n" +":40A3800058DBAB8B89D1C947B0DD086C8019E4A902CA809DE360834F461F979449C433CEF83F78BD88E1C3D68757D03EE3CE1A8F2DFACCBBA1284020489A007C83B45EC5C4\n" +":40A3C000904709B070597101C12F3C9C89D042012038022F9BC009CAC776A3982FE568C1DBA1903A4D0F2EF38F7ADA1010198046F9DAC83D3820777B0A1CA14CF0E289632A\n" +":40A40000C510C76D071F1A2621B6B18EF63A20617DEEB1792042FDBA40C10F0CED2000E99C8B861B4DA1A044DF4090E44E858DC8CAC47BF628BBF6012C70C5DED204C5C05E\n" +":40A44000C2C1F88E380209F7A0221C1113C60EE95229B02FCC0200E01DCBA09FC4704377D904A2C04A6B788E044D84014ECFDB1649738C8408FC1D1641574E6D8F9E26C86E\n" +":40A480004D00094344CC26441EFCBB22E8080283DDCC004CA208C03B80E264A2F26778B05EB1B57B0DCD804113211D7796D0D82019DC471A061F88E98890007D7785468750\n" +":40A4C00088E80C80CBE82EAD8110988000FB2BF87DBB7A56651A7605E76BCD21E238D160743A74366240036031A25C159E83A51A0205C10BE59B61F11D81FB1B9CA4E00183\n" +":40A50000F6A258E8CA0BD8DC84391D3DF9424117889A06D50470A183904B638C843C8BF38C853D4D2F4C7F21A5691B9021809CF408C81F110F09280615E10788B948221BCA\n" +":40A5400090EF3C42E30EE370045E620218C07C130216D3C32208C43D1602102042003E3FBA10608460442340609BC464E3DB09C2030164705FD8764274909D47C4456F887D\n" +":40A58000B9D004D488DE19562488125AB803E3706C8773C0482E5082E200C27C933F01AC8E0A0004484E1BE839ACA30C00CF319019A550E943C450A6CCD85DE2F83338910E\n" +":40A5C000A0B78E69C7BAB347C456825BA31260D8181E940117A0194492A38F288F43131C40A0D10846F88AE04AD02A0C00A35A720F115C1D1C400850F1172131ABD71A344B\n" +":40A6000005CA73D84F2038064031B87F9980AF88B9121A27230026E205FC45C28B748C4419C191D94E919B0D9E26C041E2437400248025004A00940128025004A00BBFE2B2\n" +":40A64000113259D2D510DA2B0F01D8C40D207D7960F64040688401004D3C39111E26931F0B590D5411034DC58D8DC4443AAA2D8DBC4401887A2C442AAC1AAA448E4FC691F7\n" +":40A68000A25700C049CCC91C975867915CE1E23BA3AAC2139C0B34FC473C6272441940BA8401ED0042743106B71E9C9B2094421613A91E26CF88D288D9F119A0F88CCCBC48\n" +":40A6C000497047807B928C63E23DC0013DE7F47E257E2F12C517895F12B6210964079448940DC84F11BFA24121A37A1F49B18E39E8C1DA3D2F845D4228413F76D808401995\n" +":40A70000061B8C78CEA240F1030105784CA11A00AF8943C80F19818083C46E6470CFE421787F88B0D986E1C0220201780028FAA9F848D48000B44124BCB1EE27901436EE74\n" +":40A7400078A86D0462C17C17E827486CF680191A0021605680E7085FC7DA0C26EE9583DA6F08682DC691DFDE30825D9A83D8F62A84638007E8643102CEEC24B1C91C07C260\n" +":40A780006783B3FB105FD355CF289E2CC073442F551100BDFD44E6660394B2630E94BA6AB9E36D4F8A8E4B40781C17AFB1341980E26C98B1C50F4D573CA262B301C21931FF\n" +":40A7C00096C974D573C9974CC063D64C6452974D573C57A980C64C98C5E52E9AAE78A4530189D931864A5D355CF132A6030E3262DF4D87B57A842FD5090E48289D7D356CFB\n" +":40A800005D351E40217FD355291A0061A3EE4961E3D8C207A3C826C40CE412A3EA2811821E9CB9160144815502D92B0874D510802141A8CED24C200F9DBF6829E3DE82146A\n" +":40A840008B1043A9871638F870B06E22157290896034344DD340DEEA9D02DAB884DD244033A3CEAD23BEA689B66D76493113DF0AF18B6C306F033BEA61CDC5EDC51103CFA7\n" +":40A8800013F0F1DA8E04D0347D95063B0F489A2691A0696F736306069A469B235146A3235546AB235946B3235D46BB236146C2CF133BE1D6C402F43E0F9D12E095007CD3CE\n" +":40A8C0009A878DB990EF39F238440C6D025122488446C0225C945EE4BD100BDABCA3C307C771791F51EE9067291208DA023BC0187D99508000180786818CC671E0ECD663D0\n" +":40A900007F24793CB4415183047C1200FE2FD200CE203CC43ECE21EBBC2D8408230FC008043B6B08BD947E4480BE681744805E39485029133C484CA0A3F652223E2414123A\n" +":40A940004C80004810D40A1FAA4112C80C2F944F11C24864592146D1F17D30953C5998C0BEA0371E122A270081D64102412353807D9DF47C0F116B846C105FEE10B1EEEDBE\n" +":40A98000543C7E28373140844880848950489CC6B0F408F903904ED010961B00BDD8C069D08884880C48E3E502A81107001013CC85844B019C54B4487F3C5790481784207A\n" +":40A9C0003A006F8E57CC4547D20282040FF6198120772E87D010BD123BE7847C1C3621305E1188F189459825E94D91F88030410F4A0C0E17F81E78AD28805D704C23E95FA4\n" +":40AA0000816420C2582578EA6D66429760168982137886B4EE980D2B5902A20F86460BD1B663E6BFA134077C50300C1406C9C24B78FEE84D8008B603416EDB141851601E09\n" +":40AA4000EEA9C1F6DDD975F219013F0B4995A24410EC5924052A9621C0BAEA0572C3C05F08490C7AC192643146381B476815E5A441F11179C6910DF06560FC26805D67C87F\n" +":40AA80003D7CAC60487C0BE89FCE3030C1C01C0D8E1243D131880BD67D48012114D481A028D88C096028181E303D81D00195C029E1DE72A4005EF83D4ABA3990820295C0C7\n" +":40AAC00029B0021E67A92C05F576FA1C4134A407CA3047AB838F22C86C3E0790247B0110C7C138C861F09980833E8B1438A30300CD58E0FB5E144DAEDE76200FCEE549770F\n" +":40AB0000640080DB86BA46D80011FAEAC07CBAFA79E1C3EBB902BF443BA714405DD7047C1CD83061C23884010AFAA6B0D903BDF9A88959C2BB842F3A11EA99616031051CD8\n" +":40AB400018EEC3A2EA9961004360A14001DEDC89A004393E36F9030043B2C19EE27D20EF7DF82ECA6410F3AED110B7501C0E0008766C284EC0366FE04508016050E46C2305\n" +":40AB8000C04910A002342211713261CE7199204F43E40B2901BB2B467ACFE0B7E141F0ECA88E43C8085284A8047B5C9088252807D569C96F2865C5F9C41187536A909F7437\n" +":40ABC000AB2217841E56FA40701EA0C40D368C1EB5D210CD12E806D07A0FA9D28FBA0A878739130681EDB3021EA81C744BE3EC61C3216DA42691E5D6AEA219E97746188F64\n" +":40AC00000500E981DCC01A6076302697371755A617AB34C61D4235B2445202B170C102488A9DB53F2209222B0140E8091202C0140A80AC625A02444EEBA551206F54824460\n" +":40AC400030A0866A2797FA21003C320486167F118F417F500797C45923EED52400A1A0FFEF71B1CE9D124FD57D62291A3D98982748732D1248B8184B5F53098EE1B0211722\n" +":40AC8000B4E184253FC0DF22FE494BD71D44401804B1DC4B702F61F41F791E80B92C0C301A6E95420D82DE0D9D9380020240E0BFB46B47AE86C416258328B31D13020F6504\n" +":40ACC000F9B4948B1388B1380B100CB1E42527EF12C101371C39DB690FB4AC842FED9BC12459EB3E61DEE2041263B04B0426F753991720776CF60F36CB1340AACC59202C28\n" +":40AD0000983EFC794C203044691504D0404EF5DE9892B926827483C6B14BE160911477BC4103C970089708C0D3E817DBF8081A25D825C21F85248B34C90034E28543C82132\n" +":40AD400004069440B8C1E51FD22540FE0EFA20F7AA3647ADEA0AA060C605F80F09003DD90020100E5C85DE3D4448220B8C0EB3AD444D3DBE23B01F210F8F91A067A8FE50B3\n" +":40AD800000F4FE42C15BDA0EE21075749882B49081564C03A3AAF187ACEF044150204A640F03114C00EFBCE393EC71C2312421B208940192A0990C107B6DF8C14F4794080B\n" +":40ADC00029EDB7F225415CE52384005BAA53CB58043DB0193D52C8546C98330B1F3701981E5105C7023C66248950DC70F2B8A968164844E155A87A6724F89DF117529333C8\n" +":40AE000094872681C31F33B308340D9AD2B0E108220C7086921C00BE25DE202FB017878A061F086C419677A9C1BF20051EB3CD4789550F6288AA202887A019A1F0CE38873F\n" +":40AE40009D52FA887689C0AEB3C943CABE05E84E012543A257D30FE403F54B99040178226475AFE902A1102202DDEE01091016F8DEF84D30EFAD3E10F4ED19776C00829E5A\n" +":40AE800022141398B1F0CAB0803E05AA134C358B208BD004043A316210607B00863163B43B8B078C6898840E400224866DB11241EF7D9F95E3C24478A8BC98022E8B917BF5\n" +":40AEC000DF8103BAFA88200417230CB8BC9A403DDC927D988020983187B600404FCD2046048896292008628D206028010448B443050289805802108C7AC8590E16405D57CC\n" +":40AF0000ACD70D6E2018C8DBB790E047C64233C2C486E7A009382ED29D536CB740BED84572B1010624EA671284D3142D160B06C030881739076067E0030300EAA4B88338A0\n" +":40AF4000D538FBF0184DFD86D04F4EDD572AD74BD86B03D8BB6E57525C53D8587277EA9A1133B84B59754D12D5D27D534636C80367CE1E240F82BD8CEA474163D67663655C\n" +":40AF8000801E4471A05C2EB79371348C22A9836BDDAB840FB0C04061754D408225C08BE6C7B1BA46047F3630884E68977DE4403D538024A977AAC42EB50333EAC782D523FD\n" +":40AFC00021C3C032923A7920C87877789D14A0CEC4E8095135388138D07447FEA9E9305BD59A860A01A5815D51C801E4A21EBAC91004E2EA9E32F2DE320023058A11C88F66\n" +":40B0000009804115B115EB58040422984070EDF343B611846A1EFC60167D9D8E4533198425E33431088A6EFDBF440319C2E50DDF90C3EB80D0358852583CEE7DF40092FF54\n" +":40B04000D12DB251801C3A208012580D2585DEA76E2F71A28F6A3C203E75B8989981088009190108826B8F5E47691E33A23EDA674072EC3C52138960FE0C7C7D8C24F841CE\n" +":40B08000187EAF2F2F2C6D0900081E40E709031080160172B188D8DF8EC7D65862618165305DC620C7C04BE3B94508120F02E967CCA26F5BB8BC24A660712C0692E110F32D\n" +":40B0C000DBAB07BB4F8FAC8787A9CF0C06D77E888BEB8211D65309601E792B90B3BE4C58A902BF7C356DE318248038058BD37812C16EA500B429C3E45C913405202CBEF83B\n" +":40B1000060BC8D1147AB2A10067A9C7D1008990BBAF8295028160BB891827DD2445A98B1BDF880F1CC7ADE83041725C5EEB3D52F2A868879814C3C5A4620B751D21040053F\n" +":40B1400007D927026A87BEB3A71F08DD08146905DBF0E9789D6C7B1135005863F415D0ED9423C4DB04143A7B6270880DD5C0771E3125FD93AA3EE1C123C3E1CB42344970D3\n" +":40B180006BCAC1457B3803DEFE001EC5E02A5005B97C70100069094A4CE29E858EA8292EA82721D48A3C00C2DC1EF12BA953A23542003460912046F6D981001EF0FB2C1199\n" +":40B1C0008206FC176E22871E5912476EBD10074F1C5A28321C40B3C038E194444807D34157510E284725C4560BAA6B16DE7C90C0E49603640041619CF98201C2B478ABE1F0\n" +":40B200006E80C960400066E0B9E5CC02C4DED6D9265E177F2B46803DC514448D28343744049655201544586403AE600770681602FDFF2040F4FAA5E44DF0BBCFA4C913C1E4\n" +":40B24000721D661E2446FABA3BAB90F8F01C49CEB02943D370239AF2274961948C46B1C8049DD5D01EF07F2F133F08740C2401811EA7F22034EB27F6AD43DAE447D6AEA29E\n" +":40B28000049E3EB3062378AD24021024E98522F8EF40C2F728809A59B0221F5B784C93A4E806C2E08C848710B93F34F10859980A21731B21688F226710BA2EE7942F46452D\n" +":40B2C0009049DE5CE2780043E8853588ABB7869023DF56E7B22A901A77F128016365B41E079220D83011889E3A4D1C05C05F5171054B1380D12F701C880BED02212BFAA7AD\n" +":40B300003844E080801981E9B84000384504003198B8EEF7F43CF52A27A041F0D110C3A5E8562988003C0C1C8FBF5AF708105DDE6306815A390146895BE1A3A1F304E9913C\n" +":40B34000219F9826103C4DBF237D179B0307C741E24879C12C7C0DD2604691ACB86DE17157C2F83B847DFF5271440393A17101BDEB16523531C94B8CFF3C379211240F668E\n" +":40B380002E3E8A7618A1C30031D4385A38069EA39A4C1843BA9A44F60420840E040CEF27AB8FBF6B04961107B00896014C12A0601E32BE448F2780619C1F25B8B9C977B6F1\n" +":40B3C00059123C70A113C077043CE46A44B013D426856472040D4E4AF0230EE9225AF7D337EEF52B6287C1D78870322909658C1E1F00FE9D5307B86186428F818C46828C52\n" +":40B40000B8CD0DA05C4E324CC29B80B8DCBC47D909E23481E3551909C0401DD5C840309FC8CB43E0ADD43AA4184DB0BBAB1C15C7F2017672FA7E8F861103B4194B678E2C65\n" +":40B44000BED112CF640920F89601CC1293D1AEC81241D13C0379326489608F2F6448EF677589A64B01DE5C2C23A006EABB62E1304538850532D775C31F42871041DFC6E32D\n" +":40B48000D66288F5FA8182BD662C567D40EAF110B08CA2E81A7F921E4A6412404FD8DF44040380BEE98F2E2A0E3E5EA82187AFED4406400E3A011ECA4E19B488D3A8081890\n" +":40B4C0004F9F05D288BBE0F2291147D08A74449BD9C5042A34C3022C233A41BDCBB08110D319001222F13C1369B787D129242681411806228C41C1B20115611B005F856B7E\n" +":40B50000C44418B70781C4D610E3BD36892DE612319287C27E82C6A510401D9BED0B92C8B00EAE1420242CB868C62AA61307D21747E71781D89C043090903020006627B3E6\n" +":40B54000A7C42A36010EE30E1882191431EC8032041F47D91E7803D2A3C6B25E850D9048640040FF565C219700588F83128218048BB4A6921FEE18103888EAF0B1BDF0808E\n" +":40B580000EB3AB4C22A96433A58877EA9E32F7D15A20281F5BA8708F01E24A03D5B904440047411668031EF87F234417207B7F8888E440D358FC23C070D7E1FB4400C24A9B\n" +":40B5C000BBD43400EF4D958943C0E3A46600021374003580C05862C2FC2069A204CB12F3D770EAC78C1E18813F0FE40801CA9C86E624B95C28EFC845BB301EE3A48FBD1533\n" +":40B60000CF86328F596E3C9771028809DC96A5D44425AA931293406A63885CA1BA64220712A851E1039201FD69A25ECFF63C10302AD1803440BF16B715AEC0093E81708365\n" +":40B640002108C080303ACE81268EF46EBA43B4CD12C66086E78465AA0039A45AEFAC825AEE69A46A96BC214C8A3280D32D0B2DCD4471AD8605B02A8012A866348B120B8BFB\n" +":40B68000840F67E690067685DDBAD880C417100388B46A959DA0F480E61D29094C71F28FC3BE47E849C3070D627B3714723D647B03C85DCD187B3FC8BC7EAE2C10BF0FF3E3\n" +":40B6C000891DD77AC24776841A44D0E015260487547D125F3B81064031467A400A3E913588BED08440F70635860B8220E876238A63176841A804AA1ACC07A6404B43418014\n" +":40B70000DC81F1A0F8FD9188DCE82AFB4B9D1ED08269CDEDCDFD12B58054680B06D76AE50B00128D449F6841BC90100D548A2C0142D38B0052E8041885DE1D0822F82EED48\n" +":40B74000082784D5F506F408581CC4851EB0CA3ED0835C0FF038CCB8060049C53EA22301444B412AF06CC8266842320B5414BF7409BF7C02330042D0B98708742B3C093088\n" +":40B780008F684108021F140A3C25F0822F0A75200087A367684135803848AB51095008F80C044D529ECD61BE4109DE5D05439074568826814BF142E11A45277D47172C0C1E\n" +":40B7C00022D74338208F8B28C695805C215DF300893400FC3D8421190E3C985BACE886C048841777F178D9F407A040D6268BA1207B03C863838FE49045E9E6A1AA842AE421\n" +":40B800003D360024210D546043D5900E635559A51006D14889B660B4300DA23141427AC6351B8280450B8A02B402D8F80CE60BB3C84C71068D520FDB7A135D83E62C112A5C\n" +":40B84000ED808F030E1F01CF89A3DB45E208E968C4CF44041240A1D018F6B0099AE3882E2E788FC878D6D8F17571F740C884C008125305D9E3627315A1071F2D1DA0448FD4\n" +":40B880006330E63434CF447B111DF7A05DD46681C001718D133910ABD1E1DC824178DAD8BCE9645EB05D1C0283C559069A00C7DB48440F7C4D0C3B30F9020309A02E2002B4\n" +":40B8C000F80FD08F4B300F693C159A81922586ACD68F9FFB0BC924021A81A29589911500F258183813D5FC223185DA04A480E0B903544523402F378C9820876F5A8B01AA80\n" +":40B900002040CF3647BBDE06CEE7EE1B11078D00FCF009FBD17C40227402234263FCB83C0253403C36BC67033DA3C886BE508D10EED46BD8645C40C34A80221A01E0B28E97\n" +":40B940000F20B1905A087DE5E46031FBD94E4801DE06BD135424234223A43EE455E46B055DA90A225AD9A00FCAC41F368F4D80A0401B4EAA0124103303066640C81C534EAE\n" +":40B98000E882FDF17820F13BDD456240107E6D40100B53CC5E0B971B4E001210A26096C1A95A03773F791FE5FF8D0E87B4D344061742E10385EE2166C128147B81065DAFE1\n" +":40B9C000941182CDC80822E59B14273D0AD03DA6C8244AE10C6910CA21965480C6C7ACE5C4A9DE140C0D22AC5E9900A8553A1EDA8100C2C091A503BB10D9A01E2320607080\n" +":40BA000065B221DE1D0E0E870313A17C2513C1341A22A97647901DA74E644F9E2687D5152237D8B98028F6530343A6A02812177B35A942C9A1117DC07CD8B957959F459B21\n" +":40BA4000A41067CC8B421D3FA2050ECCC0C2E9E80850B1030265046A0F10503211DE03CAEED011BB2D49EC2C5A4435FEC2D814074EA8834809D62C797D8180C40401595DC4\n" +":40BA800030454288881E31B151911C2C814B1A08022197162E4B31A84EEB1689DCB87520EB51D6C4A901EC581D827057F698C5459139D8289C7CB2C48FC23F03C8DCCBDE8A\n" +":40BAC0003985A4A013800DCA2A208C08037B96C84DD034BA8610900D401804906D20AE504A5E807B29F09A3DCB9A2239AC679B4761AA6B1B651E02B0C05485804821E4F205\n" +":40BB0000C3E6893100C853807B1BF0178943189603D1C37B0C0E625442773E81B8C9B628DF6C900476D6521812619ED4E613057D2045F00668963778011233FA8790405350\n" +":40BB400040B6B9C5EC5561DA9D087C180434E102AC0A2C946C471D74B04050650606B14047044709127B839E341447BA9A0C0502816088401305819C7021B3A248DA064FAB\n" +":40BB8000F2E8F00D0D12830342A4B246C32269B120A3499126A2318122FD042B0319FA085745EB21FDD16EC87A50F0F0AF6437F6A752CE033AFA40F12816CD9A4061D44288\n" +":40BBC00089C0DE068118D5861580230D4F10107723925462811DD73D0786540C128CF22E18143C43DE22B12A2ADB68303631B044089330089B6A0236C04C27A9300395C8B7\n" +":40BC00006C3FC21C45882E5C815D8E8636A41DE0084C2A06887E800CC88C2E8E03C88A27B036B83F265AA439495CC2E1E0C0D2218A3DB52A381C4BC094E38171423B036A4C\n" +":40BC40003DAE16914A95480877AFD1205C68044031EBD5D7A55420378E4086C59C5E967D21C870F0362179FB4848C0958C7493E06891F574D979FBA48AE01FD4288438FAAC\n" +":40BC80000C7CE6A0F0EAA89035E023F17060F92B710F09D6105820FB61EC829008700067B03401418459EC702440B0790044423FC62E1A1885BD8DA6C471C14792E91E699C\n" +":40BCC000A088D9A0C20396182594C124B08C2860B402D540073151E7B2650E5354E6020BEC29204A84E4A80E689C9703B6709A470A470B6E15742DE0001AB840DD6B3A544A\n" +":40BD0000C072442EF5CDB200505DE5B6A135BB72C4477F5F6E88E60D799040AD846517BA5ECC1A637FC63340D1F894587AAFE84D631F805088066B99E3D8DFEB28F2368073\n" +":40BD40003AF32E5BF890F65790E50300259055303E00D8400C35A7E44BE03C1A51018F5620712C9358B3B67178EC407AAF212B67A00482D7B7C0A02F0DC3D12365D2340B2D\n" +":40BD800043C088344B4ED6B954A948D259A057F6C90095AA005B0289465ACD02AADA0251A44F30291FA097605FB82116681376D1125C8240D526AD8C6055B4912D53CE78D5\n" +":40BDC0001134D2242DA606A9291C8DB5102B938E10FFDF19236D5022170A65E0100E14A023FE23E3005540E3BAE5E03408434474B6CBC88164B321B80D36AA810B8180F1E8\n" +":40BE000033501DADB4AFC397C6680ED81DC016EF98910BB87FD2217281AA2D91B6DE50A4405B1D81135867C494233ADDFBE1C576C4102D7C886A55D83862040047603A43AF\n" +":40BE40005DCE46D00912876B6B26285BA54F1F30914CC014792908A0686544D0606CD995641EC4ACE8BCA41FB302037B748EDB802C1B8BA46BAC4AC456B21D2FBF6E56BFED\n" +":40BE80007EC423673D003AD8A989F940103143884026C80E645BD112E1444B0B1C892685FE08F31602E15C02039D2CE12E201CEB8213B923C551847BA3BBC1131C0B1858A6\n" +":40BEC0003F52F3A1316C8383E50099B8204D03B300089D8B8749A474A8E96384B4AE142F39A10850681CA68FC61A03DB0FAA0064E85DEBC6C40DB23766BD225C01F7CD020E\n" +":40BF0000E0184C148660C801830098360801009DAC21C1860689AE088D603001809CC12AEF44D36056720ACD133CD0346FBD33DA39133100E93B702083A689986C5A200D86\n" +":40BF4000FF1815082A6918DE7C19105706B1102029041A9E26E9A263596D02E0E4F246821E4528900F06B198298047ED97900287A44D52C88DF2FAC0F75D08979A0E036199\n" +":40BF800082B49004F7822104C01143C800420131EFB0B1024B6F87E7C6E3302C7D491446B1604B02BE28901104B8212CCE894B8C70681017D8830CAD530204EA2A8945F1CF\n" +":40BFC0008CF8D23401AC28A36521E289422131EDBB51D7F4104202F00F81F13530F27C510548D9800E6D2E508A1838CCB143DA9FC40A8041EB000051C1BAC40404418D512A\n" +":40C00000E8E48A2157064A1A242AB80416B11CB606F13408EC17D0400C181706081800815B0F015AC4B128E1B9B80777360F90B982D540091B82ED32988E20D78AFE100923\n" +":40C04000C2F600735476363B8D7CBD9634399382209FE439B00F1FE6F982409B184800EE360053FCDCD81D86188EB48D9304828513A5235FD410046B6EFB52019066C08058\n" +":40C080005C11FEA1472EDF6011022130192021B7890247B8CD84020851D3C79E82F8BC209847F8D93B09886090691A6A305219ACD0517C60908A33945E200C4690247ABD4E\n" +":40C0C00094708C019417F178F1F220C881C1881E3C1DC3878450441F22F6BAD209CCF04CEB05377991F2C298C8C42153F46D50F6FE190C20CFBB8B0B7C16115AA080D900DC\n" +":40C10000C76D113C828400E011012254390F4677AE60C64C047F0BC2234C2B1FCFCF3EBE11667316663967D57B82599D85999A5981DB02A08A7A812120F66EC1313C111CE6\n" +":40C140005AAE81D9BC47332C412184B963D41663C49884A2633A24753FF23685C107A3441202012AB318401147122CD80A0FF270DD3FFB800040E2F408F2E098F9703480EA\n" +":40C180001F8C90444FEC13113682EC8BF2018B8023D4F2820FE5B91FA7BA078EEB17C63DA2208FC678F262CE05300845A340324B32044279C44A1B8291301444D3A18803FB\n" +":40C1C000CD5004001F318F2026889BE22203FFA1C512B7B0EAF26406EE1D59E76C078030BD864484B87CF3FC47FFA35A9083110EAB8400AB910347122EFCF09F846DEE0536\n" +":40C20000D21F4BDD7C39124028F6178F00E0EBE0D3732C80540C71807AE178A47B7C26403C50C079D739006390D03D09FED02E48791168FA07F1E6A03124071DC2DDE5814E\n" +":40C240001038FA0B4E0F50A99E4B529CBF1C4DD004B0EBDE71F883084571C0A9D1E708ADF057C0EC8C8399CC2156C39E2289FE55F1D1E135F80BC99F45881DCA7E078B709B\n" +":40C280000820608F418F047E4BB128068387C13B03E2D2E40B9020760C365C7112CF611CD9036191124F6027B820C8E5392CEC0799AE74808769AFD80C4470903C1878B992\n" +":40C2C0001718F6D8D980C6685AA1C5011086036388A28F7FC7891DF10D90857E8ED42EC0B61037750322D784B9896A051B026757F408027F84A6C075E824D23FC23AF612FC\n" +":40C300001D0068D821E8F08247F98FE16F1121CC1080FF03CD8F8A7FC4FF0725E52D2960DF0C017CB4E5200B360C1028029E29931126A392034DE40C03FCE1F12E59759C70\n" +":40C34000B0E086824495EBF641F8C690FD21F4258FB42006680254243F89EB8F80E6F3D401307088FDF8F846E09FA8971F19CE8822027615A080A4A89FF0B0A09404A8E029\n" +":40C380006C77B590972459FC499B0419B2561FC769B0501BDE342013F8EB014E99D40AD30BB2598A980F21161F10C9881DF04D08CD80401B21A1FC721B15100501FC712006\n" +":40C3C000421B2701FC70D251014FE37CD8290D99E00DE3603A364003FB6C5A18311FEE171647D4389328B03E20201B343C08F3F87AF736708847F0F1062221FC3B9A2449A4\n" +":40C40000B023203AFB91D04302E48E3F873344873604A3F8723604C873B6745BAC04E3F86E363E0BDC1030133F86C346E280148FE1AFDCDB422A1FC349B02B4D02341A33B4\n" +":40C44000480B07F0CD4742C1E20D1FC324388B880C6688F66C0BC7F0C3062301FC301A23A20311FC2F1B1BD8D0B02EA033285B346E5F01A18168D11C4D81A8FE160D81B271\n" +":40C480008398AC6C0DD1A22A9B0384188A6688DEC0E47F0A468CF403A1FC281B01844889EC0EC6C98A5C8087F09A6C0F1E10072604B360863666D0294D8220D91C10293B83\n" +":40C4C000ED1040D254333A48325824B2E888946C7797316042AA110B102750429B2601FC4DD79890A7F143EBF8093F6A4C4E34097412F35092C6C1306CD4001286C1330CA9\n" +":40C5000035701C8E0858246A7C6480481B03D3003972061FC196888440FAC8442F50A920BDA44FE22308891E00460FF2E4D1640587C0B68710404116C0C8650A10166505E9\n" +":40C54000B9E7063B850C080A85427E1CA43C8DF1B0905B1038A4088B40B8C1E4C9F2F19A394D215A801700BE106510800738740C0226EACD04C0F5A51A170380FC177C40A1\n" +":40C58000EE2509FC0704BDF8B4868E10BDC1183C6A3081B160F72722080D24144270411AB8E2603669BC06E0C11898DA001B03E851ED4881083E17F331D4303441C1D4D140\n" +":40C5C0002840B360169FC4066B6BEB19FC0FD3D8D8228D9034FE1472815000C73B552580E07324846EC0B4249711241F7EDE4B023EA20247F821F25F250503832394414203\n" +":40C6000008FD22114430476E851603A082E5C4303A10102C2204089E1D622F2ED309DDC404C6EDE1354ED1C702EA398F445680256F01FF2EC9871340EACAF12F52768E9FA6\n" +":40C640009479A1B882383483B326C41F35CE602CDAB4707A8BD87442A26D76E9809B7DBBC699AC70F5F400C38B3180041EE409BF0EA99A40200868D94BD8EAA3F0D0B8945F\n" +":40C68000037F67AC1E166300A5E90182F030301A068CD698009E169102402186D6E3CDFB10B9E83B74C08C95F48100502C302CB80187B040D0D9898582DEFF94B25404BEF4\n" +":40C6C000EDD2D44E605B306502EC0A0A818D82E4C020142DF0EB820534207BFD30713C108CB4070341308881706B1F092340A7C41E7DB99E99E01A9A255627D549E4BB7EC6\n" +":40C7000071020D0291B130D0774134A251813989EDE408DC84B74AA50164D223D976FCD245E2809A8225D16CC0414108A209E6425A0189A03CA00035F8AB34470A5C6102FF\n" +":40C740008E31231C713D3C881C5155122350107328F063F11A713CAA33A60017B5588010232389D8C5456310171691843005C68635C13709C88A593E8C1A024E663950E04A\n" +":40C780007A12F21758299102A86A222010252911D90BA24662747480520E9E190FDFBF7EFDFBF402AE856F15151E05E23A94458061962521EBD609C094634161DBAE88F280\n" +":40C7C0000924001158C079C8602EDD9746CFE0E17EB09448101C0F9C427354D9B808B08FC338F8A0D33658C4BE06CB000EDCE83E02CD136803EBD6C22B7C06CC2C8E04C1E9\n" +":40C80000AC6AE8A0C6DDA006DBC08BA03071020D73480F30BE18DD20209AB7189A18D548D8B7089A4671B601B7F1C9F901E5102DC813C416003455851A06D1E32C1020E86F\n" +":40C840003DA4A998A8002C80503C7A5830E4F7685DB40190272C1A733528590E6042A04CB071D59AC006036A040ADF86588EA002E2E12997D20595D62D260DB34096348974\n" +":40C88000FF8E86877E4B1B8B0A6C0609C5102C8E644C81A690319C1078A1202DF16AC20274201AA4211A00E76B3C9902315C620C11A893A00B2CECA23759EF31D11C58211A\n" +":40C8C000D18C36C774BE102B18C1194D61F486080D71CFB844C401D6438DC46DC588D8E065A256F7C94096A70B24680994DC52E111CD21C8829D848D09329B9330918C10CB\n" +":40C90000ECD21B08261C9C6E2F062307B62F46E23119556444D1688C78842688B970931140E2050FCA42A8186154420D0A8A34182C521EFF004004266A49003022470B2277\n" +":40C9400086888E6B0957068886B6690646806C590036FD02A80140412029D806AC97405202C770C098253BA21D018292976FA52410AFB00C140230291FB2012DFAE3D008FF\n" +":40C98000BE8C2D40413A8065085AAD6DE13C9445C0F000E136A36E04002D03F10316E211F3CE60086C1105DE1042C7A3F5858E604456E823C3B2CE10605B061590000000DA\n" +":40C9C000030003F0000000004206000038000008B4001FBF7EFDFBF698FE8447810E95F996343663B886A001A6202C0AC540A61D77225928E08B139200455C20082401A877\n" +":40CA0000085008A0113827AF17AC133A858C0E619B4FD1814C336238C0730CF23B50E977E1007CD15C2C00E684E45B8C218BFB914905F0BA6D97142908BAF3DBD72B16D5FD\n" +":40CA4000529013B8CD61BB5D16E7FA6128E6166E478626E9FD44310DC200C8300C439F5F628874190701D067D739D3B97A084DB8DAA9B972E9B61CEC11E49B2212FAFBD9B7\n" +":40CA8000060312D2110EF772201F81BF08841823945E5D8E9854EA855C2F4383307CC7B8869584A9FA3CBAD8B24C684730120313DB6FC4009108F3B462842ED72826C42087\n" +":40CAC000911992980994828500290D2311E84202C58961E2402A79DBA145178F3508010E68C3CBEFDFBF7EFDFBB1306F1BC6BDDB235137518F35BC0396EE0C7B6E20801592\n" +":40CB0000BC7B1A8585C006E9CC84200AA39CA28701BC6C1E76F29917F779311A462DB46D01CF73CB4F7290191A03B8E120C64F0348DC3A48FE50D7824CC8F2796767D5B4D2\n" +":40CB400003D44207D6B9058ACC8B30CD9B2F0F4B520EE4C93A8A2316F50793B61EE5B631E52E21A43218C20D93228250D36BF3B00372C66C60DCB490DCB29E7C80F96C05B4\n" +":40CB8000CC68DF72AA4F52148ECA6234DE0751C37402A60630E0390E0320C4321E064872190770E437B4600C30B887018210A4310EA1B06819072188CE3B8F5BA0D98D61AE\n" +":40CBC000BEC2F4326C8390C142633D861A46198E773FA795F71015B70802DC13FEA924F6EBDCF7403A1E029AA8A0F03DB79202BEDE1ABEDE1DD6C551A6DF7CF0A163000B54\n" +":40CC0000773913EAB599DBC42809DCE93087014C45DBE1D5830DBCFCA25202A3B4D9750765D2119E978EA0AEB67F0AD3F716C0BD7A88C46BECCD81E317A16D9B880EFB18F4\n" +":40CC4000B16C90EAEA4C33D8F2A475DB2BA420D4E76437EDFBC8041B4351078106C5C47266C6819766113937D9926B423C8DD2B2C0142BF5D6548981D332479FD2D90AF27B\n" +":40CC8000D8F959D8E196600104B1CC8ED95520180C01811EB95B1131013830EE56910C0060C0080C00A0C00C0C0120C0180C01A0C02A0C02C0C02E0C2020360C2C610200C4\n" +":40CCC0006172240BC180C018145E392C960311E8312B0312B8330203318833D62827600C05FB2CA3390EE0E4A53FB1A365479D4E09D4016E02E7B31A10E9B2EAD6EBFB8551\n" +":40CD0000B7AE674ACCEBDAF6C39C5242265EAE2307315611D00492361AAFB8B4CE36E4405610C4DDB7D6C41D877077672C3106C31B097507BAC5D47CD89236F481A29AC086\n" +":40CD4000D01931D5B7C23872E5410CBD0147229EF6C03240122B94AE40B1CB74F343773FA1BF7430576F4F11A4611CE1921B76DAE285C4611E14762D6A1D463437A33A66E2\n" +":40CD8000E940A78B5BD346A73363764E30004F12453B6B24218AC228A5457311478DDC02783D40C21862A419320CC20400000000060000080001000203000824000000001C\n" +":40CDC000FFFFA1EC380000111C0010180C01817541A876EC4C29F34470805DE00D201418C940036B0010B5D1AD62D0775902CF40958B42A8000425592004B5E3CCC168860B\n" +":40CE00000000B4AD840063457A006A8C70000E51C2803C76453E9041A088000492DB6245A1D80005922A800061557600D0ECC745C68838D11C0003C8D4A48403B002C70C2E\n" +":40CE40006596AB18022686900023489200024517A0004AAAD800999F47D2484ED50800A1AEAEA8968D10002A475058215B583BC02C6ACC2016B3E2BC290B9A21C000BC76A1\n" +":40CE8000438099D3553E0190ECC01212201A2AC2E01B33E605690E076600B28900E876C6B82C0788F5060887CCD61C8803B206F15A5F1DF85B08A329500AD18E2A61042A6F\n" +":40CEC000AEA1008A3299AC2A907E8041900674451B2C4306349060E4D4DD1D5E00150A60A0560BDCB10E00C03C8058C41C09101131080324060BC7A07607828F56FC4600DF\n" +":40CF00000E4042198402160519282100C07688F45C02A9F85B1094BABDC45C04A00E21018231118802191406E884474BE7441468708731C80003E10E964006E04248D1C447\n" +":40CF4000CC0094218F91088FC509D88108AE808D1245027BAA6CE4030CB1B291464C23BF5A09B30EA07E260240FC2189CA4280164096C0C0627000A481FE7E5FF31398DEB4\n" +":40CF8000E630E11289E69000C4A3E516E218160C1DF362BC5A24610C86304AE510C87F622B900C4270BD88E80B311F813632C48301F944FF942210186A25801CC48124183C\n" +":40CFC00082C21B105851624E87CC495115884404B10DC8162484F088870888FE484F8C071451104D48230ED88FE49B111402723F960C48D19A686081249443C9D110D66C1E\n" +":40D000004493A18880538220046225811AA23344224851844820DE7C60368C448011144160C58DDEE0E20B0F0A23D8FB2C6045029447E049890340110DD4810A1888155658\n" +":40D04000088FE6A28900123103882624E184C4AF2A1895401B110C0D621688CE45F84445390220B0C0A22003CC42901188524231204E762408DEC41701A3181FEA0111728A\n" +":40D08000684457151444917D88A602B114C076226856C4F8041882C263101C55622B48112E21112604E5104429624A518445CB12222E036A220556256044445AA844292D8F\n" +":40D0C0009CA2111029822C110A220CC89016A214964C44105588B95508883491117E8622483910150088DE202882020B10068A2214944A347E1C45F135441C05D8805302FE\n" +":40D10000273D304483AFC44889A1103EC10891510884622A8D811210008A50C0BB322249442208514440422547046838886432882E05B1A689114242889B578885753888DD\n" +":40D140009952888820CA8D821262B91110001511828022415284A11110E7C4405B062226838A36244AD1895A112AD84841B4A2248DAC12A08885F7202258860A261962C4BD\n" +":40D180000366253102A21202D46D08911F189120B36684ADA0908207A88FE41B1AB048445B14D881B5A8C8051088115C88901244AB2191156EC708B1624444B2454444A2D7\n" +":40D1C00088FAE73E5C02C2A544ABA8444512CD443D16988FC1EB11F8196374A244583EA215422241D95111D67044AD0CEA1181FE8E2240046A2465D6095E288B170C220A6B\n" +":40D200005D1095D08887A322888A1531252F0C449E259443DAA0443DB72222913EA20751C44088444161F946F4448111D54416BCC1125DC882B70221ED5C225607CA363041\n" +":40D24000487E04548D063510911978C344A2887F63C4A962242548221605908B8540056C201631684402E62D508615B80C9C3BA3DC5C3A95006FCF40BF3FE20B89190DDC49\n" +":40D2800087C48D06C08618968295B00C312D83215D30C4B82404B58625D00760C30C4BC23AD00619E1470A9C0F43EC152330C4AE00AE6B43287C5C004844714B016EE0041D\n" +":40D2C00000E43A80C80C541A005008622801801567A05151B44A6844412008DC4FB598C6EF74044012DE6812801DE86812C025B3D02E8769A10A460143862FF0AF330C4D31\n" +":40D30000E94201F1AC0A06A987C6C13032AC3E36904C2C3E37099A7E61F1C45DDA8CC3E390880D930F8F0C5A414AC83E3C930F8F8186B28C3E3E833B23187C7E0CC1A27869\n" +":40D340004C6005A1E61FF4CE04E07E00F8D244FC3FC054004C21C24A6771487F27440C994431DF48664A266609C44027033224FB81B041F3FF04EA51012F33B00C03130F66\n" +":40D380008E82A8E49109CD2B13C12C16E70E112881E90C0D0E80150784C6205289D112736881E7FA068A4A08B46A34FB83DE63C310884C22402406AE1C1AE8E709CB239801\n" +":40D3C00090111387068D2984800502A989A51626A2912201C5206A53844AA5006820172C5E60D1FE7DB21801C8149DD040211616546D90812C0056E9CCC07D0ED252A8D047\n" +":40D40000B2204ECA9222AD51B07FD4F9EA2806CD48B0E425C61583C410C34E66261AB44C64B0C39090A02761774450844452B250B62A61AE4456978B62C42222D61C64458F\n" +":40D44000C721790E6BA420061901292F154180C0207028AD5A894D0833F980660288042C4B0D8C57C1401E5F74013D2C00200F894C8808024108489088AE97AA100CE6646C\n" +":40D4800004019209942328664807C2804404021A0A12F43098B03422019D490100A5054A1294352403E12D0202018D05897A1918581B1100CEE480807282E509CA1B92016D\n" +":40D4C000F6A830DA8C2084304BC5BA42C0E088067924040494192BC5C202C0E48807C25D4404051A0D1215143A24033D920202CA0D95E2E3A160764403F4C7E08080C35E04\n" +":40D5000084D0163C5C202C0F088067D240406941D2BC5C282C0F48807E1B6810101C683C485C579FE784033F990101E483E50BCA1F9551C2C04097A11A858F10E20B1E85DD\n" +":40D54000E21600248225084A1895D17505544880C954E100C954B100C9548100C9545100C9542100C953E20192A70403254C88064A96100C952620192A40403254688064C2\n" +":40D58000A8A100C9CF4203040D50810190A04A572354292AE66A89255D0D51A4ABA9AA449576354A92AEE6A99255E0D53A4ABC9AA824ABD1AA8A4ABD9AA924ABE1AA9A4A55\n" +":40D5C000BE9AAA24ABF1AAAA4ABF9AAB24AC00D55D2560262B092000000000000600000800010010030045900000000000015D7C3800005C203405234453E0C64229C1A2DA\n" +":40D600002A7432208A8690A9C92B060C0554855F0D0408AB0A81A42B4188ACA42BA85765E8FD8160585216542CFA1C60459DE9B045987440444D216A1445A8343B2FE46120\n" +":40D64000405B485B47659A8FA7C68608008341089440944D21721445C83445D485D642F285E642FA85FF427608BF0A81A5E903713406083446148616250816688C2818B8B9\n" +":40D680008D288C4E5D96B22C0C6A5E4B111606452195432B21994333219D433B21A1434321A5434AE0800120417180D16381A9C978800230F25EC108EC0C230DC4C0008CF9\n" +":40D6C00042658C80082D11F41CE0802328788FA0E404011B7CC5BC23B614A109384F488EDDB6B855E823BE8B507CA3802008F090482C20011ECDCF41D518023E8608F50708\n" +":40D7000090C207085E163AF61058C895162CA40C68920789774B0009048FA180080120CC84001210384FA17D840121F230C588412266C122FCCCE856DC0007A760240123EB\n" +":40D74000B1FDC91D390921E8A722E7D8E2484C02488588F82D0E891A00520124C0067A25A06103465C37140C2061AD96325D84969D07C2B3D2C12E2C7A0FD0E101900498EC\n" +":40D78000A2C456224C60061096661268684BCEB702516F944383A0401F0E0CCC2044094BDF04C253B4547426417998044A82E3D08206009538000427DBA304AAEFAA22C8C4\n" +":40D7C0002F92AFA2690A9D0958904F9513256830CF14E69840E6F282C52612BCA06AA784B01F1A9F058C855163CEF3E25BEFE88213F873244B7C07021391908246254205F6\n" +":40D8000082712F094309707235EAA791038F882003C46E01A227505AA9D7D4024D77FD90831A86D914C023079EEAA0782014881E79A290B0B9017807B11A1E476C11C41223\n" +":40D8400040E608B7A819F54D50F8DE0CBA462077DE92EF338400E348153807626B928490EC141DA041A27404219009C02687AB12CB9A0117345613047900BA5EE4442350A9\n" +":40D88000E1E9CB91F01E78849E31EA2047AE38C7A06C4BA6B94C072B42DEC13253CAF782689AFC216040422401EDF6D134CD63548028086E2E0620406C16F34781340D21AB\n" +":40D8C000F4222001619CBFEEBD52DF5BD0EF3C4133880F25D31004819A4870257237BA7B48A20FA389C58F2CFD094C7000E3A85BE8E6C40C743CB2522010BC0489C110C16C\n" +":40D90000D45F53D7BEA2070B40A981DD9E45DD92440681D4903947C097E5C0A0588186897C58801BFB4200719C16F775823D297865CA01075BCB09D9D79C65C03A4401F06B\n" +":40D940004D911E40E9A25A932659321617DD332A3EAADF102410EC8762C4DA07B7A5D18BD63CE7BEC20818594DC5EB18C38722993AA60358A8EE8CA1E02A844B47A254F688\n" +":40D98000E3F9304327DDD8461122060F50E5D38E22610FA5B0C45D7775DA5292640DA3E2C1304C87E5CF7759220310A16A979A498EBCD5304ADF1092A2600E244744EE9710\n" +":40D9C00059CE973F881F10790B0C1B7E9E6D334088EF7B63F0DAA91A3C10F44C0F3F9C97883DCFD38285D01A423D7A69B0FBC874879E074042072F181047B43B8BA17887CF\n" +":40DA0000A72A04B4F5E102029045E292C1E204120574F358901C0EA4BA10B4796FC08E1E41CE209FAF8E8BA64444381A034F3D58974B5A8DA0401AF3AB088936128E48B2CE\n" +":40DA40003D1B44242083D020C410F501B0973DDBFA364110679CB499E88FAEEB07D4E2860694251754649F65040F41610D18125FC1C6C4791AFE81B62E087E53BAE662E02D\n" +":40DA800028C0CDEB89626E754BC3AF04349A9CC54C493E9E392EC9F71E8EEA1084F4017862B8F062E13D3B97DC7842E9F9DF50427028EEAD442484142FABD3292725030933\n" +":40DAC000319C1F09C96243D35E47E7A4C403F3FD013BB49B8410ECA292F40D88F80D9C7BC7307B738C4612E661084172E94B7268824FA0094A7510064AF4EC8498C564FA94\n" +":40DB00000EECB7F8F1ED0CD1F3D4AA0009FE058FD1805C09278051C03D8BAB5B8C74B808BD0C98A7335A336923313CEFE8B9360179C028BA3898BBBC012EAB3420D0D49627\n" +":40DB400000187FA3953340C31DDD125C350CAA191C7653D153C27F79EA8C4101C027EF0D13E85721028BE057C10AA464F4AB1175F7416A71A4D08F1851EC99223C41D959D2\n" +":40DB80000183105BC10F440A25BD2F285222030528821E0A2E0C5E5D028653810C1EB421431FEC0B766D43BD108992E00660E218133896020B3E44CE33FACEE81A26F11375\n" +":40DBC000DA038816A7400A5C0C20289FD1E683D168E248711202178D900F8BDB100A1DA0101601479A9F048FE041C20B73BB1205BB36A90F05EC0F93AE07CDDF53C317860B\n" +":40DC0000B3E0E3E8CE830341701820308D1330EA033D1BF23E1C1512E08AE64DE3EBDC7262D1E00FF27831E21783D44BC3CE8E258E6FB02071A261F118D20309A0B7CBE111\n" +":40DC4000224B03FBE9419A838171CDFA44E0F1C2C1305E8ECCF1189132000E23149711882278AD1FC60F1EC98E0C402DC83EBE012000830847A157BD1D87BA43C483F1A367\n" +":40DC8000E08F02A76C5009540A9C1E374120246AB7B895DDE8EE895B4F4402DFC3C727427AB0BCBA320441E340A926020348A9B27177861177AC00F8DD64614CA647C694C7\n" +":40DCC00044CDBF4BD3BB266A58548D1286245862EB7028380E61712222A843EBE561E9E4626050EF41E117523C13DE83423E21E867D12EFBD078AC741EA71A3E1D6E7D8041\n" +":40DD000080B868991EA3F1911AE8FC6044B0E0DEE8B4D12C0854B19128F07053689EE6360264001234A445526875DE19712842A2A45C1CE79109D095C412F424F0845042F5\n" +":40DD4000C34108141AC20B2780E5637835470E76F25D0946226A7E2D4A4FA69484F418BA1294BA1270442A6097424B88874C50E8491110299262ED2626807A4A575081624E\n" +":40DD80006038D361F0E7110ADDE9006647698E9F8121849604A9198B0AA0B0440888DC8F1CA92B1C8F2482E102E698F5BBF0F88BD441538B9C9F0F4A3C08F1E60211084133\n" +":40DDC00041F8401F41C2F43EF57698885D651E4070FC0A941E509D43A3E2CBC41B044C02038164127945347B6264C1F29014E3D942088EA156FCEE2158120B5A7C875F592E\n" +":40DE0000379016075E341EBE3E127833EF6802E024E21B4C6535078DCA84170801027834EB33428C307946C1243EF84314F87D408BC4F06FD981A3203034FE4F267644D86F\n" +":40DE4000E235C1E020A30049FF3290093C53941CC3CC6D36268835E44B41EF5583F61CE101BD42008F7AAA2183E84E8C1F887789418188F7AAC177AAA2171309EC8870163A\n" +":40DE80004209E87F9F983C0BAF630BB0049AE801A4BA41B879AD0081A535292EF4FC1EB8912B28C0CD434887F296B972AED1E85391003A8FA48A7080D53B09D0009D08BC37\n" +":40DEC00015DA443F7A96A01F49089D084D739CB9023B8C69008001B402206A34F44C04FD5F1A45B807D32C45C035C410BD744093A01F27835ECF0F10AFB99EC78902881437\n" +":40DF0000118044F81A135002EE844400C39A6B2940F860147C70C05D16CA369E12DF9DBF4F747E080E6C0065BEF9282681944C7650F8D551892001BC0406730854C9754702\n" +":40DF4000010186F567185D49080C2793344C0207A7410B98B78D252E1EF2206F97644BBD1A8A20441CC4D9134F0DF59C8FE3D03D340B7F19070F7A3D916C80404F78E4ECAC\n" +":40DF80006FC992D3D11C85BE6A8F35D11038623E8EF218A33A01935CB0EFA2E23A409A8120303A4FCFF005E5024133C1720C178C4822530240E086D90361C0258030340A41\n" +":40DFC0008A0E97EB1108750887D0087518875ECCE13B03081A785CA405175500892E5079E34503442DE42BCA11C16F08A850AFE187E25D7495808763B91013F4AFB0F5097E\n" +":40E0000010D880583887036B2DF280C3CA18C5AF05FF8F540B09AC42F7B8416095009BD0BD42130265E9204F047D3216363A302C8A5100C548A008ECA88B03B290A7CC75C0\n" +":40E04000C80C2AA653E468E361C8AA02860A93009BA2CA8406E7BCE33104AC19950016234A51E9EC6160020CE6340324CD21AC602E4821002402425E1228211F50520F9011\n" +":40E080005C4415821B8480F4E9D1A10B02004FC95F8369A102C3AAD22980458A0690161344A229F3355102C0B06A1C876023C9AE4607431F10D83A6007B097EBA3C2028FD1\n" +":40E0C000AB0BA18C9400D3CB0C709520504217907D3F9A8753CA0894051B51E8898069AC0AA03A8B4687425D09A22594060716EA1203D6C6E32F02191C21E26D7AD08CB850\n" +":40E100002B688F50E62D0163702A500E06574C940D41081631233F0744C08C310AC9192381C45C0900E98C100386A875542442F792E20650156803641D324200700B1CA3EC\n" +":40E1400013A02013388381877914A17E9457528059C4AC528EA34F4D05091C917908247A46001C790433C01D26884240846071A410941D6968401F9EF007B0BBC803204691\n" +":40E1800060FBD132D24649C8250C10F51B0118852181D344A6625ADC49D297A344903A42DEF2124FCCE488F65EB1F0A6A4B18E0F08703C0B002100D8B32BD3AFC6625C4C6F\n" +":40E1C00038978783799082785C6C24022209D89BEAC3B0508A8C29D003C44CF11B810E803B4997400E977B07A70C00BF7C07102E1A04220F429F0B1DEBB65E82F32E849604\n" +":40E20000204E2116F8418174240175BD58E41D50260B831D26EE40DF423D0F9E6CA4C0340E28A106BC5B385D08EC5E5A4C13BF847E882012F3A7D1E915E23C86C35CDC259B\n" +":40E24000C3CB582004184A0040064712E1F1D205A628CAE50B2A81340D9385B1004B87A7481F18892C9F42098803D9E1A7D09465D33E624B87F2C4ED00831D452E252220FF\n" +":40E2800051756E4035CC325FBE9447C466A474F7B711FA6F84677441B2B0B320097088E90325A887CA33C8960904274820C826797AB8B011CB13019D0B8440C3AABE44C96B\n" +":40E2C000E84E52F25D09101E00E0205878103A0F60BA1418BBDE590EBED51007A0F90B0C481A04F741ED91A04EFA1A58898077B49D481609BC78645E2915234099F434B988\n" +":40E30000786908C1EE407660CF84908E1C05FEEB90206022013BB6C87C2292220F554B0871E58E12AE3020800E871A1ECB2310C3C6B0E44264658919D0E345E88482E9AD3A\n" +":40E3400061100E11100B0B82DF30DD1441DE7A0C0A80583C99A0427A2070F13409AE4171133475A433E81962AF21E01343E7F682C0FA152A0578043A9920682A0990730029\n" +":40E38000800700C9EAA9F1F3C33081864F6763973F13263A6A80DA14C18E0F903E853512039F4E17A04F08182822049C2010F560089018DC640A04E7744B8EDF86105842A4\n" +":40E3C000E12E423377A794981D09842068274E0FB1DE448D00C15F05422C030341A8461F405420DB642AC07BCF1079FF417845BC80FF4B698D8E82C963D135E2CE0CC2E881\n" +":40E400006A21F0C7C8DBEC248A775900944781886809BDEDAC81720681C4302BDD04E2078940A881282BB6C44D1941E9205310C5991349864A7EB9DF2343C779E20783D12A\n" +":40E440002A5840400EA95010480B00A70112FA138C6C1642A8147B438742AE94417436F0F56A4908012DF403370885143CFA244056CCE1D8309D0BB19E465102AFA8D50F9C\n" +":40E480003A0C68700E0295042E8D9A1130F63518310B4439AEC891C3B16525400422901281B416A8097BD334E4843B155D64C25E8742100C9B1F47A14C7AC6E7002015822E\n" +":40E4C000EE05227C62EA8D6107BAACD444DBE10481027D27663D73C85DA7E858960B9CE0177F35103C4223D4A6C4097905191C4C85C9A28BA09B8CBCC0885DEF04589F1047\n" +":40E50000EF7843C4E04600FC1150621E822F2DDB88BDE83BC2F0A0617014D114AAE108C32782640151059CA16E85D121E40294B16011F49A71F837D04D3086BF80C1198318\n" +":40E54000E941759CB08836342EC25A1104001CBA15BCC2043C7F925CE944842E12022290F0215781C688F3D0BCE44C75A1008A5D28A85800C005E9F4611E7834410E71E22A\n" +":40E5800040757B50821D0B605D09FA372891808FA8BB0C95B2A081D6531B00003609881D62B860980A00599D0020CE4C010279439976E9908866895FD0D163E8BC012E4EE5\n" +":40E5C00053D0660251200170C3C25C225D7440E898435710E8101452C33D0119066994E4D8D14EC7C6C183DE55C56751EA07D11EC02A2226052722E80543C82609F05AB216\n" +":40E60000C90B1ABD0A4A031FA0A10ED52257F0FDF1C1A81E721C10006607BA00ACA5457558FA099867B139A9A11E4151A247E26021F7A711070E5811F88FC6CD8175347A72\n" +":40E6400009188F201B1B68750EF8F742D8FA6808A103AFD8C483ED81423650900008291FE610EA291EC6643015E11751C4090355C855E2078755B1881A1979C958B0630DA2\n" +":40E68000B3C66928D1322A4111353A162092CD4C978987C7BB9FC7D599633189EDD41D230855E68006779FF825402C0844DE1ADC3EA36F1EC63E1EC3D610203F00C4321C34\n" +":40E6C00004F51CE94398669761AD1388469624D37005D1B918BD32D2407124167688809E1E5DA61ED3C218A01040E20A2080F2B821183B11D4C4D4010E892E203C9E881B83\n" +":40E70000B007D05AE4079250C3EAE492E8679103FB5AA270AB9FA29507C44F42219006031271E2FA62C315220C7080510FC0F14821183D74A222D5BF02100103C3B0358B8C\n" +":40E740009362179BAE0AE3A13880C2D0FF10AE4D4BD1AC6409F6226A000FAB9E4CAC4040F322017A1010BD03E69DCAC784D4BD4B76479021E87702B470F5A008D3C2C9F019\n" +":40E78000110BA74FC7B364C650371981585A10170E220082730231044388F1236A011E85160B0BD5846100C639BC887EEC1611E43102451A94102679270115121C0AF52261\n" +":40E7C0006143986A8DDD25C1DD4725AC6A6CC19EF75043B3FB8B214881CC85E1023B1FB11EF7422C0381261AAB10D8410342A4EE661012612AB41E2B5C219FA1074BD7B471\n" +":40E80000625800A7E8AFDC1042207782588834A0BD782C41570D1012DBB0E8C800F52D41790640B0BC87919A44482DBC3E684409AA18F5298086BEA6102C394266A05C7502\n" +":40E840000848DE863CC8407245C4B8F305E206603C16300254B9484034ED0B511EC42BBC00630EBB97B063C6D08521120AF7A110AF36100FA1EA0BA1EF04422E8441EC2287\n" +":40E880002EC44B7D880787C04C2078280808405BC718A38C7240204EF943F1F128DF3620C1C0C1394907D0A6A7478402E18FE222787FD04442DBD12844007A3ED0C0A4BB33\n" +":40E8C000C46101242C5234006F1AE9170E7F2E7A6E391EC7E556C2CBC41F37A40F97580C0A0B39950A66B1B9E46D62C12220378AD7C7B3C407B98C080A37822C4020051C35\n" +":40E90000AC13DDAF9E3EB8701008F021BB70D0FC47BA469FA21D44FB204D31E8131E8161883BE98BC1308BB607318C1B2608026304487532F11E279F553217444410E04CE6\n" +":40E940000102B8023173A6D11986A02785BE91BC03E4C50D9200C01E8CCE0F30231F612A163B501C463044242000D04024A481DEE803E3D6C11A8A1094490448D1F64846B1\n" +":40E98000697B7E280C60A8484801A71F6AB6083338003005976409A5D31CA27E903DF15C20594340426D1098791CC791DA6F43B30A4A6B060982180F1845D1B4D21D86304B\n" +":40E9C000589825BB2064460060780506707C2212401EFA2D19DCFD766421076BAC88C27CF54510845C5564C4607BA3024704CC4DC1DC5F426B5C602068F0298F02B650906C\n" +":40EA00008E439DFEC0126EB813DC0325D54782049DB3F99C2409A5CE6BD10BC2CF20A42863553860430ED913400F3F792310983D44FA45C050790407413C6A90E4A8066B49\n" +":40EA400010FE68C9100C9DF2965896A0292DCB07079A5F88063C037EB89F1280B600FA4D0C41D8E3071401D61060019E182F409FC67406A8EF2F11DE42F3057294DAEB58AE\n" +":40EA8000B7408ED7568932167313240FE0B10B8243B8D10C1A40651D9A745B708A26A8C5D0AFE47A01DDC3026060E20579C4C8829C888201BB8D247C7E423E79361E849F27\n" +":40EAC00021671951765D709183B87487A8F8878A5A11A02A70B5329084C05DC68E37098B4042017ABC67343042681E02ED540E38F108BB8D117024F12305240471DBABCFCB\n" +":40EB000047B4FB4C4BE21BC208F2CFB3EE27F3F56CA8901DC500B70DB31EE34648054C24D18A8F708611A01CF42B8A1DC52EA04BDC5CE90F48066C02A4E296133C8134C2F0\n" +":40EB4000413BAA734416016E3C82E7A1F2C8E30C7B1E407A545866C0064620040418CBBEDFC6239BC345020CF2DDA1AF10C6E60789CFDC694616A416A82D50EDC1450A9248\n" +":40EB800021DC2E890127AD230A8826068EA438119A148D004E8491BB489E4441EE34847B29206E5A1C07C206089DCD24A7710D19C19AF47D09187DC460C53B40253500D1C2\n" +":40EBC000942143B089C7CDA1C89BD4F1309953A1224BB8D912A7A264AB1B2E041468C685836D339574A43D751223B0C4789D06A97460103DCF5227705850771B38814A80C9\n" +":40EC00007A88B405A9020CFEACBA91001CED5EC105BD674C4449E03FF8E614AA347B8D953024F7EEAB711D7926015142A745DC6D2F204D2C0C2B815F24770F717990166D57\n" +":40EC400002A1023C511C413E21D2610771A9A1E0E073EE3543000454082034930051D0900550081B48042CBC2C605E0ECE2EE884136D4858EE34C100FA00687A07484E6E2A\n" +":40EC800081F73E69902605121EE61B1014432CF2CE0C620E8F13A7B8D31602C5AA024060340A801420C4A4EEB30B8C87B9440430207C98FE43C819308F72D889C5E02B512A\n" +":40ECC00003844028EDA68176C148440A8C1005126404E476E3D49E6658808051DE460A5E8B3B3EE3494305C80CA39054C63D01703A4042C6AC019E122023D059E218E1EB87\n" +":40ED0000D241BAE86D94001A440125DFBB03C2D08BD960A3DC5AA997C7A011E37C710B7CA0345E3B341057A9A78B876811307CF7D3F88110A46EDE0825E919DF71C254F166\n" +":40ED400022822E081F280E95F470100236E73F367B917C79009168F4DA088142DD9B43A40347CC3002501C47A050680818018FB3D204DAEE53620F7BB98CBB25246D1A0270\n" +":40ED80001DA3C2C2C1DB91A3D572A368D1A52074A2780256E843B8CB586FB8CBCC02580740814DA04DE6EC643AE1E0A611030D00912EA6251260602C8600409301EC363D18\n" +":40EDC000C65420E01275CE23CB1EC5802146D6A99E6A40127B8CAD3028D0050722A7D1C7A4C8E2350EA44555900640A1D228041D4181A0070203290FE4FCB203495337BE9D\n" +":40EE0000C2CBA77B0B8B5C881A051B5D24342428585016A66E40E0E78F0F983D0B6A3DA11F3B90850641CF5C0C09A07975A2B163930094C0B7DC713892EB1324EEF2074097\n" +":40EE400093AC0111EF5C110487622BAC018C3546E292264F7267AC0148F354BA4C0E1034560582036433CE8E202C860B3AC0111C2780CCB41A057BA1C858EA8D52608A4C6B\n" +":40EE8000660798112B039982239F3A68360CFF0C1221E5C981052E081EF40210800D27437277AC004888530205E057D84943B963CF5800993AA80408D1865B97AC7857E4BE\n" +":40EEC0005BC4A62C1740617D434442EFBB02CEA61B401F50D497580018F07FA1E71591083AAA84440F1245093C689644CFB29CC7C28FA866D410E2689E00264541746CD0B5\n" +":40EF0000835D897E5418FB01087AC041003CDA050E0449D61D874C2654391A251F4CD689A9D0AB44071A2498A4681404C1410427061A502FFAC028C7D55EAFF04DC40F2314\n" +":40EF4000A5E5D63667D6014448A4002F84340B1D604A8778DF104FD6014981E2F4A019A7C1DB2783D6014442A05A4A05C8011442CF506A287F058A9E5BBE2F594708FBD29B\n" +":40EF8000EBE3E6005108C02F04269811D6778A987D52BE2618C23CB5D67967DC7527D67B4A47A2071E28F64351946C075EAD80118F1D300142D55801B4407A263080F0C721\n" +":40EFC000C5614308020F1FAF114B287C7A9F10802E65B2801C710299DB62079440A74C9290E5EB18F2364853C039B1607089F109BC137C5946C5D372A219FB1F0087D2CF65\n" +":40F00000A0A74BD18F461501C554B0F16A431862C386A38855D7DD245C811D237C4070B55022C0EDD638244D2388C024862123E36742ECB8F108F8B6097AB6307153809DEA\n" +":40F04000D61362099A01C9B3CE40E416F2DE4220007A1675A80246905820621A2EA6E24BA5514709509A01AF0A411C6B0013E22A2F39D2085887968CC488080B938FAD8BA4\n" +":40F080004C312C02D346F1B022C092BAF1F1EF2F4204785FE8DDCA02AE21681A812204242EC3E2E43E18C3BBB2800B034010C98180D900CA0EF4E2238C8104BD2C6E5D2778\n" +":40F0C000E22549B1DAF2C8081EB450111900AB88CA8901E181B2ED59C1083AEBF8718B45A3604EEBDB21043A5434414881EA8031EC54913250F43430B02504DD202E4C90F1\n" +":40F1000003FF5D6691005F07DD0860805C5A681B07BE9108F4B7B0F0BDA107488472000CAC63C88CC2C84D8FF04263AB287040C4414EA6CA54082125025C4608008837DE2E\n" +":40F14000BB0884E3074940112A0781C21841D045E4170F01EF55050806176236020C140883113CD03D47F010BF0387B39686443076F5B10F07259D407B016F5F1E9B1E1092\n" +":40F1800083AD11CFC8E365DA6263E402D3A3A5E81C51A50347C29085202E212443FFB40C0BAA9C0884EDA18427601C810018F2B610323C87A4A8DDDF36E261859E8C9F191F\n" +":40F1C000DCCDA4C7E603D8993B10FC9880A00D1DA4F22C0EA8795A908E631F6E149306DD02019A36361048C0C3E606778020C89E0180D1FAC101653027827CE741037A7A61\n" +":40F20000FCC01274072E0043BC06E6EE62764C838ED8019F40F69771CB210E208845D307C89E80681118807DC45944413C00518713780A98A38BA4969002CE69AC07A07087\n" +":40F240009D433EBC8B501C9D01FAA749085027828EFEC022D427014CD0B060EA5A22E3AA0562C12B38E671728371004C12940A07D8144D32A7A70F04D70005226C10C060FA\n" +":40F2800020975EDDA1D501A24F1A6525D0106A9485C1065180005143DCAF859DB6250F665188826B143D9AE4F29F66B79766B99F66B8B44A2998E8A8E031803180FAF2AAE7\n" +":40F2C000D0F37D6120CC0184DBE90883850207AC97C5A1EC7C0982F24041EC43A4BB0A14AC1105A815D681A306016793FC4BCDEAC5D40DA30E005F8EA6C60C06DF1B140F0D\n" +":40F3000011DF1EB7D12EAE0F102CD80FCB8020B5BCDC7AAD64A2C0050369E894BC4548FA0FBC7A72BC4DFE4C123ED09A1EB8074C2AEB80431BD207BBDE90FB58088263C46E\n" +":40F34000F8E6AB48490BADB64450F57830F2E85215FC92147DCB2E3E29B13303AE070C65922195325874C386CC0862021521671D3820882CE22C8808754E4DDB952F2E51AE\n" +":40F380004F58D58860017A5C1CBAA31D2E99D81007A328CADD40009FC8F59179430E2888F3BC98F39803E2D5E3D64FC2041A226F91A744023444C1E7AFFE47B8B244F32055\n" +":40F3C000812EEABD1EDD0220FC0143BA9F84F9248131AC132E06834845C5B0068865A14A10389E4099090D7B9607AA2808250581033C7A3D0B2ECB121C6B221FE50E91642A\n" +":40F4000002F811EC4E63483D048AF01C40048B0E8E8A1088A107063074BD013AA508BC9FF6564B0EA5CE22EC04048B1ECD841230B0300681D3B8F984C004ABC8043F453B53\n" +":40F440000F8F0347B2C0C6B3400D90078BB4062C0B34894408035829E2EE92048B494803011CCE0C0A881408929E85404A44720004CDEA5EF13040B21814CD701EB9FD1B29\n" +":40F48000D1601EEC19C1BC14183680CEBA092ED1DF102AE9E1327C07945B25917968B0818C8321030FC47CE1DC620220A7968A11CE4E33011EF0F231130F50E73C0811945C\n" +":40F4C0005C2061FA884C7875470280E63BA1600C44090139BB921DA540798C8204991A19E2ECB8F337AED12605AED2851044102C3AD8BC7B5FF47A6C5078A590812695B5F1\n" +":40F500008B0060448C3018C9FB03284BE358BEF36F617673D0997E50AF131CB5314081AAF912F25B9977CF2175938883C167230F200BBC22CBD26222021A2597898EC87469\n" +":40F54000CAD732D40625406875408254085602BC02C48058A5C480940244A9F8B9C5A91A250674D21D2F845E257D360083ABDA06222276F3F21C52F96024AA0B3912E23EF8\n" +":40F58000D1321B2018EA245F971D0E52231F94344801198792887F0B867363BFF3CBAD4B84E6EB5122E430643D09DC456040F00C631E42EEAC252EF41610487A2887A13AB3\n" +":40F5C000244A3E15CC2210FC671E0050F5DF67223F885D676C6060FE77744CD1794BF47D0D122591AA591EE590318620703F45C9225906F7F001640A9645C0E1CF5F8C011F\n" +":40F600002069528C025431035C7027C12F3139207400DC7418401EB997446B553C8BFF13868F55640E37F119FAE6591199327832E85232CC8A2EA5259689E0D38E87881BE5\n" +":40F64000D551E3A2F1127813EB99C68B505F14897A6344BC00BC3DEDC83E270A1EB99B3348552692000432C8203485326B428A50A3D471A3D039632803584C2D437EB997A8\n" +":40F680004C0E343AE0DC4B5157B91F249C27815EB90543CA35A21C1E03275F1F113C0F1A622837D942924F8D04FF64548F27F5118CB504F983ED767EF8FA16684B51609FCD\n" +":40F6C00001F408064E93A1A93A29E1070B9843B7C70719540445A824780898358328004532784EEFF612EB96022784D484C348315E24790727A23C4C927855EB92F426A1CC\n" +":40F7000020FA2BB04C627C70C4E26C755510F7D5A0C5974F7D88203D0DC5A8F19F2420313E78A03F8FE0675CAB23DEA9233F18FDA40322780F1E82EEFF5021CD0A20141456\n" +":40F740000D0063B56A8433A5222E1A00B130039A2097AE2B062C058EBA232003BB1D4787EF0FA6341101CC90B338313EAA8243AD8490EB8EC2F239919A8CE8920BA16B0B32\n" +":40F78000AE3C96CBFC3BF907AEC2080F0282CE9F8240F76301400281089B9C1467AF8039C7ADE644C12AC7E2CCF002C14B5D0D3E003866AE60F230E8F63B0155C81DC4C003\n" +":40F7C000080B9DDE805F13B92E813B1D00F957801AE75F602D9771470921E05053EB6B510383295054F17B37D4C442FAD7277A401AA7177DD721DF758A9C52730095CB9665\n" +":40F800001253BC680C50485529C00B73999687A25007A28A8409F38F608080A159D701426750C2E3FCE3E67961EB1DE123C97E90561C7381E96641004B7013C0EA627792CA\n" +":40F840004097349510430411787074415093BEF0C7AAA104441C4CACF8C1EE06C1E32CA5D5574221C608809C5976D169027DF78C8C71024CC10346897031F7DE3A75EC3E11\n" +":40F8800037D02308910821C8D62CFAEBE4481E282A20F045E3D1F1B1601A258133DF78625B0A84CF7DE1096C2A933E06C212D8562644383115C99B0581405B572808B062C6\n" +":40F8C0002C932230E44016C2D2013D2E1008718500EFBEEF4441E417E24223751C75AD390C20F84E2779C7BD0EFE862EF5B42C75E04197C3F9F97DF877DDC0930A84BB509E\n" +":40F900005524A282150853E88B9C77107D73943DF76C977DDAA5DF7688779CD977DD99420F7DD9203C77DD8A23C738EE1212C62900A1AA8DF3026D0597030D9260750687D9\n" +":40F9400050EBB134C4FA1D45A1D7C10A839BEA5D873E20AF7DD3101654840862560EFB4A1003B74CC403C82B2E87D21F255D1F5067A1D03EE3D40863C83A87B35DC4072681\n" +":40F98000014EC05D30C081ECC1C1D5BC0F63F19F0E7A26030043BE3C4B49185ECEDB1F21598F8E804E6A19909B38408EA0F6458ECB96120A651258C120BB02144839A0E622\n" +":40F9C0005540EF0F530B1E921F1D10A17B39347B37C06E181EE47713C4B13584302BC3E28399043D18A52388945B00A381D40681D0A60303C04028427878A472DD44B6EFFA\n" +":40FA00000341F2E530FB2A3C40C3C82CEEEF6201C70EFEA31852EFA53301CB6EF13F10B11F10EF0816630580077E1E27A4501038F6080E0EA9A8203CFA840C8EF2BD7031B8\n" +":40FA4000308448F4E2F0B17718771160F15E643B75F10C3C420B82F53A238165DF7242067778D91B1E7E761A2400BF7DF6081C7192041F6E9D08026A04BD426660076CA155\n" +":40FA800011A40FF5295977E25991A5EA25D0C65DA06120840E8E291237C1D2C2221761F1C1DF1E23D7E1247A9C06A831D8E4A2358044F9E0175C1C5A44C202BD00A4875182\n" +":40FAC0003B1E1DC0EFBB842E1A2BF60BBE450CD847C007460277DDD38119B8A187D06E1A1323A8AC90068B4E580656C4003051EA0FD1EFC822012AECBB2AD84D1257BF20FA\n" +":40FB0000480CEAE9916095EFC7F201CE3EEE7533D004255B0812104B14840A107C64EA2C64DA977E4026C37DC75283406A47D81BA12C1364FCEFC7F6806370FF3ACA7F3DE5\n" +":40FB4000BD4859D02AC80C416758680E8100BB60B47D6E1A3C563C443AA71BA700DFEFB4313342405003230B42802185108543BBC845808942AD40832802505C1003C0F391\n" +":40FB80006C932087D008A3280022066840093E93EE95C4C191C8F81CCB840B23DBAD78874E59225E385004C8809C541CC5AE65A620AF9A87C4681D4681CC3A1CFC78F027A7\n" +":40FBC000802BE3D432E2ED4205FB5D9444BEA3541EA7FD108FC6B4620281FE6355120C722080ACDD01E923E9148E66373371AF001341040273D4032268889143A84214E057\n" +":40FC0000E302F82062E5F01C427BC4E012ECD891E9D3F13080C2CCA0C60E057907231000CF440032C7D38A384FE0818040C2F2BB119D9C5E64BBBB10B9C54080DD2C2459BF\n" +":40FC40004385C8C44C0B1C0C80283AB2B10FC0771AC510CA1487D03813BA847A83E8BB1F708DA60980B7C0F92371B00A40A7B3F7078984080945C441EE8312CD2B104F9C5A\n" +":40FC80006949400E878119080E87C11888501C1E33242260BA37FC65BC27B01C4F0464C0365E809C889C8E901FACDE480F11BD2C703C4F9440F05C131087704BA2690BA226\n" +":40FCC000688AFD10F66A28805C44DCBB5CBCB1DE08820783D2421D4089CC44027821EFB4432A40E35A7E2872B92401DF02068F581D913C1102E40F62CA0C7916CA1D2D3614\n" +":40FD00006C0288E8A209808CBF11238C9A5008C1D04023D0C9083A0B47A1D61A838D882760EF5EB3000890B3C02D8A08D5CC5DF94046C76F741F104B2EFC9A448E1943D1BE\n" +":40FD4000F93238704420632A01DC27E98A79C13902171CE41B98200A022C0433B07700F89D2041DD0A56FC3BAD02FE901761C0B6B7E0DB9C02B383BF26972453ECBEA23504\n" +":40FD8000C4F2645927C0BB1687644408757F4968ED0B4D4A2217189010049F024990DCBD1859003CA4F63DF82A5E5EE9160031050D58C0F7E4C10F6160CC3F77E4B25DF810\n" +":40FDC0001E591A43DFA5846F920411DC06B0355031324B7EFC9A10205E8536021528A08602DC0CEC7DE2263B0E447082816E67FABF404020573D9470C50601332642BE9DA7\n" +":40FE0000A8483E0ACC0E45EC4487661D8E2B51078D50949D0580AB1481C1E9485322C0B1FA143BEF74BC91CA3ECA4D1C0F63D65343E452620345EADF21D90EFBC922743622\n" +":40FE4000703240D059387264B50589D0DEEDA28C2C42C0E01BC5882E03872159C1D7424801C574F806A81A6B0124F0240AF7E2E0F1B3A118C97101BEBE392C1B41990A2397\n" +":40FE80001D080B86430FD09A98131003C28B9310618F49FD08C1DE9F299453710E01D6122027830F00AF22495814C30A065D4C7A44F0284F0626B9BB1A63B28062BEBC4EB5\n" +":40FEC0002603240158C31794032EFC7E2C04604C0014F48D034A107BF188415157D440E801219542002FDF62A35120050DCA465F7E32240B9480BA802AC4D2479E82079FA4\n" +":40FF0000BD155E881602105E55392CEFF10342500094EA53793C824EA37C108814F69371F7E3399149180902CDAA4863116DDF8CC84597A13F08C670008B605F4A4C4CB27E\n" +":40FF40000596512611200C7816646711344AAED2111EFC6D3C736256D572559E0CE4E8089041FA1EEC4C2F6D180930175C8E074831E2BB023D8543449BCB141208990830D5\n" +":40FF8000CE81A24C9840042074AE689045904060F813C2427EFC6F54D025871CB153EB9192C8B913A7BF154C0A340921C72C811894C8E5C22DE10EF30131FB5DD4631A2027\n" +":40FFC0001407FE46067D874E6021E34A920309644D51EBC51E023F1EC814C00F9DF484C002AB284B5EE68A1010E50AE106447E83441E5CAEA762369728E4117876048D51F7\n" +":020000040802F0\n" +":4000000078D7178C129CE800CD61B2F00003C6A080A004BBF5248A9F01834E35C03A4D1197BF121435864F303391A02AF95AC07BF12881105C623D96BA3E9CBCF1EA210125\n" +":40004000A0878FBF4445C4987ED0AF13A40BE46545DF896BFA3A2667443B5C1C8080E820381220A6040F00A7A3F00C213444B2645DF05EB23D5BD839BDE3DCE585DF8A4C8D\n" +":40008000778FDC81C5D518480F3CA1419047A181D1277928110084F801DF8A2674759688F528111C83802C5C015C74B8BBCF5089D0830E10929DF8385DA90260377E0F1132\n" +":4000C0003FE50391B45902BDF8A08092A20B77E358B982AA80488D6362602052E243C2C04095C680C01898408DDA445822BCF71E638B8D618367810DA8944BC05113EDAEA0\n" +":4001000019C054808414A780586DD02119D88810664109A0CEAC8060831210B07E22126E118204603A47A92488420B11D23510845823D493C5DF6E8802A07043E52271A343\n" +":40014000C05D809D24B6271F4E098D1D1F0E1A962A01B934029E4B5A38D5E08B09FC9F8E45F7A6B9040A0489F09FBF20121490F65B78DDED14ACAA20B4A18801031441761D\n" +":40018000A9F130051A237810435C5C802BDF90488102154121CA074BD53822410F5D8DFE2101072F121BCD5D440208732101405F66E00C4900B6F818520189DD1960D43009\n" +":4001C00013FD9BC625B8000B77E440FAD67CC46004C3D12589443C0E1D8AFC37A5077E451846A5082C74A0193883CA40098A15F59E9260491D66D51829511DC280345AB058\n" +":400200003877D0B20069B50A1DF42A659791734FD635C393002118066881A5B0405002A4602FA1671034AE85123417409EEF9F94EF8C025401B9508D10CC99F3F990932050\n" +":400240004D14034032D3430801DF3E24C0604C0404F801E040A2CFDB4477BC5920307AF323608546C7343F20A728A8443E97AC104B9E820F61A31F544B88223C0E994624BB\n" +":400280006984659F7D469966A859854598186C0065571A4E4FB3874415EFD4C100CEB0533638BC11D22271A1997639D0C22796023E6C711040A743531F1AE710749FF3FE93\n" +":4002C00070825D2BC8609130241A3040049622B1620BF2B952F50D01619F191C5C220607B27392EC0603EFA144827EFA244FBF228C240411F18CD1752DE15E501DA95E5DC0\n" +":4003000018BA20171EFA110CF00220CBAAC907B22B4FB29C9202022A760398106B9D3D24A4811E0001BE50A41C65004784034813D95AC2018F3D4E787D67E2383280F82074\n" +":4003400044026820268443FCEC8E08B32052108B2E923423AB09C0E6BA10A20878900866101A029034F7240431B7BE79C7D91A65D50EC585AC24C240C29058020001F4300C\n" +":4003800090B35A44CFB4084841268403FCD6791D48840DD01CED0AF9EAC2029056500E00CE1494C794059E77D020B77746882E0B115A492116F5434468972448400B09C195\n" +":4003C0000F886BC473DC60240911407243C39E8204021801404FC0D507B133DDCF826760B70F01E7899A4E9C24F1844E9443C9C43F1443E8623FDD1307E81A6F92A61F98D3\n" +":40040000154AE170198DE38C061F8D402CCF204E21E8C23C06A04C470C0C2EACA7163C5A93228420920056597CDF7E135240796B81341AEEED61719C207E3889D6336D84AA\n" +":40044000891E4E2B460893D6398385F007F05B940A08E22D0E25D629003C01EBCFC01413BBDAE078FFD08222A13D26030BCF4D02098FE61788D604C90842F0CFAA7DC435E4\n" +":40048000038760C422308243302130803333BAB0046C940F09A5A14008324A12481613021C256045947DF02C21211BA1842A30039D2100D00B1EE8A80C41D200A0F219E711\n" +":4004C000EE092278967C718843F400336703300747895BDEACE43C185240A520D0A6D0443C8E7987E27F749888F796197B3AC06D20186803B0BB8E1004206BA97C6BB0378E\n" +":4005000047227278D9D0B1EAD644980AFB033943482BEEEBE543302D006BC8B2022C1C20830281608787E3441A04A610234E20401B13FBBB0C4512C0980340905D0343CDAC\n" +":400540009F030800A82280AC8018E5F460B0F704408AA0D8D258031D77E4883E030A7A21513E50F63508800407790408C6810403013DCCB667B1A0247916284183404AF207\n" +":400580002CA8F776589AE24F7798101C35057DDD8090A8882629F762E08AC1C02FD552F248853DEE7E607095204B43D45E45CB1EEEB81038368A101476E946010009208CD7\n" +":4005C000590FC40E364E219056501B425FA6D1CA77001C0809C55050C103C22891190751AFAF48440806C56EEEBA115D1F6BF4101C06778108902078051E52800F3A73A4C2\n" +":40060000A84805080B29D52288B3DDD8C40281681048BD680E2908865149011DF5042077577D0C51043A5562051016900C03E1E141D8D0620F845061A1142350171849A2E6\n" +":400640002BA7BD44AA06703385C280049EA430A9A634116D0063D95A020A0F066026297A07A87A8D0C86600705A99A1E5D0A2C2D6079F714A08B858031DE06C8774B61311C\n" +":40068000B9220EE5342C31EAB002D5DB0813A11C102F42245DFD1445A04C0AF74890EC5753C733C40C04C5B9A479995C953D353253A0E07E0C1A000D8BBDD0B020B10F54ED\n" +":4006C000C02F2216081E3AD220C01304C9929BBAA9068E80262F7743708BE88364C9400C0265979B26E4EE8A446048B2555F0FAD5B488805EAD4B4CB231A0309602C026280\n" +":40070000E96DD47D060C02DDDE8C3EB57B1028CFEEDBA118919DC02006411058B7100082FE20463441B283A71A04A4820B0C09060E8D449931DDC7827F18C200EA5C0262C9\n" +":40074000A16D7F208EBDCE587A3C8131025B038E26280B8411E86CD1E688071A91A075EAA80A3044204C692DBC1E6C78BB00B601C151ABD2F7023096CC0221816FD7202532\n" +":40078000967E20E8D6480300C86058038098C65B0003A0D5E08D1105A183BED6840904C5F2D8002B020D1F10F586B8826317731D084FA30B3265000FBB50C4994413183B88\n" +":4007C000BB44F48702C1644328964400B19BDE2217775C95F350008E7D3BA634A943052195FA69485234A8F2549DCECF2C2F4DCB8D271A5654A4AA0CA95BCB432B7054C9D6\n" +":40080000ADD270EEDAC160644473660132AE307EF08A60B3A455160CBA462333B17690CED70DC452A443E4A8F8D2C2E9778201441EE1842D5530D6AA34A4FA2C80582097EB\n" +":40084000DFB619DC112D2B508665EA52966F50B1DDC2E6E15A820518E008E7E47572B398D2740B748687EAAD144730BC2366B250C36B0C4E20680A54A0BA69A458200C0A26\n" +":400880007256363B1D10A9DDCF27495000D4841180785080D068603C3212580C0B1EC0CB5A95233A328524061A006919637D0A48B7901E47B41C058AB30067B3C5482687CF\n" +":4008C00011D8BA1CCC91D8DA3C015E8D6513047108BD3FC8211F4E7E0987D26BC24B7194F9064724214495481A1CC1B1DC3BCDB811AC06E9DF91E4DDC231C60EA70458AE19\n" +":40090000E108CC1448710BB5AD84523481C188EAA3804389E098B5DCF3C204F48CA88B96EE1A8F0300910B7D21B860FFA0FC86EAB0CA2A1C28F1872844191901E46920218C\n" +":4009400030151E2634519F7DDD9227B900410E2541E25F7883C898260FF32AE5A2EEE92306D001977788F91E18C242B334047A843888DD1AA10262BDD223C179C479150156\n" +":40098000118081106F0102D020028F1218529FC6FAD8C35100CFA0C40BA6710B0122380063B25E440A3EEF0F00881500C83EFE0F2087BA39CCFD2A06306CABD00689E2795F\n" +":4009C000CF456B81207BBAE0400B910B98C49010235E044380375A23AF002D3E89021766A604A20080404DE004C74EC58D3A12E08BA7205C9DFE71DC301A8190201A0020A6\n" +":400A000094D646B18C08112038826818C401405E8903D15C748584F0C03D58260511E84EC41A39A6623C07639021D2A964018527B00F9DFA406885E95B81007C17E657E20A\n" +":400A400001A25D6819C87F1CF31C8C0F18CFBF0DDA096D125E2C2C18A540A36E9D816C50791508C6B04C582D800F291F082DDD18E410067C7DC46B5802084125D208413121\n" +":400A800058B6EEDC12C7B806A0215300200DC197B6C54AF70104FBBE04AC442068E2318161D8481182361C003C253C02324751C05DAE4E3DBE74390E62C76C381008268477\n" +":400AC000D183D6B4C22785EE2132909F280097A4E84423EFE242207D72343AC8643392C425F6513C843E6D5D210827D611A1DE70C32302931C5881C754B82FA506306A48EA\n" +":400B0000FC1117A018F2098F20B02627D0F01983EEC0861BC38392A4CF8A6446140E0B5E10181894C29580081313BBBC11D141640A37C81EC4B71A9C0930F7781B4282E8DF\n" +":400B4000126DE96B90017C588B3CD52111682BF2D9808EDDAB065D7F1C3C9898412EF59212ACD1173D627283052F4B2D16802CB613F234058F2DDB8F7AC3240F52721B43C7\n" +":400B80002F6E2517597393069025A6291358503A0343445020727744B80C3A87C4413205883104347522019CBE6FE41EB847108302A8F241910344107863E387227AF920F1\n" +":400BC0002C7BEC944B80380D2EAAB042F1C3D1E2827875DD80C680C67D0F02A5300B61899640827361010769020262AB018CB838402087C14A8478F85FDC66B022CD50E3D9\n" +":400C00001C09763418F7ABF172E76160A938392BA1007DEAFE89D34A8791D28DBCC3C2E5825C79B314FAAFC04E0E892D32180044E001086CC5F2F03E50819DC0A446F79B87\n" +":400C4000714460F6D74104BDEB1E407A332904BDEB2084DC30E47078594C7BD6447C138C3EB0052F6D20183412F35F11B1681A60C8F43013610791ABC891048D605E56222E\n" +":400C8000010DDEB166437863B87BD64111242BF48668E4A608608E3522D570CB1E07A31EFE1A4F472458130BBD2007CC0906120D0888E68637013711D89C87DB1386C14C9C\n" +":400CC000C848387A652482B103CE2385ED52A30EB59F63D48423A36A114C0214CB80ABABEAC82FEAB9B18411540A2CBD314A23567AD901453428E8E18580480A27922ABB02\n" +":400D000016DC7B67707350444647C824E3D906C3D5F5445B757D4976F8C11005AF9D2347D3ECE27C62F24CF62610275518039915916826201DE2AB4127797EC08222398336\n" +":400D400099143E775F1F54A88E83C0BABEC0D871E9F8B1EAFB140E8ED1503F4F3E0F7866156745420947D2A584158C1D5F60A95868E43C8876068186B057AF61237B4514D7\n" +":400D80005D5F5066E1A26EAA153ABF721DC4AEA14C20840A0D3A8510BA00C872E8470F90757C09F76720B1EAF0D21B414350D1EAF782B4BC153EA052105334988DD2410E54\n" +":400DC000ADA7133334956A4C0400445C8545C9923387FB0C811C3D979A4200F25DE9D7C4D420501E4DAEBE0F107C80F1F0A9103D306E639766C6082BD1E3A24C41082E888B\n" +":400E000067E9FAE201BDA65A2750E68668C2DD55103D5DA2218804071F48041D54C8220755310883D5EEA5DC9663D54C6420754DD088543C4A947AD148D8A1C5D3B863532F\n" +":400E4000205650C50610688210421EDA6092E82A2E8C9EB7C02E37505E15D02F5D4108B2799353E17A6E14A7D6A688F201414F067B200079235C814EB70528A1C60E875841\n" +":400E80009A97940F8736091EAF455B9A3491E23750B12111B2980C04D154101E2336826C8E8D84DC40A0E82BF1218965E7881207860086B58042AB69885680B5D383A227CD\n" +":400EC000EA39CBC953C27617461F8585C82AEE5E7472D508D01D4B0D8CBCC01096E3248083D91ED67911C01111081EE3E0232401278111548743C51DA9E7248F8900C7CCAA\n" +":400F0000442AFA83ECC04EA8572EEDA8300F3844C5BEB07541823420431D921D5DBE5D6A4639C3037D30123D5DCC7D5CA067F25DEC8080A08F5727A0731066809DE246811E\n" +":400F400010794169670C1430805D5CAA753C7D5CA46250F487572C9174071720F7572AA1D5CA68024A33524C7AAAD8FAB94871EB898E000EB6651EB946402AB33130541AAA\n" +":400F800021D8EA458140B5984FD510826B073D5C4E61C9201692C0175729A202F2D5243A689E7B28C0834864C5EF55142068041D5CA0A83EABE356116BB0F607C56526C578\n" +":400FC000560F591F21DA8BA21382776A19E8425CBE22078EB18A671340BA3BCF21F30C6078E9584222210207D29523B28A0843CA5E4BAE99842E3442034820D5CC9749C340\n" +":4010000010A3E8AE6914498C4F4248410979D60CCA758412DB2540E6F71E5D321A1DA4A5026E23B2590E8F80F224898D2F7084FB295084FB26A084F72F084E2E7572621A24\n" +":401040003FA4851283CC9D489DA880C62035D6CC025805E6882C919A6882A549410418A523C6514458940688290A23627C965445E60A0449108BB5EA858268302C02C26879\n" +":4010800031EB3F422E48E64B00B40BE75F84057AA4DD10251CFFD1CA39101C11E35BF67723753175A7B217510F504510E9D323A66E9A26F75F969783EA50C6EA5D715EA72E\n" +":4010C000254E3C0FE1D7CB0F299A0F0CC340CDF50D18E0880094D0330D6333AF95CCCC530347604F40564C0162F04A107764B1661F884C099408F5F2C18C69048FD9816704\n" +":40110000D498DAC32A04F68FD91EBE58103544D02CFAF95C7D1AE66CF0AF517802CF204F40BA26A95A4EF6998093BD7CACE8EEA5D2DB82C01C2B056B45F8888399FBB02CB0\n" +":401140008E9CC89D0C9014CB9010BA01399801CE2812031076380E0A0056968C80D3D991C44856D80F87092813C14175D7ADE3E0D6C102BD3F943DC9B4382B40B8142E468A\n" +":4011800001E82E2DBA7CF47AFC8D0ED7FA10E3CD5702047709721EDF5C2608C2D84802BAF9319010EB0AF405C914C15A1D062C2C0102FD830470EBC7B115C00278DDC01228\n" +":4011C0003E3BFD11B7AF3B58D0880985D79DE3998A2E6049C3A5921197AF3C446548BA04CE050C6CC0A1CAB10F9F008B00D808568579838806D61340D016FAF301918747FB\n" +":40120000F05D1ACA20275E60A622202AA885A14225A43EA3AA3BC7CA6962049A22868FCCC50523D53E12661E7D9020E81000908381F00EF804B47C1E10204772A788800C8F\n" +":40124000448830050026260B210F411EC5B91D0A3882636E900484440D8D20008064DA00A1E8008826B883A40143B0CB444F6C9B194D00F8611E75AB44CF87C144E7342D30\n" +":401280006C0169300D9323E6897C4232645E2643D1E062EBC73481429C07D6DB99A0199601D6C028660856A5CBE510F01DB8FABE584D30BCD20C1802099E578D24C8025923\n" +":4012C000FA51384B2C1A824EA1E116C1820004924402030A2090C0E97E33F09A5A3D78E03D06586019036C831611F31D318F970E09F9D7DD0A6C46C9795B28B66C81EC3526\n" +":40130000C42E1844380D3AF3797EBCD84EE422D1FD17B58449C044F05F523A3FE57AF318B4C9C7B6E888A3C68A67AD6027AFCA8C270C3C128055BC87868A04962400EE4C81\n" +":401340007C81AC4AF7583A04F0A9D9BAC208F36811C02865D011A2BE2A5517FE8F7D3A09BA00781D4D008FAEA7132F490F232E8B3E195F1215BC0F22EBD94F85E59A32EC25\n" +":4013800098830BAC425DAB6A70E411264F05FE96A6363336CBBB160440E9951105FCC82E8CE09F5378102E7504E0012C18233285A98B42F84381040514415841DCB105251D\n" +":4013C00053992B97B6134B509E407984098C08E0F510449E047CB870738A337BC4B025380802E7368894BED066593DD7E6E351E875FA78CD817CD01B013887D2EDC80434B7\n" +":40140000FD394912C271722276F4D954F07A015C420F5697100E72174C799C00872F42B4232211B4BA40B7180B7086B602BC401F01AF31007C08B09816E0296E2367E019A0\n" +":40144000F36445182CAECB58D70A4970A8271001A2507A0BF8FA289866860481B1B8697B444034429F39DB1B1D7B36813E05F676D0810061D409941D7B3459AC443AF80723\n" +":40148000227A3E58422EBD6621E0DBC82213A0814024F064F0FA903441EEBD8044031ED0B8B43477E43964490DB30012F21990F8252858C03A04F8599A144075409ECF64B8\n" +":4014C0004120976B71137B292CB13E0034120480274EACA14650B3621D7804587D07807060626DF86875E0516D050366A1D2B10E7AB081FD62303DB7342371D60281E537FD\n" +":401500008B2647B6254B96AB2055055D5FEC86C9005D5036B87A01A33821D5034DF3B684582C15B690C160E951B9EC00225FAA0108D039BAA06481B0F0B53010C3CE0607E9\n" +":40154000540B88188000D81046C1FA5EA57A3AE00EA7A911024E5832098120B4103BCD58418340D7F1E010F5409BCB1AB5326B0BE81A64202468197B0FE97540AADB0FF9A7\n" +":401580007540B8F52E38B062ABF540A9573010C719CE4000BEBCC11F0E4B8845B105175402225E250E5D50042488400681D58A1ADF41C1C6176D016FD500690187D45221A8\n" +":4015C000DB89689168B168F0044D12A59022C42203D00924B420191CA4223A9BE0B586622D0DE1A31EC6021EA8004315108A10E8F54001441026A40420C047B7E0C5805855\n" +":4016000026EA7F6202D3D835C7D09483E1E6F20976400104F3810C2EEA7F21D6C58E12703EF20E44150746C280441D4C2EA7F93F50AC8B20602D2341C79E63CB1E86D0301A\n" +":40164000AC0B3FA30FA9FE1161A9489811827328F53FBA0C753FA8F53F9901E2792A617544896C1F03D4FEA3ECDAE1101C02451EEC8B10A3A85611EB23F109B91CBC9E01FA\n" +":40168000C9A835EC0D44329326A0D575245EF706A0D3DA4B92426C446512233A7E2E69208FA98A50000D4192146A04CBA327D4C5245C19011F531E2006176640CA4F1A826A\n" +":4016C000E96C200CA4D418165321581806008BC1AB125C9970C18F782ABCBBB3ECA84016DEB0181C6B9001DDBC00604BD505A7D506E2C410302921E2B3212D3BFF44BA1D9F\n" +":40170000A47A1DACC0702FA9F21020072F1A4088146480A6181C7E940478F22DE46B18D840F57940F541309B08189D505C89098B584A820444EA82F440444B446643097F3D\n" +":4017400049200A2142013F0D406B2F060D013BC328C26277BEB8F7E818F94C104843402F6843EAE8D1EA83212C0C409FAA06D1E9DEE1D41B8C290FC877D3F0B0331FDE38F2\n" +":40178000CA1103AA0A10DA21486607824EA84046207C30B846C753B01771590847E189C3A343B47A1ECDE8389D028F80E24D1C362C2C55805D68D207AA094AF8E1D1239174\n" +":4017C000B23D04C078486B67CE89814A91108F0093AA0496EAE8E2EA8144BAA041214BA6DD8B0DA0F2A2A1EA70A200051EC2902D7E408A5E6A8A209390E615C4C20A58F8CB\n" +":40180000B63151EDC0712045AEB3041212A487AA12898D8C5CAA50C5947668E10C10EA94710C084F4FE790E0405B00BAA0CCAA7C0B6113AA0D53D6980DCF0211F541C95637\n" +":40184000A95661758C6975C8E904A6100225F70440E4CF085E4ADA04B650B2F25170881D5066A7A74105C414EE37B23D811EA1CE1003272C890083A6A686E332206E102FA1\n" +":4018800074CE089BD50323211014E23FCC935862D4930981D1480201ED61A5CBD7CADA616E3263CBC24354424074F600934780343017405754142040174990126123CBF694\n" +":4018C000009552017906824D1CAD881A0C82095C395D610F206D002EC0AE1F4CC38F37AC1F04DC0EB5487B9E6A4B3F23F219A021D122DF776444F2383965320DCAE65C1D5E\n" +":401900008021B5ED2101D88E8763B72EA8191A97176EF7D31F5DB91770A115B28BAA0614B8E4C12010C2A5A1EA830302808BC6879B108EC7F43B46197A2650C1E94969E2BE\n" +":40194000040CD8CA86C5C23293E4FEC5EE7ABEC3324B90080FB7F86B09049F080B8CBF01C69207B7828346425AE001CD1319019BCAC3D33AEE298532F958736A10B3279A7D\n" +":40198000D79C1FE77B362A1EAB301144A768C4EA7FD7900018DE608F53FE2411E97C92004310ABA4659007D0C66C00FFA295C75C383C0520BC4B3A5080779F850041D232FD\n" +":4019C00065DA0D8384487D1D3E2733120442052000DD09820287A5A490047A7D9080FBA48310C01EBE194E33282AE82A144DF010D602CD5E987E1F5DE1A57C508908E8BE7D\n" +":401A0000C7C52CC613A5D47005B8DD160FE0B55217C93CA87E313C05221BACA0D223C0243DC5CA21772E241047C8940385DA3D77F07D9A30248421F8CFF87B73D47D099E4C\n" +":401A40003D650E6121A02A5351153A8E387ACA1C40A2F825300AD380F0067B0B205882100A28CAA0950EB2892604A484A4007D6512B0144747080C56F59452006A66808173\n" +":401A8000D6512A14C0168670406F2C38101F84744D9EA1874029AB040E9F1C0B89D039D083A0C40AA2041B64092268865872409110CB100CB1108D10BFCC9005D95A622066\n" +":401AC0009A216F95C244412C711789E26DEC0A063F054401AC157861467C635C979AB54840F4A70979D2AC8F20F28181AE119AA0F7272F1E754C2008E85A81C68843738C68\n" +":401B0000011A3C51ECA721C77425A8607802FE0057303345F62217BAF6841C26C14068A28310401A249206117804303C05E5C111AE33139080010950380935480F3F930C53\n" +":401B40004879B8B503FFABA313ECC5A10489602FA4EC840B3C28200B412F59088854407A59D11B9F04512A11F1C28103BD811C77360A0000030000FC00000000420608B492\n" +":401B80003800000370001FBF65D648086A09981A74B4D2186D202F465062BFB838A58537688636074436034ADA4EBE4F64FC797DB6CB25AEC148AE1D6768235B4A62006018\n" +":401BC000040100F3545BBA00102FBFB2E4030041100C020480300F9540C811B8144DCA80016A248B6DB4B007A5E6080F00FA83F87B62F640105B0AC002E02007D0F3C209D2\n" +":401C00008060201C010080480202008C6C996F2FBF7EFDFBF7EFDFBF7EFDFBF620601974D400E06010060160601B868E4110339B200D6245D64167F002004F32D548120429\n" +":401C40000140581DD20A1209EF1CA20A8200B0220B8240C6B04A7607F797DFBF7EC400003618E5F27130B09001E026C0C2D20000060000080001000203000184000000003A\n" +":401C8000FFFFA00038000001EC003997150238F9A5908354393D790E3A76D9F0D884C38EED6C40EE9DE8B0830842808D42841E8730390095189C82D822C01F31082F3688E6\n" +":401CC000AE000A28065261E867E19844679E043D87103900927E11D4FF36CFF374FFDF9E44FF3E8FF3D2044E23FCE840F341F27F9F883E70E8C9E30C67EF3F153026423053\n" +":401D0000207DD4B180F911D86C9667EB0CB9A2220140A3D16BC348C408F38689D9D47CE0D420E4EA3CC1F0703649F53989E54B4E1CA71163C615932218723FA204F8EDA1B1\n" +":401D400092F4DA4A11027D4C6600CE884EA31C40123B87DA30E32A33FD000FA12FA8FF3DD83FA2C4068C104103C26D13FB1B35D141A5427DC39E0DD20228089F946CE20F8E\n" +":401D8000D31ED30E8618D398864A39FBA70154F071BB55418D4001FA010F40085BB29208B4811A008EC011F5DE1B326956F8858861260033534A246204BA3D44A62C598C6A\n" +":401DC0000C7EA695918BC48F720DF6EE8195000C400EBC329641AE07227C09367AD14A4B1AC81046B744E4EF00E909183F1017515B80358021B00447200000000300074CBC\n" +":401E000000000000FFFFB3083800000BEC31842E00EB34324D91085237306A54416110A68DE000A30205154008530807A3D491F1D4709660412388A88260B0260CC400B0FC\n" +":401E4000138430CC204612188296631E48200810230721984D1120C8591201304110D52FA9D88FC40FF48842882D85024CC318449F870AD0E27D236444F096910124C81383\n" +":401E80008B54630EF1FA600647060C03C01E107802229000E244096444401801CD0020CA0288C0449431845A6058CA86990D2311145108235003CA0C516063630C021ACEEB\n" +":401EC000D350926C88628834171C18C880230A0A3C7042288450C1418A389A0D30A95442A1B619BA9210A640052024219041919120200EA70D80E31FA1315BA228895066C4\n" +":401F00002650E23F68C22708082911C0001059880598910222846B3CCA8858160B3182044689A0B4301470804290FD16238203C44ABC053A58200B32213C3CB53D00A63CB0\n" +":401F400000E1980866528299C0FE200036B039854A8636911EAAA903F921543A03BC2EB22E186FAE9308885992008198089D70224CC632492A4C006A01872020341D287852\n" +":401F8000ADDA4012CC902CC92058A500F7B0F121006058878413301A8C11C2AFCF138D006730080CB0020A82400BB5390C532256D50C201549A154642A0CC01633F0264935\n" +":401FC0001D608641464C36206647FE167C30530EDA2026AF82F569D26308F4183229183A44714FCEF7A25A9105A91C5A9285A9345A9405A94C5A95848B802C5060E413FC9F\n" +":402000000508016283A12E6404014552100528F127C96A6E001D8498251B50A14183C7FC52C626C8344022D4DD2039ED88C1860418EE45598D102451405E961B04201360F5\n" +":4020400083062BA061081A0744C2200C8D30288402164210D230C03833BBE00568430300540840101A206A44ACB611A850400688214016143B9E745806A654624081503062\n" +":402080001008B002DA4880085003A63195A339B14AC67F11C0040D8662200D972512808C33200242A013214992B312838EFAC2389F426F0B7FA00144A4C494C05A34607017\n" +":4020C000E0070041ED4910264C834334804D2AC5A31B2DCE40E13017332244431C0123F0CD812B04264CA40103420A3AF0606284A8522A19DC3C64A41016A5A247056990BB\n" +":402100002C41B06E739981BBB00F8AD402100C058202CC3EAAB40B3F4A090B04CA3A5C110208802E30A40203DA98A140A326A308FF3DE6202DC744CC6123B14BC76EA9BBCC\n" +":4021400078A18BF28D91228980400C83A19A00C82C660280C8205981A265E25048E0324899C95F133C1118540EB034B550C680CC052A00231540328866A049EBE009E92AD0\n" +":40218000C092A00929B89FC4846040EA038DC029FBC178A4D13FC183ECF492B172F154AA664642A102C480E2661FF167DFAF246A8040801162F1C33D364A0B17846830682F\n" +":4021C000478E36E190281782E94880D0462E242564F3200109A045023001064010CE21523B2BC09B03AD232D1E8030CC01C8152DCF2006F670079B88300903D0260121C233\n" +":40220000B48AF4A0B7180A668232108A0A308572832299C97CD899960523F6E14314CC6C9D82884EEFC0310280023D532968C8627F5DB87CAAA88F0883CA3718F205810B3A\n" +":40224000190E31919F868289EC60199731A4CB1BBBD0E1BE08A0A1CA0A476200A96E7D17012266F29A08542A1104142853510699AAE00A00108801156B98A0800E2E0EE332\n" +":4022800098EE39807088E8118F00340B39CF43A8F4C69A0011E6659E64D1FE5F9F47F1F03B8042F1FB5A406F00A2C1F24B1F17D70307E91C7D06C021A87C9A67C9147F8A69\n" +":4022C00087F07C7D8600214E7D0CE7CDF160169FC171F4730047C9F4501F4421FC231FC6F1FA265C64F22288BC801BC76B42671726D17273207920FE2E80A24400C8445286\n" +":40230000148034C03ACA3132C042010E25B01000C3AA5C020012B174100096A420506664220CD800C700FB72E490022571037AC59791080501A44C88804200722C661D64B5\n" +":402340001344201137902C4026380AC1401E4400F10B83D0EA8A006012AC29694945D45451B779B2195DAE33C1DBDD1F1E8ACF426C080114B850A4212E5661B0207FC3AADC\n" +":402380001C28D3C0A3230E033028042B0D028040811160A8674A4FB71207B6A1E409B8C52A646520A205808844AE5300C014F08441B25400C08481510D01D330708F000230\n" +":4023C0007440154CF400E1C045141003D0089CD3A903CC30028E07B02010031CD7A265A8458353681E43587A12C4AE38F41A58810F0381FC0C018032950844F8D59A0C4B76\n" +":4024000007D0320780EB27E132400CC9A7A98E201015508A8E2020408C3A8040611CB0141000332A15F480E2030321986CE54B89803008051580E00290319C9F4F03882416\n" +":40244000043529401DB640B00A0210EB02D4DD488161806010F44CB0C4AA218E2116602099980A8AB8D32B8D11A21D5F3D2FCBB1641A012AC5A0071CB16C6884EADE4ABA3A\n" +":40248000971A084C155254A1CCAC00401762E8AC0AAA2561C0BC007A0A105C6C7265F03B62B46CA2530088838180078B8041EA0283C0088F2C28B46C280615D3451432D160\n" +":4024C000A5C17418CB40CA62B6D831080BDE1A3180335FD5EEB223CE0C99187524B3D7E2C8195989E089033B3C54AF5821C0D2B39326B6DDB34F071216D08793A90006B44D\n" +":40250000D095960F701C3C84AF25D0805D09532901859FA54086F3329F0014F342A8998C41007B7D6116E6416C080A1801C60C8A3CDC5162284B81409E60B9302080BA06C5\n" +":4025400012F1C410800000000500020C000000000000020071BE00A854AB0003A000A0C4A1885125000200280EED553EFFFF51290002FDF40656522F0010D6B5D79EDDCFB7\n" +":40258000F117F4D1FB7DFDBB093709780A560BA914C80B99096007B605DB515C0001003E02BE71C60100606700024C000110605D000200002710607B001100000040008017\n" +":4025C00000C001000140018001C00200023F027F02BF02FF033F037F03BF03FF53BF0002028F051E70F4000070710002FF86FF8670760F33549AFEAE54A00D9953B4005FAE\n" +":402600005058118053E900021000100054B4000C544E002850340580501A01005010F8805018FDCD53510008F000080000001000F8000266F0000333534A8000537D00027E\n" +":402640000000000053610008C0004000C0004000C0004000C0004000526F00080000000000000000000000000000000002990002F4F901535376F7F55348C0005100115F26\n" +":402680007151002000400040004000400040004000400040FA41FC4C01520453074F0748044200400040F842F749F94DFC50FE500050064B0B400B4300400040004000400C\n" +":4026C0000040004071B2522C52AA014052B30002080000A0512E2000512C010053840000539E01E0539C099952A300020000000052D2008052E50003004003000400533EC9\n" +":402700006000538D00020000823552E1000200001000533E5000531E0C00546B000708000CCC0E660E660B330B331000545600E6545A1000545F00040700157C04000FA093\n" +":4027400054680000545C00A060110003B338B784BECC0000000000006973705F696E69745F63616D004953505468726561644C6F6F70006170313330325F7365745F6374E4\n" +":40278000726C000020257328256429204572726F72204F6363757272656420696E2048414C5F4932435F536C617665527843706C7443616C6C6261636B202053746174750A\n" +":4027C00073203D203078253032782C20675F736C6176655F6E6578745F72785F6C656E203D20257520200A0D0000000020257328256429204572726F72204F636375727258\n" +":40280000656420696E2048414C5F4932435F536C617665547843706C7443616C6C6261636B2020737461747573203D2030782530327820675F736C6176655F6E6578745F7A\n" +":4028400072785F6C656E203D202575200A0D000025732825642920446562756720496E69746961746564205359534346475F4346475231203D203078253038782020464CB1\n" +":402880004153482D3E4F505452203D20307825303878200A0D00000049535054687265616400000064656661756C745461736B00496E76616C696420466F726D6174202DD2\n" +":4028C0002030782530387820213D20307825303878202C20205769647468202D2025687520213D20256875202C20486569676874202D2025687520213D20256875200A0D1A\n" +":40290000000000000A0D2052454144204D4173746572205472616E736D6974204572726F7220212120202D20307825303278203078253038782020524547203D2030782571\n" +":4029400030347820666F7220736C61766520307825303278200A0D000A0D205752495445204D4173746572205472616E736D6974204572726F7220212120202D2030782555\n" +":402980003032782030782530387820524547203D2030782530347820666F7220736C61766520307825303278200A0D000A0D204D417374657220526563656976652045726F\n" +":4029C000726F72202121202D203078253032782030782530387820666F7220736C617665203078253032782020666F7220524547202D20307825303478200A0D0000000006\n" +":402A0000202A020800000020D8000000B24B0008F82A0208D800002048310000C24B000880841E0000000000AAAAAAAA0000000000000000000000000000000000000000C9\n" +":402A40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056\n" +":402A800000000005FFFF0000000000000000000000000000C0FF02080000000000000000000000000000000000000000000000000000000000000000000000002802000020\n" +":382AC0000101170020030000000219004003000000021A008003000000021C0020040000000116008004000000011800B00400000001190000000000E1\n" +":020000040800F2\n" +":4000000008040020D5000008C9010008C701000800000000000000000000000000000000000000000000000000000000CD0100080000000000000000CB010008CF01000893\n" +":40004000E7000008E7000008E7000008E7000008E7000008E7000008E7000008E700000800000000E7000008E7000008E7000008E7000008E7000008E7000008E70000087F\n" +":40008000E7000008E7000008E700000800000000E7000008E7000008E7000008E7000008E7000008E7000008E7000008E7000008E7000008E700000800000000000000001D\n" +":4000C0000348854600F014F80048004751020008080400200448804704480047FEE7FEE7FEE7FEE7FEE7FEE7DD010008C1000008064C0125064E05E0E36807CC2B430C3CA0\n" +":4001000098471034B442F7D3FFF7DEFFA4020008C402000810B500210748C9438162002282624162426201620262C161C26100F00DF8002010BD0000001002400248016829\n" +":40014000491C016070470000000000207047000008B515480168821511430160C16889088900C1600168114A114001600168012212041140009101689200914301600021AD\n" +":40018000C16042680A4B1A4005235B03D218426042681F231B029A438314D2184260016105490448086008BD00100240D4FFF6FEFF1FFF0068FF1F0004000020704710B525\n" +":4001C000FFF7FCFF10BDFEE770477047704710B5FFF7B4FFFFF7F3FF10BD000010480168821511430160C1680E4A1140C16001680D4A1140016081684908490081600168D5\n" +":400200000122920491430160C168FD2212049143C160002101610549C003886070470000001002400C40FF88F6FFF6FE00ED00E002E008C8121F08C1002AFAD17047704760\n" +":40024000002001E001C1121F002AFBD17047000008B5002462B60F48009401680E4A1140C204914214D1416800910D46016881F3088872B609498860FFF76AFF08480461F9\n" +":4002800044618461012080F31088FFF743FFA847FEE70000000400080000FE2F00ED00E000E000E0C4020008000000200800000030020008CC020008080000200004000084\n" +":0C02C000400200080000000080841E00C6\n" +":020000040802F0\n" +":20FFC00031314e494c453235563158585830313131306430306634346647434f52414c32cc\n" +":04000005080000C12E\n" +":00000001FF\n" diff --git a/NileCAM25_CUXVR/ar0234.h b/NileCAM25_CUXVR/ar0234.h new file mode 100644 index 000000000..200cd8ffc --- /dev/null +++ b/NileCAM25_CUXVR/ar0234.h @@ -0,0 +1,322 @@ +/* + * ar0234.h - ar0234 sensor mode tables + * + * Copyright (c) 2017-2018, e-con Systems, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef __AR0234_TABLES__ +#define __AR0234_TABLES__ + +#include + +#define AR0234_TABLE_WAIT_MS 0 +#define AR0234_TABLE_END 1 +#define AR0234_WAIT_MS 10 +#define AR0234_DEFAULT_MODE 0 + +#define AR0234_DEFAULT_WIDTH 1920 +#define AR0234_DEFAULT_HEIGHT 1080 +#define AR0234_DEFAULT_DATAFMT MEDIA_BUS_FMT_UYVY8_1X16 +#define AR0234_NUM_CONTROLS 30 + +#define PADCTL_AO_CFG2TMC_GPIO_SEN8_0 0x0c30208c +#define PADCTL_AO_CFG2TMC_GPIO_SEN9_0 0x0c302094 + +//////////////////////////////////////////////////////////////////////////////////////////// + +/* Defines related to MCU */ + +#define CMD_SIGNATURE 0x43 +#define TX_LEN_PKT 5 +#define RX_LEN_PKT 6 +#define HEADER_FOOTER_SIZE 4 +#define CMD_STATUS_MSG_LEN 7 + +#define VERSION_SIZE 32 +#define VERSION_FILE_OFFSET 100 + +#define MCU_CMD_STATUS_SUCCESS 0x0000 +#define MCU_CMD_STATUS_PENDING 0xF000 +#define MCU_CMD_STATUS_ISP_PWDN 0x0FF0 +#define MCU_CMD_STATUS_ISP_UNINIT 0x0FF1 + +#define MAX_NUM_FRATES 10 +#define MAX_CTRL_DATA_LEN 100 +#define MAX_CTRL_UI_STRING_LEN 32 +/* Defines related to SOC find */ +#define JETSON_TX2 0x18 +#define JETSON_TX1 0x21 +/* Defines related to Deserializer SIO port*/ +#define PHY_A 'A' +#define PHY_B 'B' + +#define FRAMESYNC_ENABLE +//#define AR0234_HDR_SYNC + +uint8_t ser_status; +/* Define for GPIO usage*/ +//#define GPIO_DEBUG +typedef enum _errno { + ERRCODE_SUCCESS = 0x00, + ERRCODE_BUSY = 0x01, + ERRCODE_INVAL = 0x02, + ERRCODE_PERM = 0x03, + ERRCODE_NODEV = 0x04, + ERRCODE_IO = 0x05, + ERRCODE_HW_SPEC = 0x06, + ERRCODE_AGAIN = 0x07, + ERRCODE_ALREADY = 0x08, + ERRCODE_NOTIMPL = 0x09, + ERRCODE_RANGE = 0x0A, + + /* Reserved 0x0B - 0xFE */ + + ERRCODE_UNKNOWN = 0xFF, +} RETCODE; + +typedef enum _cmd_id { + CMD_ID_VERSION = 0x00, + CMD_ID_GET_SENSOR_ID = 0x01, + CMD_ID_GET_STREAM_INFO = 0x02, + CMD_ID_GET_CTRL_INFO = 0x03, + CMD_ID_INIT_CAM = 0x04, + CMD_ID_GET_STATUS = 0x05, + CMD_ID_DE_INIT_CAM = 0x06, + CMD_ID_STREAM_ON = 0x07, + CMD_ID_STREAM_OFF = 0x08, + CMD_ID_STREAM_CONFIG = 0x09, + CMD_ID_GET_CTRL_UI_INFO = 0x0A, + + /* Reserved 0x0B to 0x0F */ + + CMD_ID_GET_CTRL = 0x10, + CMD_ID_SET_CTRL = 0x11, + + /* Reserved 0x12, 0x13 */ + + CMD_ID_FW_UPDT = 0x14, + CMD_ID_ISP_PDOWN = 0x15, + CMD_ID_ISP_PUP = 0x16, + + /* Configuring MIPI Lanes */ + CMD_ID_LANE_CONFIG = 0x17, + CMD_ID_MIPI_CLK_CONFIG = 0x18, + + /* Reserved - 0x17 to 0xFE (except 0x43) */ + + CMD_ID_UNKNOWN = 0xFF, + +} HOST_CMD_ID; + +enum { + FRAME_RATE_DISCRETE = 0x01, + FRAME_RATE_CONTINOUS = 0x02, +}; + +enum { + CTRL_STANDARD = 0x01, + CTRL_EXTENDED = 0x02, +}; + +enum { +/* 0x01 - Integer (32bit) + 0x02 - Long Int (64 bit) + 0x03 - String + 0x04 - Pointer to a 1-Byte Array + 0x05 - Pointer to a 2-Byte Array + 0x06 - Pointer to a 4-Byte Array + 0x07 - Pointer to Generic Data (custom Array) +*/ + + EXT_CTRL_TYPE_INTEGER = 0x01, + EXT_CTRL_TYPE_LONG = 0x02, + EXT_CTRL_TYPE_STRING = 0x03, + EXT_CTRL_TYPE_PTR8 = 0x04, + EXT_CTRL_TYPE_PTR16 = 0x05, + EXT_CTRL_TYPE_PTR32 = 0x06, + EXT_CTRL_TYPE_VOID = 0x07, +}; + +/* Stream and Control Info Struct */ +typedef struct _isp_stream_info { + uint32_t fmt_fourcc; + uint16_t width; + uint16_t height; + uint8_t frame_rate_type; + union { + struct { + uint16_t frame_rate_num; + uint16_t frame_rate_denom; + } disc; + struct { + uint16_t frame_rate_min_num; + uint16_t frame_rate_min_denom; + uint16_t frame_rate_max_num; + uint16_t frame_rate_max_denom; + uint16_t frame_rate_step_num; + uint16_t frame_rate_step_denom; + } cont; + } frame_rate; +} ISP_STREAM_INFO; + + +typedef struct _isp_ctrl_ui_info { + struct { + char ctrl_name[MAX_CTRL_UI_STRING_LEN]; + uint8_t ctrl_ui_type; + uint8_t ctrl_ui_flags; + } ctrl_ui_info; + + /* This Struct is valid only if ctrl_ui_type = 0x03 */ + struct { + uint8_t num_menu_elem; + char **menu; + } ctrl_menu_info; +} ISP_CTRL_UI_INFO; + +typedef struct _isp_ctrl_info_std { + uint32_t ctrl_id; + uint8_t ctrl_type; + union { + struct { + int32_t ctrl_min; + int32_t ctrl_max; + int32_t ctrl_def; + int32_t ctrl_step; + } std; + struct { + uint8_t val_type; + uint32_t val_length; + // This size may vary according to ctrl types + uint8_t val_data[MAX_CTRL_DATA_LEN]; + } ext; + } ctrl_data; + ISP_CTRL_UI_INFO ctrl_ui_data; +} ISP_CTRL_INFO; + +struct cam { + struct camera_common_power_rail power; + int numctrls; + struct v4l2_ctrl_handler ctrl_handler; + struct i2c_client *i2c_client; + struct v4l2_subdev *subdev; + struct media_pad pad; + + int reg_offset; + + s32 group_hold_prev; + bool group_hold_en; + struct regmap *b_regmap; + struct regmap *w_regmap; + struct regmap *dw_regmap; + + struct camera_common_data *s_data; + struct camera_common_pdata *pdata; + int ident; + u16 chip_id; + u8 revision; + + uint16_t frate_index; + uint32_t format_fourcc; + int frmfmt_mode; + int num_ctrls; + ISP_STREAM_INFO *stream_info; + ISP_CTRL_INFO *mcu_ctrl_info; + /* Total formats */ + int *streamdb; + uint32_t *ctrldb; + /* Array of Camera framesizes */ + struct camera_common_frmfmt *mcu_cam_frmfmt; + uint16_t prev_index; + uint16_t mipi_clk_config; + uint16_t mipi_lane_config; +#ifdef FRAMESYNC_ENABLE + uint8_t last_sync_mode; +#endif + uint8_t phy; + uint8_t ser_addr; + uint8_t des_addr; + struct mutex mcu_i2c_mutex; + struct v4l2_ctrl *ctrls[]; +}; + +enum { + MODE_640x480 = 0, + MODE_960x540, + MODE_1280x720, + MODE_1280x960, + MODE_1920x1080, + MODE_UNKNOWN, +}; + +enum { + V4L2_CID_FACEDETECT = (V4L2_CID_AUTO_FOCUS_RANGE+1), + V4L2_CID_FACEMARK, + V4L2_CID_SMILEDETECT, + V4L2_GET_FACEINFO, + V4L2_CID_ROI_WINDOW, + V4L2_CID_ROI_FOCUS, + V4L2_CID_ROI_EXPOSURE, + V4L2_CID_TRIGGER_FOCUS, + + /* New Controls */ + V4L2_CID_HDR, + V4L2_CID_COLORKILL, + V4L2_CID_FRAME_SYNC, + V4L2_CID_CUSTOM_EXPOSURE_AUTO, + V4L2_CID_CUSTOM_FLASH_STROBE, + V4L2_CID_DENOISE, + V4L2_CID_GRAYSCALE, + V4L2_CID_LSCMODE, + V4L2_CID_FOCUS_WINDOW, + V4L2_CID_EXPOSURE_COMPENSATION, +}; + +DEFINE_MUTEX(g_i2c_mutex); + + +static int cam_g_volatile_ctrl(struct v4l2_ctrl *ctrl); +static int cam_s_ctrl(struct v4l2_ctrl *ctrl); +static int cam_read(struct i2c_client *client, u8 * val, u32 count); +static int cam_write(struct i2c_client *client, u8 * val, u32 count); +static int cam_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param); +int cam_s_power(struct v4l2_subdev *sd, int on); +#ifdef GPIO_DEBUG +static void toggle_gpio(unsigned int gpio, int value); +#endif +static int mcu_get_fw_version(struct i2c_client *client, unsigned char * fw_version, unsigned char *txt_fw_version); +unsigned char errorcheck(char *data, unsigned int len); + +static int mcu_mipi_configuration(struct i2c_client *client, struct cam *, u8 cmd_id); +static int mcu_list_fmts(struct i2c_client *client, ISP_STREAM_INFO *stream_info, int *frm_fmt_size,struct cam *); +static int mcu_list_ctrls(struct i2c_client *client, + ISP_CTRL_INFO * mcu_ctrl_info, struct cam *); +static int mcu_get_sensor_id(struct i2c_client *client, uint16_t * sensor_id); +static int mcu_get_cmd_status(struct i2c_client *client, uint8_t * cmd_id, + uint16_t * cmd_status, uint8_t * ret_code); +static int mcu_isp_init(struct i2c_client *client); +static int mcu_stream_config(struct i2c_client *client, uint32_t format, + int mode, int frate_index); +static int mcu_set_ctrl(struct i2c_client *client, uint32_t ctrl_id, + uint8_t ctrl_type, int32_t curr_val); +static int mcu_get_ctrl(struct i2c_client *client, uint32_t ctrl_id, + uint8_t * ctrl_type, int32_t * curr_val); +static int mcu_get_ctrl_ui(struct i2c_client *client, + ISP_CTRL_INFO * mcu_ui_info, int index); +static int mcu_fw_update(struct i2c_client *client, unsigned char *txt_fw_version); +static int mcu_cam_stream_on(struct i2c_client *client); +static int mcu_cam_stream_off(struct i2c_client *client); +static int gen_mcu_stream_config(struct i2c_client *client,struct cam *priv); +#endif /* __AR0234_TABLES__ */ diff --git a/NileCAM25_CUXVR/ar0234_common.c b/NileCAM25_CUXVR/ar0234_common.c new file mode 100644 index 000000000..54924e1d6 --- /dev/null +++ b/NileCAM25_CUXVR/ar0234_common.c @@ -0,0 +1,3747 @@ +/* + * ar0234.c - AR0234 sensor driver + * Copyright (c) 2017-2018, e-con Systems. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include "../../../../nvidia/drivers/media/platform/tegra/camera/camera_gpio.h" +#include + +#include "ar0234.h" +#include "serdes.h" +#include "mcu_firmware.h" + +#include "pca9685.h" + +#define DEBUG_PRINTK +#ifndef DEBUG_PRINTK +#define debug_printk(s , ... ) +#else +#define debug_printk printk +#endif + + +static const struct v4l2_ctrl_ops cam_ctrl_ops = { + .g_volatile_ctrl = cam_g_volatile_ctrl, + .s_ctrl = cam_s_ctrl, +}; + +static int cam_power_on(struct camera_common_data *s_data) +{ + int err = 0; + struct cam *priv = (struct cam *)s_data->priv; + struct camera_common_power_rail *pw = &priv->power; + + if (!priv || !priv->pdata) + return -EINVAL; + dev_dbg(&priv->i2c_client->dev, "%s: power on\n", __func__); + + if (priv->pdata && priv->pdata->power_on) { + err = priv->pdata->power_on(pw); + if (err) + dev_err(&priv->i2c_client->dev,"%s failed.\n", __func__); + else + pw->state = SWITCH_ON; + return err; + } + + if (pw->avdd) + err = regulator_enable(pw->avdd); + if (err) + goto cam_avdd_fail; + + if (pw->iovdd) + err = regulator_enable(pw->iovdd); + if (err) + goto cam_iovdd_fail; + + usleep_range(1350, 1360); + + pw->state = SWITCH_ON; + return 0; + +cam_iovdd_fail: + regulator_disable(pw->avdd); + +cam_avdd_fail: + dev_err(&priv->i2c_client->dev,"%s failed.\n", __func__); + return -ENODEV; +} + +static int cam_power_put(struct cam *priv) +{ + struct camera_common_power_rail *pw = &priv->power; + if (!priv || !priv->pdata) + return -EINVAL; + + if (unlikely(!pw)) + return -EFAULT; + + pw->avdd = NULL; + pw->iovdd = NULL; + + if (priv->pdata->use_cam_gpio) + cam_gpio_deregister(&priv->i2c_client->dev, pw->pwdn_gpio); + else { + gpio_free(pw->pwdn_gpio); + gpio_free(pw->reset_gpio); + } + + return 0; +} + +static int cam_power_get(struct cam *priv) +{ + struct camera_common_power_rail *pw = &priv->power; + struct camera_common_pdata *pdata = priv->pdata; + const char *mclk_name; + const char *parentclk_name; + struct clk *parent; + int err = 0; + + if (!priv || !priv->pdata) + return -EINVAL; + + mclk_name = + priv->pdata->mclk_name ? priv->pdata->mclk_name : "cam_mclk1"; + pw->mclk = devm_clk_get(&priv->i2c_client->dev, mclk_name); + if (IS_ERR(pw->mclk)) { + dev_err(&priv->i2c_client->dev, "unable to get clock %s\n", + mclk_name); + return PTR_ERR(pw->mclk); + } + + parentclk_name = priv->pdata->parentclk_name; + if (parentclk_name) { + parent = devm_clk_get(&priv->i2c_client->dev, parentclk_name); + if (IS_ERR(parent)) + dev_err(&priv->i2c_client->dev, + "unable to get parent clcok %s", + parentclk_name); + else + clk_set_parent(pw->mclk, parent); + } + + + err |= + camera_common_regulator_get(&priv->i2c_client->dev, &pw->avdd, + pdata->regulators.avdd); + + err |= + camera_common_regulator_get(&priv->i2c_client->dev, &pw->iovdd, + pdata->regulators.iovdd); + + pw->state = SWITCH_OFF; + return err; +} + +static int cam_s_stream(struct v4l2_subdev *sd, int enable) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + int err = 0; + + if (!priv || !priv->pdata) + return -EINVAL; + + // Increment the refs count when streaming and decrement when streaming is disabled + if (enable) { + if (!try_module_get(s_data->owner)) + return -ENODEV; + } else { + module_put(s_data->owner); + } + + + if (!enable) { + /* Perform Stream Off Sequence - if any */ +#if 0 + err = mcu_cam_stream_off(client); + + /* Reset Frame rate index */ + priv->frate_index = 0; + + return err; +#endif + } + /* Perform Stream On Sequence - if any */ +#if 0 + err = mcu_cam_stream_on(client); + if(err!= 0){ + dev_err(&client->dev,"%s (%d) Stream_On \n", __func__, __LINE__); + return err; + } + mdelay(10); +#endif + return 0; +} + +static int mcu_cam_stream_off(struct i2c_client *client) +{ + uint32_t payload_len = 0; + + uint16_t cmd_status = 0; + uint8_t retcode = 0, cmd_id = 0; + int retry = 1000, err = 0; + /* call ISP init command */ + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + uint8_t mc_data[512], mc_ret_data[512]; + + /*lock semaphore*/ + mutex_lock(&priv->mcu_i2c_mutex); + + /* First Txn Payload length = 0 */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_OFF; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_OFF; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev," %s(%d) CAM Stream OFF Write Error - %d \n", __func__, + __LINE__, err); + goto exit; + } + + while (--retry > 0) { + /* Some Sleep for init to process */ + yield(); + + cmd_id = CMD_ID_STREAM_OFF; + if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < + 0) { + dev_err(&client->dev," %s(%d) CAM Get CMD Stream Off Error \n", __func__, + __LINE__); + err = -1; + goto exit; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + (retcode == ERRCODE_SUCCESS)) { + debug_printk(" %s %d CAM Get CMD Stream off Success !! \n", __func__, __LINE__ ); + err = 0; + goto exit; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_PENDING))) { + dev_err(&client->dev, + "(%s) %d CAM Get CMD Stream off Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + err = -1; + goto exit; + } + mdelay(1); + } +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + return err; +} + +static int cam_g_input_status(struct v4l2_subdev *sd, u32 * status) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + struct camera_common_power_rail *pw = &priv->power; + + if (!priv || !priv->pdata) + return -EINVAL; + + *status = pw->state == SWITCH_ON; + return 0; +} + +static int cam_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + + if (!priv || !priv->pdata) { + return -ENOTTY; + } + + param->parm.capture.capability |= V4L2_CAP_TIMEPERFRAME; + + param->parm.capture.timeperframe.denominator = + priv->mcu_cam_frmfmt[priv->frmfmt_mode].framerates[priv->frate_index]; + param->parm.capture.timeperframe.numerator = 1; + + return 0; +} + +static int gen_mcu_stream_config(struct i2c_client *client,struct cam *priv) +{ + int err = 0, retry = 5; + uint16_t data = 0; + + while (retry-- > 0) { + + /* call stream config with width, height, frame rate */ + err = mcu_stream_config(client, priv->format_fourcc, priv->frmfmt_mode, + priv->frate_index); + if (err < 0) { + dev_err(&client->dev, "%s: Failed stream_config \n", __func__); + if(retry != 0) + continue; + if(err < 0){ + dev_err(&client->dev," %s (%d ) \n", __func__, __LINE__); + return err; + } + } + + mdelay(50); + break; + } + if(retry <= 0) { + dev_err(&client->dev, "%s(%d): Failed \n", + __func__, __LINE__); + return err; + } + + return 0; + +} + +static int cam_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param) +{ + struct i2c_client *client = v4l2_get_subdevdata(sd); + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + int ret = 0, err = 0, retry = 3; + uint16_t data = 0; + + if (!priv || !priv->pdata) { + return -EINVAL; + } + + for (ret = 0; ret < priv->mcu_cam_frmfmt[priv->frmfmt_mode].num_framerates; + ret++) { + if ((priv->mcu_cam_frmfmt[priv->frmfmt_mode].framerates[ret] == + param->parm.capture.timeperframe.denominator)) { + priv->frate_index = ret; + + param->parm.capture.capability |= V4L2_CAP_TIMEPERFRAME; + param->parm.capture.timeperframe.denominator = priv->mcu_cam_frmfmt[priv->frmfmt_mode].framerates[priv->frate_index]; + param->parm.capture.timeperframe.numerator = 1; + + err = gen_mcu_stream_config(client, priv); + + if(err < 0){ + dev_err(&client->dev," %s (%d ) \n", __func__, __LINE__); + return err; + } + + } + } + + /* if S_PARM is called with invalid parameters, set the right parameters and return success */ + param->parm.capture.capability |= V4L2_CAP_TIMEPERFRAME; + param->parm.capture.timeperframe.denominator = priv->mcu_cam_frmfmt[priv->frmfmt_mode].framerates[priv->frate_index]; + param->parm.capture.timeperframe.numerator = 1; + + return 0; +} + +static struct v4l2_subdev_video_ops cam_subdev_video_ops = { + .s_stream = cam_s_stream, + .g_mbus_config = camera_common_g_mbus_config, + .g_input_status = cam_g_input_status, + .g_parm = cam_g_parm, + .s_parm = cam_s_parm, +}; + +static struct v4l2_subdev_core_ops cam_subdev_core_ops = { + .s_power = camera_common_s_power, +}; + +static int cam_get_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *format) +{ + return camera_common_g_fmt(sd, &format->format); +} + +static int cam_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg, + struct v4l2_subdev_format *format) +{ + int ret; + struct i2c_client *client = v4l2_get_subdevdata(sd); + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + int flag = 0, err = 0, retry = 3; + uint16_t data = 0; + + if (!priv || !priv->pdata) + return -EINVAL; + switch (format->format.code) { + case MEDIA_BUS_FMT_UYVY8_1X16: + priv->format_fourcc = V4L2_PIX_FMT_UYVY; + break; + + default: + /* Not Implemented */ + if (format->which != V4L2_SUBDEV_FORMAT_TRY) { + return -EINVAL; + } + } + + if (format->which == V4L2_SUBDEV_FORMAT_TRY) { + ret = camera_common_try_fmt(sd, &format->format); + } else { + + for (ret = 0; ret < s_data->numfmts; ret++) { + if ((priv->mcu_cam_frmfmt[ret].size.width == format->format.width) + && (priv->mcu_cam_frmfmt[ret].size.height == + format->format.height)) { + priv->frmfmt_mode = priv->mcu_cam_frmfmt[ret].mode; + flag = 1; + break; + } + } + + if(flag == 0) { + return -EINVAL; + } + + err = gen_mcu_stream_config(client, priv); + if(err < 0){ + dev_err(&client->dev," %s (%d ) \n", __func__, __LINE__); + return err; + } + + ret = camera_common_s_fmt(sd, &format->format); + } + + return ret; +} + +static struct v4l2_subdev_pad_ops cam_subdev_pad_ops = { + .enum_mbus_code = camera_common_enum_mbus_code, + .set_fmt = cam_set_fmt, + .get_fmt = cam_get_fmt, + .enum_frame_size = camera_common_enum_framesizes, + .enum_frame_interval = camera_common_enum_frameintervals, +}; + +static struct v4l2_subdev_ops cam_subdev_ops = { + .core = &cam_subdev_core_ops, + .video = &cam_subdev_video_ops, + .pad = &cam_subdev_pad_ops, +}; + +static struct of_device_id cam_of_match[] = { + {.compatible = "nvidia,ar0234",}, + {}, +}; + +static int cam_g_volatile_ctrl(struct v4l2_ctrl *ctrl) +{ + struct cam *priv = + container_of(ctrl->handler, struct cam, ctrl_handler); + struct i2c_client *client = priv->i2c_client; + int err = 0; + + uint8_t ctrl_type = 0; + int ctrl_val = 0; + if (!priv || !priv->pdata) + return -EINVAL; + + if (priv->power.state == SWITCH_OFF) + return 0; + + if ((err = mcu_get_ctrl(client, ctrl->id, &ctrl_type, &ctrl_val)) < 0) { + return err; + } + + if (ctrl_type == CTRL_STANDARD) { + ctrl->val = ctrl_val; + } else { + /* Not Implemented */ + return -EINVAL; + } + + return err; +} + +static int cam_s_ctrl(struct v4l2_ctrl *ctrl) +{ + struct cam *priv = + container_of(ctrl->handler, struct cam, ctrl_handler); + struct i2c_client *client = priv->i2c_client; + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + int err = 0, mode = 0, retry = 5; + + mode = s_data->mode; + + + if (!priv || !priv->pdata) + return -EINVAL; + + if (priv->power.state == SWITCH_OFF) + return 0; + + while(retry -- > 0) { + if ((err = + mcu_set_ctrl(client, ctrl->id, CTRL_STANDARD, ctrl->val)) < 0) { + dev_info(&client->dev," %s (%d ) retry \n", __func__, __LINE__); + if(retry <= 0) { + dev_err(&client->dev," %s (%d ) \n", __func__, __LINE__); + break; + } else { + continue; + } + } + break; + } +#ifdef FRAMESYNC_ENABLE + if(ctrl->id == V4L2_CID_FRAME_SYNC) { + if(ctrl->val == 1){ + calibration_init(0); + priv->last_sync_mode = 1; + }else if(ctrl->val == 2) { + calibration_init(1); + priv->last_sync_mode = 2; + } + } +#endif + + return err; +} + +static int cam_try_add_ctrls(struct cam *priv, int index, + ISP_CTRL_INFO * mcu_ctrl) +{ + struct i2c_client *client = priv->i2c_client; + struct v4l2_ctrl_config custom_ctrl_config; + if (!priv || !priv->pdata) + return -EINVAL; + + priv->ctrl_handler.error = 0; + /* Try Enumerating in standard controls */ + priv->ctrls[index] = + v4l2_ctrl_new_std(&priv->ctrl_handler, + &cam_ctrl_ops, + mcu_ctrl->ctrl_id, + mcu_ctrl->ctrl_data.std.ctrl_min, + mcu_ctrl->ctrl_data.std.ctrl_max, + mcu_ctrl->ctrl_data.std.ctrl_step, + mcu_ctrl->ctrl_data.std.ctrl_def); + if (priv->ctrls[index] != NULL) { + debug_printk("%d. Initialized Control 0x%08x - %s \n", + index, mcu_ctrl->ctrl_id, + priv->ctrls[index]->name); + return 0; + } + + if(mcu_ctrl->ctrl_id == V4L2_CID_EXPOSURE_AUTO) + goto custom; + + + /* Try Enumerating in standard menu */ + priv->ctrl_handler.error = 0; + priv->ctrls[index] = + v4l2_ctrl_new_std_menu(&priv->ctrl_handler, + &cam_ctrl_ops, + mcu_ctrl->ctrl_id, + mcu_ctrl->ctrl_data.std.ctrl_max, + 0, mcu_ctrl->ctrl_data.std.ctrl_def); + if (priv->ctrls[index] != NULL) { + debug_printk("%d. Initialized Control Menu 0x%08x - %s \n", + index, mcu_ctrl->ctrl_id, + priv->ctrls[index]->name); + return 0; + } + + +custom: + priv->ctrl_handler.error = 0; + memset(&custom_ctrl_config, 0x0, sizeof(struct v4l2_ctrl_config)); + + if (mcu_get_ctrl_ui(client, mcu_ctrl, index)!= ERRCODE_SUCCESS) { + dev_err(&client->dev, "Error Enumerating Control 0x%08x !! \n", + mcu_ctrl->ctrl_id); + return -EIO; + } + + /* Fill in Values for Custom Ctrls */ + custom_ctrl_config.ops = &cam_ctrl_ops; + custom_ctrl_config.id = mcu_ctrl->ctrl_id; + /* Do not change the name field for the control */ + custom_ctrl_config.name = mcu_ctrl->ctrl_ui_data.ctrl_ui_info.ctrl_name; + + /* Sample Control Type and Flags */ + custom_ctrl_config.type = mcu_ctrl->ctrl_ui_data.ctrl_ui_info.ctrl_ui_type; + custom_ctrl_config.flags = mcu_ctrl->ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags; + + custom_ctrl_config.min = mcu_ctrl->ctrl_data.std.ctrl_min; + custom_ctrl_config.max = mcu_ctrl->ctrl_data.std.ctrl_max; + custom_ctrl_config.step = mcu_ctrl->ctrl_data.std.ctrl_step; + custom_ctrl_config.def = mcu_ctrl->ctrl_data.std.ctrl_def; + + if (custom_ctrl_config.type == V4L2_CTRL_TYPE_MENU) { + custom_ctrl_config.step = 0; + custom_ctrl_config.type_ops = NULL; + + custom_ctrl_config.qmenu = + (const char *const *)(mcu_ctrl->ctrl_ui_data.ctrl_menu_info.menu); + } + + priv->ctrls[index] = + v4l2_ctrl_new_custom(&priv->ctrl_handler, + &custom_ctrl_config, NULL); + if (priv->ctrls[index] != NULL) { + debug_printk("%d. Initialized Custom Ctrl 0x%08x - %s \n", + index, mcu_ctrl->ctrl_id, + priv->ctrls[index]->name); + return 0; + } + + dev_err(&client->dev, + "%d. default: Failed to init 0x%08x ctrl Error - %d \n", + index, mcu_ctrl->ctrl_id, priv->ctrl_handler.error); + return -EINVAL; +} + +static int cam_ctrls_init(struct cam *priv, ISP_CTRL_INFO *mcu_cam_ctrls) +{ + struct i2c_client *client = priv->i2c_client; + int err = 0, i = 0; + + /* Array of Ctrls */ + + /* Custom Ctrl */ + if (!priv || !priv->pdata) + return -EINVAL; + + if (mcu_list_ctrls(client, mcu_cam_ctrls, priv) < 0) { + dev_err(&client->dev, "Failed to init ctrls\n"); + goto error; + } + + v4l2_ctrl_handler_init(&priv->ctrl_handler, priv->num_ctrls+1); + priv->subdev->ctrl_handler = &priv->ctrl_handler; + for (i = 0; i < priv->num_ctrls; i++) { + + if (mcu_cam_ctrls[i].ctrl_type == CTRL_STANDARD) { + cam_try_add_ctrls(priv, i, + &mcu_cam_ctrls[i]); + } else { + /* Not Implemented */ + } + } + + return 0; + +error: + v4l2_ctrl_handler_free(&priv->ctrl_handler); + return err; +} + +MODULE_DEVICE_TABLE(of, cam_of_match); + +static struct camera_common_pdata *cam_parse_dt(struct i2c_client *client) +{ + struct device_node *node = client->dev.of_node; + struct camera_common_pdata *board_priv_pdata; + const struct of_device_id *match; + int err; + + if (!node) + return NULL; + + match = of_match_device(cam_of_match, &client->dev); + if (!match) { + dev_err(&client->dev, "Failed to find matching dt id\n"); + return NULL; + } + + board_priv_pdata = + devm_kzalloc(&client->dev, sizeof(*board_priv_pdata), GFP_KERNEL); + if (!board_priv_pdata) + return NULL; + + + err = camera_common_parse_clocks(&client->dev, board_priv_pdata); + if (err) { + dev_err(&client->dev, "Failed to find clocks\n"); + goto error; + } + + board_priv_pdata->use_cam_gpio = + of_property_read_bool(node, "cam,use-cam-gpio"); + + err = + of_property_read_string(node, "avdd-reg", + &board_priv_pdata->regulators.avdd); + if (err) { + dev_err(&client->dev, "avdd-reg not in DT\n"); + goto error; + } + err = + of_property_read_string(node, "iovdd-reg", + &board_priv_pdata->regulators.iovdd); + if (err) { + dev_err(&client->dev, "iovdd-reg not in DT\n"); + goto error; + } + + board_priv_pdata->has_eeprom = + of_property_read_bool(node, "has-eeprom"); + + return board_priv_pdata; + +error: + devm_kfree(&client->dev, board_priv_pdata); + return NULL; +} + +static int cam_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh) +{ + return 0; +} + +static const struct v4l2_subdev_internal_ops cam_subdev_internal_ops = { + .open = cam_open, +}; + +static const struct media_entity_operations cam_media_ops = { + .link_validate = v4l2_subdev_link_validate, +}; + +static int cam_read(struct i2c_client *client, u8 * val, u32 count) +{ + int ret; + struct i2c_msg msg = { + .addr = client->addr, + .flags = 0, + .buf = val, + }; + + msg.flags = I2C_M_RD; + msg.len = count; + ret = i2c_transfer(client->adapter, &msg, 1); + if (ret < 0) + goto err; + + return 0; + +err: + dev_err(&client->dev, "Failed reading register ret = %d!\n", ret); + return ret; +} + +static int cam_write(struct i2c_client *client, u8 * val, u32 count) +{ + int ret; + struct i2c_msg msg = { + .addr = client->addr, + .flags = 0, + .len = count, + .buf = val, + }; + + ret = i2c_transfer(client->adapter, &msg, 1); + if (ret < 0) { + dev_err(&client->dev, "Failed writing register ret = %d!\n", + ret); + return ret; + } + + return 0; +} + +int mcu_bload_ascii2hex(unsigned char ascii) +{ + if (ascii <= '9') { + return (ascii - '0'); + } else if ((ascii >= 'a') && (ascii <= 'f')) { + return (0xA + (ascii - 'a')); + } else if ((ascii >= 'A') && (ascii <= 'F')) { + return (0xA + (ascii - 'A')); + } + return -1; +} + +static s32 serdes_config_init(struct i2c_client *client,struct cam *priv) +{ + uint8_t slave_addr=0; + + if (priv->phy == PHY_A) + { + dev_info(&client->dev, " Issuing CHIP reset for Deserializer ... \n"); + if((serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x80)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + + if((serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x21)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + + if((serdes_write_16b_reg(client, SER1_ADDR, 0x0010, 0x21)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + if((serdes_read_16b_reg(client, SER1_ADDR, 0x0000, &slave_addr)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + if(SER1_ADDR != (slave_addr>>1)){ + /* Enabling Only LINKB */ + serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x22); + msleep(100); + debug_printk("serializer slave address read is=%x\n",slave_addr>>1); + dev_err(&client->dev," No serializer found on SIOA\n"); + dev_err(&client->dev," Exiting probe\n"); + return -ENODEV; + } + priv->ser_addr = SER1_ADDR; + + /* SIOA port I2C address translation */ + if(serdes_parse_regdata(client, SER1_I2C_CONF, ARRAY_SIZE(SER1_I2C_CONF), + priv->ser_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure SIOA Serializer" + "I2C translation\n",__func__); + return -EIO; + } + dev_info(&client->dev,"SIOA Port I2C translated successfully\n"); + + /* Setting Boot pin low */ + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02CD, 0x40)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + /* Enabling high priority gpio reception for input trigger */ + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02C7, 0xC4)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02C9, 0x07)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + /* Updating Serializer availabilty */ + ser_status = 0x21; + } + else if(priv->phy == PHY_B) + { + if((serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x22)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + + /* Checking Whether SIOB serializer I2C Reassignment is Already Done*/ + serdes_read_16b_reg(client, SER2_ADDR, 0x0000, &slave_addr); + if(slave_addr == SER2_ADDR << 1) + { + dev_info(&client->dev,"I2C translate detected.. Skip i2c translate... \n"); + goto skip_translate; + } + if((serdes_write_16b_reg(client, SER1_ADDR, 0x0010, 0x21)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + /* Enabling Only LINKA */ + serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x21); + msleep(100); + return -EIO; + } + msleep(100); + if((serdes_read_16b_reg(client, SER1_ADDR, 0x0000, &slave_addr)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + if(SER1_ADDR != (slave_addr>>1)){ + /* Enabling Only LINKA */ + serdes_write_16b_reg(client, priv->des_addr, 0x0010, 0x21); + msleep(100); + debug_printk("serializer slave address read is=%x\n",slave_addr>>1); + dev_err(&client->dev," No serializer found on SIOB\n"); + dev_err(&client->dev," Exiting probe\n"); + return -ENODEV; + } + + /*I2C Reassignement for SIOB port Serializer*/ + if((serdes_write_16b_reg(client, SER1_ADDR, 0x0000, SER2_ADDR<<1)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + +skip_translate: + dev_info(&client->dev,"SIOB Port I2C Reassignment successful\n"); + priv->ser_addr = SER2_ADDR; + msleep(100); + + /*Change GMSL2 Packet header*/ + if(serdes_parse_regdata(client, SER2_PKT_HEADER_CHANGE, + ARRAY_SIZE(SER2_PKT_HEADER_CHANGE), + priv->ser_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure SIOA Serializer" + "I2C translation\n",__func__); + return -EIO; + } + + /* SIOB I2C Translation */ + if(serdes_parse_regdata(client, SER2_I2C_CONF, ARRAY_SIZE(SER2_I2C_CONF), + priv->ser_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure SIOA Serializer" + "I2C translation\n",__func__); + return -EIO; + } + + msleep(100); + + /*Set Boot pin low*/ + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02CD, 0x40)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + debug_printk("SIOB Port I2C translated successfully\n"); + /*Trigger Pin mapping*/ + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02C7, 0xC4)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02C9, 0x07)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + /* Updating Serializer availabilty */ + if (ser_status == 0x21) + ser_status = 0x23; + else + ser_status = 0x22; + } + else{ + dev_err(&client->dev,"Device tree SIOA ports Parse Unsuccessful\n"); + return -EINVAL; + } + return 0; +} + +static s32 serdes_parse_regdata(struct i2c_client *client, SERDES_PARSE * regdata, + u32 reg_cnt,u8 serdes_id) +{ + int i = 0; + + for (i = 0; i < reg_cnt; i++) { + if (regdata[i].reg == 0xFFFF) { + mdelay(100); + continue; + } + + if ((serdes_write_16b_reg(client, serdes_id, regdata[i].reg, regdata[i].val)) < + 0) { + dev_err(&client->dev, "%s(%d): Failed \n", + __func__, __LINE__); + return -EIO; + } + + } + + return 0; +} +#ifdef GPIO_DEBUG +static void toggle_gpio(unsigned int gpio, int val) +{ + if (gpio_cansleep(gpio)){ + gpio_direction_output(gpio,val); + gpio_set_value_cansleep(gpio, val); + } else{ + gpio_direction_output(gpio,val); + gpio_set_value(gpio, val); + } +} +#endif +unsigned char errorcheck(char *data, unsigned int len) +{ + unsigned int i = 0; + unsigned char crc = 0x00; + + for (i = 0; i < len; i++) { + crc ^= data[i]; + } + + return crc; +} + +static int mcu_jump_bload(struct i2c_client *client) +{ + uint32_t payload_len = 0; + int err = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + /*lock semaphore */ + mutex_lock(&g_i2c_mutex); + /* First Txn Payload length = 0 */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_FW_UPDT; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + err = cam_write(client, mc_data, TX_LEN_PKT); + if (err !=0 ) { + dev_err(&client->dev, " %s(%d) Error - %d \n", + __func__, __LINE__, err); + goto exit; + } + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_FW_UPDT; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev, " %s(%d) Error - %d \n", + __func__, __LINE__, err); + goto exit; + } + +exit: + /* unlock semaphore */ + mutex_unlock(&g_i2c_mutex); + return err; + +} + +static int mcu_stream_config(struct i2c_client *client, uint32_t format, + int mode, int frate_index) +{ + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + + uint32_t payload_len = 0; + + uint16_t cmd_status = 0, index = 0xFFFF; + uint8_t retcode = 0, cmd_id = 0; + int loop = 0, ret = 0, err = 0, retry = 1000; + uint8_t mc_data[512], mc_ret_data[512]; + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + for (loop = 0;(&priv->streamdb[loop]) != NULL; loop++) { + if (priv->streamdb[loop] == mode) { + index = loop + frate_index; + break; + } + } + + debug_printk(" Index = 0x%04x , format = 0x%08x, width = %hu," + " height = %hu, frate num = %hu \n", index, format, + priv->mcu_cam_frmfmt[mode].size.width, + priv->mcu_cam_frmfmt[mode].size.height, + priv->mcu_cam_frmfmt[mode].framerates[frate_index]); + + if (index == 0xFFFF) { + ret = -EINVAL; + goto exit; + } + + if(priv->prev_index == index) { + debug_printk("Skipping Previous mode set ... \n"); + ret = 0; + goto exit; + } + +issue_cmd: + /* First Txn Payload length = 0 */ + payload_len = 14; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_CONFIG; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_CONFIG; + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + + /* Format Fourcc - currently only UYVY */ + mc_data[4] = format >> 24; + mc_data[5] = format >> 16; + mc_data[6] = format >> 8; + mc_data[7] = format & 0xFF; + + /* width */ + mc_data[8] = priv->mcu_cam_frmfmt[mode].size.width >> 8; + mc_data[9] = priv->mcu_cam_frmfmt[mode].size.width & 0xFF; + + /* height */ + mc_data[10] = priv->mcu_cam_frmfmt[mode].size.height >> 8; + mc_data[11] = priv->mcu_cam_frmfmt[mode].size.height & 0xFF; + + /* frame rate num */ + mc_data[12] = priv->mcu_cam_frmfmt[mode].framerates[frate_index] >> 8; + mc_data[13] = priv->mcu_cam_frmfmt[mode].framerates[frate_index] & 0xFF; + + /* frame rate denom */ + mc_data[14] = 0x00; + mc_data[15] = 0x01; + + mc_data[16] = errorcheck(&mc_data[2], 14); + err = cam_write(client, mc_data, 17); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + while (--retry > 0) { + cmd_id = CMD_ID_STREAM_CONFIG; + if (mcu_get_cmd_status + (client, &cmd_id, &cmd_status, &retcode) < 0) { + dev_err(&client->dev, + " %s(%d) MCU GET CMD Status Error : loop : %d \n", + __func__, __LINE__, loop); + ret = -EIO; + goto exit; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + (retcode == ERRCODE_SUCCESS)) { + ret = 0; + goto exit; + } + + if(retcode == ERRCODE_AGAIN) { + /* Issue Command Again if Set */ + retry = 1000; + goto issue_cmd; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_PENDING))) { + dev_err(&client->dev, + "(%s) %d Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + ret = -EIO; + goto exit; + } + + /* Delay after retry */ + mdelay(10); + } + + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -ETIMEDOUT; + +exit: + if(!ret) + priv->prev_index = index; + + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; +} + +static int mcu_get_ctrl(struct i2c_client *client, uint32_t arg_ctrl_id, + uint8_t * ctrl_type, int32_t * curr_val) +{ + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + + uint32_t payload_len = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0; + uint16_t index = 0xFFFF; + int loop = 0, ret = 0, err = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + uint32_t ctrl_id = 0; + + dev_err(&client->dev," %s(%d)\n", __func__,__LINE__); + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + + ctrl_id = arg_ctrl_id; + + /* Read the Ctrl Value from Micro controller */ + + for (loop = 0; loop < priv->num_ctrls; loop++) { + if (priv->ctrldb[loop] == ctrl_id) { + index = loop;//priv->mcu_ctrl_info[loop].mcu_ctrl_index; + break; + } + } + + if (index == 0xFFFF) { + ret = -EINVAL; + goto exit; + } + + if ( + priv->mcu_ctrl_info[loop].ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags & + V4L2_CTRL_FLAG_WRITE_ONLY + ) { + ret = -EACCES; + goto exit; + } + + /* First Txn Payload length = 2 */ + payload_len = 2; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL; + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + err = cam_write(client, mc_data, 5); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -1; + goto exit; + } + + if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) { + ret = -EIO; + goto exit; + } + + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE; + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = + errorcheck(&mc_ret_data[2], payload_len - HEADER_FOOTER_SIZE); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EINVAL; + goto exit; + } + + /* Ctrl type starts from index 6 */ + + *ctrl_type = mc_ret_data[6]; + + switch (*ctrl_type) { + case CTRL_STANDARD: + *curr_val = + mc_ret_data[7] << 24 | mc_ret_data[8] << 16 | mc_ret_data[9] + << 8 | mc_ret_data[10]; + break; + + case CTRL_EXTENDED: + /* Not Implemented */ + break; + } + +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; +} + +static int mcu_set_ctrl(struct i2c_client *client, uint32_t arg_ctrl_id, + uint8_t ctrl_type, int32_t curr_val) +{ + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + uint8_t mc_data[512], mc_ret_data[512]; + + uint32_t payload_len = 0; + + uint16_t cmd_status = 0, index = 0xFFFF; + uint8_t retcode = 0, cmd_id = 0; + int loop = 0, ret = 0, err = 0, retry = 1000; + uint32_t ctrl_id = 0; + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + + ctrl_id = arg_ctrl_id; + + /* call ISP Ctrl config command */ + + for (loop = 0; loop < priv->num_ctrls; loop++) { + if (priv->ctrldb[loop] == ctrl_id) { + index = loop; + break; + } + } + + if (index == 0xFFFF) { + ret = -EINVAL; + goto exit; + } + + /* First Txn Payload length = 0 */ + payload_len = 11; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_SET_CTRL; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + /* Second Txn */ + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_SET_CTRL; + + /* Index */ + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + + /* Control ID */ + mc_data[4] = ctrl_id >> 24; + mc_data[5] = ctrl_id >> 16; + mc_data[6] = ctrl_id >> 8; + mc_data[7] = ctrl_id & 0xFF; + + /* Ctrl Type */ + mc_data[8] = ctrl_type; + + /* Ctrl Value */ + mc_data[9] = curr_val >> 24; + mc_data[10] = curr_val >> 16; + mc_data[11] = curr_val >> 8; + mc_data[12] = curr_val & 0xFF; + + /* CRC */ + mc_data[13] = errorcheck(&mc_data[2], 11); + + err = cam_write(client, mc_data, 14); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + while (retry-- > 0) { + cmd_id = CMD_ID_SET_CTRL; + if (mcu_get_cmd_status + (client, &cmd_id, &cmd_status, &retcode) < 0) { + dev_err(&client->dev," %s(%d) Error \n", + __func__, __LINE__); + ret = -EINVAL; + goto exit; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + (retcode == ERRCODE_SUCCESS)) { + ret = 0; + goto exit; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_PENDING))) { + pr_err + ("(%s) %d ISP Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + ret = -EIO; + goto exit; + } + msleep(10); + } + if(retry <= 0) + { + pr_err + ("(%s) %d Error setting control = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + ret = -EIO; + goto exit; + + } +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; +} + +static int mcu_list_fmts(struct i2c_client *client, ISP_STREAM_INFO *stream_info, int *frm_fmt_size,struct cam *priv) +{ + uint32_t payload_len = 0, err = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0, skip = 0; + uint16_t index = 0, mode = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + int loop = 0, num_frates = 0, ret = 0; + + /* Stream Info Variables */ + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + /* List all formats from MCU and append to mcu_cam_frmfmt array */ + for (index = 0;; index++) { + /* First Txn Payload length = 0 */ + payload_len = 2; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_STREAM_INFO; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_STREAM_INFO; + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + err = cam_write(client, mc_data, 5); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + ret = -EIO; + goto exit; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + pr_err + (" %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) { + if(stream_info == NULL) { + *frm_fmt_size = index; + } else { + *frm_fmt_size = mode; + } + break; + } + + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + + HEADER_FOOTER_SIZE; + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + pr_err + (" %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + ret = -1; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = + errorcheck(&mc_ret_data[2], + payload_len - HEADER_FOOTER_SIZE); + if (orig_crc != calc_crc) { + pr_err + (" %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + pr_err + (" %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + if(stream_info != NULL) { + /* check if any other format than UYVY is queried - do not append in array */ + stream_info->fmt_fourcc = + mc_ret_data[2] << 24 | mc_ret_data[3] << 16 | mc_ret_data[4] + << 8 | mc_ret_data[5]; + stream_info->width = mc_ret_data[6] << 8 | mc_ret_data[7]; + stream_info->height = mc_ret_data[8] << 8 | mc_ret_data[9]; + stream_info->frame_rate_type = mc_ret_data[10]; + + switch (stream_info->frame_rate_type) { + case FRAME_RATE_DISCRETE: + stream_info->frame_rate.disc.frame_rate_num = + mc_ret_data[11] << 8 | mc_ret_data[12]; + + stream_info->frame_rate.disc.frame_rate_denom = + mc_ret_data[13] << 8 | mc_ret_data[14]; + + break; + + case FRAME_RATE_CONTINOUS: + debug_printk + (" The Stream format at index 0x%04x has FRAME_RATE_CONTINOUS," + "which is unsupported !! \n", index); + +#if 0 + stream_info.frame_rate.cont.frame_rate_min_num = + mc_ret_data[11] << 8 | mc_ret_data[12]; + stream_info.frame_rate.cont.frame_rate_min_denom = + mc_ret_data[13] << 8 | mc_ret_data[14]; + + stream_info.frame_rate.cont.frame_rate_max_num = + mc_ret_data[15] << 8 | mc_ret_data[16]; + stream_info.frame_rate.cont.frame_rate_max_denom = + mc_ret_data[17] << 8 | mc_ret_data[18]; + + stream_info.frame_rate.cont.frame_rate_step_num = + mc_ret_data[19] << 8 | mc_ret_data[20]; + stream_info.frame_rate.cont.frame_rate_step_denom = + mc_ret_data[21] << 8 | mc_ret_data[22]; + break; +#endif + continue; + + } + + switch (stream_info->fmt_fourcc) { + case V4L2_PIX_FMT_UYVY: + /* cam_codes is already populated with V4L2_MBUS_FMT_UYVY8_1X16 */ + /* check if width and height are already in array - update frame rate only */ + for (loop = 0; loop < (mode); loop++) { + if ((priv->mcu_cam_frmfmt[loop].size.width == + stream_info->width) + && (priv->mcu_cam_frmfmt[loop].size.height == + stream_info->height)) { + + num_frates = + priv->mcu_cam_frmfmt + [loop].num_framerates; + *((int *)(priv->mcu_cam_frmfmt[loop].framerates) + num_frates) + = (int)(stream_info->frame_rate. + disc.frame_rate_num / + stream_info->frame_rate. + disc.frame_rate_denom); + + priv->mcu_cam_frmfmt + [loop].num_framerates++; + + priv->streamdb[index] = loop; + skip = 1; + break; + } + } + + if (skip) { + skip = 0; + continue; + } + + /* Add Width, Height, Frame Rate array, Mode into mcu_cam_frmfmt array */ + priv->mcu_cam_frmfmt[mode].size.width = stream_info->width; + priv->mcu_cam_frmfmt[mode].size.height = + stream_info->height; + num_frates = priv->mcu_cam_frmfmt[mode].num_framerates; + + *((int *)(priv->mcu_cam_frmfmt[mode].framerates) + num_frates) = + (int)(stream_info->frame_rate.disc.frame_rate_num / + stream_info->frame_rate.disc.frame_rate_denom); + + priv->mcu_cam_frmfmt[mode].num_framerates++; + + priv->mcu_cam_frmfmt[mode].mode = mode; + priv->streamdb[index] = mode; + mode++; + break; + + default: + debug_printk + (" The Stream format at index 0x%04x has format 0x%08x ," + "which is unsupported !! \n", index, + stream_info->fmt_fourcc); + } + } + } + +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; +} + +static int mcu_get_ctrl_ui(struct i2c_client *client, + ISP_CTRL_INFO * mcu_ui_info, int index) +{ + uint32_t payload_len = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0; + int ret = 0, i = 0, err = 0; + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + uint8_t mc_data[1024], mc_ret_data[1024]; + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + + /* First Txn Payload length = 0 */ + payload_len = 2; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL_UI_INFO; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL_UI_INFO; + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + err = cam_write(client, mc_data, 5); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE; + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EINVAL; + goto exit; + } + + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = + errorcheck(&mc_ret_data[2], payload_len - HEADER_FOOTER_SIZE); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + strncpy((char *)mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_name, &mc_ret_data[2],MAX_CTRL_UI_STRING_LEN); + + mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_type = mc_ret_data[34]; + mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags = mc_ret_data[35] << 8 | + mc_ret_data[36]; + + if (mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_type == V4L2_CTRL_TYPE_MENU) { + mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem = mc_ret_data[37]; + + mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu = + devm_kzalloc(&client->dev,((mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem +1) * sizeof(char *)), GFP_KERNEL); + for (i = 0; i < mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem; i++) { + mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i] = + devm_kzalloc(&client->dev,MAX_CTRL_UI_STRING_LEN, GFP_KERNEL); + strncpy((char *)mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i], + &mc_ret_data[38 +(i *MAX_CTRL_UI_STRING_LEN)], MAX_CTRL_UI_STRING_LEN); + + debug_printk(" Menu Element %d : %s \n", + i, mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i]); + } + + mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i] = NULL; + } + +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; + +} + +static int mcu_mipi_configuration(struct i2c_client *client, struct cam *priv, u8 cmd_id) +{ + int ret = 0, err, retry = 1000; + uint16_t payload_data; + uint32_t payload_len = 0; + uint16_t cmd_status = 0; + uint8_t retcode = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + + payload_len = 2; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = cmd_id; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + /* Second Txn */ + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = cmd_id; + + switch(cmd_id) { + case CMD_ID_LANE_CONFIG: + /*Lane configuration */ + payload_data = priv->mipi_lane_config == 4 ? NUM_LANES_4 : NUM_LANES_2; + mc_data[2] = payload_data >> 8; + mc_data[3] = payload_data & 0xFF; + break; + case CMD_ID_MIPI_CLK_CONFIG: + /* MIPI CLK Configuration */ + payload_data = priv->mipi_clk_config; + mc_data[2] = payload_data >> 8; + mc_data[3] = payload_data & 0xFF; + break; + default: + dev_err(&client->dev, "MCU MIPI CONF Error\n"); + err = -1; + goto exit; + } + + /* CRC */ + mc_data[4] = errorcheck(&mc_data[2], payload_len); + err = cam_write(client, mc_data, payload_len+3); + + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU Set Ctrl Error - %d \n", __func__, + __LINE__, err); + ret = -1; + goto exit; + } + + while (--retry > 0) { + msleep(20); + if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < + 0) { + dev_err(&client->dev," %s(%d) MCU Get CMD Status Error \n", __func__, + __LINE__); + ret = -1; + goto exit; + } + + if ((cmd_status == MCU_CMD_STATUS_ISP_UNINIT) && + (retcode == ERRCODE_SUCCESS)) { + ret = 0; + goto exit; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_ISP_UNINIT))) { + dev_err(&client->dev, + "(%s) %d MCU Get CMD Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + ret = -1; + goto exit; + } + } + err = -ETIMEDOUT; + + exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; +} + + +static int mcu_list_ctrls(struct i2c_client *client, + ISP_CTRL_INFO * mcu_cam_ctrl, struct cam *priv) +{ + uint32_t payload_len = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0; + uint16_t index = 0; + int ret = 0, err = 0,retry = 100; + uint8_t mc_data[1024], mc_ret_data[1024]; + + /* lock semaphore */ + mutex_lock(&priv->mcu_i2c_mutex); + + /* Array of Ctrl Info */ + while (retry-- > 0) { + /* First Txn Payload length = 0 */ + payload_len = 2; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL_INFO; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + err = cam_write(client, mc_data, TX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + continue; + } + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_CTRL_INFO; + mc_data[2] = index >> 8; + mc_data[3] = index & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + err = cam_write(client, mc_data, 5); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + continue; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + continue; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev, + " %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + continue; + } + + if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) { + priv->num_ctrls = index; + break; + } + + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + + HEADER_FOOTER_SIZE; + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev, + " %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + continue; + } + + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", + __func__, __LINE__, err); + continue; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = + errorcheck(&mc_ret_data[2], + payload_len - HEADER_FOOTER_SIZE); + if (orig_crc != calc_crc) { + dev_err(&client->dev, + " %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + continue; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev, + " %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + continue; + } + + if(mcu_cam_ctrl != NULL) { + + /* append ctrl info in array */ + mcu_cam_ctrl[index].ctrl_id = + mc_ret_data[2] << 24 | mc_ret_data[3] << 16 | mc_ret_data[4] + << 8 | mc_ret_data[5]; + mcu_cam_ctrl[index].ctrl_type = mc_ret_data[6]; + + switch (mcu_cam_ctrl[index].ctrl_type) { + case CTRL_STANDARD: + mcu_cam_ctrl[index].ctrl_data.std.ctrl_min = + mc_ret_data[7] << 24 | mc_ret_data[8] << 16 + | mc_ret_data[9] << 8 | mc_ret_data[10]; + + mcu_cam_ctrl[index].ctrl_data.std.ctrl_max = + mc_ret_data[11] << 24 | mc_ret_data[12] << + 16 | mc_ret_data[13] + << 8 | mc_ret_data[14]; + + mcu_cam_ctrl[index].ctrl_data.std.ctrl_def = + mc_ret_data[15] << 24 | mc_ret_data[16] << + 16 | mc_ret_data[17] + << 8 | mc_ret_data[18]; + + mcu_cam_ctrl[index].ctrl_data.std.ctrl_step = + mc_ret_data[19] << 24 | mc_ret_data[20] << + 16 | mc_ret_data[21] + << 8 | mc_ret_data[22]; + break; + + case CTRL_EXTENDED: + /* Not Implemented */ + break; + } + + priv->ctrldb[index] = mcu_cam_ctrl[index].ctrl_id; + } + index++; + if(retry == 0) { + ret = -EIO; + goto exit; + } + } + +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + + return ret; + +} + +static int mcu_get_fw_version(struct i2c_client *client, unsigned char *fw_version, unsigned char *txt_fw_version) +{ + uint32_t payload_len = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0; + int ret = 0, err = 0, loop, i=0, retry = 5; + unsigned long txt_fw_pos = ARRAY_SIZE(g_mcu_fw_buf)-VERSION_FILE_OFFSET; + uint8_t mc_data[512], mc_ret_data[512]; + + /* lock semaphore */ + mutex_lock(&g_i2c_mutex); + + /* Get Text Firmware version*/ + for(loop = txt_fw_pos; loop < (txt_fw_pos+64); loop=loop+2) { + *(txt_fw_version+i) = (mcu_bload_ascii2hex(g_mcu_fw_buf[loop]) << 4 | + mcu_bload_ascii2hex(g_mcu_fw_buf[loop+1])); + i++; + } + + while (retry-- > 0) { + /* Query firmware version from MCU */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_VERSION; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + err = cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_VERSION; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU CMD ID Write PKT fw Version Error - %d \n", __func__, + __LINE__, ret); + ret = -EIO; + continue; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU CMD ID Read PKT fw Version Error - %d \n", __func__, + __LINE__, ret); + ret = -EIO; + continue; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) MCU CMD ID fw Version Error CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + continue; + } + + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) MCU CMD ID fw Errcode - 0x%02x \n", __func__, + __LINE__, errcode); + ret = -EIO; + continue; + } + + /* Read the actual version from MCU*/ + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE; + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU fw CMD ID Read Version Error - %d \n", __func__, + __LINE__, ret); + ret = -EIO; + continue; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = errorcheck(&mc_ret_data[2], 32); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) MCU fw CMD ID Version CRC ERROR 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + continue; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) MCU fw CMD ID Read Payload Error - 0x%02x \n", __func__, + __LINE__, errcode); + ret = -EIO; + continue; + } + if(ret == ERRCODE_SUCCESS) + break; + } + + if (retry < 0 && ret != ERRCODE_SUCCESS) { + pr_info(" %s with exit code = %d %d\n", __func__, ret,__LINE__); + goto exit; + } + + for (loop = 0 ; loop < VERSION_SIZE ; loop++ ) + *(fw_version+loop) = mc_ret_data[2+loop]; + + /* Check for forced/always update field in the text firmware version*/ + if(txt_fw_version[17] == '1') { + dev_err(&client->dev, "Forced Update Enabled - Firmware Version - (%.32s) \n", + fw_version); + ret = 2; + goto exit; + } + + for(i = 0; i < VERSION_SIZE; i++) { + if(txt_fw_version[i] != fw_version[i]) { + dev_dbg(&client->dev, "Previous Firmware Version - (%.32s)\n", fw_version); + dev_dbg(&client->dev, "Current Firmware Version - (%.32s)\n", txt_fw_version); + ret = 1; + goto exit; + } + } + + ret = ERRCODE_SUCCESS; +exit: + /* unlock semaphore */ + mutex_unlock(&g_i2c_mutex); + + return ret; +} + +static int mcu_get_sensor_id(struct i2c_client *client, uint16_t * sensor_id) +{ + uint32_t payload_len = 0; + uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0; + + int ret = 0, err = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + /* lock semaphore */ + mutex_lock(&g_i2c_mutex); + + /* Read the version info. from Micro controller */ + + /* First Txn Payload length = 0 */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_SENSOR_ID; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_SENSOR_ID; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + err = cam_read(client, mc_ret_data, RX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[4]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + errcode = mc_ret_data[5]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + payload_len = + ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE; + + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + ret = -EIO; + goto exit; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = errorcheck(&mc_ret_data[2], 2); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + ret = -EINVAL; + goto exit; + } + + /* Verify Errcode */ + errcode = mc_ret_data[payload_len - 1]; + if (errcode != ERRCODE_SUCCESS) { + dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n", + __func__, __LINE__, errcode); + ret = -EIO; + goto exit; + } + + *sensor_id = mc_ret_data[2] << 8 | mc_ret_data[3]; + +exit: + /* unlock semaphore */ + mutex_unlock(&g_i2c_mutex); + + return ret; +} + +static int mcu_get_cmd_status(struct i2c_client *client, + uint8_t * cmd_id, uint16_t * cmd_status, + uint8_t * ret_code) +{ + uint32_t payload_len = 0; + uint8_t orig_crc = 0, calc_crc = 0; + int err = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + /* No Semaphore in Get command Status */ + + /* First Txn Payload length = 0 */ + payload_len = 1; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_STATUS; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_GET_STATUS; + mc_data[2] = *cmd_id; + err = cam_write(client, mc_data, 3); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + return -EIO; + } + + payload_len = CMD_STATUS_MSG_LEN; + memset(mc_ret_data, 0x00, payload_len); + err = cam_read(client, mc_ret_data, payload_len); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + return -EIO; + } + + /* Verify CRC */ + orig_crc = mc_ret_data[payload_len - 2]; + calc_crc = errorcheck(&mc_ret_data[2], 3); + if (orig_crc != calc_crc) { + dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n", + __func__, __LINE__, orig_crc, calc_crc); + return -EINVAL; + } + + *cmd_id = mc_ret_data[2]; + *cmd_status = mc_ret_data[3] << 8 | mc_ret_data[4]; + *ret_code = mc_ret_data[payload_len - 1]; + + return 0; +} + +static int mcu_cam_stream_on(struct i2c_client *client) +{ + uint32_t payload_len = 0; + + uint16_t cmd_status = 0; + uint8_t retcode = 0, cmd_id = 0; + int retry = 5,status_retry=1000, err = 0; + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + uint8_t mc_data[512], mc_ret_data[512]; + + /*lock semaphore*/ + mutex_lock(&priv->mcu_i2c_mutex); + + while(retry-- > 0) { + /* First Txn Payload length = 0 */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_ON; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + err= cam_write(client, mc_data, TX_LEN_PKT); + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU Stream On Write Error - %d \n", __func__, + __LINE__, err); + continue; + } + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_STREAM_ON; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev," %s(%d) MCU Stream On Write Error - %d \n", __func__, + __LINE__, err); + continue; + } + + while (status_retry-- > 0) { + /* Some Sleep for init to process */ + yield(); + + cmd_id = CMD_ID_STREAM_ON; + if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < + 0) { + dev_err(&client->dev," %s(%d) MCU Get CMD Stream On Error \n", __func__, + __LINE__); + err = -1; + goto exit; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + (retcode == ERRCODE_SUCCESS)) { + debug_printk(" %s %d MCU Stream On Success !! \n", __func__, __LINE__); + err = 0; + goto exit; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_PENDING))) { + dev_err(&client->dev, + "(%s) %d MCU Get CMD Stream On Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + err = -1; + goto exit; + } + mdelay(1); + } + if(retry == 0) + err = -1; + break; + } + msleep(10); +exit: + /* unlock semaphore */ + mutex_unlock(&priv->mcu_i2c_mutex); + return err; + +} + +static int mcu_isp_init(struct i2c_client *client) +{ + uint32_t payload_len = 0; + + uint16_t cmd_status = 0; + uint8_t retcode = 0, cmd_id = 0; + int retry = 1000, err = 0; + uint8_t mc_data[512], mc_ret_data[512]; + + pr_info("mcu_isp_init\n"); + /* check current status - if initialized, no need for Init */ + cmd_id = CMD_ID_INIT_CAM; + if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < 0) { + dev_err(&client->dev," %s(%d) Error \n", __func__, __LINE__); + return -EIO; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + (retcode == ERRCODE_SUCCESS)) { + dev_err(&client->dev," Already Initialized !! \n"); + return 0; + } + + /* call ISP init command */ + + /* First Txn Payload length = 0 */ + payload_len = 0; + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_INIT_CAM; + mc_data[2] = payload_len >> 8; + mc_data[3] = payload_len & 0xFF; + mc_data[4] = errorcheck(&mc_data[2], 2); + + cam_write(client, mc_data, TX_LEN_PKT); + + mc_data[0] = CMD_SIGNATURE; + mc_data[1] = CMD_ID_INIT_CAM; + err = cam_write(client, mc_data, 2); + if (err != 0) { + dev_err(&client->dev," %s(%d) Error - %d \n", __func__, + __LINE__, err); + return -EIO; + } + + while (--retry > 0) { + /* Some Sleep for init to process */ + msleep(10); + + cmd_id = CMD_ID_INIT_CAM; + if (mcu_get_cmd_status + (client, &cmd_id, &cmd_status, &retcode) < 0) { + dev_err(&client->dev," %s(%d) Error \n", + __func__, __LINE__); + return -EIO; + } + + if ((cmd_status == MCU_CMD_STATUS_SUCCESS) && + ((retcode == ERRCODE_SUCCESS) || (retcode == ERRCODE_ALREADY))) { + dev_err(&client->dev,"ISP Initialized !! \n"); + return 0; + } + + if ((retcode != ERRCODE_BUSY) && + ((cmd_status != MCU_CMD_STATUS_PENDING))) { + dev_err(&client->dev, + "(%s) %d Init Error STATUS = 0x%04x RET = 0x%02x\n", + __func__, __LINE__, cmd_status, retcode); + return -EIO; + } + } + dev_err(&client->dev,"ETIMEDOUT Error\n"); + return -ETIMEDOUT; +} + +unsigned short int mcu_bload_calc_crc16(unsigned char *buf, int len) +{ + unsigned short int crc = 0; + int i = 0; + + if (!buf || !(buf + len)) + return 0; + + for (i = 0; i < len; i++) { + crc ^= buf[i]; + } + + return crc; +} + +unsigned char mcu_bload_inv_checksum(unsigned char *buf, int len) +{ + unsigned int checksum = 0x00; + int i = 0; + + if (!buf || !(buf + len)) + return 0; + + for (i = 0; i < len; i++) { + checksum = (checksum + buf[i]); + } + + checksum &= (0xFF); + return (~(checksum) + 1); +} + +int mcu_bload_get_version(struct i2c_client *client) +{ + int ret = 0; + + /*----------------------------- GET VERSION -------------------- */ + + /* Write Get Version CMD */ + g_bload_buf[0] = BL_GET_VERSION; + g_bload_buf[1] = ~(BL_GET_VERSION); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != 'y') { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed\n"); + return -1; + } + + /* ---------------- GET VERSION END ------------------- */ + + return 0; +} + +int mcu_bload_parse_send_cmd(struct i2c_client *client, + unsigned char *bytearray, int rec_len) +{ + IHEX_RECORD *ihex_rec = NULL; + unsigned char checksum = 0, calc_checksum = 0; + int i = 0, ret = 0; + + if (!bytearray) + return -1; + + ihex_rec = (IHEX_RECORD *) bytearray; + ihex_rec->addr = htons(ihex_rec->addr); + + checksum = bytearray[rec_len - 1]; + + calc_checksum = mcu_bload_inv_checksum(bytearray, rec_len - 1); + if (checksum != calc_checksum) { + dev_err(&client->dev," Invalid Checksum 0x%02x != 0x%02x !! \n", + checksum, calc_checksum); + return -1; + } + + if ((ihex_rec->rectype == REC_TYPE_ELA) + && (ihex_rec->addr == 0x0000) + && (ihex_rec->datasize = 0x02)) { + /* Upper 32-bit configuration */ + g_bload_flashaddr = (ihex_rec->recdata[0] << + 24) | (ihex_rec->recdata[1] + << 16); + + debug_printk("Updated Flash Addr = 0x%08x \n", + g_bload_flashaddr); + + } else if (ihex_rec->rectype == REC_TYPE_DATA) { + /* Flash Data into Flashaddr */ + + g_bload_flashaddr = + (g_bload_flashaddr & 0xFFFF0000) | (ihex_rec->addr); + g_bload_crc16 ^= + mcu_bload_calc_crc16(ihex_rec->recdata, ihex_rec->datasize); + + /* Write Erase Pages CMD */ + g_bload_buf[0] = BL_WRITE_MEM_NS; + g_bload_buf[1] = ~(BL_WRITE_MEM_NS); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + g_bload_buf[0] = (g_bload_flashaddr & 0xFF000000) >> 24; + g_bload_buf[1] = (g_bload_flashaddr & 0x00FF0000) >> 16; + g_bload_buf[2] = (g_bload_flashaddr & 0x0000FF00) >> 8; + g_bload_buf[3] = (g_bload_flashaddr & 0x000000FF); + g_bload_buf[4] = + g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^ + g_bload_buf[3]; + + ret = cam_write(client, g_bload_buf, 5); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + g_bload_buf[0] = ihex_rec->datasize - 1; + checksum = g_bload_buf[0]; + for (i = 0; i < ihex_rec->datasize; i++) { + g_bload_buf[i + 1] = ihex_rec->recdata[i]; + checksum ^= g_bload_buf[i + 1]; + } + + g_bload_buf[i + 1] = checksum; + + ret = cam_write(client, g_bload_buf, i + 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + +poll_busy: + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] == RESP_BUSY) + goto poll_busy; + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + } else if (ihex_rec->rectype == REC_TYPE_SLA) { + /* Update Instruction pointer to this address */ + + } else if (ihex_rec->rectype == REC_TYPE_EOF) { + /* End of File - Issue I2C Go Command */ + return 0; + } else { + + /* Unhandled Type */ + dev_err(&client->dev,"Unhandled Command Type \n"); + return -1; + } + + return 0; +} + +int mcu_bload_go(struct i2c_client *client) +{ + int ret = 0; + + g_bload_buf[0] = BL_GO; + g_bload_buf[1] = ~(BL_GO); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Failed Read 1 \n"); + return -1; + } + + /* Start Address */ + g_bload_buf[0] = (FLASH_START_ADDRESS & 0xFF000000) >> 24; + g_bload_buf[1] = (FLASH_START_ADDRESS & 0x00FF0000) >> 16; + g_bload_buf[2] = (FLASH_START_ADDRESS & 0x0000FF00) >> 8; + g_bload_buf[3] = (FLASH_START_ADDRESS & 0x000000FF); + g_bload_buf[4] = + g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^ g_bload_buf[3]; + + ret = cam_write(client, g_bload_buf, 5); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Failed Read 1 \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + return 0; +} + +int mcu_bload_update_fw(struct i2c_client *client) +{ + /* exclude NULL character at end of string */ + unsigned long hex_file_size = ARRAY_SIZE(g_mcu_fw_buf) - 1; + unsigned char wbuf[MAX_BUF_LEN]; + int i = 0, recindex = 0, ret = 0; + + for (i = 0; i < hex_file_size; i++) { + if ((recindex == 0) && (g_mcu_fw_buf[i] == ':')) { + /* debug_printk("Start of a Record \n"); */ + } else if (g_mcu_fw_buf[i] == CR) { + /* No Implementation */ + } else if (g_mcu_fw_buf[i] == LF) { + if (recindex == 0) { + /* Parsing Complete */ + break; + } + + /* Analyze Packet and Send Commands */ + ret = mcu_bload_parse_send_cmd(client, wbuf, recindex); + if (ret < 0) { + dev_err(&client->dev,"Error in Processing Commands \n"); + break; + } + + recindex = 0; + + } else { + /* Parse Rec Data */ + if ((ret = mcu_bload_ascii2hex(g_mcu_fw_buf[i])) < 0) { + dev_err(&client->dev, + "Invalid Character - 0x%02x !! \n", + g_mcu_fw_buf[i]); + break; + } + + wbuf[recindex] = (0xF0 & (ret << 4)); + i++; + + if ((ret = mcu_bload_ascii2hex(g_mcu_fw_buf[i])) < 0) { + dev_err(&client->dev, + "Invalid Character - 0x%02x !!!! \n", + g_mcu_fw_buf[i]); + break; + } + + wbuf[recindex] |= (0x0F & ret); + recindex++; + } + } + + debug_printk("Program FLASH Success !! - CRC = 0x%04x \n", + g_bload_crc16); + + /* ------------ PROGRAM FLASH END ----------------------- */ + + return ret; +} + +int mcu_bload_erase_flash(struct i2c_client *client) +{ + unsigned short int pagenum = 0x0000; + int ret = 0, i = 0, checksum = 0; + + /* --------------- ERASE FLASH --------------------- */ + + for (i = 0; i < NUM_ERASE_CYCLES; i++) { + + checksum = 0x00; + /* Write Erase Pages CMD */ + g_bload_buf[0] = BL_ERASE_MEM_NS; + g_bload_buf[1] = ~(BL_ERASE_MEM_NS); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + g_bload_buf[0] = (MAX_PAGES - 1) >> 8; + g_bload_buf[1] = (MAX_PAGES - 1) & 0xFF; + g_bload_buf[2] = g_bload_buf[0] ^ g_bload_buf[1]; + + ret = cam_write(client, g_bload_buf, 3); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + for (pagenum = 0; pagenum < MAX_PAGES; pagenum++) { + g_bload_buf[(2 * pagenum)] = + (pagenum + (i * MAX_PAGES)) >> 8; + g_bload_buf[(2 * pagenum) + 1] = + (pagenum + (i * MAX_PAGES)) & 0xFF; + checksum = + checksum ^ g_bload_buf[(2 * pagenum)] ^ + g_bload_buf[(2 * pagenum) + 1]; + } + g_bload_buf[2 * MAX_PAGES] = checksum; + + ret = cam_write(client, g_bload_buf, (2 * MAX_PAGES) + 1); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + +poll_busy: + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] == RESP_BUSY) + goto poll_busy; + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + debug_printk(" ERASE Sector %d success !! \n", i + 1); + } + + /* ------------ ERASE FLASH END ----------------------- */ + + return 0; +} + +int mcu_bload_read(struct i2c_client *client, + unsigned int g_bload_flashaddr, char *bytearray, + unsigned int len) +{ + int ret = 0; + + g_bload_buf[0] = BL_READ_MEM; + g_bload_buf[1] = ~(BL_READ_MEM); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + g_bload_buf[0] = (g_bload_flashaddr & 0xFF000000) >> 24; + g_bload_buf[1] = (g_bload_flashaddr & 0x00FF0000) >> 16; + g_bload_buf[2] = (g_bload_flashaddr & 0x0000FF00) >> 8; + g_bload_buf[3] = (g_bload_flashaddr & 0x000000FF); + g_bload_buf[4] = + g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^ g_bload_buf[3]; + + ret = cam_write(client, g_bload_buf, 5); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + g_bload_buf[0] = len - 1; + g_bload_buf[1] = ~(len - 1); + + ret = cam_write(client, g_bload_buf, 2); + if (ret < 0) { + dev_err(&client->dev,"Write Failed \n"); + return -1; + } + + /* Wait for ACK or NACK */ + ret = cam_read(client, g_bload_buf, 1); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + if (g_bload_buf[0] != RESP_ACK) { + /* NACK Received */ + dev_err(&client->dev," NACK Received... exiting.. \n"); + return -1; + } + + ret = cam_read(client, bytearray, len); + if (ret < 0) { + dev_err(&client->dev,"Read Failed \n"); + return -1; + } + + return 0; +} + +int mcu_bload_verify_flash(struct i2c_client *client, + unsigned short int orig_crc) +{ + char bytearray[FLASH_READ_LEN]; + unsigned short int calc_crc = 0; + unsigned int flash_addr = FLASH_START_ADDRESS, i = 0; + + while ((i + FLASH_READ_LEN) <= FLASH_SIZE) { + memset(bytearray, 0x0, FLASH_READ_LEN); + + if (mcu_bload_read + (client, flash_addr + i, bytearray, FLASH_READ_LEN) < 0) { + dev_err(&client->dev," i2c_bload_read FAIL !! \n"); + return -1; + } + + calc_crc ^= mcu_bload_calc_crc16(bytearray, FLASH_READ_LEN); + i += FLASH_READ_LEN; + } + + if ((FLASH_SIZE - i) > 0) { + memset(bytearray, 0x0, FLASH_READ_LEN); + + if (mcu_bload_read + (client, flash_addr + i, bytearray, (FLASH_SIZE - i)) + < 0) { + dev_err(&client->dev," i2c_bload_read FAIL !! \n"); + return -1; + } + + calc_crc ^= mcu_bload_calc_crc16(bytearray, FLASH_READ_LEN); + } + + if (orig_crc != calc_crc) { + dev_err(&client->dev," CRC verification fail !! 0x%04x != 0x%04x \n", + orig_crc, calc_crc); + return -1; + } + + debug_printk(" CRC Verification Success 0x%04x == 0x%04x \n", + orig_crc, calc_crc); + + return 0; +} + +static int mcu_fw_update(struct i2c_client *client, unsigned char *mcu_fw_version) +{ + int ret = 0; + g_bload_crc16 = 0; + + /* Read Firmware version from bootloader MCU */ + ret = mcu_bload_get_version(client); + if (ret < 0) { + dev_err(&client->dev," Error in Get Version \n"); + goto exit; + } + + debug_printk(" Get Version SUCCESS !! \n"); + + /* Erase firmware present in the MCU and flash new firmware*/ + ret = mcu_bload_erase_flash(client); + if (ret < 0) { + dev_err(&client->dev," Error in Erase Flash \n"); + goto exit; + } + + debug_printk("Erase Flash Success !! \n"); + + /* Read the firmware present in the text file */ + if ((ret = mcu_bload_update_fw(client)) < 0) { + dev_err(&client->dev," Write Flash FAIL !! \n"); + goto exit; + } + + /* Verify the checksum for the update firmware */ + if ((ret = mcu_bload_verify_flash(client, g_bload_crc16)) < 0) { + dev_err(&client->dev," verify_flash FAIL !! \n"); + goto exit; + } + + /* Reverting from bootloader mode */ + /* I2C GO Command */ + if ((ret = mcu_bload_go(client)) < 0) { + dev_err(&client->dev," i2c_bload_go FAIL !! \n"); + goto exit; + } + + if(mcu_fw_version) { + dev_dbg(&client->dev, "(%s) - Firmware Updated - (%.32s)\n", + __func__, mcu_fw_version); + } +exit: + return ret; +} + +int toggle_boot_pin(struct cam *priv, struct i2c_client *client) +{ + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CE, 0x20) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CD, 0x90) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CA, 0x99) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(1); + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CA, 0x40) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(1); + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CA, 0x99) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(1); + return 0; +} + +static int cam_probe(struct i2c_client *client, + const struct i2c_device_id *id) +{ + struct camera_common_data *common_data; + struct device_node *node = client->dev.of_node; + struct cam *priv; + + unsigned char fw_version[32] = {0}, txt_fw_version[32] = {0}; + int ret, frm_fmt_size = 0, loop, retry; + uint16_t sensor_id = 0; + uint8_t slave_addr=0; + uint32_t mipi_lane=0, mipi_clk = 0; + int reset_gpio = 0, boot_gpio = 0; + int err = 0, boot_gpio_toggle = 0; + + static int once = 0; + void *adr1; + void *adr2; + enum tegra_chipid chip_id; + const char *str; + + if (!IS_ENABLED(CONFIG_OF) || !node) + return -EINVAL; + + /* This code needs to be executed only in case of TX2 */ + chip_id= tegra_get_chipid(); + if(chip_id == JETSON_TX2){ + if (once == 0) { + adr1 = ioremap(PADCTL_AO_CFG2TMC_GPIO_SEN8_0, 4); + if (adr1 == NULL) { + debug_printk("error"); + goto skip; + } + adr2 = ioremap(PADCTL_AO_CFG2TMC_GPIO_SEN9_0, 4); + if (adr2 == NULL) { + debug_printk("error"); + iounmap(adr1); + goto skip; + } + + once++; + __raw_writel(0x0, adr1); + __raw_writel(0x0, adr2); + iounmap(adr1); + iounmap(adr2); + } + } + +skip: + + /* Single RESET & BOOT GPIO is connected to single MFP pin of deserializer. + So these GPIO's cannot control two serializers MFP pins simultaneously. + So these GPIO's can mapped and controlled for debugging purpose. + */ +#ifdef GPIO_DEBUG + reset_gpio = of_get_named_gpio(node, "reset-gpios", 0); + debug_printk("RESET = %x \n",reset_gpio); + if(reset_gpio < 0) { + dev_err(&client->dev, "Unable to toggle GPIO\n"); + return -EINVAL; + } + + boot_gpio = of_get_named_gpio(node, "boot-gpios", 0); + debug_printk("BOOT = %x \n",boot_gpio); + if(boot_gpio < 0) { + dev_err(&client->dev, "Unable to toggle GPIO\n"); + return -EINVAL; + } + + err = gpio_request(reset_gpio,"cam-reset"); + if (err < 0) { + dev_err(&client->dev,"%s[%d]:GPIO reset Fail, err:%d",__func__,__LINE__, err); + return -EINVAL; + } + + err = gpio_request(boot_gpio,"cam-boot"); + if (err < 0) { + dev_err(&client->dev,"%s[%d]:%dGPIO boot Fail\n",__func__,__LINE__,err); + return -EINVAL; + } + toggle_gpio(reset_gpio, 0); + msleep(1); + toggle_gpio(reset_gpio, 1); +#endif + common_data = + devm_kzalloc(&client->dev, + sizeof(struct camera_common_data), GFP_KERNEL); + if (!common_data) + return -ENOMEM; + + priv = + devm_kzalloc(&client->dev, + sizeof(struct cam) + + sizeof(struct v4l2_ctrl *) * AR0234_NUM_CONTROLS, + GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->pdata = cam_parse_dt(client); + if (!priv->pdata) { + dev_err(&client->dev, "unable to get platform data\n"); + return -EFAULT; + } + /*Identifying Deserializer SIO port for + I2C Address Reassignment and Translation + */ + err = of_property_read_string(node, "sio-port", &str); + if (!err) { + if (!strcmp(str, "A")){ + priv->phy = PHY_A; + debug_printk("Current SIO ports is %c\n",priv->phy); + /* RESET status if PHYA */ + ser_status = 0; + } + else{ + priv->phy = PHY_B; + debug_printk("Current SIO ports is %c\n",priv->phy); + } + } else { + dev_err(&client->dev,"No SIO port mentioned in device tree\n"); + return -EINVAL; + } + err = of_property_read_u32(node, "camera_mipi_lanes", &mipi_lane); + if (!err) { + debug_printk("Device No of MIPI lane configuration is %u\n",mipi_lane); + } else { + dev_err(&client->dev,"No of MIPI lanes not mentioned in device tree\n"); + return -EINVAL; + } + err = of_property_read_u32(node, "camera-mipi-clk", &mipi_clk); + printk("%s...clk:%d",__func__, mipi_clk); + if (err) { + dev_err(&client->dev, "camera mipi clk is missing or invalid\n"); + return err; + } + priv->des_addr = DES_ADDR; + priv->i2c_client = client; + priv->s_data = common_data; + priv->subdev = &common_data->subdev; + priv->subdev->dev = &client->dev; + priv->s_data->dev = &client->dev; + common_data->priv = (void *)priv; + priv->mipi_lane_config = mipi_lane; + priv->mipi_clk_config = mipi_clk; +#ifdef FRAMESYNC_ENABLE + priv->last_sync_mode = 1; +#endif + dev_info(&client->dev, "MIPI Clock = %d, MIPI Lanes = %d \n", priv->mipi_clk_config, priv->mipi_lane_config); + + err = cam_power_get(priv); + if (err) + return err; + + err = cam_power_on(common_data); + if (err) + return err; + + err = serdes_config_init(client, priv); + if(err < 0) + { + dev_err(&client->dev,"serdes_config_init_failed\n"); + return -EIO; + } + /* Toggeling MCU RESET */ + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CA, 0x40) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(10); + if(serdes_write_16b_reg(client, priv->ser_addr, 0x02CA, 0x99) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + + ret = mcu_get_fw_version(client, fw_version, txt_fw_version); + if (ret != 0) { + + if(ret > 0) { + if((err = mcu_jump_bload(client)) < 0) { + dev_err(&client->dev," Cannot go into bootloader mode\n"); + return -EIO; + } + msleep(1000); + } else { + dev_info(&client->dev,"Using Boot pin for firmware update\n"); + + retry = 10; + while(retry -- > 0) { + if(toggle_boot_pin(priv, client) < 0) { + msleep(100); + dev_info(&client->dev,"Retry Boot pin toggle \n"); + continue; + } + break; + } + if(retry <= 0) { + dev_err(&client->dev," Cannot go into bootloader mode\n"); + return -EIO; + } + + } + dev_err(&client->dev," Trying to Detect Bootloader mode\n"); + + for(loop = 0;loop < 10; loop++) { + err = mcu_bload_get_version(client); + if (err < 0) { + /* Trial and Error for 1 second (100ms * 10) */ + msleep(1000); + continue; + } else { + dev_err(&client->dev," Get Bload Version Success\n"); + break; + } + } + + if(loop == 10) { + dev_err(&client->dev, "Error updating firmware \n"); + return -EINVAL; + } + + for( loop = 0; loop < 10; loop++) { + err = mcu_fw_update(client, NULL); + if(err < 0) { + dev_err(&client->dev, "%s(%d) Error updating firmware... Retry.. \n\n", __func__, __LINE__); + + continue; + } else { + dev_err (&client->dev, "Firmware Updated Successfully\n"); + break; + } + + } + if( loop == 10) { + dev_err( &client->dev, "Error Updating Firmware\n"); + return -EFAULT; + } + + if((serdes_write_16b_reg(client, priv->ser_addr, 0x02CD, 0x40)) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n",__func__, __LINE__); + return -EIO; + } + + /* Allow FW Updated Driver to reboot */ + msleep(1000); + /*Maintaining GMSL1 firmware update compatability*/ + for(loop = 0;loop < 10; loop++) { + err = mcu_get_fw_version(client, fw_version, txt_fw_version); + if (err < 0) { + msleep(1000); + + /* See if it is a empty MCU */ + err = mcu_bload_get_version(client); + if (err < 0) { + dev_err(&client->dev," Get Bload Version Fail\n"); + } else { + dev_err(&client->dev," Get Bload Version Success\n"); + + /* Re-issue GO command to get into user mode */ + if (mcu_bload_go(client) < 0) { + dev_err(&client->dev," i2c_bload_go FAIL !! \n"); + } + msleep(1000); + } + + continue; + } else { + dev_err(&client->dev," Get FW Version Success\n"); + break; + } + } + if(loop == 10) { + dev_err(&client->dev, "Error updating firmware \n"); + return -EINVAL; + } + + debug_printk("Current Firmware Version - (%.32s).", + fw_version); + + } else { + /* Same firmware version in MCU and Text File */ + debug_printk("Current Firmware Version - (%.32s)",fw_version); + } + + mutex_init(&priv->mcu_i2c_mutex); + /* Configure MIPI Lanes of the Sensor */ + if(mcu_mipi_configuration(client, priv, CMD_ID_LANE_CONFIG) < 0) { + dev_err(&client->dev, "%s, mcu_mipi_configuration lane failure. \n", __func__); + return -EFAULT; + } + + if (mcu_mipi_configuration(client, priv, CMD_ID_MIPI_CLK_CONFIG) < 0) { + dev_err(&client->dev, "%s, mcu_mipi_configuration clk failure. \n", __func__); + return -EFAULT; + } + /* Query the number of controls from MCU*/ + if(mcu_list_ctrls(client, NULL, priv) < 0) { + dev_err(&client->dev, "%s, Failed to init controls \n", __func__); + return -EFAULT; + } + + /*Query the number for Formats available from MCU */ + if(mcu_list_fmts(client, NULL, &frm_fmt_size,priv) < 0) { + dev_err(&client->dev, "%s, Failed to init formats \n", __func__); + return -EFAULT; + } + + priv->mcu_ctrl_info = devm_kzalloc(&client->dev, sizeof(ISP_CTRL_INFO) * priv->num_ctrls, GFP_KERNEL); + if(!priv->mcu_ctrl_info) { + dev_err(&client->dev, "Unable to allocate memory \n"); + return -ENOMEM; + } + + priv->ctrldb = devm_kzalloc(&client->dev, sizeof(uint32_t) * priv->num_ctrls, GFP_KERNEL); + if(!priv->ctrldb) { + dev_err(&client->dev, "Unable to allocate memory \n"); + return -ENOMEM; + } + + priv->stream_info = devm_kzalloc(&client->dev, sizeof(ISP_STREAM_INFO) * (frm_fmt_size + 1), GFP_KERNEL); + + priv->streamdb = devm_kzalloc(&client->dev, sizeof(int) * (frm_fmt_size + 1), GFP_KERNEL); + if(!priv->streamdb) { + dev_err(&client->dev,"Unable to allocate memory \n"); + return -ENOMEM; + } + + priv->mcu_cam_frmfmt = devm_kzalloc(&client->dev, sizeof(struct camera_common_frmfmt) * (frm_fmt_size), GFP_KERNEL); + if(!priv->mcu_cam_frmfmt) { + dev_err(&client->dev, "Unable to allocate memory \n"); + return -ENOMEM; + } + + if (mcu_get_sensor_id(client, &sensor_id) < 0) { + dev_err(&client->dev, "Unable to get MCU Sensor ID \n"); + return -EFAULT; + } + dev_info(&client->dev,"Sensor ID = 0x%x\n",sensor_id); + + /* Issue retry for init ISP */ + retry = 10; + while(retry -- > 0) { + if (mcu_isp_init(client) < 0) { + dev_err(&client->dev, "Unable to INIT ISP, retry = %d \n", retry); + continue; + } else { + break; + } + } + + if(retry == 0) { + dev_err(&client->dev, "Unable to INIT ISP \n"); + return -EFAULT; + } + + /* Configuring SIOA Serializer */ + if(priv->phy == PHY_A) + { + if(serdes_parse_regdata(client, SER1_CONF, ARRAY_SIZE(SER1_CONF),priv->ser_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure SIOA Serializer\n",__func__); + return -EIO; + } + debug_printk("configuring SIOA serializer successful\n"); + } + + /* Configuring SIOB Serializer */ + if(priv->phy == PHY_B) + { + if(serdes_parse_regdata(client, SER2_CONF, ARRAY_SIZE(SER2_CONF),priv->ser_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure SIOB Serializer\n",__func__); + return -EIO; + } + debug_printk("configuring SIOB serializer successful\n"); + } + + /* Configuring Deserializer */ + if(serdes_parse_regdata(client, DSER_CONF, ARRAY_SIZE(DSER_CONF),priv->des_addr) < 0) { + dev_err(&client->dev, "%s: Failed to configure DESER Serializer\n",__func__); + return -EIO; + } + debug_printk("configuring Deserializer Successful\n"); + + for(loop = 0; loop < frm_fmt_size; loop++) { + priv->mcu_cam_frmfmt[loop].framerates = devm_kzalloc(&client->dev, sizeof(int) * MAX_NUM_FRATES, GFP_KERNEL); + if(!priv->mcu_cam_frmfmt[loop].framerates) { + dev_err(&client->dev, "Unable to allocate memory \n"); + return -ENOMEM; + } + } + + /* Enumerate Formats */ + if (mcu_list_fmts(client, priv->stream_info, &frm_fmt_size,priv) < 0) { + dev_err(&client->dev, "Unable to List Fmts \n"); + return -EFAULT; + } + + common_data->ops = NULL; + common_data->ctrl_handler = &priv->ctrl_handler; + common_data->frmfmt = priv->mcu_cam_frmfmt; + common_data->colorfmt = + camera_common_find_datafmt(AR0234_DEFAULT_DATAFMT); + common_data->power = &priv->power; + common_data->ctrls = priv->ctrls; + common_data->priv = (void *)priv; + common_data->numctrls = priv->num_ctrls; + common_data->numfmts = frm_fmt_size; + common_data->def_mode = AR0234_DEFAULT_MODE; + common_data->def_width = AR0234_DEFAULT_WIDTH; + common_data->def_height = AR0234_DEFAULT_HEIGHT; + common_data->fmt_width = common_data->def_width; + common_data->fmt_height = common_data->def_height; + common_data->def_clk_freq = 24000000; + + priv->i2c_client = client; + priv->s_data = common_data; + priv->subdev = &common_data->subdev; + priv->subdev->dev = &client->dev; + priv->s_data->dev = &client->dev; + priv->prev_index = 0xFFFE; + + err = camera_common_initialize(common_data, "ar0234"); + if (err) { + dev_err(&client->dev, "Failed to initialize ar0234.\n"); + return err; + } + + v4l2_i2c_subdev_init(priv->subdev, client, &cam_subdev_ops); + /* Enumerate Ctrls */ + err = cam_ctrls_init(priv, priv->mcu_ctrl_info); + if (err) + return err; + priv->subdev->internal_ops = &cam_subdev_internal_ops; + priv->subdev->flags |= + V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS; + /* + To unload the module driver module, + Set (struct v4l2_subdev *)priv->subdev->sd to NULL. + Refer tegracam_v4l2subdev_register() in tegracam_v4l2.c + */ + if (priv->subdev->owner == THIS_MODULE) { + common_data->owner = priv->subdev->owner; + priv->subdev->owner = NULL; + } else { + // It shouldn't come here in probe(); + ; + } + + +#if defined(CONFIG_MEDIA_CONTROLLER) + priv->pad.flags = MEDIA_PAD_FL_SOURCE; + priv->subdev->entity.ops = &cam_media_ops; + err = tegra_media_entity_init(&priv->subdev->entity, 1, &priv->pad, true, true); + if (err < 0) { + dev_err(&client->dev, "unable to init media entity\n"); + return err; + } +#endif + + err = v4l2_async_register_subdev(priv->subdev); + if (err) + return err; + /*Enabling LINKS based on Serializer Availablity*/ + dev_err(&client->dev," ser_status=%x\n",ser_status); + if(serdes_write_16b_reg(client, priv->des_addr, 0x0010, ser_status) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + +#ifdef FRAMESYNC_ENABLE + /*Initialisation And Calibration of PWM Chip */ + err = pca9685_init(client,30); + if(err){ + dev_err(&client->dev, "unable to init pca9685\n"); + return err; + } +#endif + + dev_info(&client->dev,"Detected AR0234 sensor\n"); + + return 0; +} + +#define FREE_SAFE(dev, ptr) \ + if(ptr) { \ + devm_kfree(dev, ptr); \ + } + +static int cam_remove(struct i2c_client *client) +{ + struct camera_common_data *s_data = to_camera_common_data(&client->dev); + struct cam *priv = (struct cam *)s_data->priv; + int loop = 0; + uint8_t ser_read; + if (!priv || !priv->pdata) + return -1; + + v4l2_async_unregister_subdev(priv->subdev); +#if defined(CONFIG_MEDIA_CONTROLLER) + media_entity_cleanup(&priv->subdev->entity); +#endif + + if(priv->phy == PHY_B){ + if(serdes_write_16b_reg(client, priv->ser_addr, 0x0000, SER1_ADDR<<1) < 0) + { + dev_err (&client->dev, "%s(%d): Failed\n", + __func__, __LINE__); + return -EIO; + } + msleep(100); + } + +#ifdef FRAMESYNC_ENABLE + calibration_exit(); +#endif + + v4l2_ctrl_handler_free(&priv->ctrl_handler); + cam_power_put(priv); + camera_common_remove_debugfs(s_data); + + mutex_destroy(&priv->mcu_i2c_mutex); + + /* Free up memory */ + for(loop = 0; loop < priv->mcu_ctrl_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem + ; loop++) { + FREE_SAFE(&client->dev, priv->mcu_ctrl_info->ctrl_ui_data.ctrl_menu_info.menu[loop]); + } + + FREE_SAFE(&client->dev, priv->mcu_ctrl_info->ctrl_ui_data.ctrl_menu_info.menu); + + FREE_SAFE(&client->dev, priv->mcu_ctrl_info); + + for(loop = 0; loop < s_data->numfmts; loop++ ) { + FREE_SAFE(&client->dev, (void *)priv->mcu_cam_frmfmt[loop].framerates); + } + + FREE_SAFE(&client->dev, priv->mcu_cam_frmfmt); + + FREE_SAFE(&client->dev, priv->ctrldb); + FREE_SAFE(&client->dev, priv->streamdb); + + FREE_SAFE(&client->dev, priv->stream_info); + FREE_SAFE(&client->dev, fw_version); + FREE_SAFE(&client->dev, priv->pdata); + FREE_SAFE(&client->dev, priv->s_data); + FREE_SAFE(&client->dev, priv); + return 0; +} + +static const struct i2c_device_id cam_id[] = { + {"ar0234", 0}, + {} +}; + +MODULE_DEVICE_TABLE(i2c, cam_id); + +static struct i2c_driver cam_i2c_driver = { + .driver = { + .name = "ar0234", + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(cam_of_match), + }, + .probe = cam_probe, + .remove = cam_remove, + .id_table = cam_id, +}; + +module_i2c_driver(cam_i2c_driver); + +MODULE_DESCRIPTION("V4L2 driver for e-con Cameras"); +MODULE_AUTHOR("E-Con Systems"); +MODULE_LICENSE("GPL v2"); + diff --git a/NileCAM25_CUXVR/ar0234_common.h b/NileCAM25_CUXVR/ar0234_common.h new file mode 100644 index 000000000..cac614797 --- /dev/null +++ b/NileCAM25_CUXVR/ar0234_common.h @@ -0,0 +1,16 @@ +#ifndef __AR0234_COMMON_H +#define __AR0234_COMMON_H + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#endif /* __AR0234_COMMON_H */ diff --git a/NileCAM25_CUXVR/mcu_firmware.h b/NileCAM25_CUXVR/mcu_firmware.h new file mode 100644 index 000000000..8b7f0e979 --- /dev/null +++ b/NileCAM25_CUXVR/mcu_firmware.h @@ -0,0 +1,83 @@ +#ifndef _MCU_FIRMWARE_H +#define _MCU_FIRMWARE_H + +/* Local Defines */ +#define MAX_BUF_LEN 2048 + +#define MAX_PAGES 512 +#define TOTAL_PAGES 1536 +#define NUM_ERASE_CYCLES (TOTAL_PAGES / MAX_PAGES) + +#define FLASH_START_ADDRESS 0x08000000 +#define FLASH_SIZE 192*1024 +#define FLASH_READ_LEN 256 + +#define CR 13 /* Carriage return */ +#define LF 10 /* Line feed */ + +/* TODO: Only necessary commands added */ +enum _i2c_cmds +{ + BL_GET_VERSION = 0x01, + BL_GO = 0x21, + BL_READ_MEM = 0x11, + BL_WRITE_MEM = 0x31, + BL_WRITE_MEM_NS = 0x32, + BL_ERASE_MEM = 0x44, + BL_ERASE_MEM_NS = 0x45, +}; + +enum _i2c_resp +{ + RESP_ACK = 0x79, + RESP_NACK = 0x1F, + RESP_BUSY = 0x76, +}; + +enum +{ + NUM_LANES_1 = 0x01, + NUM_LANES_2 = 0x02, + NUM_LANES_3 = 0x02, + NUM_LANES_4 = 0x04, + NUM_LANES_UNKWN = 0xFF, +}; + +enum _ihex_rectype +{ + /* Normal data */ + REC_TYPE_DATA = 0x00, + /* End of File */ + REC_TYPE_EOF = 0x01, + + /* Extended Segment Address */ + REC_TYPE_ESA = 0x02, + /* Start Segment Address */ + REC_TYPE_SSA = 0x03, + + /* Extended Linear Address */ + REC_TYPE_ELA = 0x04, + /* Start Linear Address */ + REC_TYPE_SLA = 0x05, +}; + +typedef struct __attribute__ ((packed)) _ihex_rec { + unsigned char datasize; + unsigned short int addr; + unsigned char rectype; + unsigned char recdata[]; +} IHEX_RECORD; + +unsigned int g_bload_flashaddr = 0x0000; + +uint8_t *fw_version = NULL; + +/* Buffer to Send Bootloader CMDs */ +unsigned char g_bload_buf[MAX_BUF_LEN] = { 0 }; + +unsigned short int g_bload_crc16 = 0x0000; + +const char g_mcu_fw_buf[] = +#include "NileCAM25_CUXVR.txt" +; +#endif //_MCU_FIRMWARE_H diff --git a/NileCAM25_CUXVR/pca9685.c b/NileCAM25_CUXVR/pca9685.c new file mode 100644 index 000000000..a44a4abf6 --- /dev/null +++ b/NileCAM25_CUXVR/pca9685.c @@ -0,0 +1,484 @@ +/* + * pca9685.c - pca9685 support driver +* Copyright (c) 2015-2016, e-con Systems. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#define PCA9685_FLAG +#include + +/**@brief pca9685 register read function, + * This function reads a specific register of pca9685 pwm IC, + * Transferring two messages at time, + * First message with write flag and a single byte length data is to select a 8bit register, + * Second message with read flag to obtain a byte data from the selected register. + * @return returns 0 if successful + */ +static int pca9685_reg_read(u8 reg, u8 *val){ + + int ret; + struct i2c_msg msg[] = { + { + .addr = PCA9685_ADDRESS, + .flags = I2C_M_WR, + .len = 1, + .buf = ®, + }, + { + .addr = PCA9685_ADDRESS, + .flags = I2C_M_RD, + .len = 1, + .buf = val, + } + }; + + ret = i2c_transfer(pca9685_adapter, msg, 2); + if (ret < 0) + return ret; + + return 0; +} + +/** @brief pca9685 register write function, + * This function write a specific register of pca9685 pwm IC, + * Transferring one message with write command of 2 byte data length, + * First byte to select register, + * Second byte is written into the selected register, + * @return returns 0 if successful + */ +static int pca9685_reg_write(u8 reg, u8 val){ + + int ret; + unsigned char data[2] = { reg, val }; + struct i2c_msg msg = { + .addr = PCA9685_ADDRESS, + .flags = I2C_M_WR, + .len = 2, + .buf = data, + }; + + ret = i2c_transfer(pca9685_adapter, &msg, 1); + udelay(100); + + if (ret < 0) + return ret; + + return 0; +} + +/** @brief pca9685 register write a bit function + * This function updates a bit of specific register of pca9685 pwm IC + * @return returns 0 if successful + */ +static int pca9685_reg_write_bits(u8 reg, u8 mask, u8 val){ + + int ret; + u8 data = 0; + u8 temp; + + ret = pca9685_reg_read(reg,&temp); + if(ret) + return ret; + + temp = data & ~mask; + temp |= val & mask; + + /* Return if read value and modified value are same */ + if(temp == data) + return 0; + + ret = pca9685_reg_write(reg,temp); + if(ret) + return ret; + + return 0; +} + +/** @brief PWM Calibration initialization function + * This function sets up the calibration GPIO, calibration threads and the IRQ + * @return returns 0 if successful + */ +int calibration_init(int num){ + + int result = 0; + + /*Recalibration can be done ONLY if last_sync_mode not matched with + *current calibration request else return here itself */ + if(last_calib_val == 2) + last_calib_val = num; + else if(last_calib_val != num) + last_calib_val = num; + else + return 0; + + /* Create the PWM Calibration thread */ + st_calib_start = kthread_create(thread_calibrate_pwm, NULL, "pwm_auto_calib_thread"); + if (st_calib_start) + printk("Thread Created successfully\n"); + else + printk(KERN_ERR "Thread creation failed\n"); + + /* Create the thread to finish PWM calibration */ + st_calib_stop = kthread_create(thread_finish_pwm_calib, NULL, "pwm_stop_auto_calib_stop_thread"); + if (st_calib_stop) + printk("PWM stop Thread Created successfully\n"); + else + printk(KERN_ERR "PWM stop Thread creation failed\n"); + + // GPIO validation + if (!gpio_is_valid(pwm_calib_gpio)){ + printk(KERN_ERR "Invalid GPIO \n"); + return -ENODEV; + } + + /* Set up the pwm_calib_gpio */ + gpio_request(pwm_calib_gpio, "sysfs"); + /* Set the GPIO to be an input */ + gpio_direction_input(pwm_calib_gpio); + /* Causes gpio to appear in /sys/class/gpio */ + gpio_export(pwm_calib_gpio, false); + /* the bool argument prevents the direction from being changed */ + irq_number = gpio_to_irq(pwm_calib_gpio); + + if(psc_lookup[num] == 0 ) + prescaler_val = pre_limit[num].psc_start; + else + prescaler_val = psc_lookup[num]; + + pwm_mode = num; + wake_up_process(st_calib_start); + udelay(500); + + /* This next call requests an interrupt line */ + result = request_irq(irq_number, + (irq_handler_t) calibration_irq_handler, + IRQF_TRIGGER_RISING, + "pwm_auto_calib_handler", + NULL); + return result; +} + +/** @brief Calibration GPIO IRQ Handler function + * This function is a custom interrupt handler that is attached to the Calibration GPIO. + */ +static irq_handler_t calibration_irq_handler(unsigned int irq, void *dev_id, struct pt_regs *regs){ + + static unsigned int ignore_samples = 0; + static int t0 = 0, t1 = 0; + + /* Ignoring Five Samples to stable the PWM Frequency */ + if(ignore_samples++ < 5) { + getnstimeofday(&ts); + t0 = (int) ts.tv_nsec/100000; + } else { + getnstimeofday(&ts); + t1 =(int) ts.tv_nsec/100000; + + /*Change the prescalar value Based on PWM Frequency limit*/ + if( !((t1-t0) >= pre_limit[pwm_mode].pwm_low_limit && (t1-t0) <= pre_limit[pwm_mode].pwm_high_limit) ) { + ignore_samples = 0; + if( (t1-t0) <= pre_limit[pwm_mode].pwm_high_limit) { + wake_up_process(st_calib_start); + udelay(500); + } else { + printk("prescalar value=%x\n",prescaler_val); + prescaler_val = prescaler_val - 2; + wake_up_process(st_calib_start); + udelay(500); + } + /* Calibrated PWM and Stop calibration process */ + } else { + printk(KERN_INFO "%s PWM Calibrated.. \n",__func__); + psc_lookup[pwm_mode] = prescaler_val - 1; + wake_up_process(st_calib_stop); + udelay(500); + } + } + + return (irq_handler_t) IRQ_HANDLED; +} + +/** @brief Calibration thread + * This thread will write the appropriate Prescalar value + * to get the desired frequency output from the PWM Chip + */ +static int thread_calibrate_pwm(void *data){ + + int err; + irq_status = true; + + while (!kthread_should_stop()) { + + err = pca9685_set_frequency(prescaler_val); + prescaler_val++; + set_current_state(TASK_INTERRUPTIBLE); + schedule(); + } + + return 0; + +} + +static int thread_finish_pwm_calib(void *data){ + + while (!kthread_should_stop()) { + udelay(500); + if (st_calib_start) { + kthread_stop(st_calib_start); + put_task_struct(st_calib_start); + st_calib_start = NULL; + } + if (irq_status == true) { + free_irq(irq_number, NULL); + irq_status = false; + do_exit(0); + } + } + return 0; +} + + /** @brief PWM Calibration cleanup function + * This function releases the calibration GPIO, calibration threads and the IRQ + */ +void calibration_exit(void){ + + if (st_calib_start) { + kthread_stop(st_calib_start); + put_task_struct(st_calib_start); + st_calib_start = NULL; + } + if (irq_status == true) { + free_irq(irq_number, NULL); + irq_status = false; + } + gpio_unexport(pwm_calib_gpio); + gpio_free(pwm_calib_gpio); +} + +/** @brief pca9685 frequency set function + * This function sets the frequency for pca9685 pwm IC by doing necessary + * @return returns 0 if successful + */ +static int pca9685_set_frequency(int prescale){ + + int err; + + if (prescale >= PCA9685_PRESCALE_MIN && prescale <= PCA9685_PRESCALE_MAX) { + + /* Put chip into sleep mode */ + if( (err = pca9685_reg_write_bits(PCA9685_MODE1,MODE1_SLEEP,MODE1_SLEEP)) ) + return err; + + /* Change the chip-wide output frequency */ + if( (err = pca9685_reg_write(PCA9685_PRESCALE, prescale)) ) + return err; + + /* Wake the chip up */ + if( (err = pca9685_reg_write_bits(PCA9685_MODE1,MODE1_SLEEP, CLEAR)) ) + return err; + + if( (err = pca9685_reg_write_bits(PCA9685_MODE1,MODE1_RESTART,MODE1_RESTART)) ) + return err; + + /* Wait 500us for the oscillator to be back up */ + udelay(500); + + } else + return -EINVAL; + + return 0; +} + +/** @brief pca9685 duty cycle setting function + * This function sets the duty cycle for "LANE_NOS" of pwm pin starting from "START_LANE" pwm pin of pca9685 pwm IC + * @return returns 0 if successful + */ +static int pca9685_set_duty_cycle(int duty_ns, int period_ns){ + + unsigned long long duty; + unsigned int reg; + int ret; + int index; + + /* Setting For Almost Negligible Duty Cycle */ + if (duty_ns < 1) { + + + reg = LED_N_OFF_H(START_LANE); + for(index=0; index> 8) & 0xf)) ) + return ret; + + /* Clear the full on registers, otherwise the set OFF time has no effect */ + reg = LED_N_ON_H(START_LANE); + for(index=0; indexdev, "Failed to set the baud rate! %d\n",err); + return err; + } + err = pca9685_set_duty_cycle(duty_ns,period_ns); + if(err){ + dev_err(&client->dev, "Failed to set the duty cycle! %d\n",err); + return err; + } + calibration_init(MAX_PWM_MODE - current_calib_mode); + + return 0; +} + +/** @brief pca9685 initialization function + * This function is used to set the register required for setting up pca9685 pwm IC + * @return returns 0 if successful + */ +int pca9685_init(struct i2c_client *client, uint8_t fps){ + + u8 mode2 = 0,current_calib_mode; + int duty_ns = -1, period_ns = -1; + int ret = 0; + static uint8_t current_fps = 28; + + pca9685_adapter = i2c_get_adapter(ECON_MULTILANE_BASEBOARD_BUS_ADDRESS); + printk("pca9685 bus address : %d\n",(int)pca9685_adapter->nr); + + if(fps != current_fps){ + //pca9685_init_flag = 0; + current_fps = fps; + } + if(pca9685_init_flag){ + printk("%s pca9685 IC already initialized..\n",__func__); + return 0; + } + + ret = pca9685_reg_read(PCA9685_MODE2,&mode2); + if(ret){ + dev_err(&client->dev, "Failed to Read from mode2 register of pca9685driver %d\n",ret); + return ret; + } + + if (device_property_read_bool(&client->dev, "pwm-invert")) + mode2 |= MODE2_INVRT; + else + mode2 &= ~MODE2_INVRT; + + if (device_property_read_bool(&client->dev, "pwm-open-drain")) + mode2 &= ~MODE2_OUTDRV; + else + mode2 |= MODE2_OUTDRV; + + ret = pca9685_reg_write(PCA9685_MODE2,mode2); + if(ret){ + dev_err(&client->dev, "Failed to write on mode2 register of pca9685 driver %d\n",ret); + return ret; + } + + /* clear all "full off" bits */ + if( pca9685_reg_write( PCA9685_ALL_LED_OFF_L, 0) || pca9685_reg_write(PCA9685_ALL_LED_OFF_H, 0) ) + return -EINVAL; + + + //Get duty cycle, time period and calibration pin from dtb + ret = device_property_read_u32(&client->dev, "pwm-duty_ns", &duty_ns); + if(ret){ + dev_err(&client->dev, "Failed to Read register map with error %d\n",ret); + return ret; + } + ret = device_property_read_u32(&client->dev, "pwm-period_ns", &period_ns); + if(ret){ + dev_err(&client->dev, "Failed to Read register map with error %d\n",ret); + return ret; + } + current_calib_mode = 2; + + printk("pwm period=%d\n",period_ns); + pwm_calib_gpio = of_get_named_gpio(client->dev.of_node, "pwm-calib-gpio", 0); + if(pwm_calib_gpio<0){ + dev_err(&client->dev, "Failed to Read register map with error %d\n",ret); + return ret; + } + + //Configure duty cycle and frequency + ret = pca9685_config(client,duty_ns,period_ns,current_calib_mode); + if(ret){ + dev_err(&client->dev, "Failed to Configure the pca9685 chip %d\n",ret); + return ret; + } + + pca9685_init_flag = 1; + printk("%s pca9685 initialized successfully!\n",__func__); + return 0; +} + diff --git a/NileCAM25_CUXVR/pca9685.h b/NileCAM25_CUXVR/pca9685.h new file mode 100644 index 000000000..e11e2e2dc --- /dev/null +++ b/NileCAM25_CUXVR/pca9685.h @@ -0,0 +1,116 @@ +/* + * pca9685.h - pca9685 driver IC headers + * + * Copyright (c) 2015-2016, e-con Systems, All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifdef PCA9685_FLAG + +#include +#include +#include +#include +#include + + +#define PCA9685_MODE1 0x00 +#define PCA9685_MODE2 0x01 +#define PCA9685_LEDX_ON_L 0x06 +#define PCA9685_LEDX_ON_H 0x07 +#define PCA9685_LEDX_OFF_L 0x08 +#define PCA9685_LEDX_OFF_H 0x09 +#define PCA9685_ALL_LED_OFF_L 0xFC +#define PCA9685_ALL_LED_OFF_H 0xFD +#define PCA9685_PRESCALE 0xFE + +#define PCA9685_PRESCALE_MIN 0x03 /* => max. frequency of 1526 Hz */ +#define PCA9685_PRESCALE_MAX 0xFF /* => min. frequency of 24 Hz */ + +#define PCA9685_COUNTER_RANGE 4096 +#define PCA9685_OSC_CLOCK_MHZ 25 /* Internal oscillator with 25 MHz */ + +#define PCA9685_NUMREGS 0xFF + +#define LED_FULL (1 << 4) +#define MODE1_RESTART (1 << 7) +#define MODE1_SLEEP (1 << 4) +#define MODE2_INVRT (1 << 4) +#define MODE2_OUTDRV (1 << 2) +#define CLEAR 0 + +#define LED_N_ON_H(N) (PCA9685_LEDX_ON_H + (4 * (N))) +#define LED_N_ON_L(N) (PCA9685_LEDX_ON_L + (4 * (N))) +#define LED_N_OFF_H(N) (PCA9685_LEDX_OFF_H + (4 * (N))) +#define LED_N_OFF_L(N) (PCA9685_LEDX_OFF_L + (4 * (N))) + + +#define MAX_PWM_MODE 2 // Maximum PWM modes supported +#define PCA9685_ADDRESS 0x61 //pca9685 slave address +#define LANE_NOS 7 //Mention number of cameras connected here +#define START_LANE 0 +#define I2C_M_WR 0x00 +#define ECON_MULTILANE_BASEBOARD_BUS_ADDRESS 33 +#define SECONDARY_FPS 28 +static irq_handler_t calibration_irq_handler(unsigned int irq, void *dev_id, struct pt_regs *regs); + +int last_calib_val = 2; +static int thread_calibrate_pwm(void *); +static int thread_finish_pwm_calib(void *); + +static int pca9685_reg_read(u8,u8*); +static int pca9685_reg_write(u8,u8); +static int pca9685_reg_write_bits(u8,u8,u8); +static int pca9685_set_frequency(int); +static int pca9685_set_duty_cycle(int,int); +static int pca9685_config(struct i2c_client*,int,int,uint8_t); + + +static struct task_struct *st_calib_start; +static struct task_struct *st_calib_stop; +struct i2c_adapter *pca9685_adapter; + +struct timespec ts; +struct regmap *g_regmap; + +static unsigned int pwm_calib_gpio = -1; // Gpio for PWM calibration got from DTB file +static unsigned int irq_number; + +static int prescaler_val; +static int pca9685_init_flag = 0; + +static bool irq_status = true; + +struct psc_mode { + int pwm_low_limit; + int pwm_high_limit; + int psc_start; +}; + +static struct psc_mode pre_limit[MAX_PWM_MODE] = { + /* This below exposure time period value setting is for ar0234 sensor */ + {340,342,0xD0}, // 29.49Hz to 29.67Hz + //{337,340,0xCE},/*29.4 TO 29.6*//*FHD*/ + {168,170,0x66},/*58.82 TO 59.52*//*FHD*/ +}; +static int psc_lookup[MAX_PWM_MODE] = {0}; +static int pwm_mode; + +#endif + +int pca9685_init(struct i2c_client*,uint8_t); +int calibration_init(int); +void calibration_exit(void); + + diff --git a/NileCAM25_CUXVR/serdes.c b/NileCAM25_CUXVR/serdes.c new file mode 100644 index 000000000..d5f3f7f03 --- /dev/null +++ b/NileCAM25_CUXVR/serdes.c @@ -0,0 +1,147 @@ +/* + * serdes.c - GMSL driver + * Copyright (c) 2017-2018, e-con Systems. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "ar0234_common.h" +//#include "serdes.h" + +int serdes_write_i2c(struct i2c_client *client, u16 sladdr, u8 * val, u32 count) +{ + int ret; + + struct i2c_msg msg = { + .addr = sladdr, + .flags = 0, + .len = count, + .buf = val, + }; + + ret = i2c_transfer(client->adapter, &msg, 1); + if (ret < 0) { + dev_err(&client->dev, "Failed writing register ret = %d!\n", + ret); + return ret; + } + return 0; +} + +int serdes_read_i2c(struct i2c_client *client, u16 sladdr, u8 * val, u32 count) +{ + int ret; + struct i2c_msg msg = { + .addr = sladdr, + .flags = 0, + .buf = val, + }; + + msg.flags = I2C_M_RD; + msg.len = count; + ret = i2c_transfer(client->adapter, &msg, 1); + if (ret < 0) + goto err; + + return 0; + + err: + dev_err(&client->dev, "Failed reading register ret = %d!\n", ret); + return ret; +} + +s32 serdes_read_8b_reg(struct i2c_client *client, u16 sladdr, u8 reg, u8 * val) +{ + u8 bcount = 1; + u8 au8RegBuf[1] = { 0 }; + u8 au8RdVal[1] = { 0 }; + + au8RegBuf[0] = reg; + + if (serdes_write_i2c(client, sladdr, au8RegBuf, bcount) < 0) { + dev_err(&client->dev,"%s:write reg error:reg=0x%x\n", __func__, reg); + return -EIO; + } + + if (serdes_read_i2c(client,sladdr, au8RdVal, bcount) < 0) { + dev_err(&client->dev,"%s:read reg error:reg=0x%x\n", __func__, reg); + return -EIO; + } + + *val = au8RdVal[0]; + + return 0; +} + +s32 serdes_write_8b_reg(struct i2c_client *client, u16 sladdr, u8 reg, u8 val) +{ + u8 bcount = 2; + u8 au8Buf[2] = { 0 }; + + au8Buf[0] = reg; + au8Buf[1] = val; + + if (serdes_write_i2c(client, sladdr,au8Buf, bcount) < 0) { + dev_err(&client->dev, + "%s:write reg error: reg = 0x%x,val = 0x%x\n", __func__, + reg, val); + return -EIO; + } + + return 0; +} +s32 serdes_read_16b_reg(struct i2c_client *client, u16 sladdr, u16 reg, u8 * val) +{ + u8 bcount; + u8 au8RegBuf[2] = { 0 }; + u8 au8RdVal[1] = { 0 }; + + au8RegBuf[0] = reg >> 8; + au8RegBuf[1] = reg & 0xff; + bcount = 2; + + if (serdes_write_i2c(client, sladdr, au8RegBuf, bcount) < 0) { + dev_err(&client->dev,"%s:write reg error:reg=0x%x\n", __func__, reg); + return -EIO; + } + + bcount = 1; + if (serdes_read_i2c(client,sladdr, au8RdVal, bcount) < 0) { + dev_err(&client->dev,"%s:read reg error:reg=0x%x\n", __func__, reg); + return -EIO; + } + + *val = au8RdVal[0]; + + return 0; +} + +s32 serdes_write_16b_reg(struct i2c_client *client, u16 sladdr, u16 reg, u8 val) +{ + u8 bcount = 3; + u8 au8Buf[3] = { 0 }; + + au8Buf[0] = reg >> 8; + au8Buf[1] = reg & 0xff; + au8Buf[2] = val; + + if (serdes_write_i2c(client, sladdr,au8Buf, bcount) < 0) { + dev_err(&client->dev, + "%s:write reg error: reg = 0x%x,val = 0x%x\n", __func__, + reg, val); + return -EIO; + } + + return 0; +} + diff --git a/NileCAM25_CUXVR/serdes.h b/NileCAM25_CUXVR/serdes.h new file mode 100644 index 000000000..b94d87423 --- /dev/null +++ b/NileCAM25_CUXVR/serdes.h @@ -0,0 +1,348 @@ +/* + * Copyright (C) 2018 e-con Systems Pvt Ltd, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __SERDES_H +#define __SERDES_H + +#define SER1_ADDR 0x40 +#define SER2_ADDR 0x41 +#define DES_ADDR 0x48 + +typedef struct serdes_parse{ +uint16_t reg; +uint8_t val; +}SERDES_PARSE; + + +SERDES_PARSE SER1_CONF[] = { + + {0x0010, 0x21}, + {0xFFFF, 0x00}, + {0x0102, 0x0C}, + {0x010A, 0x0C}, + {0x0112, 0x0C}, + {0x011A, 0x0C}, + {0x0330, 0x00}, + {0x0331, 0x13}, + {0x0332, 0xEE}, + {0x0333, 0xE4}, + {0x0334, 0x00}, + {0x0335, 0x00}, + {0x0311, 0x40}, + {0x0308, 0x74}, + {0x0002, 0x43}, + {0x0053, 0x10}, + {0x0057, 0x12}, + {0x005B, 0x11}, + {0x005F, 0x13}, + {0x0100, 0x68}, + {0x0110, 0x68}, + {0x0101, 0x58}, + {0x0111, 0x58}, + {0x0312, 0x00}, + {0x0313, 0x00}, + {0x0314, 0x00}, + {0x0315, 0x00}, + {0x0316, 0x00}, + {0x0317, 0x00}, + {0x0318, 0x00}, + {0x0319, 0x00}, + {0x031A, 0x00}, + {0x031B, 0x00}, + {0x031C, 0x18}, + {0x031D, 0x18}, + {0x031E, 0x18}, + {0x031F, 0x18}, + +}; +SERDES_PARSE SER2_CONF[] = { + + {0x0010, 0x21}, + {0xFFFF, 0x00}, + {0x0102, 0x0C}, + {0x010A, 0x0C}, + {0x0112, 0x0C}, + {0x011A, 0x0C}, + {0x0330, 0x00}, + {0x0331, 0x13}, + {0x0332, 0xEE}, + {0x0333, 0xE4}, + {0x0334, 0x00}, + {0x0335, 0x00}, + {0x0311, 0x40}, + {0x0308, 0x74}, + {0x0002, 0x43}, + {0x0053, 0x13}, + {0x0057, 0x10}, + {0x005B, 0x12}, + {0x005F, 0x11}, + {0x0100, 0x68}, + {0x0110, 0x68}, + {0x0101, 0x58}, + {0x0111, 0x58}, + {0x0312, 0x00}, + {0x0313, 0x00}, + {0x0314, 0x00}, + {0x0315, 0x00}, + {0x0316, 0x00}, + {0x0317, 0x00}, + {0x0318, 0x00}, + {0x0319, 0x00}, + {0x031A, 0x00}, + {0x031B, 0x00}, + {0x031C, 0x18}, + {0x031D, 0x18}, + {0x031E, 0x18}, + {0x031F, 0x18}, + +}; + +SERDES_PARSE DSER_CONF[] = { + + {0x0003, 0xD0}, + {0x0320, 0x2F}, + {0x0323, 0x2F}, + {0x0100, 0x23}, + {0x0112, 0x23}, + {0x0124, 0x23}, + {0x0136, 0x23}, + {0x0330, 0x04}, + {0x0332, 0xF0}, + {0x0333, 0x4E}, + {0x0334, 0xE4}, + {0x040A, 0x10}, + {0x044A, 0x50}, + {0x048A, 0x50}, + {0x04CA, 0x10}, + {0x0326, 0x2B}, + {0x0050, 0x00}, + {0x0051, 0x01}, + {0x0052, 0x02}, + {0x0053, 0x03}, + {0x0335, 0x00}, + {0x0336, 0x00}, + {0x0339, 0x00}, + {0x033A, 0x02}, + {0x033B, 0x00}, + {0x033C, 0x02}, + {0x0433, 0x00}, + {0x0473, 0x00}, + {0x04B3, 0x00}, + {0x04F3, 0x00}, + {0x040B, 0x00}, + {0x040C, 0x00}, + {0x044B, 0x00}, + {0x044C, 0x00}, + {0x048B, 0x00}, + {0x048C, 0x00}, + {0x04CB, 0x00}, + {0x04CC, 0x00}, + {0x042D, 0x00}, + {0x042E, 0x00}, + {0x042F, 0x00}, + {0x0430, 0x00}, + {0x046D, 0x00}, + {0x046E, 0x00}, + {0x046F, 0x00}, + {0x0470, 0x00}, + {0x04AD, 0x00}, + {0x04AE, 0x00}, + {0x04AF, 0x00}, + {0x04B0, 0x00}, + {0x04ED, 0x00}, + {0x04EE, 0x00}, + {0x04EF, 0x00}, + {0x04F0, 0x00}, + {0x040D, 0x00}, + {0x040E, 0x00}, + {0x040F, 0x00}, + {0x0410, 0x00}, + {0x0411, 0x00}, + {0x0412, 0x00}, + {0x044D, 0x00}, + {0x044E, 0x00}, + {0x044F, 0x00}, + {0x0450, 0x00}, + {0x0451, 0x00}, + {0x0452, 0x00}, + {0x048D, 0x00}, + {0x048E, 0x00}, + {0x048F, 0x00}, + {0x0491, 0x00}, + {0x0491, 0x00}, + {0x0492, 0x00}, + {0x04CD, 0x00}, + {0x04CE, 0x00}, + {0x04CF, 0x00}, + {0x04D0, 0x00}, + {0x04D1, 0x00}, + {0x04D2, 0x00}, + {0x0309, 0x00}, + {0x030B, 0x00}, + {0x030D, 0x00}, + {0x030F, 0x00}, + {0x0413, 0x00}, + {0x0414, 0x00}, + {0x0415, 0x00}, + {0x0416, 0x00}, + {0x0417, 0x00}, + {0x0418, 0x00}, + {0x0419, 0x00}, + {0x041A, 0x00}, + {0x041B, 0x00}, + {0x041C, 0x00}, + {0x041D, 0x00}, + {0x041E, 0x00}, + {0x041F, 0x00}, + {0x0420, 0x00}, + {0x0421, 0x00}, + {0x0422, 0x00}, + {0x0423, 0x00}, + {0x0424, 0x00}, + {0x0425, 0x00}, + {0x0426, 0x00}, + {0x0427, 0x00}, + {0x0428, 0x00}, + {0x0429, 0x00}, + {0x042A, 0x00}, + {0x042B, 0x00}, + {0x042C, 0x00}, + {0x0453, 0x00}, + {0x0454, 0x00}, + {0x0455, 0x00}, + {0x0456, 0x00}, + {0x0457, 0x00}, + {0x0458, 0x00}, + {0x0459, 0x00}, + {0x045A, 0x00}, + {0x045B, 0x00}, + {0x045C, 0x00}, + {0x045D, 0x00}, + {0x045E, 0x00}, + {0x045F, 0x00}, + {0x0460, 0x00}, + {0x0461, 0x00}, + {0x0462, 0x00}, + {0x0463, 0x00}, + {0x0464, 0x00}, + {0x0465, 0x00}, + {0x0466, 0x00}, + {0x0467, 0x00}, + {0x0468, 0x00}, + {0x0469, 0x00}, + {0x046A, 0x00}, + {0x046B, 0x00}, + {0x046C, 0x00}, + {0x0493, 0x00}, + {0x0494, 0x00}, + {0x0495, 0x00}, + {0x0496, 0x00}, + {0x0497, 0x00}, + {0x0498, 0x00}, + {0x0499, 0x00}, + {0x049A, 0x00}, + {0x049B, 0x00}, + {0x049C, 0x00}, + {0x049D, 0x00}, + {0x049E, 0x00}, + {0x049F, 0x00}, + {0x04A0, 0x00}, + {0x04A1, 0x00}, + {0x04A2, 0x00}, + {0x04A3, 0x00}, + {0x04A4, 0x00}, + {0x04A5, 0x00}, + {0x04A6, 0x00}, + {0x04A7, 0x00}, + {0x04A8, 0x00}, + {0x04A9, 0x00}, + {0x04AA, 0x00}, + {0x04AB, 0x00}, + {0x04AC, 0x00}, + {0x04D3, 0x00}, + {0x04D4, 0x00}, + {0x04D5, 0x00}, + {0x04D6, 0x00}, + {0x04D7, 0x00}, + {0x04D8, 0x00}, + {0x04D9, 0x00}, + {0x04DA, 0x00}, + {0x04DB, 0x00}, + {0x04DC, 0x00}, + {0x04DD, 0x00}, + {0x04DE, 0x00}, + {0x04DF, 0x00}, + {0x04E0, 0x00}, + {0x04E1, 0x00}, + {0x04E2, 0x00}, + {0x04E3, 0x00}, + {0x04E4, 0x00}, + {0x04F5, 0x00}, + {0x04E6, 0x00}, + {0x04E7, 0x00}, + {0x04E8, 0x00}, + {0x04E9, 0x00}, + {0x04EA, 0x00}, + {0x04EB, 0x00}, + {0x04EC, 0x00}, + {0x0313, 0x02}, + {0x0314, 0x00}, + {0x0315, 0x00}, + {0x0316, 0x00}, + {0x0317, 0x00}, + {0x0318, 0x00}, + {0x0319, 0x00}, + {0x031A, 0x00}, + {0x031B, 0x00}, + {0x031C, 0x00}, + {0x031D, 0x2B}, + {0x031E, 0x00}, + {0x031F, 0x00}, + {0x01D9, 0x19}, + {0x01F9, 0x19}, + {0x0219, 0x19}, + {0x0239, 0x19}, + {0x02C5, 0xC3}, +}; + +SERDES_PARSE SER1_I2C_CONF[] = { + {0x0042, 0x86}, + {0x0043, 0x84}, + {0x0044, 0x1A}, + {0x0045, 0x1C}, +}; +SERDES_PARSE SER2_I2C_CONF[] = { + {0x0042, 0x88}, + {0x0043, 0x84}, + {0x0044, 0x1E}, + {0x0045, 0x1C}, +}; + +SERDES_PARSE SER2_PKT_HEADER_CHANGE[] = { + {0x007B, 0x12}, + {0x0083, 0x12}, + {0x008B, 0x12}, + {0x0093, 0x12}, + {0x00A3, 0x12}, + {0x00AB, 0x12}, +}; + +int serdes_write_i2c(struct i2c_client *client, u16 sladdr, u8 * val, u32 count); +int serdes_read_i2c(struct i2c_client *client, u16 sladdr, u8 * val, u32 count); +s32 serdes_read_8b_reg(struct i2c_client *client, u16 sladdr, u8 reg, u8 * val); +s32 serdes_write_8b_reg(struct i2c_client *client, u16 sladdr, u8 reg, u8 val); +s32 serdes_read_16b_reg(struct i2c_client *client, u16 sladdr, u16 reg, u8 * val); +s32 serdes_write_16b_reg(struct i2c_client *client, u16 sladdr, u16 reg, u8 val); +static s32 serdes_parse_regdata(struct i2c_client *client, SERDES_PARSE *,u32 ,u8); +#endif /* __SERDES_H */