:10000000C1350002001E021B32FFFFFFFFFF02325C :100010006AFFFFFFFFFFFFFFFFFFFFFFFFFF02334E :10002000157581C890FEF08583A012347DEC4D607B :100030006A78A58003760018B896FA7879800376F6 :100040000018B85FFA78208003760018B820FA907C :10005000FEE5AE83AF8290FD001200A16005E4F0E2 :10006000A380F690FEF0A88290FEF0A982E8C399E2 :10007000500576000880F69000FF1200AA90010358 :100080001200AA9001071200AA90010B1200C8905A :1000900001111200C89001171200C875D000123368 :1000A0006702011DEF65827003EE658322E493F819 :1000B000740193F9740293FE740393F5828E83E8BE :1000C00069700122E493F6A30880F4E493FC7401C0 :1000D00093FD740293FE740393FF740493F8740504 :1000E00093F58288831200A1700122E493A3A88370 :1000F000A9828C838D82F0A3AC83AD8288838982B0 :1001000080E3212104927A7A0492A6A80492FEF058 :1001100004940494FBFB04990494FBFB04F904F994 :1001200080FED0F030F00920F303F68010F7800D48 :1001300030F10920F303F28004F38001F020F4048D :10014000FCD0E0CC22CCC0E012015A02014BBC0032 :1001500005D0F0ACF022C313DCFC020121BF000982 :10016000ED258275F001F8E622BF010FED2582F53D :1001700082EE3583F58375F004E022ED258275F07B :1001800002F8E222D083D082F5F0C3E493A3C5F055 :1001900095F0C0E0C3D0F0E493A395F04012A3A380 :1001A000C3E5F033500205832582F58250020583B2 :1001B000740193C0E0E493C0E022D083D082F5F0D4 :1001C000E49370097401937004A3A3800C740293E8 :1001D00065F06005A3A3A380E7740193C0E0E493F6 :1001E000C0E02212025B0201F21202AF0201F2121F :1001F00002D30201F230E00720E302E622E72230D8 :10020000E10720E302E222E32230E202E022E4936B :10021000221202D302021A1202AF02021AABF01229 :100220000224CBC5F0CB2230E01020E306E6F5F047 :1002300008E622E7F5F009E7192230E11020E3068D :10024000E2F5F008E222E3F5F009E3192230E206D4 :10025000E0F5F0A3E022E493F5F074019322BB00F3 :1002600003740922BB010789828A83740422BB02BA :100270000789828A83741022740A2202027BBB00DF :1002800007E92582F8740122BB010DE92582F58278 :10029000EA3583F583740422BB020DE92582F582D9 :1002A000EA3583F583741022E92582F8740222026C :1002B00002AFBF0005EDF8740122BF01078D828EE9 :1002C00083740422BF02078D828E83741022EDF89E :1002D0007402220202D3BF0007ED2582F8740122C6 :1002E000BF010DED2582F582EE3583F5837404227E :1002F000BF020DED2582F582EE3583F58374102261 :10030000ED2582F8740222020307C0E012025B02AC :10031000031FC0E01202AF02031FC0E01202D302AB :10032000031F30E00B20E304D0E0F622D0E0F722F8 :1003300030E10B20E304D0E0F222D0E0F322D0E061 :10034000F022C9CDC9CACECACBCFCB120352EDF928 :10035000EEFAEFFB22BB002FBF000AFAEDF8E7F63A :100360000809DAFA22BF01128D828E83F802036F28 :1003700009A3E7F0D8FA2202037AFAEDF8E7F208C7 :1003800009DAFA22020384BB014DBF001489828A74 :1003900083F9EDF802039608A3E0F6D9FA220203E6 :1003A000A7BF01228D828E83FB08C9C582C9CAC539 :1003B00083CAE0A3C9C582C9CAC583CAF0A3DBEA60 :1003C000D8E8220203CA8D828E83F9EDF8E0F208A4 :1003D000A3D9FA220203D4BB024DBF001289828A3C :1003E00083F9EDF80203E608A3E493F6D9F922BFF6 :1003F00001238D828E83FB08C9C582C9CAC583CA01 :10040000E493A3C9C582C9CAC583CAF0A3DBE9D8EE :10041000E72202041989828A83F9EDF8E493F2084D :10042000A3D9F92202042ABF000DFAEDF8E3F60879 :1004300009DAFA22020434BF01128D828E83F80297 :10044000044109A3E3F0D8FA2202044CFAEDF8E3E0 :10045000F20809DAFA22020456E6FB08E6FA08E690 :10046000F904F61870010622E6FF08E6FE08E6FD2C :1004700022EFF0A3EEF0A3EDF022EBF0A3EAF0A35D :10048000E9F022E0FFA3E0FEA3E0FD22E0FBA3E011 :10049000FAA3E0F9220000000000000004F9005B6C :1004A00005730026059A00330A0B005B0A7700608B :1004B0001552005B0CFB005B09AB005B09E2005BC3 :1004C0000DC2005B0BF3005B0A1E005B0A53005B6E :1004D000174A0033176000341E4D00431EF00044DD :1004E000205D0044204B00471F1700471FBC004DF4 :1004F000200D004F1F39005831F5005B7CCC7DFF8B :10050000121CFE22749090FF91F090FFFCE020E717 :100510002DC2AFAE59AF58755A20E55A14C55A606E :1005200019E4FE7F05EE4FCE24FFCECF34FFCF601F :1005300007E490FF92F080ED80E08E598F582212F0 :1005400005017D077CB71232117D0F7C6E12322BB4 :1005500078977A06E4F608DAFC7A061205CF7C036F :10056000120E577C04120E5712218BE4FEFF7C0FF3 :1005700012319AD2A822123085E490FD40F090FF0B :10058000F0E030E408740190FD41F08005E490FD56 :1005900041F07D0A7C001224B1123108221230850C :1005A00090FD41E014700E90FFF0E04410F07C00EC :1005B00012254A801990FD41E0700E90FFF0E05442 :1005C000EFF07C0012254A80057C1712254A123173 :1005D000082290FFF0E054ABF090FFF0E04420F0F0 :1005E000228C378D36787CEDF608ECF6EDFEECFDCE :1005F0007F019000051201EC787AF6787CE6FD0820 :10060000E6FCEDFEECFD7F019000041201EC540FBE :10061000FC7D7A12179D787AE6700DAD3AAE39AF4F :1006200038E412030F7C082290FFF0E054FEF090B3 :10063000FFF0E054FDF0801E787CE6FD08E6FCED5E :10064000FEECFD7F0190000812020E25E0440190AF :10065000FFF3F00206DB787CE6FD08E6FCEDFEEC3D :10066000FD7F0190000612020E54FE90FFF3F08011 :100670002B787CE6FD08E6FCEDFEECFD7F019000AA :100680000812020EFAEB90FFF1F01208CA400DAD0D :100690003AAE39AF38E412030F7C1822787CE6FDBD :1006A00008E6FCEDFEECFD7F0190000812020E90C2 :1006B000FFF1F01208CA400DAD3AAE39AF38E4127E :1006C000030F7C1822787CE6FD08E6FCEDFEECFDCD :1006D0007F0190000612020E440190FFF3F0787D36 :1006E000E62403F618E63400F6787AE624FE50098C :1006F00090FFF0E054FDF0800790FFF0E04402F03E :10070000E490FFF1F0787B7600787AE624FFFCE451 :1007100034FFFD787BE67F00FEECD39EEF6480CD56 :1007200064809D402F1208AF400F787BE6AD3AAE53 :1007300039AF3812030F7C182290FFF2E0FC787C6E :100740008683088682ECF0787B06A3787CA68308F3 :10075000A68280B51208AF400F787BE6AD3AAE397D :10076000AF3812030F7C182290FFF2E0FC787C86F1 :1007700083088682ECF0787AE6AD3AAE39AF38126B :10078000030F7C00228C378D36787CEDF608ECF672 :10079000EDFEECFD7F019000051201EC787BF67810 :1007A0007CE6FD08E6FCEDFEECFD7F019000041206 :1007B00001EC540FFC7D7B12179D787BE670037C67 :1007C000082290FFF0E054FEF090FFF0E054FDF0BE :1007D000801B787CE6FD08E6FCEDFEECFD7F0190D9 :1007E000000812020E25E090FFF3F0805B787CE6B3 :1007F000FD08E6FCEDFEECFD7F0190000612020E06 :1008000054FE90FFF3F08021787CE6FD08E6FCEDD5 :10081000FEECFD7F0190000812020EFAEB90FFF152 :10082000F01208CA40037C1822787CE6FD08E6FC3A :10083000EDFEECFD7F0190000812020E90FFF1F03A :100840001208CA40037C1822787DE6240AF618E6CE :100850003400F6787A7600787BE624FFFCE434FFF7 :10086000FD787AE67F00FEECD39EEF6480CD648055 :100870009D4021787C8683088682E090FFF1F0120B :1008800008CA40037C1822787A06787D06E618703C :10089000010680C390FFF0E04401F0787C86830875 :1008A0008682E090FFF1F01208CA40037C18227C97 :1008B000002290FFF0E020E71290FFF0E030E50921 :1008C00090FFF0E04420F0C32280E7D32290FFF0B5 :1008D000E020E31290FFF0E030E50990FFF0E04403 :1008E00020F0C32280E7D3228C428D417C00ED545E :1008F000F0FDEC7003ED64307005753E0380037508 :100900003E04AC3E120F7C758300858340E5415464 :100910000FF53FE5407004E53F64037035E53E2484 :10092000FD75F00AA4240AF582E434FDF583E03075 :10093000E6051210678019E53E2497F8C654FBF6C9 :1009400078A3E62405F58218E63400F583740FF0E9 :100950008059E5407004E53F64047048E53E24FD9D :1009600075F00AA4240AF582E434FDF583E030E54D :1009700007AC42AD41121C93E54230E21578A7E680 :1009800030E00F78A7E630E109E4FF04FE7C0412B2 :10099000319A78A3E62406F58218E63400F58374CC :1009A0000FF08007E4FC7DEE121C93C2032212308C :1009B00085120F7C78A3E62406F58218E63400F54C :1009C00083E090FD40F078A3E62405F58218E63434 :1009D00000F583E090FD41F0C2037D027C0012240B :1009E000B112310822123085788FECF6EC2497F89A :1009F000E630E1077C1312254A800F90FD41E0FDAF :100A0000788FE6FC1213FD12254A123108221230AB :100A100085788FECF67D00120F0B12254A123108F3 :100A200022123085788FECF6EC2497F8E630E20756 :100A30007C1312254A801B788FE62497F8E620E184 :100A4000077C1212254A800A788FE6FC12142112C4 :100A5000254A12310822123085788FECF6EC249763 :100A6000F8E620E2077C1112254A800A788FE6FC1E :100A700012152212254A12310822123085788FEC85 :100A8000F6120F7C78A3E62409F58218E63400F507 :100A900083E090FD47F078A3E6240AF58218E63457 :100AA00000F583E090FD48F078A3E62403F5821872 :100AB000E63400F583E0FC78A3E62404F58218E62A :100AC0003400F583E0F55C78A3E62402F58218E6AD :100AD0003400F583E0F55D8C5BE4EC33335401784E :100AE0008FF66008E55C30E103788F06788FE6903A :100AF000FD49F078A1E62402F58218E63400F5837A :100B0000E0FDA3E0540CFCED54E68C5FF55EE55B84 :100B100030E503435F01E55C20E50EE55B547F7043 :100B200008E55B20E703435F02E55B30E303435FD7 :100B300010E55B30E203435F20E55B540360034351 :100B40005F40E55B30E103435F80E55B30E40343F6 :100B50005E01E55B30E603435E08E55C20E40EE5FC :100B60005B547F7008E55B20E703435E10535FFB37 :100B7000535EF9AD5EE55F90FD42CDF0A3CDF0E5AB :100B80005D30E30DE55D5430C4540F90FD45F080B9 :100B900005E490FD45F0E55D540390FD44F0E55D0E :100BA0005404C31390FD46F090FD44E0700E7D3D6B :100BB0007EFD7F01740190000912014278A3E624B2 :100BC00008F58218E63400F583E07C00FD78A3E6A2 :100BD0002407F58218E63400F583E07F004CFEEF31 :100BE0004D90FD40F0A3CEF0CEC2037D0A7C0012F2 :100BF00024B112310822123085788FECF678947681 :100C0000010876FD0876407891760C789412046598 :100C10001202147892CBF6CB08F67F00EF24EB405B :100C20001FE4EF25E09034BFFD93CD0493789366E5 :100C30007003ED186670067891760080030F80DCF3 :100C40007890EFF6789412046590000212020E7804 :100C500092CBF6CB08F65404CB54064B6004789143 :100C6000760B7893E630E3137894120465900005D0 :100C70001201EC24FB50047891760D7893E654C071 :100C80007D0064C04D70047891760B7894120465F1 :100C90009000041201EC24FC50047891760F7894B3 :100CA0001204659000061201EC24FD500478917640 :100CB0000E78941204659000091201EC24FD500492 :100CC0007891760A7891E6702A788FE6FC120F7C8C :100CD000789412046578A1E6F978A0E6FA7B0174AD :100CE0000A780012033FC203788FE6FC12112378C2 :100CF00091ECF67891E6FC12254A12310822123066 :100D000085788FECF6120F7C788FE624FD75F00A5B :100D1000A4241CF582E434FDF583AC82AD8378A075 :100D20008683088682ECF9EDFA7B0A78011203A724 :100D3000C203788FE6FC121123123108228D2B8C0E :100D40002AED60407527017529487528FFE52A249A :100D5000FDFCE434FFFDEC7C0325E0CD33CDDCF974 :100D6000FCE5292CF529E5283DF528AD29AE28AF6D :100D700027748090000612031774809000021203FB :100D800017120FD3E52B14603B75270175290875E1 :100D900028FFE52A24FDFCE434FFFDEC7C0325E07C :100DA000CD33CDDCF9FCE5292CF529E5283DF528E6 :100DB000AD29AE28AF27E4900006120317E4900097 :100DC0000212031722123085788FECF6EC2497F884 :100DD000E630E209788FE6FC121522D200788FE621 :100DE000FC120F7C7890760090FD41E030E70478AB :100DF0009076017890E6FD788FE6FC120D3AC203FA :100E0000300007788FE6FC1214217C0012254A126C :100E100031082278A3E62404F58218E63400F5832D :100E2000E04401F078A3E62404F58218E63400F5E6 :100E300083E030E00280ED78A3E6240BF58218E62B :100E40003400F583E054F8F078A3E62402F5821824 :100E5000E63400F583E04480F022C2038C58120F80 :100E60007C78A0868308868279EE7A347B0A7801C2 :100E70001203F5120E10AC587D02120D3AC203ACEB :100E800058121123228D538E528F518C50120F7C89 :100E9000754F0078A3E62405F58218E63400F58343 :100EA000E020E416E54F24F64010054FC2037C18FD :100EB000123248AC50120F7C80D978A3E62405F595 :100EC0008218E63400F583E020E405C2037C0222A8 :100ED00078A3E62405F58218E63400F583E0540F84 :100EE000601678A3E62405F58218E63400F583E061 :100EF000540FF0C2037C012278A28683088682E028 :100F0000AD53AE52AF5112030FC2037C00228D319C :100F10008C30121522E5316020E530B4030C7C01E1 :100F200012247C7C8112247C800FE530B4040A7C7E :100F30000212247C7C8212247CAC30120F7CE531BE :100F4000601A78A48683088682E054E7F0A3A3A3FE :100F5000A3E054E7F0AC307D02120D3A78A086830E :100F600008868279F87A347B0A78011203F5C20385 :100F7000E5302497F8C654FDF6AC30121123228CCC :100F8000263003051231E780F87C0A1230FAD203CA :100F9000E52624FD789DF6700978A476FF0876E0B2 :100FA000800778A476FF0876E2789DE675F010A4B5 :100FB000ADF0FC24A078A3F6ED34FF18F6789DE69A :100FC00075F00AA42408FCE434FDFD78A0EDF608D1 :100FD000ECF61231932278A3E62402F58218E63467 :100FE00000F583E030E72278A3E62402F58218E6D4 :100FF0003400F583E0547FF078A3E62402F58218EC :10100000E63400F583E04480F02278A486830886E5 :1010100082E0547FF0AD83E5822404FCE43D8C82C1 :10102000F583E0547FF078A3E6240BF58218E634CC :1010300000F583E054F8F078A5E62401F58218E67F :101040003400F583E04403F078A5E62405F5821822 :10105000E63400F583E04403F078A3E62405F58246 :1010600018E63400F583740FF02278A4868308868E :1010700082E0543FF0AD83E5822404FCE43D8C82A1 :10108000F583E0543FF0789DE6249EF8E6FC78A5D1 :10109000E62401F58218E63400F583ECF0789DE64D :1010A000249EF8E6FC78A5E62405F58218E63400CF :1010B000F583ECF078A3E6240BF58218E63400F50E :1010C00083E054FB4402F52678A1E62402F5821859 :1010D000E63400F583E030E50343260178A3E624F7 :1010E00005F58218E63400F583E030E003120FD3F3 :1010F000E526FC78A3E6240BF58218E63400F58398 :10110000ECF078A3E62405F58218E63400F5837444 :101110000FF078A48683088682E04480F0A3A3A31E :10112000A3E04480F0228C2A120F7C78A1E62408E8 :10113000F58218E63400F583E0FC78A3E6240AF58E :101140008218E63400F583ECF078A1E62407F582F6 :1011500018E63400F583E0FC78A3E62409F582184C :10116000E63400F583ECF078A08683088682E0FD03 :10117000A3E0FCEDFE78A3E62408F58218E634002F :10118000F583EEF0ECFE78A3E62407F58218E6344A :1011900000F583EEF08C298D28C3EC9402ED9406C3 :1011A000400575277C8033D3E5299481E528940197 :1011B000400575273C8023D3E52994C0E528940099 :1011C00040057527188013D3E5299430E52894004D :1011D000400575270C8003752708AF27E4EF547C82 :1011E0004483FF8F27E527FC78A5E62401F58218C4 :1011F000E63400F583ECF0E527FC78A5E62405F558 :101200008218E63400F583ECF0E527FC789DE624AF :101210009EF8ECF678A3E62402F58218E63400F591 :1012200083E0F52778A1E62402F58218E63400F57C :1012300083A3E030E3175327C778A1E62405F5829E :1012400018E63400F583E09034E993422778A1E66C :101250002402F58218E63400F583E030E7054327E1 :101260004080035327BF5327FB78A1E62406F5826D :1012700018E63400F583E060034327045327FC7825 :10128000A1E62404F58218E63400F583E042274302 :101290002780E527FC78A3E62402F58218E63400CF :1012A000F583ECF078A3E62404F58218E63400F523 :1012B00083E0F52778A1E62402F58218E63400F5EC :1012C00083A3E030E1055327DF800343272078A183 :1012D000E62402F58218E63400F583E030E4055395 :1012E00027EF800343271078A1E62409F58218E64A :1012F0003400F583E0B40203432702E527FC78A31A :10130000E62404F58218E63400F583ECF078A3E6D1 :101310002403F58218E63400F583E0F52778A1E68A :101320002409F58218E63400F583E0700553277F21 :10133000800343278078A1E62402F58218E6340072 :10134000F583A3E030E00543272080035327DF78AF :10135000A1E62402F58218E63400F583E030E305C7 :1013600043274080035327BF78A1E62402F5821863 :10137000E63400F583E030E005432710800353276F :10138000EF78A1E62402F58218E63400F583A3E0A5 :1013900030E40543270880035327F778A1E62402A9 :1013A000F58218E63400F583A3E030E50543270411 :1013B00080035327FB78A1E62402F58218E6340067 :1013C000F583A3E030E60543270180035327FE7829 :1013D000A1E62402F58218E63400F583A3E030E7A5 :1013E0000543270280035327FDE527FC78A3E62465 :1013F00003F58218E63400F583ECF0C2037C00228A :101400008D278C26ED54031460037C1022E52754AD :101410007C24FC40037C0B22E5262497F8C644027A :10142000F67C00228C30120F7CE5302497F8E62001 :10143000E24FAC307D02120D3AE53024FE4428FC28 :1014400078A48683088682ECF0AF83E5822404FECC :10145000E43FFFEC8E828F83F07C038C2CE52CFC28 :1014600078A5E62401F58218E63400F583ECF0E572 :101470002CFC78A5E62405F58218E63400F583EC0B :10148000F0752D01752F48752EFFE53024FDFCE425 :1014900034FFFDEC7C0325E0CD33CDDCF9FCE52FFA :1014A0002CF52FE52E3DF52E78A5E62404F58218BF :1014B000E63400F583E054E7F52CAD2FAE2EAF2DCA :1014C000E4900002120317E49000061203171201C1 :1014D000E630E503432C10E52CFC78A5E62404F562 :1014E0008218E63400F583ECF012106778A3E62446 :1014F00006F58218E63400F583E0C203FCE53024EB :1015000097F8C64404F68C2CE530540FC454F07E92 :1015100000FFEEEF44047D00FFEC4EFCED4FFD12AA :101520001CFE7C00228C2F120F7C12100778A486E0 :1015300083088682E05408F0A3A3A3A3E05408F034 :10154000AC2F7D02120D3AC203E52F2497F8C65442 :10155000FBF67C00221230857890ECF6EC2497F8AC :10156000E630E10A7D007C131224B1123108789034 :10157000E62497F8C64401F67890E6FC120F7C78D2 :1015800090E624FD75F00AA4241CF582E434FDF5F0 :101590008378A0E6FA08E6F97B0A78011203A778B7 :1015A000A0868308868279F87A347B0A7801120350 :1015B000F5120FD3C2037890E6FC121123788FEC5A :1015C000F6EC600A7D007C081224B1123108789094 :1015D000E6FC120F7C78A3E62404F58218E63400BA :1015E000F583E0441054DFFC78A3E62404F5821868 :1015F000E63400F583ECF0788FECF6C2037CC81279 :1016000032487890E6FC120F7C78A3E62404F58239 :1016100018E63400F583E054EFF0C2037CC81232C0 :10162000487890E6FC120F7C78A3E62404F5821833 :10163000E63400F583E04410F0C2037CC81232485F :101640007890E6FC120F7C78A3E62404F58218E675 :101650003400F583E04420F0C2037CF01232487875 :1016600090E6FC120F7C78A3E62405F58218E63498 :1016700000F583E030E415C2037890E644107F0063 :10168000FE7C0712319A12310802174978A3E6242A :1016900004F58218E63400F583E054CFF0C2037CF1 :1016A000C81232487890E6FC120F7C78A3E6240436 :1016B000F58218E63400F583E04430F0C2037CF094 :1016C0001232487890E6FC120F7C78A3E62405F5E8 :1016D0008218E63400F583E030E414C2037890E623 :1016E00044107F00FE7C0712319A123108805D7829 :1016F000A3E62404F58218E63400F583E054EFF005 :1017000078A3E62404F58218E63400F583E054DF7C :10171000F07890E624FD75F00AA4241CF582E434E8 :10172000FDF583AC82AD8378A08683088682ECF9D0 :10173000EDFA7B0A78011203A7C2037890E6FC1247 :1017400011237D007C0B1224B11231082212308546 :1017500090FF91E090FD41F07D027C001224B112D7 :1017600031082212308590FD40E0F4FC90FF91E0BA :101770005CF53390FD41E0FC90FD40E05C4233E5D8 :101780003390FF91F07C0012254A12310822743CFC :1017900090FBE8F0743E90FBE8F0E490FD30F0221E :1017A0008D358C34ECB401028003D340028028B420 :1017B00002028003D34008A835C625E0F68018B49D :1017C00004028003D3400AA835C625E025E0F68050 :1017D00006A83576008000228C3C8D3BEDFEECFDAA :1017E0007F0175600675610090FD3112046E120173 :1017F000E6B480028006D3500302189E90FD311299 :1018000004809000031201EC54F0B430028003D342 :10181000405F90FD3112048090000812020EFAFD24 :10182000EBFE7F0190FD3412046EEECD903502FC8C :10183000E493FF740193FEF9EFFA7B01EAFFE9FEFE :10184000ECC39EED9F4025903504E493FD74019315 :10185000FCEDFEECFD7F01EECDFC90FD36E0D39C6F :1018600090FD35E09D500575608080331219BC8075 :101870002EB460028003D3400BAC3CAD3B12078218 :101880008C60801BB41003B34010C3B42003B3407A :1018900009C3B440028003D340007560818000809A :1018A00075B481028003D3406B90FD3112048090A7 :1018B00000031201EC54F0B430028003D3401D90B9 :1018C000FD3112048090000812020EFAFDEBFE7F3B :1018D0000190FD3712046E1219268036B460028022 :1018E00003D34013753A61E4F539F538AC3CAD3BB0 :1018F0001205DE8C60801BB41003B34010C3B4200B :1019000003B34009C3B440028003D3400075608133 :10191000800080028000E560FC90FD31120480ECC4 :10192000900002120317AC612290FD3112048090E6 :1019300000041201EC600474018001E4A2E0920151 :1019400090FD31120480ED2403FD50010E90FD3412 :1019500012046E90FD311204809000051201ECF526 :10196000619000041201EC540FFC7D6112179DE59B :1019700061700475600822756000787E7600787E5C :10198000E6C39561503890FD371204801201E6FCE1 :1019900090FD34120480EC12030F30010E90FD39DB :1019A000E004F090FD387003E004F0787E0690FDCE :1019B00036E004F090FD357003E004F080C0229022 :1019C000FD32E0FDA3E0FCEDFEECFD7F01ED240A1D :1019D000FD50010E90FD3A12046E90FD311204800C :1019E0009000041201EC540FB401028003D340179D :1019F00090FD3A1204800DED70010E90FD37120437 :101A00006E78827601804EB402028003D340199032 :101A1000FD3A120480ED2402FD50010E90FD3712B4 :101A2000046E78827602802DB404028003D34019BC :101A300090FD3A120480ED2404FD50010E90FD3714 :101A400012046E78827604800CB4
<?php
/**
 * ownCloud - News
 *
 * This file is licensed under the Affero General Public License version 3 or
 * later. See the COPYING file.
 *
 * @author Alessandro Cosentino <cosenal@gmail.com>
 * @author Bernhard Posselt <dev@bernhard-posselt.com>
 * @copyright Alessandro Cosentino 2012
 * @copyright Bernhard Posselt 2012, 2014
 */

namespace OCA\News\Service;

use OCP\IConfig;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Utility\ITimeFactory;

use OCA\News\Db\ItemMapper;
use OCA\News\Db\StatusFlag;
use OCA\News\Db\FeedType;
use OCA\News\Config\Config;


class ItemService extends Service {

    private $statusFlag;
    private $config;
    private $timeFactory;
    private $itemMapper;
    private $systemConfig;

    public function __construct(ItemMapper $itemMapper,
                                StatusFlag $statusFlag,
                                ITimeFactory $timeFactory,
                                Config $config,
                                IConfig $systemConfig){
        parent::__construct($itemMapper);
        $this->statusFlag = $statusFlag;
        $this->config = $config;
        $this->timeFactory = $timeFactory;
        $this->itemMapper = $itemMapper;
        $this->systemConfig = $systemConfig;
    }


    /**
     * Returns all new items
     * @param int $id the id of the feed, 0 for starred or all items
     * @param int $type the type of the feed
     * @param int $updatedSince a timestamp with the last modification date
     * returns only items with a >= modified timestamp
     * @param boolean $showAll if unread items should also be returned
     * @param string $userId the name of the user
     * @return array of items
     */
    public function findAllNew($id, $type, $updatedSince, $showAll, $userId){
        $status = $this->statusFlag->typeToStatus($type, $showAll);

        switch($type){
            case FeedType::FEED:
                return $this->itemMapper->findAllNewFeed(
                    $id, $updatedSince, $status, $userId
                );
            case FeedType::FOLDER:
                return $this->itemMapper->findAllNewFolder(
                    $id, $updatedSince, $status, $userId
                );
            default:
                return $this->itemMapper->findAllNew(
                    $updatedSince, $status, $userId
                );
        }
    }


    /**
     * Returns all items
     * @param int $id the id of the feed, 0 for starred or all items
     * @param int $type the type of the feed
     * @param int $limit how many items should be returned
     * @param int $offset the offset
     * @param boolean $showAll if unread items should also be returned
     * @param boolean $oldestFirst if it should be ordered by oldest first
     * @param string $userId the name of the user
     * @param string[] $search an array of keywords that the result should
     * contain in either the author, title, link or body
     * @return array of items
     */
    public function findAll($id, $type, $limit, $offset, $showAll, $oldestFirst,
                            $userId, $search=[]){
        $status = $this->statusFlag->typeToStatus($type, $showAll);

        switch($type){
            case FeedType::FEED:
                return $this->itemMapper->findAllFeed(
                    $id, $limit, $offset, $status, $oldestFirst, $userId,
                    $search
                );
            case FeedType::FOLDER:
                return $this->itemMapper->findAllFolder(
                    $id, $limit, $offset, $status, $oldestFirst, $userId,
                    $search
                );
            default:
                return $this->itemMapper->findAll(
                    $limit, $offset, $status, $oldestFirst, $userId, $search
                );
        }
    }


    /**
     * Star or unstar an item
     * @param int $feedId the id of the item's feed that should be starred
     * @param string $guidHash the guidHash of the item that should be starred
     * @param boolean $isStarred if true the item will be marked as starred,
     * if false unstar
     * @param string $userId the name of the user for security reasons
     * @throws ServiceNotFoundException if the item does not exist
     */
    public function star($feedId, $guidHash, $isStarred, $userId){
        try {
            $item = $this->itemMapper->findByGuidHash(
                $guidHash, $feedId, $userId
            );

            $item->setLastModified($this->timeFactory->getTime());
            if($isStarred){
                $item->setStarred();
            } else {
                $item->