diff --git a/.gitignore b/.gitignore index aa724b7..7ceac7b 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ .externalNativeBuild .cxx local.properties +/.idea/ +/app/sampledata/ diff --git a/app/src/main/jni/Android.mk b/app/src/main/jni/Android.mk index e0404db..adaa89a 100644 --- a/app/src/main/jni/Android.mk +++ b/app/src/main/jni/Android.mk @@ -25,6 +25,7 @@ LOCAL_SRC_FILES := Main.cpp \ KittyMemory/MemoryBackup.cpp \ KittyMemory/KittyUtils.cpp \ And64InlineHook/And64InlineHook.cpp \ + NepAU/src/NepAu.cpp LOCAL_LDLIBS := -llog -landroid -lGLESv2 diff --git a/app/src/main/jni/JavaGPP/Interface/OreoOrMore.h b/app/src/main/jni/JavaGPP/Interface/OreoOrMore.h index 898c7b2..05bae5d 100644 --- a/app/src/main/jni/JavaGPP/Interface/OreoOrMore.h +++ b/app/src/main/jni/JavaGPP/Interface/OreoOrMore.h @@ -1 +1 @@ -#define OreoOrMore "6465780A30333900443E0FAC441ECB08547FD042EE2BA2776F1134BB835930B5BC4F000070000000785634120000000000000000EC4E0000900100007000000061000000B0060000500000003408000048000000F40B0000BB000000340E0000110000000C140000903900002C160000402F0000422F0000552F0000612F00006C2F0000752F00007E2F0000872F0000902F0000992F0000A22F0000AB2F0000B42F0000BF2F0000CA2F0000D32F0000D82F0000E12F0000EB2F00002E30000036300000403000004B300000533000005A3000006430000070300000793000008830000096300000A2300000B0300000B3300000B9300000C1300000D7300000E9300000EC300000F830000003310000073100000B31000011310000413100005231000055310000593100005F31000063310000683100006E310000733100007931000091310000C6310000E531000000320000263200004732000062320000843200009E320000BB320000E13200000F330000243300003A3300004F330000643300007C330000A1330000BB330000D2330000F13300000C340000283400004D340000763400009B340000B0340000D7340000043500002F3500004D3500006735000080350000B9350000DA350000F83500001E3600003A3600006636000085360000B3360000D4360000F13600000A370000253700003D3700006137000086370000A6370000C9370000EF3700000E3800002A38000044380000573800006D38000090380000A5380000C7380000DB380000F13800000F390000233900003E390000523900006939000084390000A0390000B8390000CE390000DF390000F43900000B3A00001D3A0000323A0000453A0000583A00006B3A00007D3A0000893A0000AD3A0000D13A0000F53A0000193B00003D3B0000613B0000853B0000A93B0000CB3B0000D43B0000E33B0000F03B0000073C0000143C0000203C00002A3C00003D3C0000523C00005C3C00006C3C0000783C0000863C0000933C0000A13C0000B73C0000BF3C0000C43C0000D03C0000DE3C0000E63C0000EE3C0000F93C0000033D00000A3D00000D3D0000113D0000153D00001A3D0000213D0000293D00002D3D0000323D00003B3D0000403D0000463D00004B3D00004F3D0000523D0000563D00005B3D00005F3D0000633D0000773D00008C3D0000A13D0000A63D0000A93D0000B53D0000C13D0000CD3D0000DA3D0000E63D0000F03D0000FF3D0000083E0000113E00002D3E0000373E00003F3E00004F3E0000603E0000643E0000683E00006F3E0000803E0000863E0000943E00009E3E0000AD3E0000B43E0000C43E0000CE3E0000D73E0000EB3E0000F43E00000B3F0000133F0000243F00002D3F0000313F00003B3F00003E3F0000463F0000543F00005E3F0000673F0000703F00007D3F0000863F0000903F00009C3F0000A13F0000AC3F0000B83F0000C23F0000CE3F0000E03F0000F33F00000640000016400000274000003640000048400000514000005A400000684000007A4000008A4000009C400000AB400000BD400000C6400000CF400000D8400000E2400000EB400000F3400000FC400000FF4000000C410000244100003C4100004F4100005B410000694100007841000087410000914100009B410000A5410000AD410000BB410000C8410000D9410000E3410000F4410000044200000C4200001A420000224200002942000033420000404200004D42000058420000644200006F4200007F4200008A4200009A420000A4420000A9420000B2420000BA420000C7420000CD420000D4420000DF420000E5420000F7420000004300000A43000017430000204300003143000039430000454300004F4300005843000060430000664300006C430000724300007A4300008A4300009A430000A6430000B4430000B8430000C4430000CF430000D4430000EB430000FF4300000744000017440000214400002D4400003C440000464400005A440000664400007044000080440000914400009F440000AB440000BB440000CB440000DC440000F34400000F450000234500003B4500004F4500005F4500006B450000794500008645000095450000A0450000A9450000B7450000C4450000D1450000DF450000EC450000004600000F4600001946000027460000354600003B460000424600004E4600005C460000614600006B460000734600007A460000834600008A460000934600009F460000A5460000B0460000BA460000C2460000C9460000D4460000DE460000E9460000FB4600000247000005470000124700001947000021470000274700002E470000364700003D470000404700004447000047470000AF470000594A00001F000000240000003400000035000000360000003700000038000000390000003A0000003B0000003C0000003D0000003E0000003F000000400000004100000042000000430000004400000045000000460000004700000048000000490000004A0000004B0000004C0000004D0000004E0000004F000000500000005100000052000000530000005400000055000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000085000000860000008700000088000000890000008A0000008B0000008C000000A6000000B3000000B6000000B7000000B8000000B9000000BA000000BB0000001F00000000000000000000002000000000000000D02D00002400000001000000000000002700000001000000DC2D00002800000001000000E42D00002C00000002000000000000002C00000005000000000000002C00000007000000000000003100000008000000EC2D00002C0000000C000000000000002C00000010000000000000002F00000012000000E42D00002C00000016000000000000002C0000001B000000000000002E0000001C000000F82D00002F0000001C000000E42D00002C0000001D000000000000002C0000002000000000000000330000002F000000042E00002C00000038000000000000002F00000038000000E42D00002C0000003C000000000000002F0000003C000000102E0000320000003C000000182E00002C0000003F00000000000000320000003F000000202E00002D00000040000000DC2D00002F00000040000000E42D00002F00000043000000E42D00003200000044000000282E00002C00000045000000000000002C00000046000000000000002F00000058000000302E0000A60000005900000000000000A700000059000000382E0000A800000059000000DC2D0000A900000059000000402E0000AA00000059000000482E0000AB00000059000000542E0000AC00000059000000642E0000AC000000590000006C2E0000AC00000059000000742E0000AE000000590000007C2E0000AC000000590000008C2E0000AC00000059000000942E0000AC000000590000009C2E0000AD00000059000000A42E0000AC00000059000000AC2E0000AC00000059000000B42E0000AC00000059000000BC2E0000AC00000059000000B02D0000AC00000059000000B82D0000AC00000059000000C02D0000AC00000059000000C42E0000AF00000059000000CC2E0000AC00000059000000D42E0000AC00000059000000C82D0000B100000059000000DC2E0000AC00000059000000E42E0000AC00000059000000EC2E0000AC00000059000000F42E0000AC00000059000000E42D0000B000000059000000FC2E0000AC00000059000000082F0000AC00000059000000302E0000AD00000059000000102F0000B200000059000000182F0000AF00000059000000202F0000AF00000059000000282F0000B30000005A00000000000000B40000005A000000C42E0000B50000005A000000302F0000B40000005A000000F42E0000B40000005A000000102E0000B40000005A000000A82D0000B40000005A000000E42D0000B40000005A000000302E0000300000005B000000382F00002C0000005F000000000000002F0000005F000000E42D000003000100090100000B000B001E000000130013008D00000016000000DC0000001D000100020100001D000100890100001E0001007F0100001F000100FD0000001F0001008A0100001F0001008C0100002600260021000000280000008801000049000100CE0000004A000100060100004A000100070100004B000100C30000004C000100050100004C000100080100004D000100C70000004E00010014000000510058007B01000052005A006B010000520058007B010000530058007B010000540058007B010000550058007B01000056001C00D200000056001C00E1000000560000000B010000560000000C010000560001000D010000560001000E010000560058007B010000570058007B01000057000100830100005800010015000000580001001600000058000100170000005800010019000000580001001B00000058000000250000005800010026000000580001008E000000580000008F00000058000100900000005800010091000000580001009200000058003F00970000005800010098000000580001009B000000580001009C00000058003F009E000000580001009F00000058000100A000000058000100A300000058000100A400000058000200C2000000580058000F010000580029001E01000058002B001F010000580029002001000058002B00210100005800290022010000580020002301000058001F0033010000580029003601000058002500420100005800280046010000580028004701000058002C0049010000580027006E01000058005A006F010000020021001300000002000700F700000002001100FC00000002002F002F010000030021001300000004002800F4000000060044001300000007000C00F000000009000800DB0000000A000400340100000C002B00640100000D002100130000000D0023004E0100000D002200500100000D002400600100000F003000130000000F004A003801000010000A00F300000011000B00E7000000140048001101000015004D00DA00000017000100C900000018000200EA00000018000000F500000018000000F60000001C000600ED0000001C002300680100001F0026001300000020003600C5000000200035003E0100002000360080010000210029001300000021001000F200000021003E001B010000210022004B010000210023004C0100002100370055010000210034005A010000210025005C0100002200290013000000220023004C01000022003700550100002200320058010000220033005901000022003C00610100002200230062010000250029001300000025003500C5000000250034005A0100002500230068010000270029001300000027001000F200000027002C005401000027003700550100002700320058010000270034005A01000027003A005D01000028002400130000002800370013000000290029001300000029003500C500000029001000F2000000290021003D010000290022004B010000290023004C0100002900370055010000290023005B01000029002300680100002A002400130000002A002300C40000002B002900130000002B003500C50000002B000200FB0000002B0022004B0100002B0025005C0100002B002300670100002B002300680100002C002900130000002C003500C50000002C0035003E0100002C002400480100002C0023004C0100002C003700550100002D002900130000002D000900F80000002D000900FA0000002D0042004D0100002D003800570100002D0025005C0100002D003C00610100002D002300620100002E002900130000002E0023004C0100002E003100510100002E002300520100002E003700550100002E002300560100002E003200580100002E0025005C0100002E0042005E0100002E0042005F0100002E003C00610100002E002300620100002E002200630100002E002D00660100002E002E00660100002F001200240100002F0021006C01000038001400E600000038001C00EE00000038001D00EF0000003A000400350100003C002100130000003C001300EC0000003E003F00130000003F004800D50000003F004900E00000003F000200000100003F004B00260100003F0019003F0100003F004F006D010000400021001300000040001A00C800000040001B00C8000000400018007E01000041003D001C01000043001600E900000043004900EB000000430042004A0100004400170010010000440042004A01000045001F001401000046004500FF000000460015002C01000047001E00850100004800210011000000480021001300000048002F002F010000480023004F01000049002100130000004A002100130000004B002100130000004C002100130000004D002100130000004E002100130000004F00210013000000500021001300000050002100430100005100400013000000510035002E0100005200400013000000520035002E0100005300400013000000530035002E010000540040001300000054004600300100005500400013000000550035002E010000560040001300000056004700310100005700410013000000570039002D010000580027001300000058000F001800000058002A001A000000580029001D0000005800180029000000580018002B00000058000F009900000058000F009A00000058000E009D00000058002100A100000058000500BD00000058002000BE00000058004C00BF00000058000300D700000058000300DD00000058004300E500000058004E00F100000058000500F9000000580021000A0100005800450012010000580045001301000058000D003201000058003B005301000058003B006501000058004E006A0100004800000001000000020000000000000094000000000000001A4B00000000000049000000110000003C00000000000000FFFFFFFFBC4D0000304B0000EC4C00004A000000110000003C00000000000000FFFFFFFFCC4D00003D4B0000F24C00004B000000110000003C00000000000000FFFFFFFFDC4D00004C4B0000FD4C00004C000000110000003C00000000000000FFFFFFFFEC4D0000594B0000034D00004D000000110000003C00000000000000FFFFFFFFFC4D0000684B00000E4D00004E000000110000003C00000000000000FFFFFFFF0C4E0000754B0000144D00004F000000110000003C00000000000000FFFFFFFF1C4E0000824B00000000000050000000000000003C000000A82D0000220000002C4E00008D4B00000000000051000000000000003C000000B02D0000220000003C4E00009D4B00000000000052000000000000003C000000B02D000022000000544E0000B04B00000000000053000000000000003C000000B02D000022000000744E0000C54B00000000000054000000000000003C000000B82D0000220000008C4E0000D84B00000000000055000000000000003C000000B02D000022000000A44E0000EB4B00000000000056000000000000003C000000C02D000022000000BC4E0000FE4B00000000000057000000000000003C000000C82D000022000000D44E00001D4C00000000000058000000010000003C000000000000002200000000000000334C00001A4D00000100000001000000262A0000060000001A002B0171107D0000000E0001000100010000002B2A0000040000007010000000000E0003000200020000002F2A0000090000006F200300210060000F006E208A0001000E000000010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E00010001000100000000000000040000007010700000000E000100010001000000372A0000040000007010700000000E0003000100020000003C2A00000F0000007100AC0000000C0038000A00220158007020A20001007110AD0001000E0000000200020001000000492A0000060000005B0114007010700000000E000400020002000000502A0000120000005420140054003B00130108006E204C0010005420140054003C0012016E20430010000E000200020001000000592A0000060000005B0116007010700000000E000400020003000000602A00004000000055201500DF0000015C2015005520150038002100542016005400450054211600541141006E204F00100054201600540045005421160054113E006E204E001000542016005400450012016E3050001001281754201600540045005421160054113E006E204F001000542016005400450054211600541141006E204E0010000E0002000200010000006E2A0000060000005B0117007010700000000E000500020003000000752A0000280000005430170054003B0012016E204C0010005430170054003B0012016E20490010005430170054003C00130108006E20430010006E10190004000C001A012A00121271306A0010020C006E106B0000000E000500020003000000802A00001B0000006E10190004000C001A019500121271306A0010020C006E106B0000005430180054003F00543118005411420072201D00100012000F0000000200020001000000892A0000060000005B0118007010700000000E000200020001000000902A0000060000005B0119007010700000000E000400020002000000972A00001D0000005420190054003B0012016E204C0010005420190054003B0054211900521128006E20490010005420190054003C00130108006E20430010000E0000000900030003000100A12A0000B60000006E10160008000A00120112122B00A60000000F015460200054003C001501003F6E203F0010005460200054003B006E2049001000546020005400400052611E006E10170008000A0352641C00C7438733B03159010800546020005400400052611F006E10180008000A0352641D00C7438733B031590109005460200054003F005461200054114200546320005433400072301E0010030F026E10170008000A0052631C00C73087006E10180008000A0352641D00C74387335464200054443C001505803F6E203F0054005464200054443B006E204900540013040A003540200035431E00546420007110AE0004000A043804160054641A00130508006E201A00540054641B006E201A00140028080D0122023E0070207200120027020F0254602000540040005200080059601E0054602000540040005200090059601F006E10170008000A0059601C006E10180008000A0059601D000F0200010300000000008900000046000000040000007A0000000C00010001013B87010000000300020001000000E22A0000120000005B1220007010700001005410200054003B005B101A005410200054003C005B101B000E000300030001000000EB2A0000080000005B012100590222007010700000000E000500030002000000F32A000024000000522022002B0018000000281439040300281154202100540045005421210038040500541144002803541143006E20520010000E0000010300FDFFFFFF0700000003000000040000000100000000000000022B0000050000007100B30000000C00110000000C00000003000100062B00006300000012001A01C60071106C0001000C011A02D900120323345D006E306E0021040C0212146E208200420023335E006E30810002030C031A051D016E206D0051000C056E20800045006E207E0035000C061F0647007210860006000C077210830007000C077210840007000A0838082A007210850007000C086E10710008000C091A0A37016E206D00A9000C0A6E2080004A006E207F008A000A0B390B12001A07C2006E206D0079000C076E20800047006E207E0087000C041F040200110428D328020D01000011000000010000005C000100010060000500020005000000632B00002800000022002E005431380070205B001000523126006E205C0010007110120004000C016E2065001000130111006E205E001000523135006E2066001000120112126E3069001002120112526E526200101211000500020005000000762B00001A00000022002E005431380070205B0010007110120004000C016E2065001000523135006E206600100013010A0012526E526200101211000500020005000000862B000017000000220021005431380070201F0010001A0179011A0281016E402100402112016E202300100012526E5226001012110000000B00040005000000962B00005500000022002D005471380070205300100022010600140262FFFEFE24105C0002000C021403A000010124105C0003000C03120423455C002430600032050C0252733700527536001406FF0000FF24305C0036050C0370300600210300006E10540000000C026E200A0012006E10550000000C026E200A0012006E2059009000527235006E205A00200013020A0012536E53580020436E205600A000220257007030A00072086E2057002000110000000200010002000000BB2B0000060000002200560070209E00100011000200010001000000C02B0000050000007010B60001000A000F0000000400010001000000C62B000012000000220003007010040000007110050000005201000013026400322104001211280212010F010200010001000000D22B0000110000005410420038000D0054103B006E10480000000A003900030028031200280212100F0000000400020001000000D72B0000130000008230542138006E10010001000C016E10070001000C0152110300C8101501003FC61087000F0000000500020003000000DE2B0000120000008240543138006E10010001000C016E10070001000C0112127130150002010A0087000F000100010000000000C02B00000300000069003900110000000500020001000000E52B0000850000007010700003001A000B007110090000000A00593034001A000E007110090000000A01593135001A0104007110090001000A01593123001A010D007110090001000A0159312A001A010C007110090001000A0159312C001301220159312E001301D20059312D001501804059312B0013012D005931290014013333333F59312800140100FF00FF593137001501FFFF593136001A0105007110090001000A01593125001A0109007110090001000A01593124001A0106007110090001000A01593126001A010A007110090001000A02593231007110090001000A02593232007110090001000A01593127007110090000000A00593030001A0008005B302F005B3438007010B40003000E0000000300010002000000062C00002600000062003900380003000E00202002003900140022000F007100110000000C0170200F001000220150007010920001006E2010001000280B2200580007211F0102007020A2001000690039000E0003000100020000001A2C00001900000054204200390003000E007010B50002000A00380009005420420012416E203100100028075420420012016E20310010000E0000000F00030004000000242C0000F0000000120007E1120221D33532CD00120346040D021A05A5006E20730054000A061A0700003806070012136E30770054070C04071E1A051C006E20730054000A063806080054CE3A006E30770054070C041A05BC006E20780054000C061208460906087110130009000A0939091000460906081A0A10006E207600A9000A093809030028049107020028214609060871106F0009000A09220A4000701079000A00460B06086E207B00BA000C0A6E207B005A000C0A6E107C000A000C0A6E307700A4070C04D800000101976E20780054000C05460905086E10750009000A0A121B2C0A6300000028281A089A006E20740089000A083808F9FF1238281F1A0818006E20740089000A083808EFFF01B828151A0899006E20740089000A083808E5FF1228280B1A0AA2006E207400A9000A093809DBFF280212F82B0849000000282FD80000014608050B7020A9008C000C086E203C008E002823D80000014608050B7020A8008C000C086E203C008E002817D80000014608050B7020A3008C000C086E203C008E00280B4608050B7040AA007C380C086E203C008E000000D8020201290034FF0E000002040074A7A3958E1AF1041E21DD067D17771922000000180000000E000000040000000001040000000000280000001C00000010000000040000001B00010006000000A32C00005B03000008001A00220125005402380070202E0021005B014200540142007010B70000000C026E203000210022012B00540238007020460021005B013D0022012B00540238007020460021005B013B0054013B0012026E204C00210054013B00520328006E2049003100220129005403380070203B0031005B013C0054013C00130308006E204300310054013C0052032A006E204000310054013C0012136E204200310054013C002204280052052E007020B00050000A0512E67030390054066E204100410022010D0070100B00010052042B006E200D00410052042A006E200C0041001A0407007110090004000A046E300E00310422042700540538007020320054005B0446005404460022052A007030440065066E2035005400520429008244540538006E10010005000C056E10070005000C057130150043050A048744540546006E10330005000C0559540400540546006E10330005000C05595405005405460062070A006E20380075006E10A60000000C057120140025000C055407460021587130080025080C086E2034008700540746006E10330007000C071F071E0013080A007020AF0080000A0959790600540746007010B70000000C096E203700970054074600220951007020940009006E2036009700220721005409380070201F00970022092A007030440069066E2024009700520929008299540A38006E1001000A000C0A6E1007000A000C0A71301500930A0A0987996E10200007000C0A59A904006E10200007000C0A59A90500220A4000701079000A001A0B12006E207B00BA000C0A6E10A70000000C0B6E207B00BA000C0A1A0B03006E207B00BA000C0A520B29006E207A00BA000C0A1A0B02006E207B00BA000C0A520B29006E207A00BA000C0A1A0B01006E207B00BA000C0A6E107C000A000C0A1A0B79011A0C81016E402100A7CB6E2023002700520A28006E202200A7007010B70000000C0A6E202500A700220A2E00540B380070205B00BA001A0B8F016E206500BA00520B34006E206600BA00620B01006E206800BA00150BA0416E206700BA00220B2A00703044006B06130C0B006E204500CB006E205F00BA00220D5200702096000D006E206100DA00220D2900540E380070203B00ED005B0D3E00540D3E006E2042003D006E10BA0000000C0D540E3E007030B100D00E220D2B00540E380070204600ED00125E6E5E4A008D8E130F10006E204B00FD00220F2E00540C380070205B00CF00520C34006E206600CF00150C90416E206700CF00130C11006E205E00CF0022082A0070304400680613060E006E20450068006E205F008F006E20B900F00022062E005402380070205B002600620202006E205D00260012F26E20600026006E20640036006E2063003600520334006E2066003600150320416E20670036006E205E00C60012036E5E620036336E20B800600022032C00540E380070204D00E3005B03450022032800520E2D007020B000E0000A0E70303900230E5B0343002202280054033C006E103D0003000C0370203A0032005B024400540244001503803F59230B0054024500540343006E20520032005402450052032C006E2051003200220229005403380070203B0032005B0241005402410012136E204200320022022B00540338007020460032001233130E0A006E534A00E2E36E204B00C20022032A0012EC70304400C30C130C09006E204500C300220C2200540E380070202700EC006E2029003C00120E6E202800EC001A0E23006E202C00EC00520E34006E202D00EC00220E5300702098000E006E202A00EC00220E540070209A000E006E202B00EC00220E2A000811010012E1703044001E0113010B006E2045001E002201220008100300540338007020270031006E202900E10012036E20280031001A0393006E202C003100520334006E202D0031002203550070209C0003006E202A00310022141F001418080180001319FEFF1315FEFF1316FEFF1317020076061B001400080314005B03400054034000021204001304330059340700540340001204593408005403400013046400593409005403420054043D006E202F00430054033D0054043B006E204700430054033D0054043C006E20470043006E10A70000000C033803080054033B006E2047007300280854033B00540446006E20470043006E204700FD006E204700AD0054033C006E203C00D30054033C006E203C00630054034500540441006E204E00430054033C00540445006E203C0043006E204700C2006E204700120054033C006E203C002300540338006E10020003000C035B033F0054033F0054044200081301005401400072301C004301540141006E103E0001006E10B20000000C01540341007030B10010030E0010000E5A000D000E001501C6020E3C5B008901000E008C01000E4B0300C301032D8800D30101FC020E00D5010187030E968700F20101FC020E00F7010183030E694BB4B497B4B500BA0201FC020E00BC020187030E878796E100C4020187030EE1B400C20201FC020E00D30201FC020E00D5020187030E87B496008D03028703A9020E021F9502771D967901110F011110F0026B1D870300BA0202870303BB02029678E2785C1B1E0301E0013C6B0501026E1D050005038787696900850301FC020E5A6900FE0302FC02000E00800402D501D0010E6A2D1F011011004A000E009901000E780401CD01396C960302D901454B6A0303CE013D690305C201443C6A0406A602487C01120F0308BC023D4B0409CC01396C69030AB802443C69690307C301443C79050705080509050A02771D05010502050305050506272D008E0401F9020E780300FB022F5A785A5A5A5A00990401F9020E780300FB022F785A6900A10401F9020E780300880322784B4B00E80303E401E301F6020E780300F7022E020D01250E0301D101071E78793C5A693C020C86008503000E004A018C030E00B804000E5A0300C502043C00AC04000E00B0040185020E00B5040185020E007D01C3010E02513B87878787874B4B4B4B5A5A4B87878787696969021D4A2D3C00860101D7010E5A4B960300FF01108F05001EA600BE04000E4B1F69796A00B503029A0299020E1E0300F502021F03019B022A010103028502023C1F0303F8025B2D0304E50140A51E4D1E882D4C6B0306F1026001141401020307E40102027B1D0507690309E4010201170F40050906074B0305F20260020D01370E2D027BA42D96027A1D2D96027B1D9602621D0503050405050506022D4A0502050700B401000EB4969696697A9678786901110F5A0301E9010E5A5A9896A501120F0304CA0102878878870305DB015CA501101096AC7803078803228701120F0309CB01026969B6012A0B7D3C5A7978030AEA022F5A5A5A5A5A030BC2022B5A3C021286965A9878030DFE022C4B5A78030FFD022F5A5A5A5A0308C1022B5A3C3E78030682022F5A4B3C3C5A5A3C4B3E97D2D2697878966B780302BD022C693E69030397022B5B78030C8402233C4B5A5A8E8F010505010311E9010E3C030E96022B5B01040503031097022B5A0301D201233C4B5A5A020B86011417010405040312CA01024B5A6C787878696A793C3C5A5A78783C3C5A87010605010313D201235A5A9600000000010000003D0000000100000019000000010000001A000000010000001B00000001000000230000000300000001000000160000000100000001000000010000003F000000030000005B000100010000000300000001003F005A000000030000000500370001000000010000003C000000020000003C005E00020000003F003F00020000003F005D000100000058000000010000000000000002000000010001000400000001000100010001000500000001000100010001000100000001000000020000000100000003000000010000000500000006000000050001003F0001005A003F0001000000060000000100000008000000010000000B000000020000000B000100010000000E00000001000000100000000100000013000000010000001C000000020000001C001D00010000001D0000000200000024005A000100000026000000010000002E0000000100000037000000030000003F003F003F00000001000000420000000200000058000100010000005A000000020000005F0029000200000060005C00020000001C001800020000003F00010000001122203E3C2F626F64793E3C2F68746D6C3E000A22206865696768743D220009222077696474683D2200072331433236324400072331623565323000072332463344344300072333326362303000072334316333303000072337663030303000072338304342433400072338324341464400092344443134314332320009234545314332413335000723464646464646000328295600072D5B302D395D2A00083C636C696E69743E00413C68746D6C3E3C686561643E3C2F686561643E3C626F6479207374796C653D226D617267696E3A20303B2070616464696E673A2030223E3C696D67207372633D2200063C696E69743E00084170705468656D65000942544E5F434F4C4F52000642746E4F4646000542746E4F4E000843617465676F7279000A43617465676F7279424700074368616E676573000D436865636B426F78436F6C6F72000C436F6C6C617073654164645F000A4372656174654D656E75000C44454641554C545F424F4C4400014600044649464C00064649545F58590014466C6F6174696E674D6F644D656E752E6A6176610010484944452F4B494C4C2028486F6C6429000149000A49434F4E5F414C504841000949434F4E5F53495A45000249490002494C000449636F6E002E49636F6E2068696464656E2E2052656D656D626572207468652068696464656E2069636F6E20706F736974696F6E000F49636F6E576562566965774461746100014C00024C4900044C494C5A00024C4C00034C4C4900044C4C494900034C4C4C00044C4C4C4900164C616E64726F69642F6170702F41637469766974793B00334C616E64726F69642F6170702F41637469766974794D616E616765722452756E6E696E6741707050726F63657373496E666F3B001D4C616E64726F69642F6170702F41637469766974794D616E616765723B00194C616E64726F69642F636F6E74656E742F436F6E746578743B00244C616E64726F69642F636F6E74656E742F7265732F436F6C6F7253746174654C6973743B001F4C616E64726F69642F636F6E74656E742F7265732F5265736F75726365733B00194C616E64726F69642F67726170686963732F4269746D61703B00204C616E64726F69642F67726170686963732F4269746D6170466163746F72793B00184C616E64726F69642F67726170686963732F436F6C6F723B001B4C616E64726F69642F67726170686963732F54797065666163653B00244C616E64726F69642F67726170686963732F6472617761626C652F4472617761626C653B002C4C616E64726F69642F67726170686963732F6472617761626C652F4772616469656E744472617761626C653B00134C616E64726F69642F6F732F42756E646C653B00144C616E64726F69642F6F732F48616E646C65723B00134C616E64726F69642F6F732F4C6F6F7065723B00134C616E64726F69642F746578742F48746D6C3B00164C616E64726F69642F746578742F5370616E6E65643B00234C616E64726F69642F746578742F546578745574696C73245472756E6361746541743B00184C616E64726F69642F746578742F546578745574696C733B00154C616E64726F69642F7574696C2F4261736536343B001D4C616E64726F69642F7574696C2F446973706C61794D6574726963733B00194C616E64726F69642F7574696C2F547970656456616C75653B001A4C616E64726F69642F766965772F4D6F74696F6E4576656E743B00234C616E64726F69642F766965772F56696577244F6E436C69636B4C697374656E65723B00274C616E64726F69642F766965772F56696577244F6E4C6F6E67436C69636B4C697374656E65723B00234C616E64726F69642F766965772F56696577244F6E546F7563684C697374656E65723B00134C616E64726F69642F766965772F566965773B00254C616E64726F69642F766965772F5669657747726F7570244C61796F7574506172616D733B002B4C616E64726F69642F766965772F5669657747726F7570244D617267696E4C61796F7574506172616D733B00294C616E64726F69642F766965772F57696E646F774D616E61676572244C61796F7574506172616D733B001C4C616E64726F69642F766965772F57696E646F774D616E616765723B00184C616E64726F69642F7765626B69742F576562566965773B00174C616E64726F69642F7769646765742F427574746F6E3B00374C616E64726F69642F7769646765742F436F6D706F756E64427574746F6E244F6E436865636B65644368616E67654C697374656E65723B001F4C616E64726F69642F7769646765742F436F6D706F756E64427574746F6E3B001C4C616E64726F69642F7769646765742F4672616D654C61796F75743B00244C616E64726F69642F7769646765742F496D61676556696577245363616C65547970653B001A4C616E64726F69642F7769646765742F496D616765566965773B002A4C616E64726F69642F7769646765742F4C696E6561724C61796F7574244C61796F7574506172616D733B001D4C616E64726F69642F7769646765742F4C696E6561724C61796F75743B002C4C616E64726F69642F7769646765742F52656C61746976654C61796F7574244C61796F7574506172616D733B001F4C616E64726F69642F7769646765742F52656C61746976654C61796F75743B001B4C616E64726F69642F7769646765742F5363726F6C6C566965773B00174C616E64726F69642F7769646765742F5377697463683B00194C616E64726F69642F7769646765742F54657874566965773B00164C616E64726F69642F7769646765742F546F6173743B00224C64616C76696B2F616E6E6F746174696F6E2F456E636C6F73696E67436C6173733B00234C64616C76696B2F616E6E6F746174696F6E2F456E636C6F73696E674D6574686F643B001E4C64616C76696B2F616E6E6F746174696F6E2F496E6E6572436C6173733B00214C64616C76696B2F616E6E6F746174696F6E2F4D656D626572436C61737365733B00244C64616C76696B2F616E6E6F746174696F6E2F4D6574686F64506172616D65746572733B001D4C64616C76696B2F616E6E6F746174696F6E2F5369676E61747572653B001A4C64616C76696B2F616E6E6F746174696F6E2F5468726F77733B00184C6A6176612F6C616E672F4368617253657175656E63653B00114C6A6176612F6C616E672F436C6173733B00144C6A6176612F6C616E672F436C6173733C2A3E3B00214C6A6176612F6C616E672F496C6C6567616C5374617465457863657074696F6E3B00134C6A6176612F6C616E672F496E74656765723B00204C6A6176612F6C616E672F4E756C6C506F696E746572457863657074696F6E3B00124C6A6176612F6C616E672F4F626A6563743B00144C6A6176612F6C616E672F52756E6E61626C653B001C4C6A6176612F6C616E672F52756E74696D65457863657074696F6E3B00124C6A6176612F6C616E672F537472696E673B00194C6A6176612F6C616E672F537472696E674275696C6465723B00124C6A6176612F6C616E672F53797374656D3B00154C6A6176612F6C616E672F5468726F7761626C653B00194C6A6176612F6C616E672F7265666C6563742F4669656C643B001A4C6A6176612F6C616E672F7265666C6563742F4D6574686F643B00164C6A6176612F7574696C2F436F6C6C656374696F6E3B00144C6A6176612F7574696C2F4974657261746F723B000F4C6A6176612F7574696C2F4D61703B00134C6A6176612F7574696C2F4D61703C2A2A3E3B00154C756B2F6C676C2F4D61696E41637469766974793B00104C756B2F6C676C2F5224636F6C6F723B00134C756B2F6C676C2F52246472617761626C653B00114C756B2F6C676C2F52246C61796F75743B00114C756B2F6C676C2F52246D69706D61703B00114C756B2F6C676C2F5224737472696E673B00104C756B2F6C676C2F52247374796C653B000A4C756B2F6C676C2F523B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524323B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524333B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524343B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524353B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524363B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524373B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524383B00204C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E753B00074D415251554545000D4D454E555F42475F434F4C4F52000B4D454E555F434F524E455200154D454E555F464541545552455F42475F434F4C4F52000B4D454E555F484549474854000A4D454E555F574944544800084D494E494D495A4500114D61696E41637469766974792E6A61766100134D656E752073657276696365206B696C6C656400084D6F645F4D656E75000E4E756D626572547874436F6C6F72000A526164696F436F6C6F72000C526963685465787456696577000B5269636857656256696577000C5365656B426172436F6C6F7200145365656B42617250726F6772657373436F6C6F7200065377697463680003544147000A544558545F434F4C4F52000C544558545F434F4C4F525F3200065468726561640006546F67676C650009546F67676C654F46460008546F67676C654F4E0005547275655F000156000256460002564900035649490005564949494900065649494949490002564C0003564C490007564C494C495A4C0003564C4C0004564C4C4C0003564C5A0002565A00015A00025A4C00035A4C4C00025B4200025B4900125B4C6A6176612F6C616E672F436C6173733B00135B4C6A6176612F6C616E672F4F626A6563743B00135B4C6A6176612F6C616E672F537472696E673B00035B5B4900015F000A61636365737324303030000A61636365737324313032000A61636365737324323030000B616363657373466C616773000A6163746976697469657300086163746976697479000D61637469766974795F6D61696E000761646452756C65000761646456696577001A616E64726F69642E6170702E416374697669747954687265616400086170705F6E616D650006617070656E64000E6170706C7944696D656E73696F6E000F6170706C7944696D656E73696F6E320002617200026174000561744F626A000F6261636B67726F756E64436F6C6F720004626F6F6C000C627574746F6E5374617465730008636C6F736542746E000D636F6C6C6170736564566965770005636F6C6F72000E636F6D706F756E64427574746F6E0008636F6E7461696E730007636F6E746578740012636F6E76657274446970546F506978656C73000763757272656E74001563757272656E74416374697669747954687265616400066465636F6465000F6465636F6465427974654172726179000764656E736974790002647000086472617761626C650001650006657175616C73000C657870616E646564566965770008666561744E616D650007666561744E756D000766656174757265000B666561747572654C6973740007666F724E616D65000866726F6D48746D6C000A67644D656E75426F647900036765740009676574416374696F6E000A676574426F6F6C65616E0008676574436C617373000A676574436F6E7465787400106765744465636C617265644669656C6400116765744465636C617265644D6574686F640011676574446973706C61794D657472696373000E676574466561747572654C697374000F6765744C61796F7574506172616D73000D6765744D61696E4C6F6F70657200106765744D794D656D6F72795374617465000767657452617758000767657452617759000C6765745265736F757263657300106765745468756D624472617761626C65000E676574546F7041637469766974790010676574547261636B4472617761626C65000D6765745669736962696C697479001067657457696E646F774D616E61676572000767726176697479000768616E646C657200076861734E657874000868617368436F6465000768656164696E67000668656967687400076869646542746E000169000B69635F6C61756E63686572001669635F6C61756E636865725F6261636B67726F756E64001669635F6C61756E636865725F666F726567726F756E64001169635F6C61756E636865725F726F756E64000A696D706F7274616E6365000C696E6974466C6F6174696E67000D696E697469616C546F75636858000D696E697469616C546F756368590008696E697469616C580008696E697469616C590008696E7374616E63650006696E766F6B65000C69734469676974734F6E6C79000B69734E6F74496E47616D65000F697356696577436F6C6C617073656400086974657261746F72000F6C506172616D73436C6F736542746E000E6C506172616D734869646542746E00066C61796F7574000C6C696E6561724C61796F757400066C697374465400056C6C42616B00086C6F616444617461000B6C6F61644C696272617279000B6D4163746976697469657300096D436F6C6C61707365000A6D436F6C6C617073656400096D457870616E646564000E6D526F6F74436F6E7461696E657200096D53657474696E6773000E6D57696E646F774D616E6167657200086D616B655465787400036D617000076D61746368657300066D69706D6170000B6D6F74696F6E4576656E7400046E616D6500056E616D657300096E61746976656C676C00046E65787400106F6E436865636B65644368616E67656400076F6E436C69636B00086F6E437265617465000B6F6E4C6F6E67436C69636B00076F6E546F756368000F6F6E546F7563684C697374656E65720006706172616D73000A7061727365436F6C6F7200087061727365496E7400077061746368657300067061757365640004706F737400047261775800047261775900067265636F7264000E72656C61746976654C61796F7574000E72656D6F7665416C6C5669657773000A72656D6F766556696577000C7265706C61636546697273740002726C000A726C73657474696E67730009726F6F744672616D65000372756E001572756E6E696E6741707050726F63657373496E666F00127361766564496E7374616E6365537461746500067363726C4C4C000E7363726C4C4C457870616E64656400087363726F6C6C546F000A7363726F6C6C56696577000D73657441636365737369626C650008736574416C70686100127365744261636B67726F756E64436F6C6F72000A736574436865636B65640008736574436F6C6F72000E736574436F6E74656E7456696577000F736574436F726E6572526164697573000C736574456C6C697073697A65000A73657447726176697479000E73657448656164696E6754657874000E736574496D6167654269746D6170000F7365744C61796F7574506172616D7300157365744D6172717565655265706561744C696D6974001A7365744F6E436865636B65644368616E67654C697374656E657200127365744F6E436C69636B4C697374656E657200167365744F6E4C6F6E67436C69636B4C697374656E657200127365744F6E546F7563684C697374656E6572000E7365744F7269656E746174696F6E000A73657450616464696E67000C7365745363616C6554797065000B73657453656C6563746564000D73657453696E676C654C696E6500097365745374726F6B65000773657454657874000C73657454657874436F6C6F72000B7365745465787453697A65000B73657454696E744C697374000C7365745469746C6554657874000B73657454797065666163650012736574566572746963616C47726176697479000D7365745669736962696C697479000873657474696E6773000C73657474696E67734C697374000C73657474696E67734F70656E000473686F77000573706C6974000A7374617274696D616765000C73746F70436865636B696E670003737472000873747253706C69740006737472696E6700057374796C6500077375624665617400057377694F6E000773776974636852000A73776974636865644F6E0004746578740009746578742F68746D6C00087465787456696577000674686973243000057469746C6500097469746C65546578740008746F537472696E670009746F704D617267696E0010757064617465566965774C61796F757400057574662D38000176000B76616C24666561744E756D000576616C7565000676616C756573000476696577000577566965770006776569676874000577696474680001780002783000017900667E7E44387B226261636B656E64223A22646578222C22636F6D70696C6174696F6E2D6D6F6465223A226465627567222C226861732D636865636B73756D73223A747275652C226D696E2D617069223A32382C2276657273696F6E223A22382E31332E3139227D00A7057E7E7E7B224C756B2F6C676C2F4D61696E41637469766974793B223A223333376637303031222C224C756B2F6C676C2F5224636F6C6F723B223A223563303432323433222C224C756B2F6C676C2F52246472617761626C653B223A226534383863663836222C224C756B2F6C676C2F52246C61796F75743B223A226137316639643361222C224C756B2F6C676C2F52246D69706D61703B223A226338363638376533222C224C756B2F6C676C2F5224737472696E673B223A223163383662656234222C224C756B2F6C676C2F52247374796C653B223A226462383932616136222C224C756B2F6C676C2F523B223A223363383335346463222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313B223A223733326164363638222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524323B223A226562346634636537222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524333B223A223836623937623930222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524343B223A223637303261386131222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524353B223A226330306139393934222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524363B223A223663353662303839222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524373B223A223836336535643736222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524383B223A223934646266663863222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E753B223A226562326664373133227D0001E29A9900023202C0010419A90217D30230018403184F023202C0010419A90217DE023202C0010419A902371701023202C0010419A902372701023202C0010419A902377201023202C0010419A90237730102330184031C061849184A184B184C184D184E02310184031AA5023202C0010400A9021E023402C0011C0144108000AA021C011E02310184031AB402360184031C01183902310184031AB7023402C0011C0244108000241010AA021C021E1E02350184031C01170F02310184031AAA000002018701888004AC2C01818004C82C890104E02C010001000C098B01828004842D020001000D0901098C018280049C2D010001000F098D01828004B42D02000100100901098E01828004CC2D0100010012098F01828004E42D0100010013099001828004FC2D000001009101828004942E000001019201808004AC2E930101C42E000101011490209401808004F42E950101902F0002010115000190209601808004C42F970101E02F000101011790209801808004F0309901018C31000101011890209A01808004B4329B0101EC31000101011990209C01808004D0329D0101EC32000701011A10011001020102010201020190209E01808004C4369F0101B83300020101219020019020A001808004F836A101019837022313063319060A23000100010001000100010001000100010001000100010001000100010001000200010001000100010202000100010001000100010001000100010001000100010001000100A201818004B43F0102F039018902000109D0410302D03A0102943B0102D43B0102AC42018820F0370188209C3F018820AC3D0102B03E0102E83E0102F042020A8C380102E0460102C83D0102FC3D0102903DA601800200018002000B80020006800200018002000180020001640000017F02640100027F640200027F01640000037F02640000047F640100047F01640000057F01640000067F01179600000002000000694A00005E4A000002000000694A0000704A000002000000694A00007B4A000002000000694A0000874A000002000000694A0000934A000002000000694A00009F4A000001000000AB4A000002000000BE4A0000C54A000001000000CF4A000002000000DF4A0000C54A000001000000E64A000002000000EF4A0000C54A000002000000F64A00000A4B000002000000134B0000C54A0000204D00000000000000000000000000002C4D0000000000000000000000000000384D0000000000000000000000000000444D0000000000000000000000000000504D00000000000000000000000000005C4D0000000000000000000000000000684D0000000000000000000000000000704D0000000000000000000000000000844D0000000000000100000000000000940000007C4D0000844D0000000000000200000000000000960000007C4D000097000000904D0000844D0000000000000100000000000000980000007C4D0000844D00000000000001000000000000009A0000007C4D0000844D00000000000001000000000000009C0000007C4D0000984D00000000000001000000000000009E0000007C4D0000B04D0000000000000100000000000000A0000000A44D0000110000000000000001000000000000000100000090010000700000000200000061000000B00600000300000050000000340800000400000048000000F40B000005000000BB000000340E000006000000110000000C140000012000002C0000002C1600000320000024000000262A0000011000002E000000A82D00000220000090010000402F000004200000110000005E4A000000200000110000001A4B00000520000007000000EC4C0000031000000E000000204D0000062000000F000000BC4D00000010000001000000EC4E0000" +#define OreoOrMore "6465780A303339004C4113C2611E5C8E85E1508B37D64EF361BE681849E68E46A894000070000000785634120000000000000000D89300008B020000700000008F0000009C0A000084000000D80C00007C000000081300003C010000E81600001F000000C820000000700000A82400005C5C00005E5C0000645C00006A5C00007D5C0000895C0000945C00009D5C0000A65C0000AF5C0000B85C0000C15C0000CA5C0000D35C0000DC5C0000E55C0000F05C0000FB5C0000045D0000085D00000B5D0000105D0000155D00001C5D00001F5D0000285D00002B5D0000385D00003B5D00004C5D0000535D0000595D0000625D00006C5D0000AF5D0000B75D0000C15D0000CC5D0000D45D0000DB5D0000E35D0000F35D0000FF5D00000C5E0000165E0000225E00002B5E0000355E0000445E00004E5E00005C5E0000685E00007C5E00008A5E0000975E0000A75E0000AA5E0000B05E0000B85E0000C55E0000DB5E0000ED5E0000F05E0000FC5E0000075F00000B5F0000115F0000155F00001A5F0000205F0000505F0000615F00006C5F0000785F00007B5F00007E5F0000825F0000875F00008E5F0000945F00009A5F0000A15F0000A55F0000AA5F0000B05F0000B55F0000BB5F0000D35F000008600000276000004A6000006560000080600000B4600000D7600000F1600000176100003861000053610000756100008F610000B3610000D0610000F661000024620000376200004C620000626200007762000090620000A5620000CE620000E66200000B630000256300004E6300007163000088630000A7630000C2630000DE630000036400002E640000576400007C64000091640000B8640000E5640000106500002E6500005D65000077650000AC650000CA650000E865000009660000286600005B660000746600008F660000C8660000E96600000467000022670000486700006467000090670000AF670000CD670000EA67000018680000396800005668000088680000A2680000BC680000DD680000F668000011690000296900004D6900007269000092690000B5690000DB690000FA690000166A0000306A0000436A0000596A00007C6A0000916A0000B36A0000D66A0000EA6A0000006B00001E6B0000326B00004D6B0000616B0000786B0000936B0000AF6B0000C36B0000DB6B0000F06B0000066C00001E6C0000306C0000566C0000676C00007C6C0000B56C0000CC6C0000DE6C0000F36C0000066D0000196D00002C6D00003E6D00004A6D0000866D0000AB6D0000D06D0000F56D00001A6E0000416E0000686E00008F6E0000B46E0000D96E0000FE6E0000226F0000466F00006A6F00008E6F0000B26F0000D66F0000FA6F00001E7000004270000070700000A1700000C3700000CC700000DB700000E8700000FF7000000C7100001871000022710000357100004A710000547100006471000068710000707100007D7100008971000097710000A4710000AE710000B7710000C5710000DB710000E4710000EC710000F1710000FD7100000B7200003B72000077720000827200009072000098720000A0720000AB720000B5720000BC720000BF720000C3720000C7720000CC720000D3720000DB720000E0720000E4720000E9720000F1720000F772000000730000087300000E730000197300001E730000247300002B730000317300003B730000427300004C7300005173000055730000587300005C730000617300006573000069730000867300009A730000AF730000C4730000C8730000CD730000D0730000D4730000E0730000EC730000F873000004740000107400001D7400002974000033740000427400004B740000547400005B74000077740000937400009D740000A5740000B5740000C6740000CA740000D2740000D6740000DD740000EE740000F4740000FF7400000775000015750000217500002B750000357500003F7500004C7500005B75000062750000727500007C7500008575000099750000A1750000AA750000C1750000C9750000DA750000E3750000EB750000F4750000F875000002760000057600000F7600001C7600002C7600003476000038760000467600004B76000050760000557600005A7600005F7600006476000069760000737600007C7600008576000092760000A1760000B0760000B9760000C3760000CD760000D9760000DE760000E9760000F876000004770000107700001F7700002977000035770000477700005A7700006D7700007D7700008A7700009B770000AA770000BC770000C4770000D2770000E7770000F0770000F9770000077800001878000023780000357800003E780000487800005A7800006A7800007C7800008B7800009D780000A6780000AF780000B9780000C2780000CC780000D5780000DD780000E6780000E9780000F67800000E79000026790000397900003D790000427900004E790000557900005E7900006C790000787900008779000096790000A0790000AA790000B8790000C2790000CC790000D4790000DC790000E7790000F5790000FE7900000B7A0000117A0000227A00002C7A00003D7A00004D7A0000827A00008A7A0000987A0000A77A0000B77A0000C27A0000D07A0000DF7A0000EE7A0000F47A0000FC7A0000037B00000A7B0000147B0000217B00002E7B0000397B0000457B0000507B0000607B00006B7B00007B7B0000857B00008A7B0000937B0000987B0000A27B0000A77B0000AF7B0000BC7B0000C27B0000C97B0000D47B0000DA7B0000DF7B0000E87B0000F27B0000047C00000D7C0000177C0000267C0000367C0000437C0000567C0000697C00007F7C0000947C00009D7C0000AE7C0000BA7C0000C37C0000CB7C0000D37C0000DF7C0000E67C0000F27C0000FC7C0000057D00000D7D0000177D00001D7D0000277D00002C7D0000397D0000457D00004B7D0000517D0000597D0000697D0000797D0000857D00008E7D00009C7D0000AA7D0000AE7D0000BA7D0000C57D0000CA7D0000E17D0000E47D0000F07D0000FE7D0000127E00001E7E0000267E0000367E0000407E00004C7E0000557E00005F7E0000717E0000807E00008C7E0000987E0000A27E0000B67E0000C97E0000D57E0000DF7E0000EF7E0000FF7E0000107F0000197F0000327F0000407F00004C7F0000567F0000647F0000707F0000807F0000907F00009E7F0000AE7F0000BF7F0000CB7F0000E27F0000EA7F0000F77F0000FF7F0000078000001C800000388000004C800000668000008180000099800000B5800000C9800000D9800000E5800000F2800000008100000D8100001B8100002A8100003581000040810000498100005781000064810000718100007F8100008C810000A0810000A9810000B8810000C2810000CC810000DA810000E8810000EE810000F4810000FD81000004820000138200001F8200002D820000328200003C820000448200004B820000548200005B820000648200007082000076820000818200008B820000938200009B820000A2820000AD820000B7820000C8820000D3820000E5820000EA820000F1820000F4820000F98200000483000010830000218300002F8300004083000054830000628300006F830000828300008C8300009A830000A3830000B0830000BD830000C7830000D5830000DE830000E5830000EE830000F6830000FC830000038400000B8400001284000015840000198400001D84000020840000238400008B840000168A00001C8A0000228A0000370000003D00000049000000560000005700000058000000590000005A0000005B0000005C0000005D0000005E0000005F000000600000006100000062000000630000006400000065000000660000006700000068000000690000006A0000006B0000006C0000006D0000006E0000006F000000700000007100000072000000730000007400000075000000760000007700000078000000790000007A0000007B0000007C0000007D0000007E0000007F000000800000008100000082000000830000008400000087000000890000008A0000008B0000008C0000008D0000008E0000008F000000900000009100000092000000930000009400000095000000960000009700000098000000990000009A0000009B0000009C0000009D0000009E0000009F000000A0000000A1000000A2000000A3000000A4000000A5000000A6000000A7000000A9000000AA000000AB000000AC000000AD000000AE000000AF000000B0000000B1000000B2000000B3000000B4000000B5000000B6000000B7000000B8000000B9000000BA000000BB000000BD000000C0000000C1000000C2000000C3000000C4000000C5000000C6000000C7000000C8000000C9000000CA000000CB000000CC000000CD000000CE000000CF000000D0000000D1000000D2000000D3000000D4000000D5000000D6000000D7000000D8000000D9000000DA000000DB000000DC000000DD000000DE000000020100001A0100001D0100001E0100001F01000020010000210100002201000023010000240100003700000000000000000000003800000000000000785900003D000000010000000000000040000000010000008459000042000000010000008C59000042000000010000009459000043000000010000009C5900004A00000003000000000000005100000003000000A45900004A00000007000000000000004A00000008000000000000004B0000000B00000084590000510000000B000000AC5900004B0000000C000000845900004A0000000D00000000000000530000000E000000B45900004A00000013000000000000005100000015000000945900004A00000018000000000000004A0000001900000000000000510000001C00000094590000510000001F000000945900004A00000022000000000000004A00000028000000000000004B00000029000000845900004C00000029000000C05900004D00000029000000C85900004E00000029000000D45900004F00000029000000E05900005000000029000000EC5900005100000029000000945900005400000029000000F85900004A0000002A000000000000004A0000002D000000000000005500000048000000005A00004A00000051000000000000005100000051000000945900004B00000053000000845900004A00000056000000000000004B000000560000008459000051000000560000008C59000054000000560000000C5A00005400000056000000145A00005100000056000000945900004A000000590000000000000054000000590000001C5A00005400000059000000F85900004B0000005A00000084590000510000005A00000094590000510000005D00000094590000540000005E000000245A00004A00000060000000000000004A000000620000000000000051000000640000002C5A00005100000084000000A45900000201000085000000000000000301000085000000345A000004010000850000008459000005010000850000003C5A00000601000085000000445A00000701000085000000505A00000801000085000000605A00000901000085000000685A00000901000085000000705A00000901000085000000785A00000A01000085000000805A00000D01000085000000885A00000C01000085000000985A00000901000085000000405900000901000085000000A45A00000901000085000000AC5A00000901000085000000B45A00000901000085000000BC5A00000901000085000000C45A00000A01000085000000CC5A00000901000085000000D45A00000901000085000000DC5A00000901000085000000E45A00000901000085000000EC5A00000901000085000000305900000901000085000000485900000901000085000000605900000901000085000000685900000901000085000000F45A00001101000085000000FC5A00001801000085000000045B000009010000850000000C5B00000901000085000000385900000901000085000000145B000013010000850000001C5B00000901000085000000505900001801000085000000285B00000901000085000000305B00001101000085000000385B00000901000085000000705900000901000085000000405B00000F01000085000000485B00000901000085000000545B000009010000850000005C5B00001501000085000000645B00000901000085000000785B00000901000085000000945900001401000085000000805B000009010000850000008C5B00000901000085000000945B000009010000850000009C5B00001401000085000000A45B00000901000085000000A45900000B01000085000000B05B00000C01000085000000C05B00000E01000085000000CC5B00001001000085000000DC5B00001601000085000000F05B00001201000085000000FC5B00001701000085000000085C000011010000850000001C5C00001101000085000000245C000019010000850000002C5C00000901000085000000345C000011010000850000003C5C00001101000085000000445C00001A01000086000000000000001B01000086000000F45A00001C010000860000004C5C00001B01000086000000785B00001B010000860000008C5900001B01000086000000585900001B01000086000000945900001B01000086000000A45900005200000087000000545C00004A0000008C00000000000000510000008C00000094590000040001009E01000011001100F000000012001200340000001D001D00DF00000022000000520100002A000100950100002A000100800200002B000100630200002C0001008F0100002C000100810200002C0001008402000039003900390000003B0000007F020000670001003D0100006800010099010000680001009A010000690001002F0100006A000100980100006A0001009B0100006B000100350100006C000100230000006E0084005E0100006E0047005F0100006E005900600100006E005900610100006E000100620100006E000100630100006E006500640100006F0084005D0200006F0059006F0200006F00010070020000700084005D0200007000590079020000710084005D020000710033006A0200007100010070020000710059007102000071008D0072020000720084005D02000072000100700200007200440076020000730076005E020000740076005E020000750076005E0200007500070069020000750037006C020000760084005D020000760033006A020000760082006D020000760083006E020000760059006F020000760001007002000076000100730200007600860075020000770084005D020000770059006F020000770001007002000078008600AC010000780084005D02000078003C006B020000780059007702000078004700780200007A0084005D0200007B0086004A0200007B0084005D0200007C0084005D0200007D0084005D0200007E0084005D0200007F002900470100007F0029005D0100007F000000A30100007F000000A40100007F000100A50100007F000100A60100007F0084005D020000800084005D020000800059006F0200008000010070020000810084005D020000810059006F020000810001007002000081000100740200008100470078020000820084005D0200008200010068020000830059005A020000830084005D020000840001002400000084000100250000008400010026000000840001002C000000840001002F000000840000003E000000840001003F00000084000100E000000084000000E100000084000100E200000084000100E300000084000100E400000084005900E900000084000100ED00000084000100F200000084000100F300000084005900F600000084000100F700000084000100F800000084000100FF0000008400010000010000840003002E01000084008400A801000084003C00C501000084004000C601000084003C00C701000084004000C801000084003C00C901000084002D00CA01000084002C00E801000084003C00EE010000840038000102000084003B000902000084003B000A020000840041000C02000084003A00500200008400860051020000030037002200000003000E008401000003002B0087010000030021008E01000003004B00DC010000030046004F020000040037002200000005003F007E0100000600410022000000060009004D0100000700370054010000070044002D0200000700530045020000070037004B0200000B006500220000000B000C001B0200000B000B001F0200000C007800220000000C000D007B0200000D001600790100000F000F005101000010000500EC01000013003D0018020000130047004102000014003700220000001400390017020000140038001A02000014003A003D02000015001100EB01000017004C002200000017007E00F1010000180012007D0100001A0014006C0100001B003900220000001E007C00AD0100001E007C00AE0100001F0015007B0100002100810050010000230001003701000024000200700100002400000082010000240000008301000029000A007601000029003900460200002C003C00220000002D005400310100002D005300FB0100002D005400640200002E003A00620200002F004000220000002F0020007C0100002F006600C20100002F003800130200002F003900140200002F005600260200002F005200340200002F003B003602000031001800730100003200430022000000320039001C020000330040002200000033007500120200003300390014020000330056002602000033004F002F0200003300510032020000330064003E020000330039003F02000034004000220000003400470015020000340075001602000034005A002E020000340064003E020000340039003F0200003700400022000000370013008801000037007900FE010000370076001E0200003700750020020000370039002402000037004E0025020000370039002A0200003700500030020000370064003E020000370039003F020000370039004702000038004000220000003800530031010000380052003402000038003900460200003A004000220000003A0020007C0100003A004800230200003A005600260200003A004F002F0200003A005200340200003A005C00380200003B003A00220000003B005600220000003B003B00270200003C004000220000003C005300310100003C0020007C0100003C003700FA0100003C003800130200003C003900140200003C003900210200003C005600260200003C003900350200003C003B00360200003C003900440200003C003900460200003D004000220000003D004700150200003D007500160200003D004F002F0200003D0064003E0200003D0039003F0200003E004000220000003E005300310100003E001800730100003E000200740100003E003900350200003E003B00360200003F003A00220000003F0039003001000040004000220000004000530031010000400002008D010000400038001302000040003B0036020000400039004402000040003900460200004100400022000000410053003101000041005300FB01000041003A000B020000410039001402000041005600260200004300400022000000430010008101000043001000890100004300390029020000430039002B02000043005E003302000043003B00360200004300390037020000440041002200000044001000710100004400260085010000440061001102000044005600260200004400570031020000440039003A0200004600400022000000460010008A010000460010008C01000046005A002E02000046003B0036020000460064003E020000460039003F0200004700400022000000470039001402000047004D001D02000047003900210200004700560026020000470039002802000047004F002F02000047003B00360200004700750039020000470075003B020000470064003E020000470039003F0200004700380040020000470049004302000047004A004302000048002200CB010000480037004B020000510024006B0100005100310077010000510032007801000053000200A901000053000500ED010000530025007B0200005600370022000000560023007501000056002C0061020000580067002200000059007C004A01000059007D005B010000590002009301000059007F00CD01000059002D00FC01000059002E00FD010000590083004E0200005A003700220000005A002F00360100005A003000360100005A002C00610200005B006500C30100005D0028006F0100005D007D00720100005D007500100200005E002A00AB0100005E007500100200005F0035003A01000060003400B20100006100370022000000620079009201000062002600D60100006300680022000000640027006F01000064000400A0010000640002004C020000650029008001000065002900F3010000650033007C0200006600370020000000660037002200000066004B00DC01000066003900190200006700370022000000680037002200000069003700220000006A003700220000006B003700220000006C003700220000006D003700220000006E007200220000006E005300DB0100006F006D00220000006F005300DB010000700073002200000070005300DB01000071006E002200000071005300DB010000720071002200000072005900DE01000072005800E0010000730069002200000073004500D9010000740069002200000074005500DD01000075006A002200000075005300DB01000076006F002200000076005300DB01000077006D002200000077005B00DA010000780070002200000078005300DB010000790037002200000079003700020200007A006B00220000007A005300DB0100007B006B00220000007B005300DB0100007C006B00220000007C005300DB0100007D006B00220000007D007A00DF0100007E006B00220000007E005300DB0100007F006B00220000007F007B00E401000080006D002200000080005B00DA01000081006C002200000081006000E101000081005F00E201000081005F00E301000082006B00220000008200740022000000820002007F010000820039002C02000083006B0022000000830074002200000083002C0086010000830065003C02000084003E0022000000840019002700000084001F002900000084001C002A00000084001E002B000000840042002D00000084001C002E00000084005D0030000000840040003200000084002C004400000084002C004600000084001B00EC00000084001E00EE00000084001E00EF00000084001A00F100000084001B00F400000084001C00F500000084001D00FB00000084003700FD000000840007002701000084003600280100008400800029010000840008002A010000840006002B010000840003004C01000084000300550100008400770068010000840082007A010000840007008B01000084003700A101000084007900AF01000084007900B101000084006300B501000084001700E501000084006200220200008400620042020000840082004902000066000000010000000300000000000000E600000000000000058C00000000000067000000110000005600000000000000FFFFFFFF509100001B8C0000AF8F000068000000110000005600000000000000FFFFFFFF60910000288C0000B58F000069000000110000005600000000000000FFFFFFFF70910000378C0000C08F00006A000000110000005600000000000000FFFFFFFF80910000448C0000C68F00006B000000110000005600000000000000FFFFFFFF90910000538C0000D18F00006C000000110000005600000000000000FFFFFFFFA0910000608C0000D78F00006D000000110000005600000000000000FFFFFFFFB09100006D8C0000000000006E0000001110000056000000305900003300000000000000788C0000000000006F0000000000000056000000305900003B000000C09100009D8C000000000000700000000000000056000000305900003B000000D8910000B68C000000000000710000000000000056000000305900003B000000F0910000CC8C000000000000720000000000000056000000385900003B00000008920000EB8C000000000000730000000000000056000000405900003B00000030920000088D000000000000740000000000000056000000485900003B000000489200001B8D000000000000750000000000000056000000305900003B000000609200002E8D000000000000760000000000000056000000305900003B00000078920000478D000000000000770000000000000056000000505900003B000000909200006F8D000000000000780000000000000056000000305900003B000000A8920000888D000000000000790000000000000056000000585900003B000000C0920000A68D0000000000007A0000000000000056000000305900003B000000D0920000B68D0000000000007B0000000000000056000000305900003B000000E8920000C98D0000000000007C0000000000000056000000305900003B00000008930000DE8D0000000000007D0000000000000056000000605900003B00000020930000F18D0000000000007E0000000000000056000000305900003B00000038930000048E0000000000007F0000000000000056000000685900003B00000050930000178E000000000000800000000000000056000000505900003B00000068930000368E000000000000810000000000000056000000705900003B000000809300004F8E000000000000820000000000000056000000000000003B00000098930000768E000000000000830000000000000056000000000000003B000000B0930000958E000000000000840000000100000056000000000000003B000000C8930000B48E0000DD8F00000100000001000000FE500000060000001A00D5017110C70000000E00010001000100000003510000040000007010000000000E00030002000200000007510000090000006F2004002100600010006E20DC0001000E000000010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E00010001000100000000000000040000007010B80000000E0008000800010000000F510000120000007010B80000005B0115005B0216005B0317005B0418005905190059061A005B071B000E000A000200080000001A51000013000000548015005481160054821700548318005284190052851A0054861B0007977408370100000E00000004000400010000001F5100000A0000005B011C0059021E005B031D007010B80000000E000900020006000000285100004800000052701E002C0034000000281F281E281D54701C005400790054711C00541172006E208700100054701C005400790054711C00541175006E2086001000280654701C0012115C017B0054701C0071102D0100000C0152721E0054731D0012051A060000120477061C0101000E00000204009CFFFFFFFAFFFFFFFBFFFFFFFCFFFFFF1D000000060000000500000004000000030003000100000039510000080000005B011F005B0220007010B80000000E000400020002000000415100001F00000022000B001A01340170200E001000150100106E20100010005421200071101C0001000C016E200F00100054211F0071102D0101000C016E20050001000E0000000600060001000000515100000E0000005B012100590223005B0324005B0425005B0522007010B80000000E000A000200060000005C510000750000005480210071102D0100000C015282230054832400548025001207470500071A060000120477061C010100548025005481250047010107DF0101014E010007548025004700000738002A005480220022015A007010C3000100548224006E20C50021000C011A021E006E20C50021000C016E10C60001000C017110200001000C016E20420010005480220054812100521159006E203E00100028285480220022015A007010C3000100548224006E20C50021000C011A021D006E20C50021000C016E10C60001000C017110200001000C016E20420010005480220054812100521158006E203E0010000E0000000400040001000000705100000A0000005B0126005B022800590327007010B80000000E000D000600060000007951000030000000547028006E10950000000C006E10BA0000000C035470260071102D0100000C015272270012151A06000001A477061C010100120A6E203900A8000C002000470038000F006E203900A8000C0A1F0A470054702600520069006E20AC000A000E0002000200000000009E510000010000000E0000000200020001000000AB510000060000005B0129007010B80000000E000500020003000000B25100001D0000005430290054002E0071102D0100000C005431290054112E0071102D0101001A01A7016E20020010000C001F002E00121112026E30300010020E0000000200020001000000C2510000060000005B012A007010B80000000E000600030003000000C95100002400000054302A0054002E0071102D0100000C0054312A0054112E0071102D0101001A01A7016E20020010000C001F002E0012113805070012226E3030002001280512026E30300010020E000400040001000000DD5100000A0000005B012B005B022D005B032C007010B80000000E000D00020006000100E65100001001000054B02B00550035001A011F001A0212001A031C003800940054B02D006E104B0000000C006E10BA0000000C007110230000000A00380005001A001900280B54B02D006E104B0000000C006E10BA0000000C007110B60000000A0054B42B005244340038040D0054B42B00524434003440070054B42B00524434000140010828060D001404F8FFFF7F014854B02B00540030006E201201800054B02B0054002F0022045A007010C300040054B52B00545532006E20C50054000C046E20C50034000C0354B42B0054442E00544463006E20C50043000C036E20C50023000C026E20C40082000C026E20C50012000C016E10C60001000C017110200001000C016E204200100054B02C006E100A00000054B02B0054002E0071102D0100000C0554B02B005206330054B02B005407320012091A0A000077061C010500286C54B02D006E104B0000000C006E10BA0000000C0954B02B005400310054B42D006E104B0004000C046E10BA0004000C046E201601400054B02B0054002F0022045A007010C300040054B52B00545532006E20C50054000C046E20C50034000C0354B42B0054442E00544463006E20C50043000C036E20C50023000C026E20C50092000C026E20C50012000C016E10C60001000C017110200001000C016E204200100054B02C006E100A00000054B02B0054002E0071102D0100000C0454B02B005205330054B02B00540632001207120877061C01040054B02D0012016E204E0010000E000C0000003100010001015540090009000100000027520000140000005B012E00590234005C0335005B0431005B0530005B062F005B073200590833007010B80000000E000B0002000500000035520000FE00000054902E0071102D0100000C001A01280012027130B00010020C006E10B10000002200060054912E0071102D0101000C0112237030080010036E10090000000C00220173007020EF0091006E200B00100022013C0054942E0071102D0104000C0470206400410012546E546D00414412146E206C00410054952E00525560006E20690051002205470054962E0071102D0106000C067020A10065001A06F9006E20AB0065005296340038061A0022065A007010C30006001A07FA006E20C50076000C06529734006E20C40076000C066E10C60006000C066E20AB00650054962E00526669006E20AC0065002206370054972E0071102D0107000C0770204A0076006E205100460054972E0013082C0171202E0187000A076E205500760054972E00527769006E20540076005597350038071D006E204F0036001A031A007110240003000C036E20500036002343890022041B0013070A007020210074004D0403026E204D003600280A549231006E10150102000C026E2053002600220274007020F10092006E20520026006E104C0006002202330054932E0071102D0103000C0370203C00320054932E00523357006E203E00320054932E00523369006E20430032001A03EA006E2042003200220375007040F30093066E20400032006E20650051006E20650061006E20650021006E200C0010006E100D0000000E000400040001000000865200000A0000005B013600590238005B0337007010B80000000E000A000300060000008F520000120000005470360071102D0100000C01527238005473370012041A060000019577061C0101000E000500050001000000A35200000C0000005B013A005B023B005B033D005B043C007010B80000000E000600020002000000AD5200005700000055403900DF0000015C4039003800290054413B0012026E206F00210054413D0022025A007010C30002001A0388026E20C50032000C0254433C006E20C50032000C021A0301006E20C50032000C026E10C60002000C026E20AB0021000E0054413B00130208006E206F00210054413D0022025A007010C30002001A0389026E20C50032000C0254433C006E20C50032000C021A0302006E20C50032000C026E10C60002000C026E20AB0021000E0000000100010001000000C6520000040000007010B80000000E000300010002000000CB5200000F00000071002A0100000C0038000A002201840070201701010071102B0101000E0000000200020001000000D8520000060000005B013E007010B80000000E000400020002000000DF5200001200000054203E0054006F00130108006E208400100054203E005400700012016E206F0010000E000200020001000000E8520000060000005B0140007010B80000000E000400020003000000EF5200004000000055203F00DF0000015C203F0055203F0038002100542040005400790054214000541175006E2087001000542040005400790054214000541172006E2086001000542040005400790012016E30880010012817542040005400790054214000541172006E2087001000542040005400790054214000541175006E20860010000E000200020001000000FD520000060000005B0141007010B80000000E00050002000300000004530000280000005430410054006F0012016E20840010005430410054006F0012016E20810010005430410054007000130108006E206F0010006E102A0004000C001A01450012127130B00010020C006E10B10000000E0005000200030000000F5300001B0000006E102A0004000C001A01E70012127130B00010020C006E10B10000005430420054007300543142005411760072202E00100012000F000000020002000100000018530000060000005B0142007010B80000000E0002000200010000001F530000060000005B0143007010B80000000E000400020002000000265300001D0000005420430054006F0012016E20840010005420430054006F005421430052115C006E20810010005420430054007000130108006E206F0010000E000000090003000300010030530000B60000006E10270008000A00120112122B00A60000000F0154604A00540070001501003F6E206800100054604A0054006F006E208100100054604A0054007400526148006E10280008000A0352644600C7438733B0315901090054604A0054007400526149006E10290008000A0352644700C7438733B03159010A0054604A005400730054614A005411760054634A005433740072302F0010030F026E10280008000A0052634600C73087006E10290008000A0352644700C743873354644A00544470001505803F6E206800540054644A0054446F006E208100540013040A003540200035431E0054644A0071102C0104000A043804160054644400130508006E202B005400546445006E202B00140028080D01220258007020BB00120027020F0254604A0054007400520009005960480054604A005400740052000A00596049006E10280008000A00596046006E10290008000A00596047000F0200010300000000008900000046000000040000007A0000000C0001000101548701000000030002000100000071530000120000005B124A007010B800010054104A0054006F005B10440054104A00540070005B1045000E0004000400010000007A5300000A0000005B014B0059024D005B034C007010B80000000E000A00030006000000835300001200000054704B0071102D0100000C0152724D0054734C0012041A060000019577061C0101000E000600060001000000975300000E0000005B014E0059025100590350005B044F005B0552007010B80000000E000B00040006000000A2530000530000005270510035090500527051002802019001046E209200480054704E0071102D0100000C015272500054734F0012051A06000077061C0101005470520022015A007010C300010054724F006E20C50021000C011A021C006E20C50021000C0154724E00542263006E20C50021000C011A0212006E20C50021000C016E20C40041000C011A021F006E20C50021000C016E10C60001000C017110200001000C016E20AB0010000E0000000200020000000000BA530000010000000E0000000200020000000000C1530000010000000E0000000200010000000000C853000003000000521054000F0000000200020001000000CD530000060000005B0153007010B80000000E000300030002000000D35300000400000070200F0110000E000200020000000000DC53000003000000590154000E0000000200010000000000E45300000300000054105500110000000200020001000000E9530000060000005B0156007010B80000000E000300030002000000EF530000040000007020130110000E000200020000000000F8530000030000005B0155000E000000010000000000000000540000050000007100330100000C00110000000200010000000000045400000300000054106C00110000000C000000030001000A5400006300000012001A0133017110B20001000C011A024F01120323348A006E30B40021040C0212146E20CC00420023338B006E30CB0002030C031A05C4016E20B30051000C056E20CA0045006E20C80035000C061F0665007210D80006000C077210CE0007000C077210D00007000A0838082A007210D10007000C086E10B90008000C091A0AEF016E20B300A9000C0A6E20CA004A006E20C9008A000A0B390B12001A072E016E20B30079000C076E20CA0047006E20C80087000C041F040300110428D328020D01000011000000010000005C0001000100600007000300050000006A540000330000002200330054416C0070203C00100022013B0012F2703061002102127212536E53630021236E203F001000524269006E204300200012026E203D0020007110200006000C026E2042002000524257006E203E00200022026F007040E60042656E204000200011000000070003000500000088540000330000002200330054416C0070203C00100022013B0012F2703061002102127212536E53630021236E203F00100012026E203D002000524269006E20430020007110200005000C026E2042002000524257006E203E002000220270007030E80042066E2040002000110000000C00040006000000A45400007B0000002200330054816C0070203C001000070722003B0012F112E2703061001002127112526E52630010126E203F000700528169006E204300170012016E203D0017001A02EB001A0300006E30C0002A030C05121223268D004E0B0601470106013801220022015A007010C30001006E20C50051000C011A021E006E20C50021000C016E10C60001000C017110200001000C016E2042001700528159006E203E001700282022015A007010C30001006E20C50051000C011A021D006E20C50021000C016E10C60001000C017110200001000C016E2042001700528158006E203E00170022027100078301947606EA0002006E2040002700110700000500020005000000E1540000280000002200470054316C007020A100100052315A006E20A20010007110200004000C016E20AB001000130111006E20A4001000523169006E20AC001000120112126E30AF001002120112526E52A800101211000600040004000000F4540000250000002200340054216C007020440010006E2048004000522169006E2049001000000052215B007110120001000C016E20450010006E2046005000220177007040F70021436E20470010001100000012000400080000000B550000E200000008031000220063001A011700080811006E20C20018000C017110CD0001000C017020D20010000709220761007010CF0007002202470054E06C007020A100020022005A007010C30000006E20C50030000C001A011B006E20C50010000C006E10C60000000C006E20AB00020052E069006E20AC00020022003E0054E16C00702076001000070A13000A0012516E517B000A01121B6E207A00BA006E2077002A001200010C7210D50009000A00350C350022003D0054E16C00702070001000070D7220D300C9000C0007041F04590001C66E2074004D001400CCCCCCFF6E2075000D00000052E064007110120000000C006E2071000D0022006E0007E101F57608E40000006E2073000D006E207700DA00D80C0C0128C87110B7000F000C0012F47110B70004000C047230D60007040C001F0053006E10B50000000A003A0043006E1079000A000A0435403D00D80400016E2078004A000C041F043D006E207200B40022055A007010C30005006E20C50035000C051A061C006E20C50065000C0554E663006E20C50065000C051A0612006E20C50065000C057220D30009000C061F0659006E20C50065000C056E10C60005000C057110200005000C056E20AB005200110A05000200050000007D5500001A0000002200470054316C007020A10010007110200004000C016E20AB001000523169006E20AC00100013010A0012526E52A8001012110005000200050000008D5500001700000022002F0054316C007020310010001A015B021A0266026E403300402112016E203500100012526E5238001012110000000F000500060000009D550000A100000054A26C0012061A07000001B307C401D577061C01020022003C0054A36C0070206400300007061250120313040A006E506D00463012106E206C000600130011006E206A0006002205470054A06C007020A100050022005A007010C30000006E20C500C0000C001A071C006E20C50070000C0054A763006E20C50070000C001A0712006E20C50070000C006E20C400D0000C001A071F006E20C50070000C006E10C60000000C007110200000000C006E20AB00050052A069006E20AC0005002200430054A76C0070208B007000070713001900130823006E54910007846E208E00E70000006E208F00D7006E209200D7006E108D0007000C0052A46500620901006E30160040096E108C0007000C0052A46600620901006E30160040092200810007A101B307C401D276060B0100006E20900007006E20650056006E2065007600110600000B00040005000000D055000069000000220063001A0117006E20C2001A000C017110CD0001000C017020D200100022013C0054726C0070206400210022023B0012F312E47030610032041223125412756E546300525312136E206C003100527457006E20690041006E206B0021002204440054756C007030930054036E20970024006E10940004000C0352756900620601006E30160053062203320054756C0014060900090170403A0053066E203B0063006E20960034007220D40090000A053A0505006E2099005400220672007040EC0076846E20980064006E2065004100110100000B0004000500000011560000520000002200460054716C0070209A00100022010C00140262FFFEFE2410880002000C021403A00001012410880003000C0312042345880024308E0032050C0252736B0052756A001406FF0000FF2430880036050C0370301100210300006E109B0000000C026E20170012006E109C0000000C026E20170012006E209F009000527269006E20A000200013020A0012536E539E002043220280007040090172986E209D0020001100100005000900000033560000B900000022008300120170301401B00107062207820070301001B70122003C0054B16C0070206400100022013B0012F2703061002102127212536E53630021232208330054B26C0070203C0028001A021F001A0312001A041C00380E3B001205121939050400019A2802015A6E201201A700220A5A007010C3000A006E20C500DA000C0A6E20C5004A000C0454BA63006E20C500A4000C046E20C50034000C0339050300280201596E20C40093000C036E20C50023000C026E10C60002000C027110200002000C026E204200280028321A0500001A0900006E201601960022095A007010C30009006E20C500D9000C096E20C50049000C0454B963006E20C50094000C046E20C50034000C036E20C50053000C036E20C50023000C026E10C60002000C027110200002000C026E204200280012026E203D0028006E203F00180052B257006E203E00280052B269006E20430028002202760007B301CA07D901E501F47609F50002006E20400028006E2065008000110000000200010002000000A35600000600000022007F007020070110001100020001000100000004540000050000007010360101000A000F0000000400010001000000A856000012000000220004007010060000007110070000005201000013026400322104001211280212010F010200010001000000B4560000110000005410760038000D0054106F006E10800000000A003900030028031200280212100F0000000300020002000000B95600000500000070202F0121000A000F0000000400020001000000C156000013000000823054216C006E10010001000C016E10130001000C0152110400C8101501003FC61087000F0000000500020003000000C856000012000000824054316C006E10010001000C016E10130001000C0112127130260002010A0087000F000100010000000000045400000300000069006D00110000000500020001000000CF560000850000007010B80003001A000E007110150000000A00593068001A0011007110150000000A01593169001A0106007110150001000A01593157001A0110007110150001000A0159315E001A010F007110150001000A015931600013012201593162001301D200593161001501804059315F0013012D0059315D0014013333333F59315C00140100FF00FF59316B001501FFFF59316A001A0107007110150001000A01593159001A010C007110150001000A01593158001A0109007110150001000A0159315A001A010D007110150001000A02593265007110150001000A02593266007110150001000A0159315B007110150000000A00593064001A000B005B3063005B346C007010340103000E0000000B00030005000000F05600008B00000022003B0012F1703061001001120112526E516300101222033C0054846C007020640043006E206B000300130410006E206E00430012156E206C00530022063C0054876C007020640076006E206E0046006E526D0016126E206C0056001A0208007110150002000A026E2069002600130208006E206F0026005B866E002202470054846C007020A100420052845A006E20A200420022045A007010C30004001A0789026E20C50074000C046E20C500A4000C041A0702006E20C50074000C046E10C60004000C046E20AB004200130411006E20A4004200528469006E20AC00420012046E30AF004205130414006E54A800121422017800705AF90081266E20A70012006E20650023006E20650063006E20650039000E0000000300010002000000295700002600000062006D00380003000E0020200300390014002200170071001F0000000C0170201D001000220179007010FB0001006E201E001000280B2200840007211F01030070201701100069006D000E0003000100020000003D5700001900000054207600390003000E007010350102000A00380009005420760012416E205900100028075420760012016E20590010000E0000001300030005000000475700004602000008001000080111001202080312001204014501240802120021163565DE011206460701051A0801016E20BC0087000A091A0A00003809070012166E30C100870A0C0707321A0831006E20BC0087000A093809080054026E006E30C100870A0C071A0825016E20C20087000C09120B460C090B711022000C000A0C390C1000460C090B1A0D18006E20BF00DC000A0C380C03002804910A05042821460C090B7110B6000C000A0C220D5A007010C3000D00460E090B6E20C500ED000C0D6E20C5008D000C0D6E10C6000D000C0D6E30C100D70A0C07D804040101CA6E20C20087000C08460C080B6E10BE000C000A0D123E122F121B2C0D72010000290099001A0D27006E20BD00DC000A0C380CF8FF01FC29008F001A0D2E006E20BD00DC000A0C380CEDFF127C290084001A0DEC006E20BD00DC000A0C380CE2FF130C0800290078001A0DEF006E20BD00DC000A0C380CD6FF130C0D0029006C001A0D2B006E20BD00DC000A0C380CCAFF130C0B00290060001A0DEE006E20BD00DC000A0C380CBEFF130C0C0028541A0D2A006E20BD00DC000A0C380CB3FF01EC284A1A0DF4006E20BD00DC000A0C380CA9FF124C28401A0D30006E20BD00DC000A0C380C9FFF130C090028351A0D47006E20BD00DC000A0C380C94FF125C282B1A0DF1006E20BD00DC000A0C380C8AFF01BC28211A0D48006E20BD00DC000A0C380C80FF126C28171A0DFE006E20BD00DC000A0C380C76FF120C280D1A0D29006E20BD00DC000A0C380C6CFF130C0A00280212FC2B0C0F0100002900CD00D8040401460B080B70202401B0000C0B6E206500B2002900C000D8040401460B080B70202301B0000C0B6E206500B2002900B300D8040401460B080B70201B01B0000C0B6E206500B2002900A600D8040401460B080B460C080F70301901B00C0C0B6E206500B20029009700460B080B70301E01200BD804040129008E00460B080B460C080F70402201A0CB0C0B6E206500B20029008100460B080B70401D01A06B0C0B6E206500B20029007600218C33EC1100460C080F460D080B7110B6000D000A0D705D2801A0BC0C0C6E206500C200218C33FC6100460C080B120D705D2801A0BC0C0B6E206500B2002855120D460B080B705D2801A0DB0C0B6E206500B200284A460C080B70202301C0000C0C6E206500C200460B080B460C080F70402601A0CB0C0B6E206500B2002835460B080B70401A01A06B0C0B6E206500B200282B460B080B70301801A00B0C0B6E206500B2002821460B080B460C080F7110B6000C000A0C460D080E7110B6000D000A0D705D2501A0CB0C0B6E206500B200280B460B080B70402701A06B0C0B6E206500B2000000D8050501290023FE0E0000020E006C3E2D8C74A7A395E773F1C85B9ABFD8F73B30DDCD872DDEF949BFEBDEA6A6F98E1AF1041E21DD067D177719EDA6462EC307755F5213477791000000870000007D00000073000000690000005E000000540000004A0000003F00000033000000270000001B000000100000000500000000010E0000000000C6000000B0000000A60000009C000000870000007C0000005C00000051000000440000003B0000002C0000001F00000012000000050000001B00010006000000FE5700005B03000008001A002201380054026C007020560021005B017600540176007010380100000C026E20580021002201400054026C0070207E0021005B0171002201400054026C0070207E0021005B016F0054016F0012026E208400210054016F0052035C006E208100310022013C0054036C007020640031005B01700054017000130308006E206F0031005401700052035E006E20690031005401700012136E206C0031005401700022043B00520562007020300150000A0512E67030610054066E206B0041002201140070101800010052045F006E201A00410052045E006E20190041001A040A007110150004000A046E301B00310422043A0054056C0070205A0054005B047A0054047A0022053F0070307C0065066E205D00540052045D00824454056C006E10010005000C056E10130005000C057130260043050A04874454057A006E105B0005000C055954050054057A006E105B0005000C055954060054057A0062070B006E20600075006E10200100000C057120250025000C0554077A0021587130140025080C086E205C00870054077A006E105B0007000C071F072B0013080A0070202F0180000A095979070054077A007010380100000C096E205F00970054077A0022097A007020FD0009006E205E00970022072F0054096C0070203100970022093F0070307C0069066E203600970052095D008299540A6C006E1001000A000C0A6E1013000A000C0A71302600930A0A0987996E10320007000C0A59A905006E10320007000C0A59A90600220A5A007010C3000A001A0B21006E20C500BA000C0A6E10210100000C0B6E20C500BA000C0A1A0B05006E20C500BA000C0A520B5D006E20C400BA000C0A1A0B04006E20C500BA000C0A520B5D006E20C400BA000C0A1A0B03006E20C500BA000C0A6E10C6000A000C0A1A0B5B021A0C66026E403300A7CB6E2035002700520A5C006E203400A7007010380100000C0A6E203700A700220A4700540B6C007020A100BA001A0B8A026E20AB00BA00520B68006E20AC00BA00620B02006E20AE00BA00150BA0416E20AD00BA00220B3F0070307C006B06130C0B006E207D00CB006E20A500BA00220D7B007020FF000D006E20A700DA00220D3C00540E6C0070206400ED005B0D7200540D72006E206C003D006E103B0100000C0D540E720070303101D00E220D4000540E6C0070207E00ED00125E6E5E82008D8E130F10006E208300FD00220F4700540C6C007020A100CF00520C68006E20AC00CF00150C90416E20AD00CF00130C11006E20A400CF0022083F0070307C00680613060E006E207D0068006E20A5008F006E203A01F0002206470054026C007020A1002600620203006E20A300260012F26E20A60026006E20AA0036006E20A9003600520368006E20AC003600150320416E20AD0036006E20A400C60012036E5EA80036336E203901600022034100540E6C0070208500E3005B03790022033B00520E610070203001E0000A0E70306100230E5B03770022023B00540370006E10660003000C037020620032005B027800540278001503803F59230C0054027900540377006E208A00320054027900520360006E208900320022023C0054036C007020640032005B0275005402750012136E206C0032002202400054036C0070207E0032001233130E0A006E538200E2E36E208300C20022033F0012EC70307C00C30C130C09006E207D00C300220C3300540E6C0070203C00EC006E203F003C00120E6E203E00EC001A0E3C006E204200EC00520E68006E204300EC00220E7C00702001010E006E204000EC00220E7D00702003010E006E204100EC00220E3F000811010012E170307C001E0113010B006E207D001E00220133000810030054036C0070203C0031006E203F00E10012036E203E0031001A03E5006E2042003100520368006E204300310022037E007020050103006E204000310022142C001418080180001319FEFF1315FEFF1316FEFF1317020076062C001400080314005B0374005403740002120400130433005934080054037400120459340900540374001304640059340A0054037600540471006E20570043005403710054046F006E207F00430054037100540470006E207F0043006E10210100000C033803080054036F006E207F007300280854036F0054047A006E207F0043006E207F00FD006E207F00AD00540370006E206500D300540370006E206500630054037900540475006E208600430054037000540479006E20650043006E207F00C2006E207F001200540370006E206500230054036C006E10030003000C035B0373005403730054047600081301005401740072302D004301540175006E10670001006E10320100000C01540375007030310110030E0000000F00080006000000015900004100000022005A007010C30000006E20C50090000C001A011C006E20C50010000C00547163006E20C50010000C001A0112006E20C50010000C006E20C500A0000C006E10C60000000C007110200000000C006E20AB00080054716C0012051A060000079301B201C477061C0101007110B70002000C097110B70004000C0B7230D7009D0B0E0010000E5A000D000E00150188040E3C5B000007000000000000000E000001000E00E90403DE0400000E00EB0401E8040E6A1F1FB4B41F5C01111000890502DE04000E008B0501E8040E780300AB030C5A969600AF0505DE04000000000E00B40501E8040E011511A769011E0FA6011E0F9700E70503DE0400000E00EA0504009004F1039D030E0408EB03328701A703038F045A010C050A0304F103023E96D300F70501000E0401EA0332870100990601DF040E009C0601D4020E01170F03009E032F5A00BC0601DF040E00C00602E80492030E01170F03009E032F3C5B4C00CF0603DF0400000E00D20601FE040EC501210F0300D80302C35C2A05001E0300DD02564C05000308D803027801360F5A01161005081EA50309D3045A01110F01360F5A01151105096900940608DE04000000000000000E00970601FE040EFFFF0300B302088FB40301BD033D4B4B7AB40305FD01485A4B01180F7AB40306D902383CB4784B3C962D03033B8A01963C05031E97020C863EB40302C0023478785A021D863C3C3C3C3C00870703DE0400000E008B0702C302AD030E010E05090305AD0387013C00D70704DE040000000E00DD0701E8040E4B0300860587012D2D6901200F1F7801200F008901000E008C01000E4B0300AF02042D8800D30101DE040E00D50101FE040E968700F20101DE040E00F70101E8040E694BB4B497B4B500BA0201DE040E00BC0201FE040E878796E100C40201FE040EE1B400C20201DE040E00D30201DE040E00D50201FE040E87B496008D0302FE04D3030E021F9502771D967901110F011110F0026B1D870300F70302870303F803029678E2785C1B1E0301D802556B0501026E1D050005038787696900850301DE040E5A6900A10403DE0400000E00A30402CA02BF020E010E05090305BF0287013C00C10405DE04000000000E00CE04038E04F303EE020E960304EB02023E01101101360F00C504018E040E00CA04018E040E009C08000E00940801000E00940802830584050E0098080198030E2D009008000E00880801000E00880802830584050E008C080185040E2D004A000E004A0183050E009901000E780401BC0252A901960302CF025F4B6A0303BD0257690305AE025E3C6A0406CD0366BF0101120F0308F903574B0409BA0252A90169030AF0035E3C69690307AF025E3C79050705080509050A02771D05010502050305050506272D00E10402E702E6020E780300C10234690301B8033C5A3C5A4B785A02148600810502E602E6040E780300C10234690301B8033C5A3C4B5A785A8E00950503E702E602DA040E890307C102347B0300B8033C5A3C5A4C890305EA025A5C0306B1038E014B011A0F6A011A0F5C010405090304E7020202156800EE0701DB040E780300DD04485A785A5A5A5A00FB0603E702E602DA040E780300C402353C5C1E993D8E00970703E702E602BF030E01140F0409E80365BD015A0407870466C001780302DD044801160F5B87030AF6033F694B3D0102030C9803026987030DF5033E780304E7035A1F0306A003023C691E97AA02703B05040506050D02123B050C01130F03008604028787030489043E3C013011050400F90701DB040E780300DD0448785A6900810801DB040E780300FF0430784B4B00AD0404E702E602D103CF030EB5870306BC033D784B5B780305DD044801300F5B8703078E0444783C1E3C3CB4B50218C23C3D00C90503E702E602BF030EF20400C10365BD01780301BE033D7B0302B9033C694B5A3D780304CE04453EB5A60403A7023389013C3E4B0305A303022D3E0213863C008C0403E702E602D8040E780300D90447020D01250E0301C2020D1E78793C5A698B00800604E702E602D903D0030E780306DB0284015A0307DA028301780300BC033D690301B8033C5B780308C10234871E0305D8030296012E0F05051E2D0305D5045A5A012A1005054B3C5A5A0107050C050D050E050F0304D003020305D90387010309E6025A030AE7020202E000683C008503000E00AE08000E5A03008404053C00A208000E004A02830584050E00A6080198030E00AB080198030E007D01AF020E02513B87878787874B4B4B4B5A5A4B87878787696969021D4A2D3C00C00702BB03DB040E690300BA033C5B780303C6023D3C5A4C780306C7023D3C3C3C965A2E780302DD04485A011C0F5A5A4B5A0211863C3C3C00860101CC020E5A4B9603009103188F05001EA600B408000E4B1F69796A00B50302C003BC030E5A0302D704022E0303C2033D010505120302BC033D0304D7040203059803023C1F0306DA0487012D0307E8025AA51E4D1E882D4C6B0309D3048D010114140102030AE70202027B1D050A69030CE7020201170F40050C060A4B0308D4048D01023101AB010E2D027BB32D96027A2C2D96027A2C2DB4027A2C5A2D027B2CB4289602792C3CF03C027AB3A5027B1D96B4027B1D9619961901150F199602621D050605070508050902D1004A0505050A00B401000EB4969696697A9678786901110F5A0301EF02155A5A9896A501120F0304B80202878878870305D1028801A501101096AC780307FF04308701120F0309B902026969B6012A0B7D3C5A7978030AC904485A5A5A5A5A030B8104405A3C021286965A9878030DE104414B5A78030FE004485A5A5A5A03088004405A3C3E7803069503485A4B3C3C5A5A3C4B3E97D2D2697878966B780302FA0341693E690303B503405B78030C9703343C4B5A5A8E8F010505010311EF02153C030EB403405B010405030310B503405A0301C502343C4B5A5A020B86011417010405040312B802024B5A6C787878696A793C3C5A5A78783C3C5A87010605010313C502345A5A9600AD0707DD04E602E703E702A0038704E8040E012A0F01080509050B050C0302E702020303E6025A0304A003023CB4000100000025000000010000003000000001000000090000000100000026000000010000003500000001000000570000000100000027000000010000002800000001000000420000000300000001000000220000000100000001000000010000005600000001000000590000000200000084000100010000008400000001000000150000000300000087000100010000000200000001005900040000000100590001000100030000000100590059000000030000000100590086000000040000000100590086000100020000005900590003000000080050000100000002000000560056000200000056008B0002000000500050000200000059008A00010000008B00000001000000000000000200000001000100040000000100010001000100050000000100010001000100010000000200000001001100010000000300000001000000040000000100000008000000020000000800010006000000080001005900010086005900030000000800010064000000010000000A000000010000000B000000010000000C000000010000000E0000000100000012000000020000001200010001000000160000000100000018000000010000001D000000010000002000000001000000290000000200000029002A000200000029008600010000002A000000010000003100000004000000310029000100020002000000360086000100000039000000020000003C00590001000000430000000300000043000100860000000100000045000000010000004700000007000000470059005900010001006500290000000100000050000000030000005900590059000000010000005C0000000100000060000000010000007600000003000000760037000700000005000000840001000100590047000000030000008400010059000000050000008400010059008D003300000008000000840001008600830082003300590001000400000084003C004700590003000000840044000100000007000000840047005900590001000100650000000200000084005900020000008400790001000000860000000100000089000000020000008C003C00020000008E0088000200000029002400020000005900010000000220E296B3000220E296BD001122203E3C2F626F64793E3C2F68746D6C3E000A22206865696768743D220009222077696474683D22000723314332363244000723316235653230000723323232443338000723324633443443000723333263623030000723343163333030000723376630303030000723383043424334000723383243414644000923444431343143323200092345453143324133350007234646464646460002273E000128000328295600032A3E3B00052A3E3B295600012C00072D5B302D395D2A000130000B303132333435363738392D00013A000F3A203C666F6E7420636F6C6F723D2700053A204F464600043A204F4E00073C2F666F6E743E00083C636C696E69743E00413C68746D6C3E3C686561643E3C2F686561643E3C626F6479207374796C653D226D617267696E3A20303B2070616464696E673A2030223E3C696D67207372633D2200063C696E69743E00084170705468656D65000942544E5F434F4C4F52000642746E4F4646000542746E4F4E0006427574746F6E000E427574746F6E20636C69636B6564000A427574746F6E4C696E6B000B427574746F6E4F6E4F6666000843617465676F7279000A43617465676F7279424700074368616E6765730008436865636B426F78000D436865636B426F78436F6C6F720008436F6C6C61707365000C436F6C6C617073654164645F000A4372656174654D656E7500124438242453796E746865746963436C617373000C44454641554C545F424F4C44000B45646974546578744E756D000E4564697454657874537472696E6700014600044649464C00064649545F5859000B46696C74657241727261790014466C6F6174696E674D6F644D656E752E6A6176610010484944452F4B494C4C2028486F6C6429000149000A49434F4E5F414C504841000949434F4E5F53495A45000249490004494A29560002494C0003494C49000449636F6E002E49636F6E2068696464656E2E2052656D656D626572207468652068696464656E2069636F6E20706F736974696F6E000F49636F6E57656256696577446174610009496E70757454657874000A496E70757456616C756500014A00014C00024C4900034C494C00054C494C494900044C494C4C00044C494C5A00054C494C5A4900024C4C00034C4C4900044C4C494900034C4C4C00044C4C4C4900164C616E64726F69642F6170702F41637469766974793B00334C616E64726F69642F6170702F41637469766974794D616E616765722452756E6E696E6741707050726F63657373496E666F3B001D4C616E64726F69642F6170702F41637469766974794D616E616765723B00214C616E64726F69642F6170702F416C6572744469616C6F67244275696C6465723B00194C616E64726F69642F6170702F416C6572744469616C6F673B00194C616E64726F69642F636F6E74656E742F436F6E746578743B00324C616E64726F69642F636F6E74656E742F4469616C6F67496E74657266616365244F6E43616E63656C4C697374656E65723B00214C616E64726F69642F636F6E74656E742F4469616C6F67496E746572666163653B00184C616E64726F69642F636F6E74656E742F496E74656E743B00244C616E64726F69642F636F6E74656E742F7265732F436F6C6F7253746174654C6973743B001F4C616E64726F69642F636F6E74656E742F7265732F5265736F75726365733B00194C616E64726F69642F67726170686963732F4269746D61703B00204C616E64726F69642F67726170686963732F4269746D6170466163746F72793B00184C616E64726F69642F67726170686963732F436F6C6F723B00224C616E64726F69642F67726170686963732F506F7274657244756666244D6F64653B001B4C616E64726F69642F67726170686963732F54797065666163653B00244C616E64726F69642F67726170686963732F6472617761626C652F4472617761626C653B002C4C616E64726F69642F67726170686963732F6472617761626C652F4772616469656E744472617761626C653B00114C616E64726F69642F6E65742F5572693B00134C616E64726F69642F6F732F42756E646C653B00144C616E64726F69642F6F732F48616E646C65723B00134C616E64726F69642F6F732F4C6F6F7065723B00174C616E64726F69642F746578742F4564697461626C653B00134C616E64726F69642F746578742F48746D6C3B00274C616E64726F69642F746578742F496E70757446696C746572244C656E67746846696C7465723B00164C616E64726F69642F746578742F5370616E6E65643B00234C616E64726F69642F746578742F546578745574696C73245472756E6361746541743B00184C616E64726F69642F746578742F546578745574696C733B00274C616E64726F69642F746578742F6D6574686F642F4469676974734B65794C697374656E65723B00214C616E64726F69642F746578742F6D6574686F642F4B65794C697374656E65723B00154C616E64726F69642F7574696C2F4261736536343B001D4C616E64726F69642F7574696C2F446973706C61794D6574726963733B00194C616E64726F69642F7574696C2F547970656456616C75653B001A4C616E64726F69642F766965772F4D6F74696F6E4576656E743B00234C616E64726F69642F766965772F56696577244F6E436C69636B4C697374656E65723B00294C616E64726F69642F766965772F56696577244F6E466F6375734368616E67654C697374656E65723B00274C616E64726F69642F766965772F56696577244F6E4C6F6E67436C69636B4C697374656E65723B00234C616E64726F69642F766965772F56696577244F6E546F7563684C697374656E65723B00134C616E64726F69642F766965772F566965773B00254C616E64726F69642F766965772F5669657747726F7570244C61796F7574506172616D733B002B4C616E64726F69642F766965772F5669657747726F7570244D617267696E4C61796F7574506172616D733B00294C616E64726F69642F766965772F57696E646F774D616E61676572244C61796F7574506172616D733B001C4C616E64726F69642F766965772F57696E646F774D616E616765723B002D4C616E64726F69642F766965772F696E7075746D6574686F642F496E7075744D6574686F644D616E616765723B00184C616E64726F69642F7765626B69742F576562566965773B00334C616E64726F69642F7769646765742F4164617074657256696577244F6E4974656D53656C65637465644C697374656E65723B001C4C616E64726F69642F7769646765742F41646170746572566965773B001C4C616E64726F69642F7769646765742F41646170746572566965773C001F4C616E64726F69642F7769646765742F41646170746572566965773C2A3E3B001D4C616E64726F69642F7769646765742F4172726179416461707465723B00314C616E64726F69642F7769646765742F4172726179416461707465723C4C6A6176612F6C616E672F537472696E673B3E3B00174C616E64726F69642F7769646765742F427574746F6E3B00194C616E64726F69642F7769646765742F436865636B426F783B00374C616E64726F69642F7769646765742F436F6D706F756E64427574746F6E244F6E436865636B65644368616E67654C697374656E65723B001F4C616E64726F69642F7769646765742F436F6D706F756E64427574746F6E3B00194C616E64726F69642F7769646765742F45646974546578743B001C4C616E64726F69642F7769646765742F4672616D654C61796F75743B00244C616E64726F69642F7769646765742F496D61676556696577245363616C65547970653B001A4C616E64726F69642F7769646765742F496D616765566965773B002A4C616E64726F69642F7769646765742F4C696E6561724C61796F7574244C61796F7574506172616D733B001D4C616E64726F69642F7769646765742F4C696E6561724C61796F75743B001C4C616E64726F69642F7769646765742F526164696F427574746F6E3B001B4C616E64726F69642F7769646765742F526164696F47726F75703B002C4C616E64726F69642F7769646765742F52656C61746976654C61796F7574244C61796F7574506172616D733B001F4C616E64726F69642F7769646765742F52656C61746976654C61796F75743B001B4C616E64726F69642F7769646765742F5363726F6C6C566965773B00304C616E64726F69642F7769646765742F5365656B426172244F6E5365656B4261724368616E67654C697374656E65723B00184C616E64726F69642F7769646765742F5365656B4261723B00184C616E64726F69642F7769646765742F5370696E6E65723B001F4C616E64726F69642F7769646765742F5370696E6E6572416461707465723B00174C616E64726F69642F7769646765742F5377697463683B00194C616E64726F69642F7769646765742F54657874566965773B00164C616E64726F69642F7769646765742F546F6173743B00224C64616C76696B2F616E6E6F746174696F6E2F456E636C6F73696E67436C6173733B00234C64616C76696B2F616E6E6F746174696F6E2F456E636C6F73696E674D6574686F643B001E4C64616C76696B2F616E6E6F746174696F6E2F496E6E6572436C6173733B00214C64616C76696B2F616E6E6F746174696F6E2F4D656D626572436C61737365733B00244C64616C76696B2F616E6E6F746174696F6E2F4D6574686F64506172616D65746572733B001D4C64616C76696B2F616E6E6F746174696F6E2F5369676E61747572653B001A4C64616C76696B2F616E6E6F746174696F6E2F5468726F77733B00184C6A6176612F6C616E672F4368617253657175656E63653B00114C6A6176612F6C616E672F436C6173733B00144C6A6176612F6C616E672F436C6173733C2A3E3B00214C6A6176612F6C616E672F496C6C6567616C5374617465457863657074696F6E3B00134C6A6176612F6C616E672F496E74656765723B00204C6A6176612F6C616E672F4E756C6C506F696E746572457863657074696F6E3B00214C6A6176612F6C616E672F4E756D626572466F726D6174457863657074696F6E3B00124C6A6176612F6C616E672F4F626A6563743B00144C6A6176612F6C616E672F52756E6E61626C653B001C4C6A6176612F6C616E672F52756E74696D65457863657074696F6E3B00124C6A6176612F6C616E672F537472696E673B00194C6A6176612F6C616E672F537472696E674275696C6465723B00124C6A6176612F6C616E672F53797374656D3B00154C6A6176612F6C616E672F5468726F7761626C653B00194C6A6176612F6C616E672F7265666C6563742F4669656C643B001A4C6A6176612F6C616E672F7265666C6563742F4D6574686F643B00124C6A6176612F7574696C2F4172726179733B00164C6A6176612F7574696C2F436F6C6C656374696F6E3B00134C6A6176612F7574696C2F486173684D61703B00144C6A6176612F7574696C2F4974657261746F723B00164C6A6176612F7574696C2F4C696E6B65644C6973743B00104C6A6176612F7574696C2F4C6973743B00244C6A6176612F7574696C2F4C6973743C4C6A6176612F6C616E672F537472696E673B3E3B000F4C6A6176612F7574696C2F4D61703B00134C6A6176612F7574696C2F4D61703C2A2A3E3B00374C6A6176612F7574696C2F4D61703C4C6A6176612F6C616E672F496E74656765723B4C6A6176612F6C616E672F496E74656765723B3E3B00154C756B2F6C676C2F4D61696E41637469766974793B00104C756B2F6C676C2F5224636F6C6F723B00134C756B2F6C676C2F52246472617761626C653B00114C756B2F6C676C2F52246C61796F75743B00114C756B2F6C676C2F52246D69706D61703B00114C756B2F6C676C2F5224737472696E673B00104C756B2F6C676C2F52247374796C653B000A4C756B2F6C676C2F523B003A4C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E75242445787465726E616C53796E7468657469634C616D626461303B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431303B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431313B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431323B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431333B00254C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424313B00254C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424323B00254C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424333B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431343B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431353B00234C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431363B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524323B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524333B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524343B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524353B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524363B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524373B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524383B00224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524393B002C4C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752445646974546578744E756D3B002F4C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E75244564697454657874537472696E673B00204C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E753B00074D415251554545000D4D454E555F42475F434F4C4F52000B4D454E555F434F524E455200154D454E555F464541545552455F42475F434F4C4F52000B4D454E555F484549474854000A4D454E555F574944544800084D494E494D495A4500114D61696E41637469766974792E6A61766100134D656E752073657276696365206B696C6C656400084D6F645F4D656E75000E4E756D626572547874436F6C6F7200024F4B00064F6E4F66665F000B526164696F427574746F6E000A526164696F436F6C6F72000C526963685465787456696577000B526963685765625669657700085352435F41544F5000075365656B426172000C5365656B426172436F6C6F7200145365656B42617250726F6772657373436F6C6F7200075370696E6E657200065377697463680003544147000A544558545F434F4C4F52000C544558545F434F4C4F525F32002E546170204F4B20746F206170706C79206368616E6765732E20546170206F75747369646520746F2063616E63656C003A546170204F4B20746F206170706C79206368616E6765732E20546170206F75747369646520746F2063616E63656C0A4D61782076616C75653A200009546578744669656C64000C54657874566965774E6F746500065468726561640006546F67676C650009546F67676C654F46460008546F67676C654F4E0005547275655F00015600025646000256490003564949000556494949490006564949494949000356494C0002564C0003564C490006564C49494C4C0004564C494C0007564C494C495A4C0006564C494C4C4C0004564C495A0009564C495A4C4C4C4C490003564C4C0004564C4C490005564C4C494A0004564C4C4C0008564C4C4C49494C4C0005564C4C4C4C0008564C4C4C4C49494C0003564C5A0002565A00015A00025A4C00035A4C4C00025B4200025B49001B5B4C616E64726F69642F746578742F496E70757446696C7465723B00125B4C6A6176612F6C616E672F436C6173733B00135B4C6A6176612F6C616E672F4F626A6563743B00135B4C6A6176612F6C616E672F537472696E673B00025B5A00035B5B4900015F00026161000A61636365737324303030000A61636365737324313032000A61636365737324323030000A61636365737324333030000A61636365737324363030000B616363657373466C616773000A6163746976697469657300086163746976697479000D61637469766974795F6D61696E000761646452756C650007616464566965770005616C657274001A616E64726F69642E6170702E4163746976697479546872656164001A616E64726F69642E696E74656E742E616374696F6E2E5649455700086170705F6E616D650006617070656E64000E6170706C7944696D656E73696F6E000F6170706C7944696D656E73696F6E3200026172000661734C69737400026174000561744F626A000F6261636B67726F756E64436F6C6F720004626F6F6C000962746E6469616C6F670006627574746F6E000C627574746F6E537461746573000A627574746F6E566965770008636865636B426F780008636C6F736542746E0008636F6C6C61707365000B636F6C6C61707365537562000D636F6C6C6170736564566965770005636F6C6F72000E636F6D706F756E64427574746F6E0008636F6E7461696E730007636F6E746578740012636F6E76657274446970546F506978656C730006637265617465000763757272656E74001563757272656E74416374697669747954687265616400066465636F6465000F6465636F6465427974654172726179000764656E7369747900066469616C6F6700076469736D6973730002647000086472617761626C6500016500086564697474657874000B65646974746578746E756D000E6564697474657874737472696E670006657175616C7300026578000C657870616E6465645669657700036624300003662431000366243200036624330003662434000366243500036624360008666561744E616D650007666561744E756D000766656174757265000B666561747572654C697374000D66696E616C466561744E616D65000D66696E616C50726F67726573730007666F724E616D65000866726F6D48746D6C000866726F6D55736572000A67644D656E75426F647900036765740009676574416374696F6E000D6765744261636B67726F756E64000A676574426F6F6C65616E000A6765744368696C644174000D6765744368696C64436F756E740008676574436C617373000A676574436F6E7465787400106765744465636C617265644669656C6400116765744465636C617265644D6574686F640011676574446973706C61794D657472696373000E676574466561747572654C697374000B676574496E7374616E6365000F6765744C61796F7574506172616D73000D6765744D61696E4C6F6F70657200106765744D794D656D6F7279537461746500066765744E756D000C6765744F7244656661756C74001367657450726F67726573734472617761626C65000767657452617758000767657452617759000C6765745265736F7572636573000F67657453656C65637465644974656D0009676574537472696E67001067657453797374656D5365727669636500076765745465787400086765745468756D6200106765745468756D624472617761626C65000E676574546F7041637469766974790010676574547261636B4472617761626C65000D6765745669736962696C697479001067657457696E646F774D616E61676572000767726176697479000768616E646C65720008686173466F63757300076861734E657874000868617368436F6465000768656164696E67000668656967687400076869646542746E000169000B69635F6C61756E63686572001669635F6C61756E636865725F6261636B67726F756E64001669635F6C61756E636865725F666F726567726F756E64001169635F6C61756E636865725F726F756E64000269640003696D6D000A696D706F7274616E63650005696E6465780007696E6465784F66000C696E6974466C6F6174696E67000A696E697469616C506F73000D696E697469616C546F75636858000D696E697469616C546F756368590008696E697469616C580008696E697469616C59000C696E7075745F6D6574686F640008696E7374616E63650008696E7456616C75650006696E74656E740006696E766F6B6500096973436865636B6564000C69734469676974734F6E6C7900076973456D707479000B69734E6F74496E47616D65000469734F6E000F697356696577436F6C6C617073656400086974657261746F72000F6C506172616D73436C6F736542746E000E6C506172616D734869646542746E00336C616D62646124526164696F427574746F6E243024756B2D6C676C2D6D6F646D656E752D466C6F6174696E674D6F644D656E7500066C61796F7574000C6C61796F7574506172616D73000D6C61796F7574506172616D7332000E6C61796F7574506172616D734C4C00096C696E4C61796F7574000C6C696E6561724C61796F7574000D6C696E6561724C61796F757431000D6C696E6561724C61796F75743200046C69737400066C697374465400056C6973747300056C6C42616B00086C6F616444617461000B6C6F61644C696272617279000B6D4163746976697469657300096D436F6C6C61707365000A6D436F6C6C617073656400096D457870616E646564000E6D526F6F74436F6E7461696E657200096D53657474696E6773000E6D57696E646F774D616E6167657200086D616B655465787400036D617000076D61746368657300036D617800086D617856616C756500036D696E00066D69706D6170000B6D6F74696F6E4576656E7400046E616D6500056E616D657300096E61746976656C676C00046E65787400036E756D00076E756D4F6E6C7900086F6E43616E63656C00106F6E436865636B65644368616E67656400076F6E436C69636B00086F6E437265617465000D6F6E466F6375734368616E6765000E6F6E4974656D53656C6563746564000B6F6E4C6F6E67436C69636B00116F6E4E6F7468696E6753656C656374656400116F6E50726F67726573734368616E67656400146F6E5374617274547261636B696E67546F75636800136F6E53746F70547261636B696E67546F75636800076F6E546F756368000F6F6E546F7563684C697374656E6572000A6F7074696F6E4E616D6500076F7074696F6E730006706172616D730006706172656E74000A706172656E745669657700057061727365000A7061727365436F6C6F7200087061727365496E7400077061746368657300067061757365640008706F736974696F6E0004706F7374000870726F67726573730003707574000B726164696F427574746F6E000A726164696F47726F757000047261775800047261775900067265636F7264000E72656C61746976654C61796F7574000E72656D6F7665416C6C5669657773000A72656D6F76655669657700077265706C616365000C7265706C6163654669727374000C72657175657374466F6375730002726C000A726C73657474696E67730009726F6F744672616D65000372756E001572756E6E696E6741707050726F63657373496E666F000173000A7361766564496E646578000C7361766564496E646578657300127361766564496E7374616E63655374617465000A7361766564526164696F00067363726C4C4C000E7363726C4C4C457870616E64656400087363726F6C6C546F000A7363726F6C6C5669657700077365656B426172000873656C6563746564001073656C65637465644974656D56696577000D73657441636365737369626C65000A73657441646170746572000A736574416C6C436170730008736574416C70686100127365744261636B67726F756E64436F6C6F720011736574427574746F6E54696E744C697374000A736574436865636B65640008736574436F6C6F72000E736574436F6C6F7246696C746572000E736574436F6E74656E7456696577000F736574436F726E6572526164697573000773657444617461001773657444726F70446F776E566965775265736F75726365000C736574456C6C697073697A65000A73657446696C746572730008736574466C616773000C736574466F63757361626C65000A73657447726176697479000E73657448656164696E6754657874000E736574496D6167654269746D6170000C736574496E70757454797065000E7365744B65794C697374656E6572000F7365744C61796F7574506172616D73000A7365744D617267696E7300157365744D6172717565655265706561744C696D697400067365744D6178000B7365744D61784C696E657300067365744D696E00067365744E756D00137365744F6E43616E63656C4C697374656E6572001A7365744F6E436865636B65644368616E67654C697374656E657200127365744F6E436C69636B4C697374656E657200187365744F6E466F6375734368616E67654C697374656E657200197365744F6E4974656D53656C65637465644C697374656E657200167365744F6E4C6F6E67436C69636B4C697374656E6572001A7365744F6E5365656B4261724368616E67654C697374656E657200127365744F6E546F7563684C697374656E6572000E7365744F7269656E746174696F6E000A73657450616464696E67000B73657450726F6772657373000C7365745363616C6554797065000B73657453656C6563746564000C73657453656C656374696F6E000D73657453696E676C654C696E650009736574537472696E6700097365745374726F6B65000773657454657874000C73657454657874436F6C6F72000B7365745465787453697A65000B73657454696E744C697374000C7365745469746C6554657874000B73657454797065666163650012736574566572746963616C47726176697479000773657456696577000D7365745669736962696C69747900087365745769647468000873657474696E6773000C73657474696E67734C697374000C73657474696E67734F70656E000473686F77000473697A6500077370696E6E6572000573706C6974000D73746172744163746976697479000A7374617274696D616765000C73746F70436865636B696E670003737472000873747253706C69740006737472696E6700057374796C6500077375624665617400057377694F6E000773776974636852000A73776974636865644F6E0004746578740009746578742F68746D6C000874657874566965770006746869732430000674686973243100057469746C6500097469746C65546578740008746F537472696E67000F746F67676C65536F6674496E7075740009746F704D617267696E0010757064617465566965774C61796F7574000375726C00057574662D38000176000376616C000976616C24616C657274000A76616C24627574746F6E000F76616C24636F6C6C61707365537562000C76616C246564697474657874000F76616C2465646974746578746E756D001276616C246564697474657874737472696E67000C76616C24666561744E616D65000B76616C24666561744E756D001176616C2466696E616C466561744E616D65000876616C2469734F6E000C76616C246D617856616C7565000776616C246D696E000B76616C246E756D4F6E6C79000B76616C247370696E6E6572000876616C2474657874000C76616C247465787456696577000776616C2475726C000576616C7565000776616C75654F66000676616C75657300047669657700057756696577000677656967687400057769647468000178000278300002783100017900017A00667E7E44387B226261636B656E64223A22646578222C22636F6D70696C6174696F6E2D6D6F6465223A226465627567222C226861732D636865636B73756D73223A747275652C226D696E2D617069223A32382C2276657273696F6E223A22382E31332E3139227D00880B7E7E7E7B224C756B2F6C676C2F4D61696E41637469766974793B223A223333376637303031222C224C756B2F6C676C2F5224636F6C6F723B223A223563303432323433222C224C756B2F6C676C2F52246472617761626C653B223A226534383863663836222C224C756B2F6C676C2F52246C61796F75743B223A226137316639643361222C224C756B2F6C676C2F52246D69706D61703B223A226338363638376533222C224C756B2F6C676C2F5224737472696E673B223A223163383662656234222C224C756B2F6C676C2F52247374796C653B223A226462383932616136222C224C756B2F6C676C2F523B223A223363383335346463222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E75242445787465726E616C53796E7468657469634C616D626461303B223A222D323231356230663632222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431303B223A226635376431666231222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431313B223A226539393434626132222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431323B223A223766363837646636222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431333B223A226639353364643061222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424313B223A226561633363666564222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424323B223A223130613532333231222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313424333B223A226666366663643139222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431343B223A226634373563333036222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431353B223A223230353132363161222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752431363B223A226533373435366465222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524313B223A223733326164363638222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524323B223A226562346634636537222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524333B223A223836623937623930222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524343B223A223637303261386131222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524353B223A226330306139393934222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524363B223A223663353662303839222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524373B223A223836336535643736222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524383B223A223536386464333133222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E7524393B223A226134373935333838222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E752445646974546578744E756D3B223A223936393363643438222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E75244564697454657874537472696E673B223A226233376539386566222C224C756B2F6C676C2F6D6F646D656E752F466C6F6174696E674D6F644D656E753B223A223335663138386661227D0002E296B3200002E296BD200001E29A9900024B02AC020419D303374801024901FA04186D024B02AC020419D303375601024B02AC020419D30337B601024B02AC020419D30337D101024B02AC020419D303375402024B02AC020419D303375502024C01FA041C06186718681869186A186B186C024D02AC021C0344108000241010241010D4031C031E1E1E024E01FA041C011714024A01FA043A1801024B02AC020400D3031E024D02AC021C0244108000241010D4031C021E1E024A01FA043A1901024D02AC021C0544108000241010241010241010241010D4031C051E1E1E1E1E024A01FA043A1A01024E01FA041C05171317851715177C1741024E01FA041C03171317851716024A01FA043A2601024D02AC021C0144108000D4031C011E024A01FA041AF6024D02AC021C0844108000241010241010241010241010241010241010241010D4031C081E1E1E1E1E1E1E1E024A01FA043A2801024A01FA043A1D01024D02AC021C0444108000241010241010241010D4031C041E1E1E1E024A01FA043A1E01024A01FA043A1F01024A01FA043A3401024F01FA041C011852024A01FA043A3801024A01FA043A2701024A01FA043A2501024D02AC021C01241010D4031C011E024B02AC020402D3031735024901FA041884024B02AC020402D3031736024C01FA041C021883188200000201D901888004A84901818004C449DB0104DC49010001000D09DD01828004804A020001000E090109DE01828004984A010001001009DF01828004B04A0200010011090109E001828004C84A010001001309E101828004E04A010001001409E201828004F84A00000100E301828004904B00070101159120019120019120019120019120019120019120E40181A004A84BE50111DC4B000301011C9020019020019020E601808004944CE70101B84C000201011F9020019020E801808004D84DE90101F84D00050101219020019020019020019020019020EA01808004C84EEB0101F44E00030102269020019020019020EC01808004F050ED010194510101845200010101299020EF018080049852F00101B452000101012A9020F1018080048053F201019C53000301012B9020019020019020F301808004F453F401019854000801012E9020019020019020019020019020019020019020019020F501808004D458F601018C5900030101369020019020019020F701808004985DF80101BC5D000501013900019020019020019020019020F901808004F05DFA0101985E00000101FB01808004D85FFC0101F05F000101013E9020FD01808004A060FE0101BC60000201013F00019020FF01808004F0608002018C610001010141902081028080049C62820201B862000101014290208302808004E0638402019863000101014390208502808004FC638602019864000701014410011001020102010201020190208702808004F067880201E464000301014B90200190200190208902808004A4688A0201C868000501034E90200190200190200190200190208B02808004FC688C0201A8690101E06A0101F46A0002020253902001028F02828004A06B0180A004BC6B910201886B0101D46B0002020255020190209302828004846C0180A004A06C950201EC6B0101B86C02231E076719060A570001000100010001000100010001000100010001000100010001000100010002000100010001000102020001000100010001000100010001000100010001000100010001009702818004A484010102E86E0102E06F0102D8700102E072018902000102C0730102C086010109E8880103029C740102F0770102B4780102F4780102C87B0102AC7D0102E07E0102C48901018820D06C0188208C8401018820808201018820EC6C0188208483010102A083010102D883010102888A01020A846D0102A4930101029C82010102D082010202E48101A0028002000180020011800200058020ECA00102800200018002000180020001640000017F02640100027F640200027F01640000037F02640000047F640100047F01640000057F01640000067F0117E802000000338A0000278A000002000000338A00003A8A000002000000338A0000468A000002000000338A0000528A000002000000338A00005E8A000002000000338A00006A8A000001000000768A000002000000898A0000A18A000002000000AA8A0000B28A000002000000BC8A0000A18A000002000000D08A0000B28A000002000000D88A0000A18A000002000000F88A0000B28A000001000000008B000001000000118B0000020000001E8B0000B28A000001000000268B000002000000368B0000B28A0000020000003D8B0000A18A000002000000698B0000B28A000002000000718B0000B28A000002000000798B0000A18A000002000000958B0000B28A0000020000009D8B0000B28A000002000000A58B0000B28A000001000000AD8B000002000000B68B0000B28A000002000000BE8B0000B28A000002000000C68B0000B28A000001000000CE8B000002000000E88B0000DD8B000002000000E88B0000EF8B000001000000FA8B0000E08F0000000000000000000000000000EC8F0000000000000000000000000000F88F000000000000000000000000000004900000000000000000000000000000109000000000000000000000000000001C900000000000000000000000000000289000000000000000000000000000003C900000000000000100000000000000E60000003090000054900000000000000100000000000000E8000000489000006C900000000000000100000000000000EA0000006090000088900000000000000300000000000000EC00000030900000ED00000078900000EE000000809000009C900000000000000100000000000000EF000000949000009C900000000000000100000000000000F1000000949000009C900000000000000100000000000000F300000030900000B4900000000000000100000000000000F5000000A8900000C0900000000000000100000000000000F700000030900000D8900000000000000100000000000000F9000000CC900000E4900000000000000000000000000000F0900000000000000100000000000000FD00000094900000F0900000000000000200000000000000FF0000009490000000010000FC900000F09000000000000001000000000000000101000094900000F09000000000000001000000000000000301000094900000F090000000000000010000000000000005010000949000000491000000000000010000000000000007010000949000001091000000000000010000000000000009010000309000001C9100000000000001000000000000000B01000060900000309100000000000001000000000000000F010000289100003C91000000000000010000000000000013010000289100004891000000000000000000000000000011000000000000000100000000000000010000008B02000070000000020000008F0000009C0A00000300000084000000D80C0000040000007C00000008130000050000003C010000E8160000060000001F000000C8200000012000005B000000A82400000320000052000000FE500000011000005500000030590000022000008B0200005C5C00000420000025000000278A0000002000001F000000058C00000520000007000000AF8F00000310000021000000E08F0000062000001D000000509100000010000001000000D8930000" diff --git a/app/src/main/jni/Main.cpp b/app/src/main/jni/Main.cpp index 6fadb1c..b65b390 100644 --- a/app/src/main/jni/Main.cpp +++ b/app/src/main/jni/Main.cpp @@ -17,24 +17,27 @@ #include "Includes/Logger.h" #include "Includes/obfuscate.h" #include "Includes/Utils.h" - +#include "NepAU/src/NepAu.h" #include "KittyMemory/MemoryPatch.h" #include "And64InlineHook/And64InlineHook.hpp" #include "Menu.h" -#define targetLibName OBFUSCATE("libFileA.so") +#define targetLibName OBFUSCATE("libil2cpp.so") #include "Includes/Macros.h" #include "JavaGPP/Interface/Interface.h" +LibManager *lib; struct My_Patches { MemoryPatch xs; } hexPatches; +void (*setTimeScale)(float); + void *hack_thread(void *) { LOGI(OBFUSCATE("pthread created")); @@ -42,6 +45,12 @@ void *hack_thread(void *) { sleep(1); } while (!isLibraryLoaded(targetLibName)); + lib = new LibManager(targetLibName, LibType::Unity); + + NClass Time = lib->get_class("UnityEngine", "Time"); + auto setTimeScale_addr = Time.method("set_timeScale", 1); + LOGI("Addr: %p", setTimeScale_addr.addr()); + setTimeScale = (void (*) (float))setTimeScale_addr.addr(); LOGI(OBFUSCATE("%s has been loaded"), (const char *) targetLibName); @@ -60,7 +69,9 @@ jobjectArray getFeatureList(JNIEnv *env, jobject context) { jobjectArray ret; const char *features[] = { + OBFUSCATE("Category_The Category"), //Not counted + OBFUSCATE("88_SeekBar_SpeedHack_1_10"), OBFUSCATE("Toggle_The toggle"), OBFUSCATE( "100_Toggle_True_The toggle 2"), //This one have feature number assigned, and switched on by default @@ -112,8 +123,11 @@ jobjectArray getFeatureList(JNIEnv *env, jobject context) { void Changes(JNIEnv *env, jclass clazz, jobject obj, jint featNum, jstring featName, jint value, jboolean boolean, jstring str) { switch (featNum) { - case 1: - + case 88: + if(setTimeScale) { + auto val = (float)value; + setTimeScale(val); + } break; } } diff --git a/app/src/main/jni/NepAU/LICENSE b/app/src/main/jni/NepAU/LICENSE new file mode 100644 index 0000000..e9c5ded --- /dev/null +++ b/app/src/main/jni/NepAU/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 NepMods + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/src/main/jni/NepAU/Readme.md b/app/src/main/jni/NepAU/Readme.md new file mode 100644 index 0000000..27894ba --- /dev/null +++ b/app/src/main/jni/NepAU/Readme.md @@ -0,0 +1,171 @@ +# ๐Ÿง  NepAu + + +[![License](https://img.shields.io/github/license/nepmods/NepAu)](https://github.com/nepmods/NepAu/blob/master/LICENSE) +[![Last Commit](https://img.shields.io/github/last-commit/nepmods/NepAu)](https://github.com/nepmods/NepAu/commits/main) +[![Release](https://img.shields.io/github/v/release/nepmods/NepAu)](https://github.com/nepmods/NepAu/releases) +[![Issues](https://img.shields.io/github/issues/nepmods/NepAu)](https://github.com/nepmods/NepAu/issues) +[![Stars](https://img.shields.io/github/stars/nepmods/NepAu)](https://github.com/nepmods/NepAu/stargazers) + +**NepAu** (Native Lib for Auto-Update) is a runtime dynamic analysis library designed to interface with Unity IL2CPP binaries and native libraries (`.so`). Ideal for reverse engineering, modding, and automation, it provides an elegant and consistent interface to access classes, fields, methods, symbols, and patterns in memory. + +--- + +## ๐Ÿ“ฆ Repository + +- ๐Ÿ“ **Repo Name**: `NepAu` +- ๐ŸŒ **URL**: [https://github.com/nepmods/NepAu](https://github.com/nepmods/NepAu) +- ๐Ÿ‘ค **Author**: [@nepmods / arjun](https://github.com/nepmods) + +--- + +## โœจ Features + +- ๐Ÿง  IL2CPP class/method/field accessor +- ๐Ÿ” Pattern scanning via memory range +- ๐Ÿ“œ Symbol resolver with offset calculation +- ๐Ÿ“š Module metadata handling (`start`, `end`, `size`) +- ๐Ÿ”„ Dynamic loader with retry and fallback +- ๐Ÿงช Support for Unity & custom libraries + +--- + +## ๐Ÿ—๏ธ Instructions + +## Include Only +This Project can be used by just including one file + +```c++ +#include "NepAU/includeOnly/NepAU.h +``` +## Source +This Project can also be used by building source file +put this on your cmakelist/android.mk +``` + NepAU/src/NepAu.cpp +``` + +```c++ +#include "NepAU/src/NepAu.h +``` +--- + +## ๐Ÿ”ง Dependencies + +| Component | Version | +|---------------|-------------| +| C++ Compiler | C++17+ | +| Android NDK | r25+ | +| Kernel (Linux)| โ‰ฅ 4.15 | +| Unity IL2CPP | Supported | +| libc / POSIX | Required | + +--- + +## ๐Ÿงฐ Example Usage + +```cpp + +LibManager manager("libil2cpp.so"); + +if (manager.loaded()) { + NClass playerClass = manager.get_class("PlayerControl"); + + Address killMethod = playerClass.method("MurderPlayer", 1); + NField nameField = playerClass.field("playerName"); + + uintptr_t offset = nameField.offset(); + + std::string playerName; + nameField.getStatic(&playerName); + + LOGI("Kill method at: 0x%lx", (uintptr_t)killMethod); + LOGI("Name offset: %lx", offset); +} +``` + +--- + +## ๐Ÿ“˜ API Overview + +### ๐Ÿ”น `LibManager` +| Method | Description | +|--------|-------------| +| `get_symbol(name)` | Resolve dlsym symbol to absolute address | +| `get_class(className)` | Get class in global namespace | +| `get_class(namespace, className)` | Get class in specific namespace | +| `get_pattern(pattern)` | Search memory for hex pattern | +| `loaded()` | Returns `true` if library is loaded | +| `is_unity()` | Returns if library type is `Unity` | + +### ๐Ÿ”น `NClass` +| Method | Description | +|--------|-------------| +| `method(name, paramCount)` | Get method address | +| `field(name)` | Get field accessor | + +### ๐Ÿ”น `NField` +| Method | Description | +|--------|-------------| +| `offset()` | Get offset of field | +| `getStatic(out)` | Get static field value | +| `setStatic(value)` | Set static field value | + +--- + +## ๐Ÿ“ฆ Releases + +| Version | Date | Description | +|---------|------------|--------------------| +| `v1.0.0` | 2025-07-25 | Initial public release | + + +--- + +## ๐Ÿงช Testing + +Run inside your injected project or loader environment: +- Dobby-based mods +- Android shared object loaders +- Unity IL2CPP hooks (e.g. ModMenu) + +--- + +## ๐Ÿ™‹ Contributing + +We welcome contributions! + +1. ๐Ÿด Fork the repo +2. ๐Ÿ”ง Create a feature branch (`feature/something`) +3. โœ… Commit your changes +4. ๐Ÿš€ Open a Pull Request + +๐Ÿ“œ Please ensure changes are clean and well-documented. + +--- + +## ๐Ÿ“„ License + +This project is licensed under the **MIT License**. +See the [LICENSE](https://github.com/nepmods/NepAu/blob/main/LICENSE) file for details. + +--- + +## ๐Ÿง  Credits + +- Developed by [@nepmods / arjun](https://github.com/nepmods) +- Inspired by IL2CPP reverse engineering community +- With appreciation to: + - [Frida](https://frida.re/) + - [Dobby](https://github.com/jmpews/Dobby) + - [xDL](https://github.com/ViRb3/xDL) + +--- + +## ๐Ÿ“ซ Contact + +For issues or feature requests: +๐Ÿ‘‰ [Open an issue](https://github.com/nepmods/NepAu/issues) +Or email: `nepmods@proton.me` *(example email, customize as needed)* + +--- diff --git a/app/src/main/jni/NepAU/includeOnly/NepAu.h b/app/src/main/jni/NepAU/includeOnly/NepAu.h new file mode 100644 index 0000000..3686a20 --- /dev/null +++ b/app/src/main/jni/NepAU/includeOnly/NepAu.h @@ -0,0 +1,227 @@ +#ifndef NEPAU_H +#define NEPAU_H + +#include +#include +#include +#include +#include +#include "macros.h" +#include "UnityApi.h" +#include "vector" + +struct Module { + uintptr_t start_address; + uintptr_t end_address; + intptr_t size; + std::string name; +}; +std::vector moduleNames; +std::vector modules; + +Module GetModule(std::string module_name) { + std::vector::iterator itr = std::find(moduleNames.begin() , moduleNames.end() , module_name); + if (itr != moduleNames.end()) { + int pos = itr - moduleNames.begin(); + return modules[pos]; + } + + std::unique_ptr maps_handle(fopen(("/proc/self/maps"), ("r")), &fclose); + char line[512], mod_name[64]; + uintptr_t startAddr , endAddr; + + while (fgets(line, sizeof(line), maps_handle.get())) { + if (std::sscanf(line, ("%x-%x %*s %*ld %*s %*d %s"), &startAddr, &endAddr, &mod_name)) { + if (std::strstr(mod_name, module_name.c_str())) { + Module module; + module.start_address = startAddr; + module.end_address = endAddr; + module.size = endAddr - startAddr; + module.name = module_name; + + moduleNames.push_back(module.name); + modules.push_back(module); + return module; + } + } + } + Module module; + return module; +} +class Address { + uintptr_t g_base; + uintptr_t g_addr; + +public: + Address(uintptr_t base = 0, uintptr_t address = 0) + : g_base(base), g_addr(address) {} + + uintptr_t offset() { + return g_addr - g_base; + } + uintptr_t addr() { + return g_addr; + } + operator uintptr_t() const { + return g_addr; + } + + // Conversion to void* + operator void*() const { + return reinterpret_cast(g_addr); + } + +}; + +class NField { + std::string name; + LoadClass thisclass; +public: + NField(LoadClass thisclass, std::string name) : thisclass(thisclass), name(name) { + + } + uintptr_t offset() { + return thisclass.GetFieldOffset(name.c_str()); + } + + void getStatic(void *out) { + thisclass.GetStaticFieldValue(name.c_str(), out); + } + void setStatic(void *value) { + thisclass.SetStaticFieldValue(name.c_str(), value); + } +}; + +class NClass { + std::string libName; + LoadClass thisclass; +public: + NClass(std::string libName, const char *name) : libName(std::move(libName)), thisclass(LoadClass("", name)) {} + NClass(std::string libName, const char *nameSpace, const char *name) :libName(std::move(libName)), thisclass(LoadClass(nameSpace, name)) {} + + Address method(std::string name ,int param = 0) { + return {getBase(libName.c_str()), thisclass.GetMethodOffsetByName(name.c_str(), param)}; + } + + NField field(std::string name) { + return {thisclass, std::move(name)}; + } +}; + +class iNepAu { +public: + virtual ~iNepAu() = default; + + virtual Address get_symbol(const std::string& symbol) = 0; + virtual NClass get_class(const std::string& clasz) = 0; + virtual NClass get_class(const std::string& namespaze, const std::string& clasz) = 0; + virtual Address get_pattern(const std::string& pattern) = 0; + +}; + +class NativeLibrary : public iNepAu { + void* handle; + std::string name; +public: + explicit NativeLibrary(void* h, std::string name) + : handle(h), name(std::move(name)) {} + + Address get_symbol(const std::string& symbol) override { + void* addr = custom_dlsym(handle, symbol.c_str()); + return {getBase(name.c_str()), reinterpret_cast(addr)}; + } + + NClass get_class(const std::string& clasz) override { + return {name, clasz.c_str()}; + } + + NClass get_class(const std::string& namespaze, const std::string& clasz) override { + return {name, namespaze.c_str(), clasz.c_str()}; + } + + Address get_pattern(const std::string& pattern) override { + Address ret; + Module module = GetModule(name); + if (!module.name.empty()){ + const char* pat = pattern.c_str(); + uint8_t *start = reinterpret_cast(module.start_address); + uint8_t* first_match = 0; + + for (uint8_t *current_byte = start; current_byte < (start + module.size); ++current_byte) { + if (*pat == '?' || *current_byte == strtoul(pat, NULL, 16)) { + if (!first_match) { + first_match = current_byte; + } + + if (!pat[2]) { + ret = Address(module.start_address, (uintptr_t)first_match); + return ret; + + } + pat += *(uint16_t*)pat == 16191 || *pat != '?' ? 3 : 2; + + } else if (first_match) { + current_byte = first_match; + pat = pattern.c_str(); + first_match = 0; + } + } + return ret; + } + return ret; + } +}; + + +enum LibType { + Unity, + Native +}; + +class LibManager : public iNepAu { + bool success = false; + std::string name; + std::unique_ptr lib; + LibType libType; +public: + explicit LibManager(const std::string& libName, LibType libType = Unity) + : name(libName), libType(libType) { + void *IL2Cpp_Handle = nullptr; + + while (!IL2Cpp_Handle) { + IL2Cpp_Handle = custom_dlopen(libName.c_str(), 4); + sleep(1); + } + + success = (IL2Cpp_Handle != nullptr); + + if(libType == Unity) { + while(!NepAU::initialize()) { + sleep(1); + } + } + lib = std::make_unique(IL2Cpp_Handle, libName); + } + + Address get_symbol(const std::string& symbol) override { + return lib->get_symbol(symbol); + } + + NClass get_class(const std::string& clasz) override { + return lib->get_class(clasz); + } + + NClass get_class(const std::string& namespaze, const std::string& clasz) override { + return lib->get_class(namespaze, clasz); + } + + Address get_pattern(const std::string& pattern) override { + return lib->get_pattern(pattern); + } + + bool loaded() const { return success; } + bool is_unity() const { return libType == Unity; } + const std::string& get_name() const { return name; } +}; + +#endif // NEPAU_H diff --git a/app/src/main/jni/NepAU/includeOnly/UnityApi.h b/app/src/main/jni/NepAU/includeOnly/UnityApi.h new file mode 100644 index 0000000..53efbcd --- /dev/null +++ b/app/src/main/jni/NepAU/includeOnly/UnityApi.h @@ -0,0 +1,123 @@ +#ifndef UNITYAPI_H +#define UNITYAPI_H + +#include +#include +#include +#include +#include +#include +#include "Server/Sources/NepAU/includeOnly/macros.h" + +namespace NepAUApi { + typedef void* (*class_from_name_t)(const void* assembly, const char* name_space, const char* name); + typedef void** (*class_get_method_from_name_t)(void* klass, const char* name, int paramcount); + typedef void* (*domain_get_t)(); + typedef const void** (*domain_get_assemblies_t)(const void* domain, size_t* size); + typedef const void* (*assembly_get_image_t)(const void* assembly); + typedef const void* (*domain_assembly_open_t)(void* domain, const char* name); + typedef void* (*class_get_field_from_name_t)(void* klass, const char* name); + typedef size_t (*field_get_offset_t)(void* fieldInfo); + typedef void (*il2cpp_field_static_value)(void *field, void *value); + + inline class_from_name_t class_from_name = nullptr; + inline class_get_method_from_name_t class_get_method_from_name = nullptr; + inline domain_get_t domain_get = nullptr; + inline domain_get_assemblies_t domain_get_assemblies = nullptr; + inline assembly_get_image_t assembly_get_image = nullptr; + inline domain_assembly_open_t domain_assembly_open = nullptr; + inline class_get_field_from_name_t class_get_field_from_name = nullptr; + inline field_get_offset_t field_get_offset = nullptr; + inline il2cpp_field_static_value field_get_static = nullptr; + inline il2cpp_field_static_value field_set_static = nullptr; +} + +namespace NepAU { + inline void* get_il2cpp() { + void *IL2Cpp_Handle = nullptr; + + while (!IL2Cpp_Handle) { + IL2Cpp_Handle = custom_dlopen("libil2cpp.so", 4); + sleep(1); + } + return IL2Cpp_Handle; + } + + // Initialize all function pointers + inline bool initialize() { + void* il2cpp = get_il2cpp(); + if (!il2cpp) return false; + + using namespace NepAUApi; + + class_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_from_name")); + class_get_method_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_get_method_from_name")); + domain_get = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_get")); + domain_get_assemblies = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_get_assemblies")); + assembly_get_image = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_assembly_get_image")); + domain_assembly_open = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_assembly_open")); + class_get_field_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_get_field_from_name")); + field_get_offset = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_get_offset")); + field_get_static = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_static_get_value")); + field_set_static = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_static_set_value")); + + return class_from_name && class_get_method_from_name && domain_get && + domain_get_assemblies && assembly_get_image && + domain_assembly_open && class_get_field_from_name && + field_get_offset; + } + + inline void* get_class(const char* name_space, const char* type_name) { + using namespace NepAUApi; + + void* domain = domain_get(); + if (!domain) return nullptr; + + size_t count = 0; + const void** assemblies = domain_get_assemblies(domain, &count); + for (size_t i = 0; i < count; ++i) { + const void* image = assembly_get_image(assemblies[i]); + if (!image) continue; + void* klass = class_from_name(image, name_space, type_name); + if (klass) return klass; + } + return nullptr; + } +} + +class LoadClass { + void* thisclass = nullptr; + + void* GetClass(const char* ns, const char* name) { + return NepAU::get_class(ns, name); + } + +public: + LoadClass(const char* namespaze, const char* clazz) { + do { thisclass = GetClass(namespaze, clazz); } while (!thisclass); + } + uintptr_t GetMethodOffsetByName(const char* name, int paramcount) { + return (uintptr_t) *NepAUApi::class_get_method_from_name(thisclass, name, paramcount); + } + uintptr_t GetFieldOffset(const char* name) { + if (!thisclass) return 0x0; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return 0x0; + size_t offset = NepAUApi::field_get_offset(fieldInfo); + return reinterpret_cast(offset); + } + void GetStaticFieldValue(const char* name, void *out) { + if (!thisclass) return; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return; + NepAUApi::field_get_static(fieldInfo, out); + } + void SetStaticFieldValue(const char* name, void *out) { + if (!thisclass) return; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return; + NepAUApi::field_set_static(fieldInfo, out); + } +}; + +#endif // UNITYAPI_H diff --git a/app/src/main/jni/NepAU/includeOnly/macros.h b/app/src/main/jni/NepAU/includeOnly/macros.h new file mode 100644 index 0000000..cc60b49 --- /dev/null +++ b/app/src/main/jni/NepAU/includeOnly/macros.h @@ -0,0 +1,47 @@ +// +// Created by arjun on 7/25/25. +// +// Created by arjun on 7/25/25. +// + +#ifndef MACROS_H +#define MACROS_H + +#include +#include +#include +#include "dlfcn.h" +inline void* custom_dlopen(const char* lib, int flag) { + return dlopen(lib, flag); +} +inline void* custom_dlsym(void* lib, const char *sym) { + return dlsym(lib, sym); +} + + +uintptr_t getBase(const char *library) { + char filename[0xFF] = {0}, + buffer[1024] = {0}; + FILE *fp = NULL; + uintptr_t address = 0; + + sprintf(filename, "/proc/self/maps"); + fp = fopen(filename, "rt"); + if (fp == NULL) { + perror("fopen"); + goto done; + } + while (fgets(buffer, sizeof(buffer), fp)) { + if (strstr(buffer, library)) { + address = (uintptr_t) strtoul(buffer, NULL, 16); + goto done; + } + } + done: + if (fp) { + fclose(fp); + } + return address; +} + +#endif //MACROS_H diff --git a/app/src/main/jni/NepAU/src/NepAu.cpp b/app/src/main/jni/NepAU/src/NepAu.cpp new file mode 100644 index 0000000..f381b0c --- /dev/null +++ b/app/src/main/jni/NepAU/src/NepAu.cpp @@ -0,0 +1,297 @@ +// +// Created by arjun on 7/25/25. +// + +#include "NepAu.h" +#include +#include +#include +#include "macros.h" +#include +#include +#include +#include + +uintptr_t getBase(const char *library) { + char filename[0xFF] = {0}, + buffer[1024] = {0}; + FILE *fp = NULL; + uintptr_t address = 0; + + sprintf(filename, "/proc/self/maps"); + fp = fopen(filename, "rt"); + if (fp == NULL) { + perror("fopen"); + goto done; + } + while (fgets(buffer, sizeof(buffer), fp)) { + if (strstr(buffer, library)) { + address = (uintptr_t) strtoul(buffer, NULL, 16); + goto done; + } + } + done: + if (fp) { + fclose(fp); + } + return address; +} + +namespace NepAUApi { + typedef void* (*class_from_name_t)(const void* assembly, const char* name_space, const char* name); + typedef void** (*class_get_method_from_name_t)(void* klass, const char* name, int paramcount); + typedef void* (*domain_get_t)(); + typedef const void** (*domain_get_assemblies_t)(const void* domain, size_t* size); + typedef const void* (*assembly_get_image_t)(const void* assembly); + typedef const void* (*domain_assembly_open_t)(void* domain, const char* name); + typedef void* (*class_get_field_from_name_t)(void* klass, const char* name); + typedef size_t (*field_get_offset_t)(void* fieldInfo); + typedef void (*il2cpp_field_static_value)(void *field, void *value); + + inline class_from_name_t class_from_name = nullptr; + inline class_get_method_from_name_t class_get_method_from_name = nullptr; + inline domain_get_t domain_get = nullptr; + inline domain_get_assemblies_t domain_get_assemblies = nullptr; + inline assembly_get_image_t assembly_get_image = nullptr; + inline domain_assembly_open_t domain_assembly_open = nullptr; + inline class_get_field_from_name_t class_get_field_from_name = nullptr; + inline field_get_offset_t field_get_offset = nullptr; + inline il2cpp_field_static_value field_get_static = nullptr; + inline il2cpp_field_static_value field_set_static = nullptr; +} + + + +namespace NepAU { + void* get_il2cpp() { + void *IL2Cpp_Handle = nullptr; + while (!IL2Cpp_Handle) { + IL2Cpp_Handle = custom_dlopen("libil2cpp.so", 4); + sleep(1); + } + return IL2Cpp_Handle; + } + + bool initialize() { + void* il2cpp = get_il2cpp(); + if (!il2cpp) return false; + + using namespace NepAUApi; + + class_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_from_name")); + class_get_method_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_get_method_from_name")); + domain_get = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_get")); + domain_get_assemblies = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_get_assemblies")); + assembly_get_image = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_assembly_get_image")); + domain_assembly_open = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_domain_assembly_open")); + class_get_field_from_name = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_class_get_field_from_name")); + field_get_offset = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_get_offset")); + field_get_static = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_static_get_value")); + field_set_static = reinterpret_cast(custom_dlsym(il2cpp, "il2cpp_field_static_set_value")); + + return class_from_name && class_get_method_from_name && domain_get && + domain_get_assemblies && assembly_get_image && + domain_assembly_open && class_get_field_from_name && + field_get_offset; + } + + void* get_class(const char* name_space, const char* type_name) { + using namespace NepAUApi; + void* domain = domain_get(); + if (!domain) return nullptr; + + size_t count = 0; + const void** assemblies = domain_get_assemblies(domain, &count); + for (size_t i = 0; i < count; ++i) { + const void* image = assembly_get_image(assemblies[i]); + if (!image) continue; + void* klass = class_from_name(image, name_space, type_name); + if (klass) return klass; + } + return nullptr; + } +} + +void* LoadClass::GetClass(const char* ns, const char* name) { + return NepAU::get_class(ns, name); +} + +LoadClass::LoadClass(const char* namespaze, const char* clazz) { + do { + thisclass = GetClass(namespaze, clazz); + } while (!thisclass); +} + +uintptr_t LoadClass::GetMethodOffsetByName(const char* name, int paramcount) { + return (uintptr_t) *NepAUApi::class_get_method_from_name(thisclass, name, paramcount); +} + +uintptr_t LoadClass::GetFieldOffset(const char* name) { + if (!thisclass) return 0; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return 0; + return (uintptr_t) NepAUApi::field_get_offset(fieldInfo); +} + +void LoadClass::GetStaticFieldValue(const char* name, void *out) { + if (!thisclass) return; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return; + NepAUApi::field_get_static(fieldInfo, out); +} + +void LoadClass::SetStaticFieldValue(const char* name, void *out) { + if (!thisclass) return; + void* fieldInfo = NepAUApi::class_get_field_from_name(thisclass, name); + if (!fieldInfo) return; + NepAUApi::field_set_static(fieldInfo, out); +} + + +std::vector moduleNames; +std::vector modules; + +Module GetModule(std::string module_name) { + auto itr = std::find(moduleNames.begin(), moduleNames.end(), module_name); + if (itr != moduleNames.end()) { + int pos = itr - moduleNames.begin(); + return modules[pos]; + } + + std::unique_ptr maps_handle(fopen("/proc/self/maps", "r"), &fclose); + char line[512], mod_name[64]; + uintptr_t startAddr, endAddr; + + while (fgets(line, sizeof(line), maps_handle.get())) { + if (std::sscanf(line, "%x-%x %*s %*ld %*s %*d %s", &startAddr, &endAddr, mod_name)) { + if (std::strstr(mod_name, module_name.c_str())) { + Module module; + module.start_address = startAddr; + module.end_address = endAddr; + module.size = endAddr - startAddr; + module.name = module_name; + + moduleNames.push_back(module.name); + modules.push_back(module); + return module; + } + } + } + return {}; +} + +// Address class +Address::Address(uintptr_t base, uintptr_t address) + : g_base(base), g_addr(address) {} + +uintptr_t Address::offset() const { return g_addr - g_base; } +uintptr_t Address::addr() const { return g_addr; } +Address::operator uintptr_t() const { return g_addr; } +Address::operator void*() const { return reinterpret_cast(g_addr); } + +// NField class +NField::NField(LoadClass thisclass, std::string name) : thisclass(thisclass), name(std::move(name)) {} + +uintptr_t NField::offset() { return thisclass.GetFieldOffset(name.c_str()); } +void NField::getStatic(void *out) { thisclass.GetStaticFieldValue(name.c_str(), out); } +void NField::setStatic(void *value) { thisclass.SetStaticFieldValue(name.c_str(), value); } + +// NClass class +NClass::NClass(std::string libName, const char *name) + : libName(std::move(libName)), thisclass(LoadClass("", name)) {} + +NClass::NClass(std::string libName, const char *nameSpace, const char *name) + : libName(std::move(libName)), thisclass(LoadClass(nameSpace, name)) {} + +Address NClass::method(std::string name, int param) { + return {getBase(libName.c_str()), thisclass.GetMethodOffsetByName(name.c_str(), param)}; +} + +NField NClass::field(std::string name) { + return {thisclass, std::move(name)}; +} + +// NativeLibrary +NativeLibrary::NativeLibrary(void* h, std::string name) + : handle(h), name(std::move(name)) {} + +Address NativeLibrary::get_symbol(const std::string& symbol) { + void* addr = custom_dlsym(handle, symbol.c_str()); + return {getBase(name.c_str()), reinterpret_cast(addr)}; +} + +NClass NativeLibrary::get_class(const std::string& clasz) { + return {name, clasz.c_str()}; +} + +NClass NativeLibrary::get_class(const std::string& namespaze, const std::string& clasz) { + return {name, namespaze.c_str(), clasz.c_str()}; +} + +Address NativeLibrary::get_pattern(const std::string& pattern) { + Address ret; + Module module = GetModule(name); + if (!module.name.empty()) { + const char* pat = pattern.c_str(); + auto* start = reinterpret_cast(module.start_address); + uint8_t* first_match = nullptr; + + for (uint8_t* current_byte = start; current_byte < (start + module.size); ++current_byte) { + if (*pat == '?' || *current_byte == strtoul(pat, nullptr, 16)) { + if (!first_match) first_match = current_byte; + + if (!pat[2]) { + return {module.start_address, reinterpret_cast(first_match)}; + } + + pat += *(uint16_t*)pat == 16191 || *pat != '?' ? 3 : 2; + } else if (first_match) { + current_byte = first_match; + pat = pattern.c_str(); + first_match = nullptr; + } + } + } + return ret; +} + +// LibManager +LibManager::LibManager(const std::string& libName, LibType libType) + : name(libName), libType(libType) { + void* IL2Cpp_Handle = nullptr; + + while (!IL2Cpp_Handle) { + IL2Cpp_Handle = custom_dlopen(libName.c_str(), 4); + sleep(1); + } + + success = (IL2Cpp_Handle != nullptr); + + if (libType == Unity) { + while (!NepAU::initialize()) { + sleep(1); + } + } + + lib = std::make_unique(IL2Cpp_Handle, libName); +} + +Address LibManager::get_symbol(const std::string& symbol) { + return lib->get_symbol(symbol); +} + +NClass LibManager::get_class(const std::string& clasz) { + return lib->get_class(clasz); +} + +NClass LibManager::get_class(const std::string& namespaze, const std::string& clasz) { + return lib->get_class(namespaze, clasz); +} + +Address LibManager::get_pattern(const std::string& pattern) { + return lib->get_pattern(pattern); +} + +bool LibManager::loaded() const { return success; } +bool LibManager::is_unity() const { return libType == Unity; } +const std::string& LibManager::get_name() const { return name; } diff --git a/app/src/main/jni/NepAU/src/NepAu.h b/app/src/main/jni/NepAU/src/NepAu.h new file mode 100644 index 0000000..ab71be5 --- /dev/null +++ b/app/src/main/jni/NepAU/src/NepAu.h @@ -0,0 +1,121 @@ +// +// Created by arjun on 7/25/25. +// +#ifndef NEPAU_H +#define NEPAU_H + +#include +#include +#include +#include +#include + +namespace NepAU { + void* get_il2cpp(); + bool initialize(); + void* get_class(const char* name_space, const char* type_name); +} + +class LoadClass { + void* thisclass = nullptr; + void* GetClass(const char* ns, const char* name); +public: + LoadClass(const char* namespaze, const char* clazz); + uintptr_t GetMethodOffsetByName(const char* name, int paramcount); + uintptr_t GetFieldOffset(const char* name); + void GetStaticFieldValue(const char* name, void *out); + void SetStaticFieldValue(const char* name, void *out); +}; +struct Module { + uintptr_t start_address; + uintptr_t end_address; + intptr_t size; + std::string name; +}; + +Module GetModule(std::string module_name); + +class Address { + uintptr_t g_base; + uintptr_t g_addr; + +public: + Address(uintptr_t base = 0, uintptr_t address = 0); + + uintptr_t offset() const; + uintptr_t addr() const; + operator uintptr_t() const; + operator void*() const; +}; + +class NField { + std::string name; + LoadClass thisclass; + +public: + NField(LoadClass thisclass, std::string name); + uintptr_t offset(); + void getStatic(void *out); + void setStatic(void *value); +}; + +class NClass { + std::string libName; + LoadClass thisclass; + +public: + NClass(std::string libName, const char *name); + NClass(std::string libName, const char *nameSpace, const char *name); + + Address method(std::string name, int param = 0); + NField field(std::string name); +}; + +class iNepAu { +public: + virtual ~iNepAu() = default; + + virtual Address get_symbol(const std::string& symbol) = 0; + virtual NClass get_class(const std::string& clasz) = 0; + virtual NClass get_class(const std::string& namespaze, const std::string& clasz) = 0; + virtual Address get_pattern(const std::string& pattern) = 0; + +}; + +enum LibType { + Unity, + Native +}; +class NativeLibrary : public iNepAu { + void* handle; + std::string name; + +public: + explicit NativeLibrary(void* h, std::string name); + + Address get_symbol(const std::string& symbol) override; + NClass get_class(const std::string& clasz) override; + NClass get_class(const std::string& namespaze, const std::string& clasz) override; + Address get_pattern(const std::string& pattern) override; +}; + +class LibManager : public iNepAu { + bool success = false; + std::string name; + std::unique_ptr lib; + LibType libType; + +public: + explicit LibManager(const std::string& libName, LibType libType = Unity); + + Address get_symbol(const std::string& symbol) override; + NClass get_class(const std::string& clasz) override; + NClass get_class(const std::string& namespaze, const std::string& clasz) override; + Address get_pattern(const std::string& pattern) override; + + bool loaded() const; + bool is_unity() const; + const std::string& get_name() const; +}; + +#endif // NEPAU_H diff --git a/app/src/main/jni/NepAU/src/macros.h b/app/src/main/jni/NepAU/src/macros.h new file mode 100644 index 0000000..5f4ddc5 --- /dev/null +++ b/app/src/main/jni/NepAU/src/macros.h @@ -0,0 +1,21 @@ +// +// Created by arjun on 7/25/25. +// + +#ifndef MACROS_H +#define MACROS_H + +#include +#include +#include +#include "dlfcn.h" +inline void* custom_dlopen(const char* lib, int flag) { + return dlopen(lib, flag); +} +inline void* custom_dlsym(void* lib, const char *sym) { + return dlsym(lib, sym); +} + +uintptr_t getBase(const char *library); + +#endif //MACROS_H diff --git a/settings.gradle b/settings.gradle index af639b2..fc6695c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,5 +19,5 @@ dependencyResolutionManagement { } } -rootProject.name = "Native-LGL" +rootProject.name = "NativeModMenu" include ':app'