:020000042000DA
:1000000000980020B9040020C1040020D904002079
:1000100000000000000000000000000000000000E0
:10002000000000000000000000000000F1040020BB
:100030000000000000000000090500200B05002062
:10004000FB390020653B00200D310300533B0020AD
:10005000993A00208D310300873B00208F3B002020
:100060000D0500200F340020FB3B0020AD310300C4
:10007000578102009D2F00200D0500200D05002056
:100080000D0500200D0500200D050020BD2B0020D2
:10009000C72B0020D12B0020DB2B0020E52B0020DC
:020000042000DA
:1001600032000000C7050020091D0020853D002049
:10017000000000000000000063800200BD8002005B
:100180003B0F0020FB800200198102003581020034
:100190005D81020001390020A1050020ED0E002044
:1001A000090F002000000000000000003F000000D8
:1001B000F48B002000040000740B080048010000CC
:1001C0006807080000040000C80C080020050000B3
:1001D000000000002000000048000000580000005F
:1001E0006800000004010000160100002801000062
:1001F0002E010000202A00008E2E000001000000C9
:1002000088130000E91D0020E9600200FD93020050
:100210001F17002019280300A5740200C135002013
:1002200003000000D52002008D3D002004000000E6
:10023000D74902000F490200831D020063910200AA
:10024000B7910200BF910200078202007182020092
:10025000DC550020AD83020093840200418502003A
:1002600015860200378602005F860200758602004E
:10027000F9870200258902005D8A0200D38C020002
:10028000098D02000F900200438D0200278E0200AC
:10029000F98E0200478F0200030E0020D58F020066
:1002A00049510200775102002F5202001000000055
:1002B00020030000803E000000000000000000005D
:020000042000DA
:1002C000504600030003983A6400F401B80B000C98
:1002D000B80B120030003000CD009A01120024004B
:1002E00030006400B0001800280012001200D0078F
:1002F0000000FFFF00000000000000000000000000
:100300001F000002444131343538302D30310000B7
:1003100000000000000000000000000000000000DD
:0403200000000000D9
:020000042000DA
:10034000FFFF010000C201000000000000000000EB
:100350000000F4010100011B0A071AFF4C000215FE
:10036000C72C49D7C1035F8A082214E7AE986E9F55
:1003700000010003C5000000000009FF00605257A3
:100380002D424C450000000000000000000000006D
:100390000000000000000000000044413134353806
:1003A00078000000000000000000000000000000D5
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D00000000000000000000E4E38C5EAB4140012
:0403E000064064323D
:020000042000DA
:100440000348854604F020FE00480047C72002000C
:100450000098002010B50620134B188008200123B7
:100460008340124C236000BF114880683E239843AC
:100470002E300F4B9860002005231B07188018466C
:10048000008A0F231B029843C01805231B071882FC
:100490000122D204074902E0002001C2491E0029BE
:1004A000FADA62B610BD00000034005080E100E0CE
:1004B00000330050FF0B00001548804715480047E7
:1004C00004207146084203D0EFF30980124908471F
:1004D000EFF308801049084704207146084203D012
:1004E000EFF309800D490847EFF308800B490847EF
:1004F00004207146084203D0EFF3098008490847F9
:10050000EFF3088006490847FEE7FEE7FEE7000034
:100510005504002041040020E90A002025050020A0
:10052000FF11002005210907498A8022914380316B
:10053000052212075182184A016811604168516012
:1005400081689160C168D16001691161416951613F
:1005500081699161C169D161114608620F49896A57
:1005600051620E49C96A91620C49096BD1620B490B
:10057000C96B11630949496B51630849896B9163E0
:1005800005210907898A20221140202901D100BEB6
:1005900001E000BFFEE770470018080000ED00E032
:1005A00010B5DF480021016000F025FC002001218A
:1005B0008907096B49004908C207114301229207C4
:1005C000116300BF10BD1CB50120D649087008207A
:1005D000D549088004F06AFD01F0DAFCFF21013101
:1005E0000D20800104F068FD03F006F800F006FB22
:1005F000CE480078CD490870CD480078CC490870C5
:10060000012004F05FFD01F0B7FA00F029FB04209F
:1006100000F07FF9072000F07CF90A2000F079F95A
:10062000062000F076F90B2000F073F9012000F0AD
:1006300070F9022000F06DF9002000F06AF9BD4861
:10064000006804F045FD00F0B9FD01F04EFA01200C
:1006500080070068FF210131884340188905086040
:1006600000F0A4FC00F07EF9B3480068AA2800D18D
:1006700000BF00BF03F092FEFFF792FF00200521AC
:100680000907C882AD484088E0218843A030AB49C3
:100690004880012004F022FD3AE10520000700898E
:1006A00080210840C01100282CD0C805006B090229
:1006B0000840C00B002825D104F016FDC007C00F6C
:1006C00000281FD1042004F015FD044604F018FD95
:1006D000002C10D00020009097480068AA2800D174
:1006E00000BF00BF0421684604F010FD002801D0BF
:1006F00000F09AFB00BF00BF002000BF002800D020
:1007000006E100BF00BF002000BF002800D0FFE0CE
:1007100072B600BF00BF02F0C0FF019069460879C1
:10072000042808D186480078012802D102200190CF
:1007300001E00320019068460079022803D0684652
:10074000007903287AD105200007008A0421884314
:10075000001D0521090708827A48C069012817D9B8
:1007600068460079032810D104F0D6FC00280CD08C
:1007700004F0D8FC002808D0032004F0D9FC00289D
:1007800003D002207049087010E0022001900DE0B3
:1007900068460079032807D104F0CAFC002803D07A
:1007A00001206949087001E00220019000BF00BFEC
:1007B00068460079022803D068460079032857D19B
:1007C0006248006904210843604908610520000768
:1007D000408A202188430521090748820846008A6B
:1007E00002218843801C0521090708826846007998
:1007F00002280FD10846408A04218843001D0521A4
:10080000090748820846408A1021884305210907C4
:1008100048822DE005200007408A04218843001DFE
:100820000521090748827F208001098880229143A1
:100830008031052212071180002102E061E04A1C8C
:10084000D1B20A29FBDB05210907498A102291430D
:100850001031052212075182411E3D4A5161052186
:10086000090709888022914305221207118000BFE1
:1008700000203849087000BF00BF68460079022890
:1008800003D068460079032830D12C484088FF21E6
:1008900001318843294948800520000740882E49B6
:1008A00008802648408840084000401C2349488072
:1008B0000020009002E00098401C0090009814284E
:1008C000F9DB05200007408980088000401C0521D5
:1008D0000907488100BF05200007408940210840E2
:1008E0000028F8D0002005210907488030BF69465C
:1008F000087900BF1548006904218843134908613D
:1009000004E068460079012800D130BF62B600BF1C
:10091000C3E6C206D20E01219140104A1160704711
:100920008C03080000800020003300500000080005
:10093000202A080004900020088000202000005099
:1009400054020800E0010020C406080000ED00E0A9
:1009500000800040728000206E80002080E200E075
:100960007047000058480078002804D157490870A3
:100970005749C87002E080205649087070475248B5
:100980000078002805D10120504908705049C870EE
:1009900002E081204F49087070474B4800780028DA
:1009A00006D102204949087001204949C87002E077
:1009B000822048490870704700B5474800780028F1
:1009C00004DD45480078401E4349087042480078DD
:1009D000002800DD00BD3F480078002809D03D48D0
:1009E00000788007800F3849087000203949087066
:1009F00008E035480078002804D033480078401ECD
:100A0000314908703048027800202F490870002AC8
:100A100004D0012A03D0022A07D103E006E0FFF741
:100A2000AEFF03E0FFF7B9FF00E000BF00BF00BF6B
:100A3000D0E710B528480078401C274908702248A4
:100A40000078002808D104F079FB0446601CC4B289
:100A5000FFF788FF1C48047010BD01201F49087073
:100A6000704700201D49087070471C480078704787
:100A7000002100BF00BFEFF310800246012080F389
:100A8000108800BF05200007008980231840C0118E
:100A9000002807D11248008940084000401C104B34
:100AA00018810121002A04D1002080F3108800BFA2
:100AB00004E0012080F3108800BF00BF00BF08469B
:100AC00070470848007870470180002054020800F1
:100AD000C606080002800020038000200480002059
:100AE000003300506C80002005210907098A042288
:100AF0009143091D0522120711821146098A02221B
:100B00009143891C0522120711821146098940224E
:100B100091434031052212071181002101228A40B0
:100B20001F4B1A6000BF08211E4A11805905498ACF
:100B30008022914380315A0551821B4A016811611C
:100B40004168516181689161C168D1610169116237
:100B50004169516281699162C169D162114608633C
:100B60001249896A51631149C96A91630F49096B36
:100B7000D1630E49C96B0C4A403211600B49496B75
:100B800051600A49896B91605905898A2022114078
:100B9000202901D100BE01E000BFFEE77047000040
:100BA00080E200E0003300504018080000ED00E053
:100BB0002648C06A002802D00021C94300E0012174
:100BC0002248C162C16AC817491840410A0C000492
:100BD000104309041E4A13685268194310431C4A03
:100BE00011605060704708B500200346FF220132B3
:100BF00001210090084601F0B3FA08BD10B50520A8
:100C00000007008A0221884305210907088200BFE6
:100C100005200007808A082108400028F8D00D48E8
:100C200040884901884340180A49488000F0F4FA96
:100C3000FFF7D9FF03F052FE05200007408A20216C
:100C40008843203005210907488210BD20900020EC
:100C5000C0900020200000500020F9490860704733
:100C600000B50520000700893021884305210907C8
:100C700008810846008980218843803005210907C2
:100C800008810846008980088000401C08810846C9
:100C90000089082188430830052109070881E948AF
:100CA0000088802188438030E649088005200007BD
:100CB000408A08218843052109074882084600899F
:100CC0004021884340300521090708810846008AF1
:100CD0000421884305210907088200BF0520000779
:100CE000808A022108400028F8D0FFF7B5FFD448D9
:100CF0000068002800D100BF00BFD248008840082B
:100D00004000401CCF49088008464089090108403E
:100D10004012002807D0CB480088C90088434018FB
:100D2000C849088006E0C7480088012109038843B4
:100D3000C4490880C3480088782188432830C149C5
:100D400008800846008806218843801DBD49088028
:100D500005200007408A082188430830052109073B
:100D60004882B848008880218843B6490880052019
:100D70000007008940218843052109070881B148FF
:100D800040890121490208404012002803D0052073
:100D9000AC4960318880012080070068FF21013163
:100DA000884389050860A84800683F2149028843B4
:100DB000012149034018A449086008460068090356
:100DC00088434018A049086000BD032109029F4ADA
:100DD000918108215180002000E0401C9628FCD31E
:100DE00008219A4A918070477047994909780029EB
:100DF00000D000BF704710B5964C204604F0A4F90F
:100E000010BD70B58F4840881E210840451004F081
:100E1000A1F904468B4840881E2188436900084395
:100E200088494880204670BDF8B50020009000BF7A
:100E300001208949C86300BF00BF00BF00BF8648CA
:100E4000C06B0028FAD100BF01208007C46900BF31
:100E500082480068844202D20020804908600098DD
:100E6000002812D0002000907C48046004F078F93B
:100E70007B490880012004F079F904F07DF90646E9
:100E8000002E01D101200090F8BD74480068201A9E
:100E90001921C90188421FD37048046004F060F929
:100EA00005466F4909888D4204DD6D480088281A7F
:100EB00087B203E06A480088401B87B2182F0BDB1B
:100EC00067480580012004F051F904F055F9064601
:100ED000002E01D10120009000BFD5E708B50146E2
:100EE000009808BD08B50146009808BD38B504460D
:100EF00053480068002800D100BF00BF204604F01E
:100F000041F90090009838BD38B504464C48006857
:100F1000002800D100BF00BF204604F039F900903E
:100F2000009838BD00BF4F494869C107C90F002963
:100F300001D1012070470020FCE738B5012400BF33
:100F400000BF48494869402101408909002907D06C
:100F500000BF44494869202101404909002901D1C5
:100F6000002414E000203F490861009002E000984E
:100F7000401C0090FF215F3100988842F7D3FFF7B3
:100F8000D1FF002802D104F009F9002400BF00BFFE
:100F9000204638BD10B50246D3009633CC008234CB
:100FA0001B1996331846FF30C33010BD1FB50024FF
:100FB000684602F06EF9009C204604F083F81FBDDD
:100FC00070B5002528480078002836D000BF0120E1
:100FD0002149C86300BF00BF00BF00BF1E48C06BEF
:100FE0000028FAD100BF01208007C46900BF1F4854
:100FF0000068844201D201251EE000201A490870D1
:1010000004F09CF8022803D004F098F8012812D1CB
:1010100008201749088000BF05200007808A20218A
:1010200008402028F8D005200007408A8021884306
:10103000052109074882002500BF284670BD000031
:1010400008800020200000500002004020300050A6
:1010500010800020E2040000C00000407C04080072
:10106000780408000010005000800020045B00207D
:10107000003300500020704708B5254949884908C9
:101080004900491C224A51800021009102E0009948
:10109000491C009100991429F9DB052109074989A8
:1010A00089088900491C05221207518100BF0521CA
:1010B00009074989402211400029F8D00521090774
:1010C000498904229143091D0522120751811146C5
:1010D000488049890422914305221207518100BFAB
:1010E00005210907898A802211400029F8D00521AD
:1010F000090749898908890005221207518100BF23
:10110000052109074989802211400029F8D008BD2E
:1011100020000050FFB583B00D46687802902C780F
:10112000002004F041F80746042F40D0002F3ED0A5
:1011300037E000BF7248816E2E20604308180646D3
:1011400030790007000F01900198030004F032F895
:10115000070506081E091E071E0000BF00BF00BFCE
:1011600000BF00BFB0883F210902014009120629D3
:101170000CDA6878012805D1204604F021F8002017
:1011800007B0F0BDB08807210843B0802146481C55
:10119000C217520F1218D210D200821AD2B21446BD
:1011A00000BF0298411EC9B202910028C1D1294650
:1011B000069B059A039804F009F8E1E730B5514918
:1011C0000B1F1A7800200AE0C300CB5C002B04D16F
:1011D0004D4CC5004B4BEB185C60431CD8B29042A1
:1011E000F2DB30BD30B5024693688C68181B80B2C4
:1011F000464DA84201D9012030BD0020FCE782699C
:10120000203A917F082904D28A00414B9A58826182
:1012100001E000BFFEE7704710B53E483E49086157
:101220003E4848613E4888613E48C8613E48086281
:101230003E4848623E4888623E48C8623E4808636D
:101240003E4848633E4888633E48C8633C485C303B
:101250003149403108603C4848603C4888603C481F
:10126000C860C016C206D20E01219140394A1160F1
:1012700000BF002100F00BF80420C043C206D20ECC
:1012800001219140334A803A116000BF10BD10B572
:10129000002819DA304A03071B0F083B9B089B0004
:1012A000D2588307DC0EFF23A3409A438B071B0E03
:1012B0008407E40EA3401A43274B0407240F083C7D
:1012C000A408A4001A511AE0224A803A03231B0200
:1012D000D21883089B00D2588307DC0EFF23A3405B
:1012E0009A438B071B0E8407E40EA3401A43194B45
:1012F000803B032424021B198408A4001A5110BD4A
:10130000D8020800080608002C570020307500009D
:101310003C570020942703000084004062B600DFA1
:1013200028A30200704701DF1CCA0200F8BD02DFDB
:1013300040CB0200F5E703DF84D4020004DF89B06C
:10134000BC330200F8BD05DFF8BD06DFEC0C03007E
:1013500070BD07DF80E100E01CED00E070B51646CF
:101360000D46104603F020FF002869D0340A3046AD
:1013700003F01AFF012812D0A87A1E2811D029469E
:101380000A310E2845D019DC801E030003F012FF3D
:101390000B255829582D58315839583D58000220EE
:1013A00070BD3146274803F017FF0021204603F0A7
:1013B00019FF0221304603F01BFF41E018283CD002
:1013C00006DC102819D012282BD0162838D130E08E
:1013D000522822D0D22833D127E0204603F00EFF36
:1013E0002EE0204603F010FF2AE0204603F012FF13
:1013F00026E0204603F014FF22E0204603F016FF0B
:101400001EE0204603F018FF1AE0204603F01AFF02
:1014100016E0204603F01CFF12E0204603F01EFFFA
:101420000EE0204603F020FF0AE0204603F022FFF2
:1014300006E0204603F024FF02E0204603F026FFEA
:10144000002070BD01280000F8B50D460646810059
:101450002B48EA884458521C20686B89018F294F19
:1014600051430091014640314A89C989511A8AB2D3
:10147000991A89B2B94214D29A4212D0294603F07D
:101480000BFF2D892049009803F00CFF2818801CC1
:101490004034E0823002401C80B2042103F0A8FEF8
:1014A000F8BD2821304603F003FFF8BDF8B5054626
:1014B000870013480C46C059C9880068114E02467F
:1014C00040325389D2899A1A92B28B1A9BB2B34294
:1014D00011D20B4E8A420ED003F0F0FEF0590522D5
:1014E0005F30611C03F0F0FE2802401C80B2052131
:1014F00003F07EFEF8BD2821284603F0D9FEF8BD92
:101500004C030800FF7F00001027000070B5044660
:10151000007800250D2801D00A2200E002225A4955
:101520004B7A002B06D00D2804D0637C032B01D00E
:10153000432551E0097A8A4339D10D2809D00E2874
:1015400002D00F2803D134E0607C032804D3402567
:1015500042E0607C0328FAD8A07C0428F7D20A294C
:1015600008D0607C012822D0022820D0607803288F
:1015700009D811E003F0AEFE012806D160780328F7
:1015800003D0002801D0492526E003F0A3FE00285F
:1015900002D160780228F6D83020035D224620462A
:1015A000E17C3132143000F019F8054614E0422590
:1015B00012E003F08FFE012807D16078052804D1DE
:1015C000A01D03F08DFE0028DDD003F083FE00286F
:1015D00002D160780228D6D8284670BDFFB5002019
:1015E00086B001216A461170044605910021002C45
:1015F00006D0089D099A1F239A4234D9402032E030
:101600001C23069D079AF7E76B185E78330003F0FA
:10161000D1FD1D26101010101010101010262626B7
:1016200026262626262626262626101010101010DE
:101630002600059B03E06F46FF5CB74204D05B1EAB
:101640005BB2002BF7DA03E0002B01DB4A2006E057
:10165000059B6F46FE54059B5B1CDBB205936B5CE0
:10166000491C5918C9B2914201D20028CCD09142EC
:1016700002D04A200AB0F0BD641CE4B2022CF9D2B8
:101680000028B3D0F6E700009805080070B5EFF326
:101690001085012080F31088264803F027FE0446B9
:1016A000002D1DD0012080F31088002C23D020466F
:1016B0002038C08B204988421DD16189208903F0E0
:1016C0001BFE05000ED021461031A38962892089B6
:1016D000A847002806D001280DD002280BD105E02C
:1016E0000020E0E7204603F00DFE04E0114821460B
:1016F0000C3003F00DFEEFF31084012080F310880E
:101700000C480068002802D1012003F007FE002CDD
:1017100003D0012080F3108870BD0020FAE710B5D7
:10172000BC21064803F000FE0549012003F002FE3B
:1017300010BD0000A805080038830000040608005A
:101740008D160020F3B581B001980C460102CA1D28
:101750000E310223344803F0F3FD0470019905466D
:10176000022732488E00002C06D0042C16D0062CFE
:1017700010D0072C3FD108E0815905224968897CA7
:10178000114069708059C77335E0084603F0DEFDEB
:10179000687030E080590F21C1732CE004468059F5
:1017A0004068417C012902D1007E01280FD00198B8
:1017B00003F0D2FD01210028A0590BD04268D07D52
:1017C00000281CD001281AD004280DD00FE00020DA
:1017D00068700DE04068C27D022A01D0042A06D15B
:1017E000007C02280BD102E0107C022807D06F7029
:1017F000A1590320C873284603F0B4FDFEBD6970EB
:10180000F6E701460A780120042A01D90020704732
:101810004A78002A01D0012AF8D10A79082AF5D895
:1018200049790829F2D87047021C000028050800F1
:10183000FFB589B00D4600206946059008720B98E7
:10184000000A009003F088FD07460B9803F0ACFCFB
:1018500000287DD00B982978000A8400784E012951
:1018600063D0042904D0062948D0072968D125E08F
:101870003059C17B032901D0042961D1697800293D
:101880001AD040681022A91C03F01EFD002F06D0BC
:101890003159C87B032807D0042808D050E03059BC
:1018A000C07B032803D04BE00B20C87348E0052120
:1018B000009803F05DFD43E00120B6E03059C07BA5
:1018C0000E283DD1009803F041FD002103E02A18C5
:1018D000401C9170C0B21028F9D3688A6946088309
:1018E000294606A808221431023003F0EDFC06ABAD
:1018F000AA1C3946009803F041FD21E03059C07B15
:101900000F281DD1AA1C0A21009803F03DFD002FCD
:1019100004D03946009803F03DFD11E000231A463B
:101920003946009803F03CFD0AE0012F08D10B98DE
:1019300003F03AFC01281CD0002801D002200590B9
:101940006846007A002811D002AA0521009800E01C
:101950000CE003F019FD6846027A602002436846F5
:10196000027201233946009803F01AFD05980DB064
:10197000F0BD3059C07B0228E2D16878002851D0F0
:1019800002210B9803F034FC305907224068A91C4F
:10199000173003F099FCE878002804D130594068EA
:1019A000407C01283AD0009803F000FD002837D091
:1019B000297A009803F000FD002833D0009803F046
:1019C00001FD0121009803F003FD00282CD03059BF
:1019D0004068417E00292BD0042929D0C17E027D98
:1019E0001140C17630594068017F427D1140017736
:1019F0006846007A0028A7D1305902214268009831
:101A0000173203F0C1FC305941684031897B00290D
:101A100013D004210098FFF795FE91E7022004E01F
:101A2000062002E0082000E00320694608728BE7E8
:101A30000021C17630594068D9E70B21C1737FE797
:101A40002805080010B50C4603F0C8FC21888A0060
:101A50002F4989580968002902D02E4BC96899502E
:101A600010BD10B5144603F0BFFC210A8A002849B6
:101A700089580968002902D0264BC968995010BDC1
:101A8000FFB50F461546110A214A8800125881B049
:101A900012681E46002A01D0D46803E01D4A0023C4
:101AA00014581350002C18D0201F42881A4B9A4209
:101AB00013D10088602810D12046403002898A4224
:101AC0000BD18088002808D0A068002802D02046CA
:101AD00003F090FC204603F093FC33462A46394637
:101AE000019803F093FC05B0F0BD70B50B48037886
:101AF000021D00210A4D07E0CC00165D012E01D128
:101B00002418A560491CC9B29942F5D370BD0000E4
:101B10004C0308001C8000203883000004060800E5
:101B20005459002013494988072252029143420226
:101B30001143104A5180704705200007008830216A
:101B4000884330300521090708800846008880084E
:101B50008000C01C088070470520000700883021E5
:101B6000884305210907088008460088800880000E
:101B70000880704780000050D949DA48CA051288A9
:101B800080239A438032CB051A8000BFD64A5289FF
:101B900008231A40082A03D00A46491E002AF5D114
:101BA0000122D24B1A600288D14B1A80801C028815
:101BB000D04B1A8005221207128880239A430523EE
:101BC0001B071A8070470146002070477047704716
:101BD000704702460020704700BF01218907096B4A
:101BE000062211430122084610439107086300BFF3
:101BF00070477047C0480078704700B5BF48C0497B
:101C000008604C20BF490880BF48BE49203908827F
:101C1000BE48BF494880BF48BF490880BD48193009
:101C2000488022204881812080000882BB48488269
:101C3000BB480883B94811304883BA48B6492031B7
:101C4000888041200001B8498880B848C880B748DA
:101C50001030C881B54808824882801C8882B34809
:101C60000B30C882FF2046300883B1484883592092
:101C7000B0490880B048AF492031088043204880EF
:101C8000AE48AC494882D520AA4920318880FF203F
:101C9000D3300881AA484881AA488881AA48AB491C
:101CA0000880AB489749603948800846C0881021B1
:101CB0008843103093496039C8809F480A380881AA
:101CC000A4489049403948808F488E49203948823D
:101CD00008208C49603948818648008895494039F8
:101CE0000882834800889C490880FFF783FF00280A
:101CF00002D030208849088300BD01460A46C80F3B
:101D00008018C005000E7047F0B58DB00446002560
:101D10000026924860629248A062924860619248B0
:101D2000E062924820609248206292486060924847
:101D3000E0617F21090628468843072109064518E6
:101D40000F21090228468843052109024518FF2171
:101D5000090428468843152189044518280A0002E9
:101D600005464C356648056065484038006B0121E2
:101D7000890588436249403908630846406B1F2142
:101D8000090488430321090440185D494039486328
:101D90007A480068C9128843784908600846006894
:101DA000091388437549086003E003A88655701C31
:101DB000C6B2282EF9DB03A8202701902820029024
:101DC000B8033818029A019903F07EFA00BFFFF7B2
:101DD00014FF03F0C5F96A490880002003F0C6F932
:101DE00003F0CAF90DB0F0BD70B500247F210906DB
:101DF000204688430721090644180F21090220467E
:101E00008843052109024418FF210904204688431C
:101E1000152189044418200A000204464C3438482D
:101E2000046037484038406B1F2109048843032170
:101E30000904401832494039486308060068C00860
:101E4000C00009060860052000070089800880009E
:101E5000401C05210907088108460089082188439C
:101E600008300521090708810846008A0F21090268
:101E70008843401805210907088242480068002865
:101E800000D100BF00BF1848408901214902084025
:101E90004012002806D01448008878218843083072
:101EA00011490880FFF7A9FE3748056F28780028F8
:101EB00004D03648008813496039C880012003F0F7
:101EC0000DF970BD01200C490870302012490883BB
:101ED000704700200849087011480F49088370476F
:101EE000A0860100087F0400200000500080004010
:101EF000560208004A030800348000204C055407AD
:101F000080000040602C00507F7F0000AC29000062
:101F100000220050090900000024005022040000A3
:101F200030D00000EE110000002500502E0200000D
:101F300044200000402800500D950000024200009F
:101F4000E4DC00001092000053780000002A0050EA
:101F50008B1000009DD5000000260050C71B0020FC
:101F6000CD1B0020D31B0020D91B0020CF1B00203D
:101F7000F31B0020D11B0020FB1C002000020040AE
:101F80007804080008800020E001002052040800C6
:101F9000F0B585B000240CE0002507E000212820E2
:101FA0006043FA4A8018AA0081506D1C0A2DF5DBA7
:101FB000641C042CF0DBFEF7FBFD0021F44A1160E9
:101FC0005160002442E000253CE00120A84080B29E
:101FD00002906000EF49085A02990840002800D199
:101FE00032E028206043E9494018A9004058401CCD
:101FF000002803D10194009500BE00BF2820604353
:10200000E2494018A9004058002800D119E02820D2
:102010006043DE494018A9004658F7172A46304663
:10202000394603F0F9F922010391049003F0F4F921
:10203000D74B1A685B6810431943D54A106051604A
:1020400000BF6D1C0A2DC0DB00BF641C042CBADB72
:1020500005B0F0BDFFB585B004460D462A46012601
:1020600000273046394603F0D7F922010391049046
:1020700003F0D2F9C64B1A685B6810401940002380
:1020800058405940084300D100BE032C00D104241D
:102090006001C1494018029069000298801D08182B
:1020A00001900899079801430198018009B0F0BD9B
:1020B000F0B585B004460D462A4601260027304675
:1020C000394603F0A9F922010291039003F0A4F923
:1020D000AF4B1A685B6810401940002358405940C4
:1020E000084300D100BE032C00D104246001AA499A
:1020F000401801900198001D00900120A84081B275
:102100000098018005B0F0BDF0B585B004460D46DD
:102110002A46012600273046394603F07DF9220180
:102120000291039003F078F9994B1A685B681040AC
:102130001940002358405940084300D100BE032CE9
:1021400000D1042460019449401801900198801C3A
:1021500000900120A84081B20098018005B0F0BD38
:10216000FFB583B006460F463A46012400252046B7
:10217000294603F051F932010191029003F04CF924
:10218000834B1A685B68104019400023584059403F
:10219000084300D100BE0C98002804D039463046D0
:1021A000FFF7B2FF03E039463046FFF781FF3946BB
:1021B0003046069B059AFFF74DFF07B0F0BDF7B517
:1021C00086B0044601270020079A059038460599F5
:1021D00003F022F922010391049003F01DF96C4BE6
:1021E0001A685B6810401940002358405940084362
:1021F00000D100BE002C01D1002000E0601E029042
:1022000002984000644970314518012C02D10798AA
:10221000083000E00798C6B200200190288801909D
:102220000121B1400198884301900898B04001997C
:10223000084301900198288009B0F0BDFEB504461E
:102240000D462A46012600273046394603F0E4F8B9
:1022500022010191029003F0DFF84D4B1A685B6890
:1022600010401940002358405940084300D100BE97
:10227000032C00D1042460014749401800900098C5
:1022800000880121A9400840002801D00120FEBD9E
:102290000020FCE7FFB585B005460E4614463246E1
:1022A0000127002004903846049903F0B5F82A016C
:1022B0000291039003F0B0F8354B1A685B68104048
:1022C0001940002358405940084300D100BE33A0B4
:1022D00000680190324880892246133AFF2101317B
:1022E000914088430F99002901DD012200E000227E
:1022F00021461339FF2301338B40D907C90F002929
:1023000001D00021AEE02346133BFF21013199406B
:1023100002231940002901D00121A3E02346133BE9
:10232000FF210131994004231940002901D00221E5
:1023300098E02346133BFF210131994008231940BF
:10234000002901D003218DE02346133BFF210131F9
:10235000994010231940002901D0042182E023462E
:10236000133BFF210131994020231940002901D05E
:10237000052177E02346133BFF210131994040239B
:10238000194000290ED006216CE0000020900020AA
:10239000C0900020645900200030005001090F193E
:1023A000001400502346133BFF2101319940802344
:1023B0001940002901D0072154E02346133BFF2197
:1023C00001319940FF2301331940002901D0082130
:1023D00048E02346133BFF210131994001235B0272
:1023E0001940002901D009213CE02346133BFF217D
:1023F0000131994001239B021940002901D00A2193
:1024000030E02346133BFF21013199400123DB02D9
:102410001940002901D00B2124E02346133BFF2162
:102420000131994001231B031940002901D00C21DF
:1024300018E02346133BFF210131994001235B0340
:102440001940002901D00D210CE02346133BFF2148
:102450000131994001239B031940002901D00E212D
:1024600000E00F218A401043FB498881084680899B
:10247000800980010F990843F74988810846008A3E
:102480002246133AFF210131914088431146FF2231
:1024900001328A40D107C90F002901D00022A1E0F2
:1024A0002246133AFF2101319140022211400029B6
:1024B00001D0012296E02246133AFF2101319140DA
:1024C00004221140002901D002228BE02246133A57
:1024D000FF210131914008221140002901D003223F
:1024E00080E02246133AFF21013191401022114031
:1024F000002901D0042275E02246133AFF21013160
:10250000914020221140002901D005226AE0224694
:10251000133AFF210131914040221140002901D09E
:1025200006225FE02246133AFF21013191408022CA
:102530001140002901D0072254E02246133AFF211E
:1025400001319140FF2201321140002901D00822BF
:1025500048E02246133AFF21013191400122520204
:102560001140002901D009223CE02246133AFF2104
:1025700001319140012292021140002901D00A222A
:1025800030E02246133AFF21013191400122D2026C
:102590001140002901D00B2224E02246133AFF21EA
:1025A00001319140012212031140002901D00C2277
:1025B00018E02246133AFF210131914001225203D3
:1025C0001140002901D00D220CE02246133AFF21D0
:1025D00001319140012292031140002901D00E22C5
:1025E00000E00F220E99914008439B49088208465B
:1025F000008A2246133A0121914088431146012264
:102600008A40D107C90F002901D0002293E0224659
:10261000133A0121914002221140002901D00122E8
:1026200089E02246133A01219140042211400029F9
:1026300001D002227FE02246133A01219140082274
:102640001140002901D0032275E02246133A0121EE
:10265000914010221140002901D004226BE0224653
:10266000133A0121914020221140002901D0052276
:1026700061E02246133A0121914040221140002995
:1026800001D0062257E02246133A012191408022D0
:102690001140002901D007224DE02246133A0121C2
:1026A0009140FF2201321140002901D0082242E06E
:1026B0002246133A01219140012252021140002981
:1026C00001D0092237E02246133A0121914001222C
:1026D00092021140002901D00A222CE02246133A2E
:1026E000012191400122D2021140002901D00B2288
:1026F00021E02246133A01219140012212031140A8
:10270000002901D00C2216E02246133A0121914003
:10271000012252031140002901D00D220BE0224674
:10272000133A01219140012292031140002901D066
:102730000E2200E00F220899914008434649088282
:10274000204613384000401800888009800101A904
:10275000495D891908432146133949003E4A8918C1
:1027600008800221204600F042FA00BFE106C90EAF
:10277000012088403949086000BF09B0F0BD01461A
:102780003548008A0A46133A012393401840012332
:102790009340DA07D20F002A01D0002298E00B46BE
:1027A000133B01229A4002231A40002A01D0012241
:1027B0008EE00B46133B01229A4004231A40002A64
:1027C00001D0022284E00B46133B01229A400823E9
:1027D0001A40002A01D003227AE00B46133B012263
:1027E0009A4010231A40002A01D0042270E00B46C0
:1027F000133B01229A4020231A40002A01D00522CF
:1028000066E00B46133B01229A4040231A40002AFF
:1028100001D006225CE00B46133B01229A40802344
:102820001A40002A01D0072252E00B46133B012236
:102830009A40FF2301331A40002A01D0082247E0C2
:102840000B46133B01229A4001235B021A40002AE7
:1028500006D009223CE000000014005000E100E036
:102860000B46133B01229A4001239B021A40002A87
:1028700001D00A222CE00B46133B01229A4001238F
:10288000DB021A40002A01D00B2221E00B46133B49
:1028900001229A4001231B031A40002A01D00C2276
:1028A00016E00B46133B01229A4001235B031A40BA
:1028B000002A01D00D220BE00B46133B01229A4067
:1028C00001239B031A40002A01D00E2200E00F22B0
:1028D0001041C0B2704710B5E04A128A0446133C5A
:1028E0000123A3409A43234601249C40E307DB0FC6
:1028F000002B01D0002493E00446133C0123A340A5
:1029000002242340002B01D0012489E00446133C1B
:102910000123A34004242340002B01D002247FE0A4
:102920000446133C0123A34008242340002B01D07C
:10293000032475E00446133C0123A34010242340E4
:10294000002B01D004246BE00446133C0123A34078
:1029500020242340002B01D0052461E00446133CD1
:102960000123A34040242340002B01D0062457E03C
:102970000446133C0123A34080242340002B01D0B4
:1029800007244DE00446133C0123A340FF240134F7
:102990002340002B01D0082442E00446133C0123CD
:1029A000A340012464022340002B01D0092437E016
:1029B0000446133C0123A3400124A4022340002B1E
:1029C00001D00A242CE00446133C0123A340012437
:1029D000E4022340002B01D00B2421E00446133CE9
:1029E0000123A340012424032340002B01D00C2405
:1029F00016E00446133C0123A34001246403234052
:102A0000002B01D00D240BE00446133C0123A3400E
:102A10000124A4032340002B01D00E2400E00F2446
:102A20000B46A3401A438D4B1A8210BD8B49C989AE
:102A30000346133B01229A4091431A4601239340D7
:102A4000DA07D20F002A01D0002393E00346133B9C
:102A500001229A4002231A40002A01D0012389E072
:102A60000346133B01229A4004231A40002A01D056
:102A700002237FE00346133B01229A4008231A40B9
:102A8000002A01D0032375E00346133B01229A403C
:102A900010231A40002A01D004236BE00346133BA5
:102AA00001229A4020231A40002A01D0052361E028
:102AB0000346133B01229A4040231A40002A01D0CA
:102AC000062357E00346133B01229A4080231A4015
:102AD000002A01D007234DE00346133B01229A4010
:102AE000FF2301331A40002A01D0082342E00346A5
:102AF000133B01229A4001235B021A40002A01D0B5
:102B0000092337E00346133B01229A4001239B022D
:102B10001A40002A01D00A232CE00346133B01226D
:102B20009A400123DB021A40002A01D00B2321E046
:102B30000346133B01229A4001231B031A40002A3B
:102B400001D00C2316E00346133B01229A400123D7
:102B50005B031A40002A01D00D230BE00346133B10
:102B600001229A4001239B031A40002A01D00E2320
:102B700000E00F2301229A401143384AD181704767
:102B80000246133A9200364B9950704770B504468E
:102B90002046FFF74BFF20461338800030490D5880
:102BA000002D01D0A84708E000BFE106C90E0120B2
:102BB00088402C49086000BF00BF70BD10B51320CD
:102BC000FFF7E4FF10BD10B51420FFF7DFFF10BDC5
:102BD00010B51520FFF7DAFF10BD10B51620FFF76E
:102BE000D5FF10BD10B51720FFF7D0FF10BD10B5F1
:102BF000002819DA1C4A03071B0F083B9B089B009F
:102C0000D2588307DC0EFF23A3409A438B071B0E89
:102C10008407E40EA3401A43134B0407240F083C17
:102C2000A408A4001A5118E0104A03231B02D2186A
:102C300083089B00D2588307DC0EFF23A3409A43EE
:102C40008B071B0E8407E40EA3401A43074B032493
:102C500024021B198408A4001A5110BD001400504E
:102C6000C890002080E200E01CED00E000E100E000
:102C700010B5002428E000BFE7490868C1B2E74862
:102C800000690170E548C068401EE449C860084614
:102C90000069401C08610846C068002814D1002162
:102CA000DE4801610020DC494968490849000143C8
:102CB000D94A516000BFD9484469002C03D0002193
:102CC00041610020A04706E000BFD3494869C10721
:102CD000C90F0029CFD100BF10BD10B500240020BE
:102CE000CE49C8600021CD480161CB4880884008AA
:102CF0004000C9498880C9484469002C03D000219C
:102D000041610120A04710BD10B5002426E0C34951
:102D100049680878C049086000BFC0480068401E84
:102D2000BE49086008464068401C48600846006884
:102D3000002813D1486000BFB74949680222914377
:102D400042001143B44A516000BFB4488468002C6B
:102D500003D00020B1498860A04709E000BFAE4918
:102D60006031898B02221140481000BF0028CED16B
:102D700000BF10BD00BFA8494869C107C90F00299D
:102D800001D1012070470020FCE770B504460D46D4
:102D9000A1488089802188439F4988810720088134
:102DA00000208880084680898021884380309A49A5
:102DB0008881002088808880E0B20880084685816C
:102DC000808980218843944988810D200121814098
:102DD000934A116000BF012100F0E4F80D200121A9
:102DE00081408F4A803A116000BF00BF01218140BD
:102DF0008C4A116000BF002088490876002187486E
:102E0000016100208549C8604860086070BD70B5E8
:102E100004460D4629462046FFF7B7FF70BD222025
:102E20007D490861704700B5FFF7F9FF00BD38B56F
:102E3000012400BF00BF7849486940210140890949
:102E4000002907D000BF7449486920210140490981
:102E5000002901D1002414E000206F49086100908E
:102E600002E00098401C0090FF215F3100988842EA
:102E7000F7D3FFF77FFF002802D1FFF7D4FF00242C
:102E800000BF00BF204638BD10B5FFF7D0FF10BD12
:102E900030B50120002102460B46C4018D012C43B0
:102EA00055012C435D002C435B4D2C6100BF00BFDE
:102EB00000BF594948692021014049090029F7D03C
:102EC00000BF554948694021014089090029EFD0D8
:102ED00030BD00B5FFF7DCFF00BD30B54F4BD9600A
:102EE00018615A6101234C4C64689C431C434A4D51
:102EF0006C6000BF30BD70B504460D4616463246C4
:102F000029462046FFF7E9FF70BD70B504460D461F
:102F100016464248056044608660FFF7F5FE3F486C
:102F2000406800280AD001203B49496802229143A9
:102F300042001143384A516000BF00BF70BD70B5F8
:102F400004460D461646324629462046FFF7DDFF69
:102F500070BD10B5304880680407240F012C1CD0C8
:102F6000022C15D0042C10D00C2C14D12B48007E30
:102F7000012809D100BF2849486980210140C909B9
:102F8000002901D0FFF7A9FE06E0FFF771FE03E07C
:102F9000FFF7BAFE00E000BF00BF10BD10B5FFF79D
:102FA000D8FF10BD10B5002819DA1F4A03071B0F00
:102FB000083B9B089B00D2588307DC0EFF23A340ED
:102FC0009A438B071B0E8407E40EA3401A43164B4B
:102FD0000407240F083CA408A4001A511AE0104A60
:102FE000803A03231B02D21883089B00D258830720
:102FF000DC0EFF23A3409A438B071B0E8407E40ECD
:10300000A3401A43064B803B032424021B19840867
:10301000A4001A5110BD000000110050388000209B
:1030200080E100E080E200E01CED00E010B501234B
:103030009B0303430B43584C238001239B0303430F
:10304000012423430B43544C2380092313436380FF
:1030500010BD514909880F22920191430207920D38
:1030600011434D4A1180704700204B49088070473A
:103070004A494948008802229043801C464A1080F1
:1030800000BF0846491E002805D043480088022298
:1030900010400028F5D100203F4A10811046408999
:1030A00070470AE000BF00BF00BF00BF00BF00BF05
:1030B00000BF00BF00BF00BF00BF0146401E002987
:1030C000F0D1704770B50446022251024800FFF764
:1030D000ADFF1420FFF7E5FF002C03D00920FFF718
:1030E000B8FF02E00720FFF7B4FFFFF7C1FF054676
:1030F0000120FFF7D6FF022200219002FFF796FF82
:10310000002C03D00920FFF7A4FF02E00720FFF7FF
:10311000A0FFFFF7ADFF06467519FFF7A5FF28468C
:1031200070BDF8B51E481C4908801420FFF7B9FF90
:103130000120400218498880C88008460088012183
:103140000903884340181449088008460088012173
:103150008902884310490880FFF78AFF0346DD1F74
:10316000FF3DFA3D0C480088012189028843401840
:1031700009490880FFF77CFF0446E61FFF3EFA3E40
:103180006800012149020F1A7000081A00900249D4
:103190008F800098C880F8BD00150050A0860100FF
:1031A0000148000008B58920052109070881012090
:1031B0004003874908800520000700888021884354
:1031C00080300521090708800846008880088000B3
:1031D00008808048008A02218843801C7D4908823B
:1031E000FEF70BFD02F01EF902F022F9002000901C
:1031F00004E068460088401C81B20091684600885F
:103200009128F6DB08BD08B5002073490880488086
:1032100072487349C880FF20D230088100206E496F
:10322000C880C3206E49488008206E49088000206D
:10323000009004E068460088401C81B20091684616
:1032400000889128F6DB0020009004E068460088A2
:10325000401C81B20091684600889128F6DB00206E
:10326000009004E068460088401C81B200916846E6
:1032700000889128F6DB08BD5B4B588099800122BD
:103280001A8000BF584AD288D207D20F002AF9D13B
:103290007047F0B5FFB0FFB091B0054603A90291A9
:1032A000891C01914B48018AFFA8C163FFF77AFF8F
:1032B00049480188FFA8816347484188FFA84163C6
:1032C0004748C188FFA8016345480189FFA8C1623A
:1032D0004148C188FFA881623F48418BFFA84162F5
:1032E00042484188FFA801623D484188FFA8C1616A
:1032F000FFF789FF0021FFA80161002635E0FF21CB
:1033000003A8FFF7B9FF0021FFA88161002700246F
:1033100025E00298005DC007C00F019A115DC90742
:10332000C90F4840FFA94861FFA88169481CC2B283
:10333000FFA88261406988403843C7B2FFA880690E
:10334000082809D1FFA80169481C82B2FFA80261C0
:103350006F540021816100272046103084B2FF2085
:1033600080008442D5DD701C86B2022EC7DBFFA828
:10337000C06B1849088200201A490880FFA8806B9A
:1033800015490880FFA8406B4880FFA8006B1449CE
:10339000C880FFA8C06A0881FFA8806A0E49C8805B
:1033A000FFA8406A4883FFA8006A10494880FFA828
:1033B000C0690B49488005200007008880218843A8
:1033C0000521090708807FB07FB011B0F0BD000073
:1033D00000020040E03000500024005080800000D7
:1033E000602800502020005000350050002600507A
:1033F0006D480078002807D10920012181406B4ADF
:10340000116000BF002070470020C043FBE770B58B
:103410000025FEF7A1FB0520000780881021084049
:103420000011002809D00125012061498880084643
:103430000088802188435E490880012D06D15D48BF
:103440000068002802D05B480468A04770BDFFB543
:1034500081B004460D4616460520000780881021DD
:1034600088431030052109078880002050490881D1
:10347000F0B24880002010E0C2002146D140CFB217
:1034800041004B4A89184F81C2002946D140CFB232
:103490004100474A89184F82401C0428ECDB44480D
:1034A000C0890321090288432104890F09020843C6
:1034B0003F49C8810846C08A03210902884329047C
:1034C000890F090208433A49C882012088800920EF
:1034D00001218140384A116000BF04988006800EA7
:1034E00080210843324908800121092000F023F897
:1034F0002D48007840084000401C2B4908700920E6
:1035000001218140294A803A116000BF05B0F0BD19
:1035100000B5254800784008400023490870012084
:1035200023498880084600888021884320490880F4
:10353000FFF75EFF00BD10B5002819DA1F4A030728
:103540001B0F083B9B089B00D2588307DC0EFF2310
:10355000A3409A438B071B0E8407E40EA3401A4333
:10356000164B0407240F083CA408A4001A511AE0C3
:103570000E4A803A03231B02D21883089B00D258BC
:103580008307DC0EFF23A3409A438B071B0E84079F
:10359000E40EA3401A43054B803B032424021B196D
:1035A0008408A4001A5110BD5480002080E100E07E
:1035B000000100505880002080E200E01CED00E097
:1035C00070B504460D461646012C0FD106221E4941
:1035D0001E4801F033FF002808D006221B49304660
:1035E00001F072FE06202870002070BD3246294688
:1035F000204601F029FFF8E770B5154E154C164D21
:10360000E0050088802188438030E105088000BF04
:103610001248408908210840082803D02046641E2B
:103620000028F5D101200E490860062229460748E6
:1036300001F04AFE0520000700888021884305210B
:103640000907088070BD0000383E03005C80002040
:10365000D47F0000A0860100D47F04002000005029
:103660000080004070B50446E002642101F01AFEBB
:1036700005466D1E284670BDF8B50446204601F08B
:10368000A6FC064693480168304601F063FC0546F7
:1036900001F0A4FC00900098F8BDF0B585B00020C2
:1036A00004908D48406D0390FDF7DFF9002803D1A9
:1036B0008A480079022801D10020039000BFFDF75D
:1036C0007FFC002800D000E101F0C4FE002800D1FA
:1036D000FBE0012004908148C078002800D1F4E08C
:1036E00005200007808AC007C00F002802D00420F0
:1036F0000490EAE001F0F8FC002800D0E5E078480A
:103700008069002802D07448406D0390039F73487D
:10371000817803A801F0A4FE002800D1D5E06F480D
:10372000817803A801F0F2FC002800D1CDE0002050
:10373000029003976B480068AA2800D100BF00BF21
:1037400068480068002800D100BF00BF00BF00BF6C
:1037500001208007006AFF212D318842F7D3002025
:10376000019000BF5D48817803A801F079FE002830
:1037700000D10AE05948817803A801F0C7FC00286D
:1037800000D102E00120019000BF00BF0198002895
:1037900000D19AE00398002805D00298002802D0B2
:1037A0000398401E03904F480068AA2800D100BF2C
:1037B00000BF4C480068002800D100BF00BF832430
:1037C00049480078022800D132344848007801285E
:1037D00000D121340020454908700F256E260120B4
:1037E0008007C06B800A8002284301218907C863D3
:1037F0000846C06B3E490840A102084301218907E1
:10380000C8630846C06BC002C00A710508430121A5
:103810008907C863042004900398002802D0039805
:10382000001D03902F480068002800D100BF00BF92
:103830000398FFF717FF2F490860284800790028F0
:1038400001D0012000E0002001462A48006801F074
:103850000DFE2949C86A804700200090FDF70AFC48
:10386000002810D005200007008830218843303020
:103870000521090708800846008880088000C01CD0
:1038800008800120009000BF00BF01218907086B5C
:10389000C9130140C90B0029F6D000BF17480068C2
:1038A000FF21013108400028F8D00098002801D0FD
:1038B000FEF752F901F0E0FD0520000700898021A4
:1038C000884305210907088100BF00BF049805B09F
:1038D000F0BD00001880002060020020C60608002D
:1038E000A805080008800020540208006D80002010
:1038F000FF03E0FF648000201C0708000002004076
:10390000F8B500BF01208007806B06463046FDF702
:10391000FBFA0746D649384601F0C4FC0546D449AF
:10392000384601F0BFFC27200001441A002C00D1CA
:10393000012400BFCF48456000BF00BF046000BF46
:1039400001208107096B08229143C20011438207BD
:10395000116300BFC8480660C8480068002806D048
:10396000C6480068B04202D200BF00BE00BFF8BD2A
:1039700010B50520000740898007800F00280DD072
:10398000052000074089800880000521090748813B
:10399000BB48408840084000B949488005200007DE
:1039A0000089802188438030052109070881084665
:1039B000008A0421884305210907088200BF0520E9
:1039C0000007808A022108400028F8D001F05AFD43
:1039D000012080070069042108408008002802D0E7
:1039E00000BF00BE00BF00BF0120800700690421A6
:1039F000084080080028F7D010BD10B5A148008805
:103A0000002848D101209F49088008209E4908804D
:103A10000520000740898007800F002834D005204A
:103A20000007808A042108408010002801D0FDF79B
:103A3000E5F89348008880218843803090490880C9
:103A4000FF209249488004200880FEF775F80BE0BB
:103A50008E49C98809048D4A928888187D21C90039
:103A6000884200D901E000BFF2E700BF0520874986
:103A70000880874800880521090748808048008819
:103A8000802188437E490880042001218140814AA9
:103A9000116000BF00BF10BD10B5FEF75DF8FFF765
:103AA00067FF00207749088005200007408A8021B1
:103AB000884305210907488273480089400840006F
:103AC0007149088101208007806904218843001D15
:103AD0000907886101F0DCFC0420012181406D4A66
:103AE0008032116000BF01F0D9FC01F0DDFC6A48B2
:103AF0000068AA2800D100BF00BF002067490870F5
:103B00005F4840890121490208404012002818D02E
:103B100063480078002814D1012061490870614889
:103B20000088C007C00F00280BD10120FFF7CAFA98
:103B300004468B208000844202D902205849087034
:103B400000BF10BD10B501205749087001F0B2FC4C
:103B500010BD10B501F0B4FCFFF7F4FF01204F4990
:103B6000087010BD10B501208007048A8020204015
:103B7000002807D0FFF7E6FF47480068AA2800D1D1
:103B800000BF00BF10BD10B501F0A0FC10BD10B506
:103B900001208007048A08202040002823D001F05B
:103BA0009BFC01208107096849004908C2071143AD
:103BB0008207116000BF00BF00BF012189070868AC
:103BC000C10F0029F8D100BF2A4980310868C1B26D
:103BD000002905D0012027498031086000BF00BFBF
:103BE00004202E49087031480078042804D0304859
:103BF0000068401C2E49086010BD70B52D48008833
:103C00008506AD0E2C4844682C48066F3078002895
:103C100002D1284601F066FC29480089FF210131C4
:103C20000840001200280AD080202040002806D03A
:103C3000E007C00F002802D0284601F059FC802080
:103C40002040002806D0E007C00F002802D0032043
:103C5000124908700120C0032040002807D0FF202F
:103C600001302040002802D002200C49087070BDAD
:103C70007102000040000040688000206480002045
:103C800020000050708000200033005000160050CB
:103C90006E80002000E200E0088000206C800020A0
:103CA0006D8000200015005072800020DC90002004
:103CB000EC9000200020005000020040E0010020B5
:103CC000002C0050FFB581B004460E4617466288AE
:103CD00021880623384601F033FB0546207901F0A0
:103CE0000DFC28802E7104986880284601F03AFB6C
:103CF00005B0F0BDF8B504460E4617466288207937
:103D0000000201460C310423284801F019FB054646
:103D1000002E01D0132000E0122028706F8028466A
:103D200001F020FBF8BD10B5024608881346187054
:103D30001A465B1CFF242402044024121C7000BF9E
:103D400088789070C878D07008791071487950716F
:103D500088799071072010BD10B5024600BF137816
:103D6000547824022343184600BF08809078887056
:103D7000D078C8701079087150794871907988713D
:103D8000072010BD10B500F013F810BD70B5064641
:103D90000C461546362001F007FA022805D1E2B29A
:103DA00036232946304601F0AFFB70BD0D300000D0
:103DB00010B50A21584801F0ADFB5849362001F0F2
:103DC000AFFB0021362001F013FA10BD70B5054697
:103DD0005148018804233622514801F0B1FA0446C3
:103DE0004D49087901F08AFB2080A570204601F03A
:103DF000B9FA70BD70B505464748018812233622CE
:103E00004748401C01F09CFA04464349087901F0F8
:103E100075FB208010222946A01C01F055FA20468F
:103E200001F0A0FA70BD70B505463B480188042337
:103E300036223B48801C01F083FA04463649087953
:103E400001F05CFB20802978A1706978E170204640
:103E500001F088FA70BD70B505462F48018804232B
:103E600036222F48C01C01F06BFA04462A49087913
:103E700001F044FB20802978A1706978E170204628
:103E800001F070FA70BD70B505462348018804231F
:103E900036222348001D01F053FA04461E490879D2
:103EA00001F02CFB2080A570204601F05BFA70BD6C
:103EB0001CB51949C888002101F038FB1648018853
:103EC000022336221648401E01F03AFA04461249EF
:103ED000C988891C88B26A4601A901F02DFB0E49E8
:103EE000087901F00BFB2080204601F03BFA01210C
:103EF000362001F07DF91CBD70B5044606480188E6
:103F0000012336220648083001F01AFA05462C70C3
:103F1000284601F027FA70BD74800020CC5900209B
:103F200002D80000F0B589B01D460521C9020691EE
:103F3000C91C0591FE4804903620FE4948800620A1
:103F40000890002007900527CD200097019036218A
:103F5000F848801D079B089A01F0F4FA0646002EE7
:103F60007ED1F448801D012100910190811FC888F5
:103F700006AB0222102101F0EBFA0646ED49C88893
:103F8000ED4A102101F0EAFA064602A8012100914B
:103F90000190E849C88805AB0222132101F0D8FA44
:103FA000064603A8092100910190E249C888E34B25
:103FB0001022012101F0CCFA0646E1496846007B57
:103FC00048706846407B88700A461321684600891D
:103FD00001F0C4FA064602A8012100910190D549DA
:103FE000C88805AB0222132101F0B2FA064603A8E5
:103FF000092100910190CF49C888D24B1022114667
:1040000001F0A6FA0646D0496846007B487068462B
:10401000407B88700A4613216846008901F09EFAA9
:10402000064602A8012100910190C249C88805AB4B
:104030000222132101F08CFA064603A809210091FF
:104040000190BC49C888C14B1022022101F080FABE
:104050000646BF496846007B48706846407B00E0E2
:104060005CE088700A4613216846008901F076FA00
:10407000064602A8012100910190AE49C88805AB0F
:104080000222132101F064FA064603A809210091D7
:104090000190A849C888AF4B1022022101F058FABC
:1040A0000646AD496846007B48706846407B88708C
:1040B0000A4613216846008901F050FA064602A814
:1040C0000121009101909B49C88805AB0222132170
:1040D00001F03EFA064603A8092100910190954996
:1040E000C8889E4B1022012101F032FA06469C49F5
:1040F0006846007B48706846407B88700A461321FA
:104100006846008901F02AFA06468A49C8880021D3
:1041100001F00CFA0121362001F06AF80123362261
:104120002946904801F00CF904462670204601F01B
:1041300019F9002009B0F0BDF8B507460C461D4638
:1041400001267C480580208801F00EFA7949087123
:1041500008460079FF2808D11B23DB02814AD21CC4
:1041600089217448FFF7AEFD33E0A178714AD08809
:1041700001F0DCF96F49C988891C88B2E21C012171
:1041800001F0ECF96B49C988091D88B2221D102184
:1041900001F0E4F96749C988891D88B222461432C2
:1041A000022101F0DBF96349C988083188B222464F
:1041B0001632022101F0D2F95E49C9880A3188B26B
:1041C00022461832012101F0C9F90221362001F0FE
:1041D0000FF80020F8BDF8B506460C461746002536
:1041E0005449087901F08AF92188884216D1514949
:1041F000C988091D88B2A21C012101F0AFF94D4800
:10420000007AC007C00F002809D04A48C088001DA6
:1042100082B200214748FFF76DFD00E08125002DA7
:1042200002D02846FFF768FE0020F8BDF8B50C461E
:104230001E46002580273004000E3E490979884239
:1042400031D121883B48C088801C814200D10125A2
:1042500021883848C088001D814200D1022521886C
:104260003448C088801D814200D10325218831480F
:10427000C0880830814200D1042521882D48C0889B
:104280000A30814200D10525012D0DD1208822461A
:104290000832012101F062F9E079002802D0207A89
:1042A000FFF794FD002760E0022D0ED12088224602
:1042B0000832102101F052F9E079002803D020469D
:1042C0000830FFF797FD00274FE0032D0ED120881F
:1042D00022460832022101F041F9E079002803D09A
:1042E00020460830FFF79FFD00273EE0042D0ED149
:1042F000208822460832022101F030F9E0790028B6
:1043000003D020460830FFF7A6FD00272DE0052D3D
:104310002BD1208822460832012101F01FF9E079D3
:10432000002804D021460831C8B2FFF7ACFD1BE0DD
:1043300002290000748000206C5900207C59002064
:10434000085B00208C5900201B5B00209C5900203A
:104350002E5B0020AC590020415B0020BC5900209E
:10436000545B002008D80000002721880A4A1079F1
:104370003A4601F0FFF80020F8BDF8B505460E46B4
:1043800017461C462004000E03490979884201D1D2
:10439000FFF78EFD0020F8BD7480002010B50C21C1
:1043A0004E4801F0B7F801204C49C870087100F080
:1043B000D4FA4B49322001F0B3F80021322000F04A
:1043C00017FF00F0DAF810BD10B5002400F004FC6F
:1043D0000446204610BD10B54048807800020146D2
:1043E0000E31022332223F4800F0AAFF044601208A
:1043F000207013206070204600F0B4FF10BD70B52F
:10440000054636488078000201460E312C233222C0
:104410003448801E00F094FF0446282005550021F2
:1044200029200155204600F09DFF70BD10B5502396
:1044300032220D212C4800F083FF0446204600F074
:10444000CBFA204600F08EFF0221322000F0D0FE91
:1044500010BD10B5012332220D2123480B3800F086
:104460006FFF044602202070204600F07BFF10BD45
:1044700010B500F0CCFB10BD70B505460E461446D5
:104480001A48844201DD044602E0002C00D10124D8
:1044900022463146284601F073F870BDF8B506464D
:1044A0000F461546252332220D210F48C01C00F06F
:1044B00047FF0446012020770622394620461D305A
:1044C00000F002FF2320065565822582204600F079
:1044D0004CFC204600F046FFF8BD00008080002024
:1044E000245A0020043800000E340000307500000B
:1044F00010B501F04BF80446344901F04DF834484A
:10450000081810BD70B505463248857600240EE0C7
:1045100001F03CF80646C017000E80190012000298
:10452000301AC1B22B4810300155601CC4B2082C9F
:10453000EEDB0020044612E01021091BA94201DD38
:10454000002107E001F022F8C117090E091809122D
:104550000902411A1F4A1155601CC0B20446102CB2
:10456000EADB01F013F80646C017000C80190014AE
:104570000004301A1749088370BD10B5242115486E
:1045800000F0C8FF00F0EDF910BD10B512488078BA
:10459000000201460E3102233222104800F0D0FE04
:1045A00004460D2020700B4820308078002800D170
:1045B00002E00848203080786070204600F0D2FE8B
:1045C0000321322000F014FE10BD0000A0BB0D003E
:1045D000A08601008C800020808000201A38000016
:1045E000F8B507460C4615461E462078030000F035
:1045F000E1FD0805272727091B1F2327204600F078
:10460000B7FB1EE06078012802D06078002803D153
:10461000204600F0CEFB06E06078022803D1294650
:10462000304600F013FC0CE0204600F0E2FB08E00E
:10463000204600F0DFFB04E0204600F0DCFB00E059
:1046400000BF00BF0020F8BDF8B505460C46164671
:104650001F462078801E030000F0ACFD06041B24DA
:1046600022232124A178384881708078C007C00FA8
:1046700000280BD03548407933492039C8760622C6
:104680003249891D3048001F00F01EFE00F0D8FBA3
:1046900009E0FFF7A0FE00212B48817003E002E053
:1046A00001E000E000BF00BF0020F8BDF8B50D46F6
:1046B00017461E4612233A463146254800F040FE72
:1046C0000446284600F0BDFB002801D1207028E0F8
:1046D0001D488078C007C00F002820D00822A91CE0
:1046E0001948103800F0AAFE002818D116482038C2
:1046F000008B2988884212D101202070124820386E
:10470000807E6074102210492039601C00F0DCFDAE
:104710000D498878FFF773FE00F097FB01E0002059
:104720002070204600F01EFE2078002801D1FFF7FF
:1047300052FE0020F8BDF8B504460D4616461F4649
:1047400000F082FB0020F8BDAC80002080800020BB
:1047500018380000F8B506460F461446204600F00B
:1047600023FD00280CD1012332220D21594800F0ED
:10477000E7FD054601202870284600F0F3FD00BF44
:104780000020F8BDF8B506460C46154620780E28E0
:104790002CD008DC01280FD0022830D003281FD0ED
:1047A0000D2837D123E00F2825D0102828D0112834
:1047B00027D012282ED127E0607800280FD122239D
:1047C00032220D214348801C00F0BAFD07463946CD
:1047D000284600F01DFA384600F0C4FD00BF1AE07C
:1047E0006078002801D100F037FA14E000BF60784B
:1047F00000F045FA0FE0607800F0ACFA0BE00AE058
:1048000000BF00F0B1FA06E06078442801D100F062
:10481000AEFA00E000BF00BF0020F8BDF8B50746C3
:104820000C4615461E46284600F0BEFC022806D15E
:104830003004000E28498870204600F0ADF80020B2
:10484000F8BDF8B506460C4615461F4620780A28DE
:1048500012D1284600F0A8FC04280CD1607800286A
:1048600003D0607800F009FA05E00521284600F041
:10487000BFFC00F003FA00E000BF00BF0020F8BD5D
:10488000F8B506460D4614461F462946204600F058
:104890007CF90020F8BDF8B506460C4615461F46C3
:1048A000284600F081FC012808D12078002805D195
:1048B000FFF78AFD002801D000F04DFA0020F8BD76
:1048C000F8B505460C4616461F46204600F04EFA3F
:1048D0000020F8BD023400008080002010B5FB48A5
:1048E00000F076FE0523012200215002FEF7AFFD05
:1048F00010BD10B505200007808A042108408010F3
:10490000002801D0FCF77AF9322000F04DFC022893
:1049100022D1FFF79EFDEE4800780D2802D00E2828
:1049200017D10AE00E20EA4908700420E94908700E
:104930003221E94800F050FC0BE00D20E4490870FA
:104940000020E449087028223221E34800F018FED4
:1049500000BF00BFFFF7C2FF10BD0D20DC4908708B
:104960007047704710B51C2332223621880200F0B0
:10497000E7FC0446D948008820800120A070D84870
:10498000007AE0701022D6490A31201D00F09CFC0C
:10499000204600F0E7FC10BD10B50446CF488078F3
:1049A000FF2816D0FFF7DEFF0521322000F020FCA3
:1049B0002088CA490880607A4871062221460A3157
:1049C000C648801D00F080FCC6498878FFF717FDB7
:1049D00001E0FFF72BFD10BD70B590B00446BC4858
:1049E0000078207000206070BF48A081E08107201F
:1049F0002074012060741C21E1741F2130200155B6
:104A0000B4480078002806D001280DD0022814D020
:104A1000032824D11AE0B548B54908601B20087165
:104A200008460179E17420E0B248B14908601C20D1
:104A3000087108460179E17417E0A948AC4908609B
:104A40001A20087108460179E1740EE0AA48A849C5
:104A500008601620087108460179E17405E000211C
:104A6000E1740020A249086000BF00BFA04802799D
:104A700001682046143000F027FC00213020015549
:104A8000025D9EA12046313000F01EFCE07C1C211E
:104A9000081A801E46B2002E25DD0D252A4698A153
:104AA000684600F07FFD002D1DDD28463146884216
:104AB00001D2024600E00A46D5B2681CC1B2E27CCF
:104AC0002046143081540922E17C491C4254E27C86
:104AD000921C014650182A46694600F0F5FBE17C1D
:104AE000A81C0818E07410B070BD70B500BFFEF7C8
:104AF00018FB0020FEF7E6FA0546E1206843400275
:104B0000040C204670BD10B5FFF7EFFF04462012DD
:104B100021020843784948817D48017876484175EB
:104B20007B4800880004010E7348017578480068CE
:104B30000002010E7048C17475480068000E6E498D
:104B40008874744801786C48417472480088000485
:104B5000010E694801746F4800680002010E664842
:104B6000C1736C480068000E6349887310BD10B5AE
:104B7000022200219002FEF759FA0120FEF769FA9D
:104B8000FEF776FA84B2204610BD70B505460E4693
:104B9000284600F009FB0446032C03D0052C01D065
:104BA000042C0CD100204B4908700D204849087096
:104BB00028223221484800F0E3FCFFF737FC70BDA3
:104BC00010B5012332223621534800F0B9FB0446C8
:104BD000204600F0C7FB10BD10B5002402204F494D
:104BE00008703E48C07802280EDA3C48C078012898
:104BF00002D1FFF7E5FF00E000BF00BF3748C078F3
:104C0000401C3649C87000E00124204610BD7047A2
:104C100003220A700A224A7000224A820A754A75E3
:104C20001722CA8208220A8310224A8300228A831A
:104C30006422CA830023202253547047F8B50446E7
:104C40000D4616461F46322000F0AEFA022801D16A
:104C5000FFF7FFFB0020F8BD10B50121322000F066
:104C6000C7FAFFF7B1FB002806D0282232211A48E4
:104C700000F086FCFFF7DAFB10BD7047704710B5F7
:104C80000446442C65D113480078022804D0032838
:104C90000DD004284AD143E003200E490870FFF7E5
:104CA00032FF032232210C4800F06AFC4EE0002063
:104CB0000849087028223221074800F061FC144896
:104CC0000068001D1249086040E00000F348002021
:104CD000DD900020DC90002001C8000080800020D2
:104CE0009F5B0020AC8000204C040000685B00202B
:104CF000E0900020835B0020BA5B002002FF0000F0
:104D0000444131343538302054454D504C0000007A
:104D1000E8900020EC90002007D80000F4900020DC
:104D200000207D4908607D4908600FE07C480078DC
:104D3000401C7B49087078480068001D764908606F
:104D400028223221774800F01BFC00BF00BFFFF78C
:104D50006DFB10BD704710B5FFF768FB28223221AC
:104D6000704800F00DFC10BD7047704770477047E9
:104D700070B505466C488078000201460E311E234E
:104D800032226A4800F0DCFA04460120207060708C
:104D90000121E170102161710320A07001212171B6
:104DA000002121720121A171E171204600F0DAFA9F
:104DB00070BD7FB505465EA30FCB6C460FC45A4845
:104DC0008078000201460E311E233222574800F03F
:104DD000B7FA04465A48046010226946A01C00F045
:104DE00073FA0420207001206070204600F0BAFAA7
:104DF0007FBD7047704770B505461E2332220E21D5
:104E00004A4800F09DFA04466878FFF77BFB0720CC
:104E10002070012060704B48817E2177018B618278
:104E20000822014610312046143000F04DFA1022BD
:104E30004449A01C00F048FA204600F093FA70BDE7
:104E40007047014601207047704770477047F8B5BA
:104E500007460C461546284600F0A6F901280CD155
:104E6000012332221146900200F06AFA06462078A9
:104E70003070304600F076FA00BF0020F8BD10B563
:104E80000446002010BD30B5044688782E4D2872A7
:104E9000002030BDF8B505460C4616461F461022C8
:104EA000A11C29480A3000F00FFA1022A11C274843
:104EB00000F00AFA1022A11C254800F005FA002093
:104EC000F8BD70B504462148801F4D88C582204832
:104ED000801F8E788675CD78C575002070BD70B541
:104EE00004461A4DAD1F48882883194DAD1F8E7892
:104EF0002E76C8786876002070BD30B50446887874
:104F0000114D68728878124DAD1FA87688780F4DC4
:104F1000AD1FA876002030BDE8900020EC90002066
:104F2000DC90002001C800008080002014380000C0
:104F3000000102030405060708090A0B0C0D0E0FF9
:104F4000F89000208C8000209F5B00206E5B00208A
:104F5000895B0020024670B54A40D30FDB07400052
:104F60002DD04A002AD0010E140E00021202091997
:104F7000400A520A8418E50104465443000A120A02
:104F80002E045043A4194219200CC543AA18120C30
:104F90000125AD03521C521912047F39240400D09C
:104FA000521C104301D44000491EC2B20C06C00975
:104FB0002018401C4008802A02D003E0002070BD69
:104FC00040084000002900DA0020184370BD10B5E9
:104FD00000229623114600F01DF810BD410040024A
:104FE0000122400AD205090E80187F2901DA00202B
:104FF0007047962903DC9622511AC84070479639AB
:1050000088407047002904DA401C490001D140085B
:105010004000704770B40024050C05D11024000432
:1050200002D1002921D01124050E01D1000208343B
:10503000050F01D10001241D850F01D18000A41CA2
:10504000002801DB4000641C002908D020252E1B0D
:105050000D46F540A14000D0012129430843010637
:105060001B1B000ADB1D02D5002070BC7047DB054E
:10507000181880180029F8DA401C4900F5D170BCD6
:105080004008400070470000064C0125064E05E030
:10509000E36807CC2B430C3C98471034B442F7D359
:1050A000FBF7D2F9D45A0020045B002003B4014876
:1050B000019001BD551B020003B40148019001BDE0
:1050C000CF2B030003B40148019001BD0F3B030047
:1050D00003B40148019001BDCB2C030003B4014887
:1050E000019001BD0990020003B40148019001BD87
:1050F000C12D030003B40148019001BD0921030043
:1051000003B40148019001BDC92D030003B4014857
:10511000019001BD2B69020003B40148019001BD5B
:10512000EB31030003B40148019001BD3D3203009F
:1051300003B40148019001BDD721030003B4014825
:10514000019001BD1F21020003B40148019001BD7F
:105150002F2F030003B40148019001BD998F020075
:1051600003B40148019001BD938F020003B40148CC
:10517000019001BDCD8C020003B40148019001BD36
:10518000418F020003B40148019001BD276802006D
:1051900003B40148019001BD3968020003B401481D
:1051A000019001BDB780020003B40148019001BD28
:1051B000B326030003B40148019001BDFD3D030087
:1051C00003B40148019001BD0522020003B4014867
:1051D000019001BD197D020003B40148019001BD99
:1051E000A528030003B40148019001BDD5AF02001A
:1051F00003B40148019001BD3126030003B4014806
:10520000019001BDA1A5020003B40148019001BDB8
:10521000E3A5020003B40148019001BD87A8020084
:1052200003B40148019001BDA7A9020003B40148DD
:10523000019001BD93AA020003B40148019001BD91
:1052400095AB020003B40148019001BDF9AB020027
:1052500003B40148019001BD69AC020003B40148E8
:10526000019001BD17AD020003B40148019001BDDA
:1052700077AD020003B40148019001BDF1AD020019
:1052800003B40148019001BD85AE020003B401489A
:10529000019001BD11AF020003B40148019001BDAE
:1052A0003350020003B40148019001BDA73A030046
:1052B00003B40148019001BD5548020003B4014800
:1052C000019001BD1F50020003B40148019001BDCF
:1052D000213B030003B40148019001BD7F0C030092
:1052E00003B40148019001BDAB0C030003B40148B5
:1052F000019001BDBF22020003B40148019001BD2D
:10530000EB26030003B40148019001BD35240300DE
:1053100003B40148019001BD2F22020003B40148EB
:10532000019001BDDD20030003B40148019001BDDF
:10533000533B030003B40148019001BD9D200300CD
:1053400003B40148019001BDB123030003B4014837
:10535000019001BD49E5020003B40148019001BD7F
:10536000F9E3020003B40148019001BDE123030009
:1053700003B40148019001BD4BCD020003B40148C4
:10538000019001BD99D1020003B40148019001BD13
:10539000ABD0020003B40148019001BD69D0020006
:1053A00003B40148019001BD77CF020003B4014866
:1053B000019001BD01CC020003B40148019001BD80
:1053C00029CC020003B40148019001BD15D20200AE
:1053D00003B40148019001BD8DD2020003B401481D
:1053E000019001BDB938020003B40148019001BD2C
:1053F000CD44020003B40148019001BD775802007A
:1054000003B40148019001BDD722030003B4014851
:10541000019001BD2D42020003B40148019001BD7D
:105420008D3D030003B40148019001BDF38E0200DD
:1054300003B40148019001BD218E020003B401486C
:10544000019001BD773B030003B40148019001BD09
:10545000D729030003B40148019001BD792003005E
:1054600003B40148019001BD2129030003B40148A0
:10547000019001BDC768020003B40148019001BD5D
:105480000D2C030003B40148019001BD652C0300FD
:1054900003B40148019001BDDB2E030003B40148B1
:1054A000019001BD231D020003B40148019001BD1C
:1054B000C32C030003B40148019001BD1B66020028
:1054C00003B40148019001BD1531030003B4014844
:1054D000019001BD3B66020003B40148019001BD8B
:1054E0002B66020003B40148019001BD038D020048
:1054F00003B40148019001BDCF8F020003B40148FD
:10550000019001BDE3E3020003B40148019001BD35
:1055100095E3020003B40148019001BD533B030031
:1055200003B40148019001BD8725030003B401487D
:10553000019001BD7B9C020003B40148019001BDB4
:10554000A59B020003B40148019001BD959802009B
:1055500003B40148019001BD9599020003B40148CC
:10556000019001BD6D9B020003B40148019001BD93
:10557000B7E3020003B40148019001BDF3AF02009C
:1055800003B40148019001BD2528030003B401487C
:10559000019001BDFD3A030003B40148019001BD33
:1055A000D33A030003B40148019001BD213B03003D
:1055B00002E008C8121F08C1002AFAD170477047DC
:1055C000002001E001C1121F002AFBD1704700003A
:1055D0000149086070470000588000200101000A5E
:1055E00004280A040203AA0055032A00A001FFFFB1
:1055F0002C0100000A000000857502000B0000006D
:105600006B7A02000C000000CB7902000D00000054
:10561000A17502000E000000D37502000F0000000B
:10562000F379020010000000FD7502001200000076
:1056300017760200110000005D76020013000000E2
:105640008776020014000000B17602001500000009
:10565000D778020016000000097902001B00000044
:10566000F77602004D000000577902001700000095
:10567000217A0200180000001378020019000000CF
:10568000537802001A000000957802001C00000008
:105690008D7A02001D000000AD7A02001E0000009D
:1056A000437A02001F000000737702002000000010
:1056B000C377020021000000F37A020049000000D5
:1056C000317B0200000800001511002001000000DD
:1056D0003B7B020009000000537B02000500000034
:1056E0007D7B020006000000A77B02000200000094
:1056F0000B7C020007000000CF7B020000000000CE
:10570000F97B0200030000006B7C02000400000033
:105710008D7C020008000000F77C02004C000000B5
:105720006D7E0200F4550020260000005443030063
:10573000245700203204080006000100E511002073
:105740005D130020451700200318002031180020A9
:1057500049140020AD1400200D15002005040000A0
:10576000451A0020060400009339020007040000D7
:10577000D9390200080400001F3A020002040000A8
:10578000B73B020000040000093C020004040000D2
:105790006F3C020003040000D93C02000104000039
:1057A0004B3D020009040000D73A02000A04000041
:1057B000413B02000B0400004D3F020021040000A9
:1057C0009942020026040000EB4702000008000096
:1057D000EF3F02003F000000CF4102004B000000FD
:1057E000C93D02004E000000213E020023040000DB
:1057F0007F3E020024040000B93E0200270400009E
:105800009B43020028040000C54302002504000059
:105810003D4302002B040000F1430200310400006C
:105820001144020032040000594402003504000013
:105830008D44020029040000631A00202A0400009D
:10584000254502002C0400006D4502002D040000D7
:10585000F74502002E0400002B4602002F04000032
:105860006346020033040000934602003404000043
:1058700015470200360400004547020030040000CE
:1058800097470200010800002D42020001080000B5
:10589000811A002000080000EF3F02000000000015
:1058A00000000000000000000000000000000000F8
:1058B00000000000000000000000000000000000E8
:1058C00000000000000000000000000000000000D8
:1058D00000000000000000000000000000000000C8
:1058E00000000000000000000000000000000000B8
:1058F00000000000000000000000000000000000A8
:105900000000000000000000000000000000000097
:105910000000000000000000000000000000000087
:105920000000000000000000000000000000000077
:105930000000000000000000000000008C58002063
:105940000200000000000000000000005C57002082
:10595000260000009C5800204C59002064030800D9
:1059600016000600FF003F00FF03FF0100010203D5
:105970000405060708090A0B0C0D0E0F101112136F
:105980001415161718191A1B1C1D1E1F202122235F
:105990002425262728292A2B2C2D2E2F303132334F
:1059A0003435363738393A3B3C3D3E3F404142433F
:1059B0004445464748494A4B4C4D4E4F505152532F
:1059C0005455565758595A5B5C5D5E5F045A002027
:1059D0001C5A00207E8000200300010007D8000030
:1059E000253F002000D80000394100200E30000083
:1059F0002D42002009D80000D741002003380000C4
:105A00007B430020DC59002001000000E459002005
:105A100001000000EC59002002000000FC590020A9
:105A20000100000000000000CC5A0020B0800020DF
:105A3000060001000134000055470020003400003A
:105A4000854700200038000043480020013800004E
:105A50001D480020033800008148002000C80000D5
:105A60009748002010340000C1480020133800007F
:105A7000E145002015380000494600201738000095
:105A8000AD460020193800003747002001C800004B
:105A90003D4C002008D800004F4E002002D80000E6
:105AA000874E002003D80000954E002004D8000047
:105AB000C34E002005D80000DF4E002006D80000AD
:105AC000FB4E002001D800007F4E0020345A0020F9
:105AD00013000000D05B002000800020B400000014
:105AE000C0550020D05B002020900020DC0000008A
:105AF000C055002068070800202A0800E0050000C3
:105B0000C0550020800C00000A0000101112131470
:105B100015161718191A1B1C1D1E1F0A000020211C
:105B200022232425262728292A2B2C2D2E2F0A0034
:105B300000303132333435363738393A3B3C3D3E2C
:105B40003F0A0000404142434445464748494A4BCA
:105B50004C4D4E4F0A000050515253545556575811
:105B6000595A5B5C5D5E5F001AFF4C0002155439A8
:105B70002FC4CB60AB74CE8E7679F8F1B9160000E5
:105B80000000C51BFF4C00BEAC54392FC4CB60AB2A
:105B900074CE8E7679F8F1B91645322133C50003FB
:105BA00003AAFE1516AAFE000925D59D55DFEC6255
:105BB000E613565E75F46E46DA0003034C001116C8
:105BC000AAFE20000000010000000000000000000C
:040000052000044192
:00000001FF


/*
 * Globalize Culture sw-KE
 *
 * http://github.com/jquery/globalize
 *
 * Copyright Software Freedom Conservancy, Inc.
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * This file was generated by the Globalize Culture Generator
 * Translation: bugs found in this file need to be fixed in the generator
 */

(function( window, undefined ) {

var Globalize;

if ( typeof require !== "undefined" &&
	typeof exports !== "undefined" &&
	typeof module !== "undefined" ) {
	// Assume CommonJS
	Globalize = require( "globalize" );
} else {
	// Global variable
	Globalize = window.Globalize;
}

Globalize.addCultureInfo( "sw-KE", "default", {
	name: "sw-KE",
	englishName: "Kiswahili (Kenya)",
	nativeName: "Kiswahili (Kenya)",
	language: "sw",
	numberFormat: {
		currency: {
			symbol: "S"
		}
	},
	calendars: {
		standard: {
			days: {
				names: ["Jumapili","Jumatatu","Jumanne","Jumatano","Alhamisi","Ijumaa","Jumamosi"],
				namesAbbr: ["Jumap.","Jumat.","Juman.","Jumat.","Alh.","Iju.","Jumam."],
				namesShort: ["P","T","N","T","A","I","M"]
			},
			months: {
				names: ["Januari","Februari","Machi","Aprili","Mei","Juni","Julai","Agosti","Septemba","Oktoba","Novemba","Decemba",""],
				namesAbbr: ["Jan","Feb","Mac","Apr","Mei","Jun","Jul","Ago","Sep","Okt","Nov","Dec",""]
			}
		}
	}
});

}( this ));


/*
 * Copyright (c) 2008-2017 Haulmont.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.haulmont.cuba.web.widgets;

import com.vaadin.shared.ui.colorpicker.Color;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomField;

import java.util.Objects;

public class CubaColorPickerWrapper extends CustomField<Color> {

    protected CubaColorPicker field;

    // The internalValue is used to store the 'null' value,
    // because the ColorPicker doesn't accept null values
    protected Color internalValue;

    public CubaColorPickerWrapper() {
        field = createColorPicker();
        initColorPicker(field);
        // We need to sync 'internalValue' with the default field value, otherwise,
        // the first time we set 'null', it doesn't change the color to Black
        setInternalValue(field.getValue());
        setFocusDelegate(field);
        setPrimaryStyleName("c-color-picker");
        setWidthUndefined();
    }

    private CubaColorPicker createColorPicker() {
        return new CubaColorPicker();
    }

    protected void initColorPicker(CubaColorPicker field) {
        field.addValueChangeListener((ValueChangeListener<Color>) event -> {
            setInternalValue(event.getValue());
            fireEvent(createValueChange(event.getOldValue(), event.isUserOriginated()));
        });
        field.setCaption(null);
        field.setModal(true);
    }

    @Override
    protected Component initContent() {
        return field;
    }

    @Override
    public void setReadOnly(boolean readOnly) {
        super.setReadOnly(readOnly);
        if (field != null) {
            field.setReadOnly(readOnly);
        }
    }

    @Override
    protected void doSetValue(Color value) {
        if (!Objects.equals(field.getValue(), value)) {
            field.setValue(value);
        }
        setInternalValue(value);
    }

    @Override
    public Color getValue() {
        return getInternalValue();
    }

    public Color getInternalValue() {
        return internalValue;
    }

    public void setInternalValue(Color internalValue) {
        if (!Objects.equals(this.internalValue, internalValue)) {
            this.internalValue = internalValue;
            markAsDirty();
        }
    }

    @Override
    public void setWidth(float width, Unit unit) {
        super.setWidth(width, unit);

        if (field != null) {
            if (width < 0) {
                field.setWidthUndefined();
            } else {
                field.setWidth("100%");
            }
        }
    }

    @Override
    public void setHeight(float height, Unit unit) {
        super.setHeight(height, unit);

        if (field != null) {
            if (height < 0) {
                field.setHeightUndefined();
            } else {
                field.setHeight("100%");
            }
        }
    }

    public void setDefaultCaptionEnabled(boolean value) {
        field.setDefaultCaptionEnabled(value);

        if (value) {
            removeStyleName("color-maxwidth");
        } else {
            addStyleName("color-maxwidth");
        }
    }

    public boolean isDefaultCaptionEnabled() {
        return field.isDefaultCaptionEnabled();
    }

    public void setButtonCaption(String value) {
        field.setCaption(value);
    }

    public String getButtonCaption() {
        return field.getCaption();
    }

    public void setHistoryVisible(boolean value) {
        field.setHistoryVisibility(value);
    }

    public boolean isHistoryVisible() {
        return field.getHistoryVisibility();
    }

    public void setSwatchesVisible(boolean value) {
        field.setSwatchesVisibility(value);
    }

    public boolean isSwatchesVisible() {
        return field.getSwatchesVisibility();
    }

    public void setRGBVisible(boolean value) {
        field.setRGBVisibility(value);
    }

    public boolean isRGBVisible() {
        return field.getRGBVisibility();
    }

    public void setHSVVisible(boolean value) {
        field.setHSVVisibility(value);
    }

    public boolean isHSVVisible() {
        return field.getHSVVisibility();
    }

    public void setPopupCaption(String popupCaption) {
        field.setWindowCaption(popupCaption);
    }

    public String getPopupCaption() {
        return field.getWindowCaption();
    }

    public void setConfirmButtonCaption(String caption) {
        field.setConfirmButtonCaption(caption);
    }

    public String getConfirmButtonCaption() {
        return field.getConfirmButtonCaption();
    }

    public void setCancelButtonCaption(String caption) {
        field.setCancelButtonCaption(caption);
    }

    public String getCancelButtonCaption() {
        return field.getCancelButtonCaption();
    }

    public void setSwatchesTabCaption(String caption) {
        field.setSwatchesTabCaption(caption);
    }

    public String getSwatchesTabCaption() {
        return field.getSwatchesTabCaption();
    }

    public void setLookupAllCaption(String lookupAllCaption) {
        field.setLookupAllCaption(lookupAllCaption);
    }

    public String getLookupAllCaption() {
        return field.getLookupAllCaption();
    }

    public void setLookupRedCaption(String lookupRedCaption) {
        field.setLookupRedCaption(lookupRedCaption);
    }

    public String getLookupRedCaption() {
        return field.getLookupRedCaption();
    }

    public void setLookupGreenCaption(String lookupGreenCaption) {
        field.setLookupGreenCaption(lookupGreenCaption);
    }

    public String getLookupGreenCaption() {
        return field.getLookupGreenCaption();
    }

    public void setLookupBlueCaption(String lookupBlueCaption) {
        field.setLookupBlueCaption(lookupBlueCaption);
    }

    public String getLookupBlueCaption() {
        return field.getLookupBlueCaption();
    }

    public void setRedSliderCaption(String redSliderCaption) {
        field.setRedSliderCaption(redSliderCaption);
    }

    public String getRedSliderCaption() {
        return field.getRedSliderCaption();
    }

    public void setGreenSliderCaption(String greenSliderCaption) {
        field.setGreenSliderCaption(greenSliderCaption);
    }

    public String getGreenSliderCaption() {
        return field.getGreenSliderCaption();
    }

    public void setBlueSliderCaption(String blueSliderCaption) {
        field.setBlueSliderCaption(blueSliderCaption);
    }

    public String getBlueSliderCaption() {
        return field.getBlueSliderCaption();
    }

    public void setHueSliderCaption(String hueSliderCaption) {
        field.setHueSliderCaption(hueSliderCaption);
    }

    public String getHueSliderCaption() {
        return field.getHueSliderCaption();
    }

    public void setSaturationSliderCaption(String saturationSliderCaption) {
        field.setSaturationSliderCaption(saturationSliderCaption);
    }

    public String getSaturationSliderCaption() {
        return field.getSaturationSliderCaption();
    }

    public void setValueSliderCaption(String valueSliderCaption) {
        field.setValueSliderCaption(valueSliderCaption);
    }

    public String getValueSliderCaption() {
        return field.getValueSliderCaption();
    }
}


use ipfs::Node;
use libp2p::{multiaddr::Protocol, Multiaddr};
use std::time::Duration;
use tokio::time::timeout;

#[cfg(any(feature = "test_go_interop", feature = "test_js_interop"))]
mod common;
#[cfg(any(feature = "test_go_interop", feature = "test_js_interop"))]
use common::interop::ForeignNode;

const TIMEOUT: Duration = Duration::from_secs(5);

// Make sure two instances of ipfs can be connected by `Multiaddr`.
#[tokio::test(max_threads = 1)]
async fn connect_two_nodes_by_addr() {
    let node_a = Node::new("a").await;

    #[cfg(all(not(feature = "test_go_interop"), not(feature = "test_js_interop")))]
    let node_b = Node::new("b").await;
    #[cfg(any(feature = "test_go_interop", feature = "test_js_interop"))]
    let node_b = ForeignNode::new();

    timeout(TIMEOUT, node_a.connect(node_b.addrs[0].clone()))
        .await
        .expect("timeout")
        .expect("should have connected");
}

// Make sure only a `Multiaddr` with `/p2p/` can be used to connect.
#[tokio::test(max_threads = 1)]
#[should_panic(expected = "called `Result::unwrap()` on an `Err` value: MissingProtocolP2p")]
async fn dont_connect_without_p2p() {
    let node_a = Node::new("a").await;
    let node_b = Node::new("b").await;

    let mut b_addr = node_b.addrs[0].clone();
    // drop the /p2p/peer_id part
    b_addr.pop();

    timeout(TIMEOUT, node_a.connect(b_addr))
        .await
        .expect("timeout")
        .expect_err("should not have connected");
}

// Make sure two instances of ipfs can be connected by `PeerId`.
#[ignore = "connecting just by PeerId is not currently supported"]
#[tokio::test(max_threads = 1)]
async fn connect_two_nodes_by_peer_id() {
    let node_a = Node::new("a").await;
    let node_b = Node::new("b").await;

    node_a
        .add_peer(node_b.id.clone(), node_b.addrs[0].clone())
        .await
        .unwrap();
    let b_id_multiaddr: Multiaddr = format!("/p2p/{}", &node_b.id).parse().unwrap();

    timeout(TIMEOUT, node_a.connect(b_id_multiaddr))
        .await
        .expect("timeout")
        .expect("should have connected");
}

// Ensure that duplicate connection attempts don't cause hangs.
#[tokio::test(max_threads = 1)]
async fn connect_duplicate_multiaddr() {
    let node_a = Node::new("a").await;
    let node_b = Node::new("b").await;

    // test duplicate connections by address
    for _ in 0..3 {
        // final success or failure doesn't matter, there should be no timeout
        let _ = timeout(TIMEOUT, node_a.connect(node_b.addrs[0].clone()))
            .await
            .unwrap();
    }
}

// More complicated one to the above; first node will have two listening addresses and the second
// one should dial both of the addresses, resulting in two connections.
#[tokio::test(max_threads = 1)]
async fn connect_two_nodes_with_two_connections_doesnt_panic() {
    let node_a = Node::new("a").await;
    let node_b = Node::new("b").await;

    node_a
        .add_listening_address("/ip4/127.0.0.1/tcp/0".parse().unwrap())
        .await
        .unwrap();

    let addresses = node_a.addrs_local().await.unwrap();
    assert_eq!(addresses.len(), 2);

    for mut addr in addresses.into_iter() {
        addr.push(Protocol::P2p(node_a.id.clone().into()));

        timeout(TIMEOUT, node_b.connect(addr))
            .await
            .expect("timeout")
            .expect("should have connected");
    }

    // not too sure on this, since there'll be a single peer but two connections; the return
    // type is `Vec<Connection>` but it's peer with any connection.
    let mut peers = node_a.peers().await.unwrap();
    assert_eq!(peers.len(), 1);

    // sadly we are unable to currently verify that there exists two connections for the node_b
    // peer..

    node_a
        .disconnect(peers.remove(0).addr)
        .await
        .expect("failed to disconnect peer_b at peer_a");

    let peers = node_a.peers().await.unwrap();
    assert!(
        peers.is_empty(),
        "node_b was still connected after disconnect: {:?}",
        peers
    );
}


// Go MySQL Driver - A MySQL-Driver for Go's database/sql package
//
// Copyright 2012 The Go-MySQL-Driver Authors. All rights reserved.
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at http://mozilla.org/MPL/2.0/.

package mysql

import (
	"crypto/tls"
	"database/sql/driver"
	"encoding/binary"
	"fmt"
	"io"
	"strings"
	"sync"
	"sync/atomic"
	"time"
)

// Registry for custom tls.Configs
var (
	tlsConfigLock     sync.RWMutex
	tlsConfigRegistry map[string]*tls.Config
)

// RegisterTLSConfig registers a custom tls.Config to be used with sql.Open.
// Use the key as a value in the DSN where tls=value.
//
// Note: The provided tls.Config is exclusively owned by the driver after
// registering it.
//
//  rootCertPool := x509.NewCertPool()
//  pem, err := ioutil.ReadFile("/path/ca-cert.pem")
//  if err != nil {
//      log.Fatal(err)
//  }
//  if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
//      log.Fatal("Failed to append PEM.")
//  }
//  clientCert := make([]tls.Certificate, 0, 1)
//  certs, err := tls.LoadX509KeyPair("/path/client-cert.pem", "/path/client-key.pem")
//  if err != nil {
//      log.Fatal(err)
//  }
//  clientCert = append(clientCert, certs)
//  mysql.RegisterTLSConfig("custom", &tls.Config{
//      RootCAs: rootCertPool,
//      Certificates: clientCert,
//  })
//  db, err := sql.Open("mysql", "user@tcp(localhost:3306)/test?tls=custom")
//
func RegisterTLSConfig(key string, config *tls.Config) error {
	if _, isBool := readBool(key); isBool || strings.ToLower(key) == "skip-verify" {
		return fmt.Errorf("key '%s' is reserved", key)
	}

	tlsConfigLock.Lock()
	if tlsConfigRegistry == nil {
		tlsConfigRegistry = make(map[string]*tls.Config)
	}

	tlsConfigRegistry[key] = config
	tlsConfigLock.Unlock()
	return nil
}

// DeregisterTLSConfig removes the tls.Config associated with key.
func DeregisterTLSConfig(key string) {
	tlsConfigLock.Lock()
	if tlsConfigRegistry != nil {
		delete(tlsConfigRegistry, key)
	}
	tlsConfigLock.Unlock()
}

func getTLSConfigClone(key string) (config *tls.Config) {
	tlsConfigLock.RLock()
	if v, ok := tlsConfigRegistry[key]; ok {
		config = cloneTLSConfig(v)
	}
	tlsConfigLock.RUnlock()
	return
}

// Returns the bool value of the input.
// The 2nd return value indicates if the input was a valid bool value
func readBool(input string) (value bool, valid bool) {
	switch input {
	case "1", "true", "TRUE", "True":
		return true, true
	case "0", "false", "FALSE", "False":
		return false, true
	}

	// Not a valid bool value
	return
}

/******************************************************************************
*                           Time related utils                                *
******************************************************************************/

// NullTime represents a time.Time that may be NULL.
// NullTime implements the Scanner interface so
// it can be used as a scan destination:
//
//  var nt NullTime
//  err := db.QueryRow("SELECT time FROM foo WHERE id=?", id).Scan(&nt)
//  ...
//  if nt.Valid {
//     // use nt.Time
//  } else {
//     // NULL value
//  }
//
// This NullTime implementation is not driver-specific
type NullTime struct {
	Time  time.Time
	Valid bool // Valid is true if Time is not NULL
}

// Scan implements the Scanner interface.
// The value type must be time.Time or string / []byte (formatted time-string),
// otherwise Scan fails.
func (nt *NullTime) Scan(value interface{}) (err error) {
	if value == nil {
		nt.Time, nt.Valid = time.Time{}, false
		return
	}

	switch v := value.(type) {
	case time.Time:
		nt.Time, nt.Valid = v, true
		return
	case []byte:
		nt.Time, err = parseDateTime(string(v), time.UTC)
		nt.Valid = (err == nil)
		return
	case string:
		nt.Time, err = parseDateTime(v, time.UTC)
		nt.Valid = (err == nil)
		return
	}

	nt.Valid = false
	return fmt.Errorf("Can't convert %T to time.Time", value)
}

// Value implements the driver Valuer interface.
func (nt NullTime) Value() (driver.Value, error) {
	if !nt.Valid {
		return nil, nil
	}
	return nt.Time, nil
}

func parseDateTime(str string, loc *time.Location) (t time.Time, err error) {
	base := "0000-00-00 00:00:00.0000000"
	switch len(str) {
	case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM"
		if str == base[:len(str)] {
			return
		}
		t, err = time.Parse(timeFormat[:len(str)], str)
	default:
		err = fmt.Errorf("invalid time string: %s", str)
		return
	}

	// Adjust location
	if err == nil && loc != time.UTC {
		y, mo, d := t.Date()
		h, mi, s := t.Clock()
		t, err = time.Date(y, mo, d, h, mi, s, t.Nanosecond(), loc), nil
	}

	return
}

func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) {
	switch num {
	case 0:
		return time.Time{}, nil
	case 4:
		return time.Date(
			int(binary.LittleEndian.Uint16(data[:2])), // year
			time.Month(data[2]),                       // month
			int(data[3]),                              // day
			0, 0, 0, 0,
			loc,
		), nil
	case 7:
		return time.Date(
			int(binary.LittleEndian.Uint16(data[:2])), // year
			time.Month(data[2]),                       // month
			int(data[3]),                              // day
			int(data[4]),                              // hour
			int(data[5]),                              // minutes
			int(data[6]),                              // seconds
			0,
			loc,
		), nil
	case 11:
		return time.Date(
			int(binary.LittleEndian.Uint16(data[:2])), // year
			time.Month(data[2]),                       // month
			int(data[3]),                              // day
			int(data[4]),                              // hour
			int(data[5]),                              // minutes
			int(data[6]),                              // seconds
			int(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds
			loc,
		), nil
	}
	return nil, fmt.Errorf("invalid DATETIME packet length %d", num)
}

// zeroDateTime is used in formatBinaryDateTime to avoid an allocation
// if the DATE or DATETIME has the zero value.
// It must never be changed.
// The current behavior depends on database/sql copying the result.
var zeroDateTime = []byte("0000-00-00 00:00:00.000000")

const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"

func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value, error) {
	// length expects the deterministic length of the zero value,
	// negative time and 100+ hours are automatically added if needed
	if len(src) == 0 {
		if justTime {
			return zeroDateTime[11 : 11+length], nil
		}
		return zeroDateTime[:length], nil
	}
	var dst []byte          // return value
	var pt, p1, p2, p3 byte // current digit pair
	var zOffs byte          // offset of value in zeroDateTime
	if justTime {
		switch length {
		case
			8,                      // time (can be up to 10 when negative and 100+ hours)
			10, 11, 12, 13, 14, 15: // time with fractional seconds
		default:
			return nil, fmt.Errorf("illegal TIME length %d", length)
		}
		switch len(src) {
		case 8, 12:
		default:
			return nil, fmt.Errorf("invalid TIME packet length %d", len(src))
		}
		// +2 to enable negative time and 100+ hours
		dst = make([]byte, 0, length+2)
		if src[0] == 1 {
			dst = append(dst, '-')
		}
		if src[1] != 0 {
			hour := uint16(src[1])*24 + uint16(src[5])
			pt = byte(hour / 100)
			p1 = byte(hour - 100*uint16(pt))
			dst = append(dst, digits01[pt])
		} else {
			p1 = src[5]
		}
		zOffs = 11
		src = src[6:]
	} else {
		switch length {
		case 10, 19, 21, 22, 23, 24, 25, 26:
		default:
			t := "DATE"
			if length > 10 {
				t += "TIME"
			}
			return nil, fmt.Errorf("illegal %s length %d", t, length)
		}
		switch len(src) {
		case 4, 7, 11:
		default:
			t := "DATE"
			if length > 10 {
				t += "TIME"
			}
			return nil, fmt.Errorf("illegal %s packet length %d", t, len(src))
		}
		dst = make([]byte, 0, length)
		// start with the date
		year := binary.LittleEndian.Uint16(src[:2])
		pt = byte(year / 100)
		p1 = byte(year - 100*uint16(pt))
		p2, p3 = src[2], src[3]
		dst = append(dst,
			digits10[pt], digits01[pt],
			digits10[p1], digits01[p1], '-',
			digits10[p2], digits01[p2], '-',
			digits10[p3], digits01[p3],
		)
		if length == 10 {
			return dst, nil
		}
		if len(src) == 4 {
			return append(dst, zeroDateTime[10:length]...), nil
		}
		dst = append(dst, ' ')
		p1 = src[4] // hour
		src = src[5:]
	}
	// p1 is 2-digit hour, src is after hour
	p2, p3 = src[0], src[1]
	dst = append(dst,
		digits10[p1], digits01[p1], ':',
		digits10[p2], digits01[p2], ':',
		digits10[p3], digits01[p3],
	)
	if length <= byte(len(dst)) {
		return dst, nil
	}
	src = src[2:]
	if len(src) == 0 {
		return append(dst, zeroDateTime[19:zOffs+length]...), nil
	}
	microsecs := binary.LittleEndian.Uint32(src[:4])
	p1 = byte(microsecs / 10000)
	microsecs -= 10000 * uint32(p1)
	p2 = byte(microsecs / 100)
	microsecs -= 100 * uint32(p2)
	p3 = byte(microsecs)
	switch decimals := zOffs + length - 20; decimals {
	default:
		return append(dst, '.',
			digits10[p1], digits01[p1],
			digits10[p2], digits01[p2],
			digits10[p3], digits01[p3],
		), nil
	case 1:
		return append(dst, '.',
			digits10[p1],
		), nil
	case 2:
		return append(dst, '.',
			digits10[p1], digits01[p1],
		), nil
	case 3:
		return append(dst, '.',
			digits10[p1], digits01[p1],
			digits10[p2],
		), nil
	case 4:
		return append(dst, '.',
			digits10[p1], digits01[p1],
			digits10[p2], digits01[p2],
		), nil
	case 5:
		return append(dst, '.',
			digits10[p1], digits01[p1],
			digits10[p2], digits01[p2],
			digits10[p3],
		), nil
	}
}

/******************************************************************************
*                       Convert from and to bytes                             *
******************************************************************************/

func uint64ToBytes(n uint64) []byte {
	return []byte{
		byte(n),
		byte(n >> 8),
		byte(n >> 16),
		byte(n >> 24),
		byte(n >> 32),
		byte(n >> 40),
		byte(n >> 48),
		byte(n >> 56),
	}
}

func uint64ToString(n uint64) []byte {
	var a [20]byte
	i := 20

	// U+0030 = 0
	// ...
	// U+0039 = 9

	var q uint64
	for n >= 10 {
		i--
		q = n / 10
		a[i] = uint8(n-q*10) + 0x30
		n = q
	}

	i--
	a[i] = uint8(n) + 0x30

	return a[i:]
}

// treats string value as unsigned integer representation
func stringToInt(b []byte) int {
	val := 0
	for i := range b {
		val *= 10
		val += int(b[i] - 0x30)
	}
	return val
}

// returns the string read as a bytes slice, wheter the value is NULL,
// the number of bytes read and an error, in case the string is longer than
// the input slice
func readLengthEncodedString(b []byte) ([]byte, bool, int, error) {
	// Get length
	num, isNull, n := readLengthEncodedInteger(b)
	if num < 1 {
		return b[n:n], isNull, n, nil
	}

	n += int(num)

	// Check data length
	if len(b) >= n {
		return b[n-int(num) : n : n], false, n, nil
	}
	return nil, false, n, io.EOF
}

// returns the number of bytes skipped and an error, in case the string is
// longer than the input slice
func skipLengthEncodedString(b []byte) (int, error) {
	// Get length
	num, _, n := readLengthEncodedInteger(b)
	if num < 1 {
		return n, nil
	}

	n += int(num)

	// Check data length
	if len(b) >= n {
		return n, nil
	}
	return n, io.EOF
}

// returns the number read, whether the value is NULL and the number of bytes read
func readLengthEncodedInteger(b []byte) (uint64, bool, int) {
	// See issue #349
	if len(b) == 0 {
		return 0, true, 1
	}

	switch b[0] {
	// 251: NULL
	case 0xfb:
		return 0, true, 1

	// 252: value of following 2
	case 0xfc:
		return uint64(b[1]) | uint64(b[2])<<8, false, 3

	// 253: value of following 3
	case 0xfd:
		return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16, false, 4

	// 254: value of following 8
	case 0xfe:
		return uint64(b[1]) | uint64(b[2])<<8 | uint64(b[3])<<16 |
				uint64(b[4])<<24 | uint64(b[5])<<32 | uint64(b[6])<<40 |
				uint64(b[7])<<48 | uint64(b[8])<<56,
			false, 9
	}

	// 0-250: value of first byte
	return uint64(b[0]), false, 1
}

// encodes a uint64 value and appends it to the given bytes slice
func appendLengthEncodedInteger(b []byte, n uint64) []byte {
	switch {
	case n <= 250:
		return append(b, byte(n))

	case n <= 0xffff:
		return append(b, 0xfc, byte(n), byte(n>>8))

	case n <= 0xffffff:
		return append(b, 0xfd, byte(n), byte(n>>8), byte(n>>16))
	}
	return append(b, 0xfe, byte(n), byte(n>>8), byte(n>>16), byte(n>>24),
		byte(n>>32), byte(n>>40), byte(n>>48), byte(n>>56))
}

// reserveBuffer checks cap(buf) and expand buffer to len(buf) + appendSize.
// If cap(buf) is not enough, reallocate new buffer.
func reserveBuffer(buf []byte, appendSize int) []byte {
	newSize := len(buf) + appendSize
	if cap(buf) < newSize {
		// Grow buffer exponentially
		newBuf := make([]byte, len(buf)*2+appendSize)
		copy(newBuf, buf)
		buf = newBuf
	}
	return buf[:newSize]
}

// escapeBytesBackslash escapes []byte with backslashes (\)
// This escapes the contents of a string (provided as []byte) by adding backslashes before special
// characters, and turning others into specific escape sequences, such as
// turning newlines into \n and null bytes into \0.
// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L823-L932
func escapeBytesBackslash(buf, v []byte) []byte {
	pos := len(buf)
	buf = reserveBuffer(buf, len(v)*2)

	for _, c := range v {
		switch c {
		case '\x00':
			buf[pos] = '\\'
			buf[pos+1] = '0'
			pos += 2
		case '\n':
			buf[pos] = '\\'
			buf[pos+1] = 'n'
			pos += 2
		case '\r':
			buf[pos] = '\\'
			buf[pos+1] = 'r'
			pos += 2
		case '\x1a':
			buf[pos] = '\\'
			buf[pos+1] = 'Z'
			pos += 2
		case '\'':
			buf[pos] = '\\'
			buf[pos+1] = '\''
			pos += 2
		case '"':
			buf[pos] = '\\'
			buf[pos+1] = '"'
			pos += 2
		case '\\':
			buf[pos] = '\\'
			buf[pos+1] = '\\'
			pos += 2
		default:
			buf[pos] = c
			pos++
		}
	}

	return buf[:pos]
}

// escapeStringBackslash is similar to escapeBytesBackslash but for string.
func escapeStringBackslash(buf []byte, v string) []byte {
	pos := len(buf)
	buf = reserveBuffer(buf, len(v)*2)

	for i := 0; i < len(v); i++ {
		c := v[i]
		switch c {
		case '\x00':
			buf[pos] = '\\'
			buf[pos+1] = '0'
			pos += 2
		case '\n':
			buf[pos] = '\\'
			buf[pos+1] = 'n'
			pos += 2
		case '\r':
			buf[pos] = '\\'
			buf[pos+1] = 'r'
			pos += 2
		case '\x1a':
			buf[pos] = '\\'
			buf[pos+1] = 'Z'
			pos += 2
		case '\'':
			buf[pos] = '\\'
			buf[pos+1] = '\''
			pos += 2
		case '"':
			buf[pos] = '\\'
			buf[pos+1] = '"'
			pos += 2
		case '\\':
			buf[pos] = '\\'
			buf[pos+1] = '\\'
			pos += 2
		default:
			buf[pos] = c
			pos++
		}
	}

	return buf[:pos]
}

// escapeBytesQuotes escapes apostrophes in []byte by doubling them up.
// This escapes the contents of a string by doubling up any apostrophes that
// it contains. This is used when the NO_BACKSLASH_ESCAPES SQL_MODE is in
// effect on the server.
// https://github.com/mysql/mysql-server/blob/mysql-5.7.5/mysys/charset.c#L963-L1038
func escapeBytesQuotes(buf, v []byte) []byte {
	pos := len(buf)
	buf = reserveBuffer(buf, len(v)*2)

	for _, c := range v {
		if c == '\'' {
			buf[pos] = '\''
			buf[pos+1] = '\''
			pos += 2
		} else {
			buf[pos] = c
			pos++
		}
	}

	return buf[:pos]
}

// escapeStringQuotes is similar to escapeBytesQuotes but for string.
func escapeStringQuotes(buf []byte, v string) []byte {
	pos := len(buf)
	buf = reserveBuffer(buf, len(v)*2)

	for i := 0; i < len(v); i++ {
		c := v[i]
		if c == '\'' {
			buf[pos] = '\''
			buf[pos+1] = '\''
			pos += 2
		} else {
			buf[pos] = c
			pos++
		}
	}

	return buf[:pos]
}

/******************************************************************************
*                               Sync utils                                    *
******************************************************************************/

// noCopy may be embedded into structs which must not be copied
// after the first use.
//
// See https://github.com/golang/go/issues/8005#issuecomment-190753527
// for details.
type noCopy struct{}

// Lock is a no-op used by -copylocks checker from `go vet`.
func (*noCopy) Lock() {}

// atomicBool is a wrapper around uint32 for usage as a boolean value with
// atomic access.
type atomicBool struct {
	_noCopy noCopy
	value   uint32
}

// IsSet returns wether the current boolean value is true
func (ab *atomicBool) IsSet() bool {
	return atomic.LoadUint32(&ab.value) > 0
}

// Set sets the value of the bool regardless of the previous value
func (ab *atomicBool) Set(value bool) {
	if value {
		atomic.StoreUint32(&ab.value, 1)
	} else {
		atomic.StoreUint32(&ab.value, 0)
	}
}

// TrySet sets the value of the bool and returns wether the value changed
func (ab *atomicBool) TrySet(value bool) bool {
	if value {
		return atomic.SwapUint32(&ab.value, 1) == 0
	}
	return atomic.SwapUint32(&ab.value, 0) > 0
}

// atomicError is a wrapper for atomically accessed error values
type atomicError struct {
	_noCopy noCopy
	value   atomic.Value
}

// Set sets the error value regardless of the previous value.
// The value must not be nil
func (ae *atomicError) Set(value error) {
	ae.value.Store(value)
}

// Value returns the current error value
func (ae *atomicError) Value() error {
	if v := ae.value.Load(); v != nil {
		// this will panic if the value doesn't implement the error interface
		return v.(error)
	}
	return nil
}


package core

// (C) Copyright IBM Corp. 2019.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Version of the SDK
const __VERSION__ = "3.3.1"


#!/bin/bash

if [ $# -eq 0 ]
  then
    echo "[*] Usage: $0  <myrule.yara>"
	exit
fi

if [[ ! -f $(which yara) ]]; then
	echo "[-] Could not locate yara on the system !"
	echo "[-] Reinstall yara globally and try"
	exit
fi

if [[ ! -f $(which sgn) ]]; then
	echo "[-] Could not locate sgn on the system !"
	echo "[-] Rebuild SGN or set the correct GOPATH for global access"
	exit
fi

if [[ ! -f $1 ]]; then
	echo "[-] Could not open YARA rule file: $1"
	exit
fi

RULE_FILE=$1

test_rule() {
	for i in {1..100}
	do
		generate_random
		sgn $PLAIN_DECODER -a $ARCHITECTURE -c $ENCODING_COUNT -max $OBFUSCATION_LEVEL data &> /dev/null
		if [[ `yara -c $RULE_FILE data.sgn` == 0 ]]; then
			print_fail
		fi
		rm data data.sgn &> /dev/null
	done
}

print_fail() {
	echo -e "\n[!] Found one sample that does not match !"
	echo "[*] Used parameters : sgn $PLAIN_DECODER -a $ARCHITECTURE -c $ENCODING_COUNT -max $OBFUSCATION_LEVEL data"
	echo -e "[*] Used test data: \n`xxd data`"
	echo -e "\n[!] RULE FAILED :("
	exit
}

print_stage() {
	echo "[STAGE $STAGE]> $INTERVAL_MIN-$INTERVAL_MAX byte | Architecture: $ARCHITECTURE | Encode Count: $ENCODING_COUNT | Obfuscation Level: $OBFUSCATION_LEVEL bytes |  Plain Stub: $PLAIN_DECODER"
}

generate_random() {
	head -c $(($INTERVAL_MIN + RANDOM % $INTERVAL_MAX)) /dev/urandom > data
}

reset_stage(){
	INTERVAL_MIN=100
	INTERVAL_MAX=500
	ENCODING_COUNT=1
	OBFUSCATION_LEVEL=50
	ARCHITECTURE=32
}

next_stage() {
	STAGE=$((STAGE+1))
	ITERATION=1O0
	INTERVAL_MIN=$((INTERVAL_MIN*2))
	INTERVAL_MAX=$((INTERVAL_MAX*2))
	if [[ $((STAGE%6)) > 4 ]]; then
		ENCODING_COUNT=$((ENCODING_COUNT+1))
	fi
	OBFUSCATION_LEVEL=$((OBFUSCATION_LEVEL+10))
}

# Set the first stage test parameters
STAGE=1
PLAIN_DECODER="-plain-decoder"
INTERVAL_MIN=100
INTERVAL_MAX=500
ARCHITECTURE=32
ENCODING_COUNT=1
OBFUSCATION_LEVEL=50

## Start testing...
echo -e "\n[### STARTING PLAIN DECODER TESTS ###]"
echo -e "[!] Each stage could take 10-20 seconds.\n"

for j in {1..2}
do
	# x86 tests...
	for i in {1..6}
	do
		print_stage
		test_rule
		next_stage
	done

	reset_stage

	# x64 tests...
	ARCHITECTURE=64
	for i in {1..6}
	do
		print_stage
		test_rule
		next_stage
	done

	reset_stage

	if [[ $j == 1 ]]; then
		# Turn off plain decoder
		echo -e "\n[### STARTING OBFUSCATED DECODER TESTS ###]\n"
		PLAIN_DECODER=""
	fi

done

echo -e "\n[### !! TESTING FOR FINAL BOSS !!]"
echo "[!] This may take more time to bruteforce (things will get hot)"
reset_stage
OBFUSCATION_LEVEL=0
generate_random
sgn -a 32 -c $ENCODING_COUNT -max 0 data &> /dev/null
if [[ `yara -c $RULE_FILE data.sgn` == 0 ]]; then
    print_fail
fi
rm data data.sgn &> /dev/null
generate_random
sgn -a 64 -c $ENCODING_COUNT -max 0 data &> /dev/null
if [[ `yara -c $RULE_FILE data.sgn` == 0 ]]; then
    print_fail
fi

echo -e "\n[+] $1 SUCCESS !!"
echo "[+] It seems that your rule passed all required tests. Now you should check out the false positive ratio of your rule."
echo "[+] If you think it is acceptable open a issue with your yara rule on the repo https://github.com/EgeBalci/sgn/issues/new"

# EICAR


# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

# return objects representing the tags we need to base the debian image on Docker

# The versions of debian we care about
$shortTags = @('stretch-slim')

$parent = Join-Path -Path $PSScriptRoot -ChildPath '..'
$repoRoot = Join-Path -path (Join-Path -Path $parent -ChildPath '..') -ChildPath '..'
$modulePath = Join-Path -Path $repoRoot -ChildPath 'tools\getDockerTags'
Import-Module $modulePath

Get-DockerTags -ShortTags $shortTags -Image "debian" -FullTagFilter 'stretch-\d{8}[\.\d{1}]?-slim' -AlternativeShortTag '9' -SkipShortTagFilter