mirror of
https://github.com/yacy/yacy_search_server.git
synced 2026-10-25 05:54:15 +00:00
updated ranking tables (fresh computation)
git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@8103 6c8d7289-2bf4-0310-a012-ef5d649a1542
This commit is contained in:
1 parent
070d32ae21
commit
bc5df0eef5
11 files changed
+87
-81
No files matched your search
@@ -1 +1 @@
|
||||
3o06fQFARhBYG1fyaaLgIKhaO0510AhYPjMYsX0sAB
|
||||
1ZZwWAumBqYA
|
||||
@@ -1 +1 @@
|
||||
6zDuRYGIdeZYR-J6JRc14c_YpT2NrQy9plPa
|
||||
-6gsqA020wSA1IWRpA2DGiZA3I173D4LHf1A4aCKyCFARhBYIgp3zAKYs_BDKlGntBP4hN7BTWSa6BWOOkgC_aJQZBlqygQCskjqmAyAS1GZ
|
||||
@@ -1 +1 @@
|
||||
-eu5sA-us6-Y0j9n6Q2dc2nY7694GZLEGNQZR473lZWe1RRBYUGRwYaIwR3Aay29rSoTEsB4vVZ-CRyrZU6Z
|
||||
-dsznA0ffeYa0k8HYA1buONZ1hp4CZ1rmZEB2I2Z4a2OMHFD2dS4GC2snssC2xfZlA2yPtnA3_cOCZ3rYBLA43_QFA4DC3rZ4QT2QA4Xr0oT4aOOeC4gQ-UB4kBsyB4soqED4uvaoD4yEsRB569MNB5A85JD5AFAhB5NS-6D5OYk8A5T24mD5THrdA5qgbGB5sF1bD5unnvB6QOSwC6dTQBB6rptXD6usA-C76no0B7ka2oA7t6KsA9P-MCD9W06lD9x1MdAACBIaAAZvWMAB-1LsCB9ysWbBnGOKDCGjOTACbH3hCDpqPaBE4hAfBE73e0AE8wOQAEF18XDEclAMCEx09oBFLJT1AG-9VGbG121OCGKUAiQGYhaABGw3c_YHIYNRDHfJp2aHkNBlaJbhHIAK9ym_CKSZlzBKXICRBKZjSDDKg1NMZKokAECLpLpxCLpgIEbLzLEwAMXbAIDO1venZO9pUMAP4b63APW0DgAPhE6DDPpqN1BRDGZUARSMevBRZLwbDRyBkdQS5cf9YSA1H_DTQhlWCTQjllBTjKy9BU8tUYBUBU-UYUcb1FCUibu4AUjcguAUxQV7BVW4SCZVa3wTZVd39RAW6mcGQWvYdQbX5NQ7CXnME8aXqinsbXyU37DYTrnFCYvFrgBZceQYRZlEtda_5TwUB_9DWtB_BjKnDb5HNeAbI925CbJ8MBDbk0LFBboVvbBc6LB8Dc8kOWBcVIH9BcyK-7Dd3k77De6dtuAebtYjBep8doBfsVc0Ag-r_RBg7iLSDgBdF4ZgH2ToAg_tp9CgmKYUDgrGhFAhL2xDDiW6C7BicZSNDirHC-CjEI-jDjWy2JAkMqVVBkpOOUBkt_iIAl10fQDl1EgfalDSGZClN8sqAleZuuAm5lRIBmRbv6AmcsyJCmmz4-CmqQctCmxKFhAnOxx8Dnmc3wAnvUXNDnx345Bo2GfQCo2uawAo59ENBoTbaJbpV6YOBpaytfDq8ncZDqh9jGYqswa8BqyohEAr5F6PCr8wkPDr9NbuAroYZAYs5cngBsSmyICsX0sABs_VxeDsm2fwDsoevXCt1drJAt3YuIAt5KYbDtzQqwAuC9y_buMQoSAuPaHWSuT9E5BuisYQDvEp4rYvbE4iZvbmk1BverBJBvozSXRvuELQDvwejWAxawNOCxgso4ByKwk0Byr3IcAysR9FBysqjTBz5Lh6BzXCNNA
|
||||
@@ -1 +1 @@
|
||||
0kVGgD2JvFCh7eJMoQ7uXagC8I8z7B9VB_qBFp2fRQGThWkZGUAvOCK0oBfCKB4M3AMZ-kjZNANzdAOObI4BQVXU4BVUOQ5AXuknKQ_cbjnCcRaiLZhzy8YQlzZYMQmtlFPBoDRuDCt343uBtDH4rQvHR65BzntqxZ
|
||||
-9a0tA-Ho8KA-IWRhA-N6LGB-RfRyA-WLVRR-pvIiR-zTGUY015OzA0CVWgA0Eck_A0F5BNA0FS6WD0Gf7WA0KHQrA0PMz3I0XgAcR0c-4sC0svxdA18HEbA19GMfA1AYK5A1GTzRA1WS-FA1uitOA1ygfnA1zncVA245hwA249wFA25q33A26YBgA2I4vyA2ILBAA2NyeoQ2PjZIA2UyolR2XVY8A2qM26A36DOEA3HFtDb3Je4gB3Pc7zR3UPfMA3_mhYA3_sELA3d6cwA3eqjQc3ooEUR3rXPsA3vbbOA3ydd7A41Qv4d44TBEA44yqKR47_4CA4BjcUA4KmySA4OwJZR4SMIEd4hW28D4kfwyA4mEdyA52tZEA58gsDA5DW-mA5PxFkA5QBqrA5RXd5A5SCrfA5Z0gIA5aMo2A5j6xBA5urnTR657elA6Cfy1A6OHmmB6PE77A6nYg1A6r62bR6vzwpR6wSzfA718X6A72gqQR76A2hT78gDIA7P3bNA7QRGAR7VlyiA885vKA8GQxVA8XBdpD8Xy6JA8xeLyA9-C6bZ94Ul4R9Fz0TA9PEwbR9aOzyc9dQuuR9jp3RA9qWyrA9rncTRAeoi-BC7kqvRCY2c1RCmbCgRCv0a1ADUIDrRDdMYvBDqWXjBE1SP3AE7iKlIEF8TAAEr2ZKREx_F6AF0ctZdF43jyRFHzvbRFNgKsRFxvahAG1JUicGAISPAGOsmRRGca52RGnWhFRH6wH8RI2Y5OAIgCE6dIj-97RInSN4ZJa0O_RK0KytRKJNAWAKRMIGRKWoccRLNOmMRLfQpzRM4zGZRMuecrAMy_0nYN-Q06RNVkbvRNxlJVRO6ZOBROFHCGRORipz4Od1hPROra0QROrgT9SOw50sROzLRuRPQNvdRPQr5MDPsK4aYPt81sRQ9SYcRQB6BmRQB6BmdQExs3RQHrJ3RQrPWDYQtDCeRR8gvxRRCyYyRRqwHERSSPtPRSVShmRSz7sxRTE6zHRTNBKMRTm8mkRTtpu-RUcqoyRUiwrFDVHUyHBVnuDNAVnuWKRVv-ziAW87FcRW9-QvRX7t7PAXPZo8RXSojIRXU2jURXmye6AY0HdSZY1b2BRYFYX4RYbg8GRZAumJRZNADHRZhnwNR_6JtuA_HyQ7A_O63wA_i190A_qwbfAa7-5QRaA-43RaNsjxRamVE8Qan3k9RbdvLoBcRr37DcvlccRcziVuRd_BoCRdvZwyReO0LKReWCuUAebXJGaehw1aRfIu9GYfbgqaRgRTGCAgWRHVRgYdleRiUOLbRiW10mRigeRoRjZjG3CjsZXnRk-_N-Rk6Ti9AkCKWxRkOUR0Akjov9Rl9M7WRlYQ2oAllVYHRlmJYLRloeuKRlrVltRoKrPlAoQB1SAoh6foRoo50PRopojSRp3qGLCpAecIRpO1r0RpS-cURpWvK2Ap_C_mRqBK_tAqCqZOdqS9z2RqSdXHRrzrBLDsZgzeRsgaHDQskzspRtDhTjRtNfYbAtom1SSu-3JrAu-yDaRuO0Z4RuYvAtBuoz83Av2DXwbv2wjGAvDPRPAvH2tlAvHn0zAvKwu1AvS_Q7Avd6T7Avh3YPAvrdkKAw-6G-Aw4R7gAwROSXAwUAWtAweQkIAwhhO5AwjJUaAwmtCZRwn6__RwnQlUAwnvgcRwruoLBx0l5FAxOgpUAxWX7FAxZS4zRxkwTIAxsFqaAy3Dbaay4KkrAy4RHURy8dvdRyAYvKAyGUedAzE667AzGc8KRzVcTSRz_2D0Az_OGtAzd_4nRzeudtAzgOyzAzoI1lAzrEL-R
|
||||
@@ -1 +1 @@
|
||||
-zdkYQ0OKpfY2-z1ZR2f69RA2mN2kZ4HxS1Z4Lgm7Z5u5jlY6We1ec72n01Z9OQK7BBpaDGABtrV-BBuJxyQCMw9vBDO0nyYD_VejZE23aKZG1vVGZHbRZ4BI1KmvQJ-NHTaJ2MIHQKFRWjCKUFsnZML8CSZM_eg8BN74LoROmNmeBRV41mRS7m48ZSkGafZTW_ueYUfwsTYUoT96bWZBaHwXOln9QZeGv7Za2JYjZajdW9Yb0C2lBemOouZentyfZg4v9bahdt-iYjAbcHZjysh4ZkJSDWZmOGETBnjLziQo0uHwZrLrVYQrwcs6ZwmKUqDznfufZ
|
||||
-2BjCR-AYJ8A-Bk9qA-EtvBB-FVZSI-FVatD-N-iAA-QE7lA-_3ZSQ-eQ2-S-n1XeA-q-BWR-u5QHZ-x3WOR05FRLA05OvbD06bX5A0DcNCB0DkaaR0E_0WB0OJpFA0ZuhCA0ep93C0h_28B0m4wpB0tDH2B0tkbWC0wjrhZ0xPpzA0x_gfA10Cr9R12PotA16L1-B16bk9A18OU1D18TNMS19lNAB1AJK0D1AeG9C1BHf3A1C4DFA1C63HA1N3o9C1SqZYA1Vha8R1ckjrE1fcu5B1fvWsC1gMFMI1gUpsB1hZ80B1jIZ0Y1kVjxB1lhdwA1qG84R1qIMta2-9xhd2-ctOd21rYgA26ktYC27kLDB28G1yB29IrFR2QrOJA2TJJAA2TULWA2TZDeB2URWyB2Vu36A2YsWnB2ZE4PB2byYnA2dKgUZ2d_UBD2dyBAZ2f69RA2lbW9Y2nwY2A2vjQZY2ylHcZ2zmbqA370X7a38I7rA3ENrRA3K63IA3NV5vD3PFxlB3QobnC3UO7QQ3YK-kB3f1BhA3f6qmA3fNoCC3jiowB3l8MCA3t_BDD3usjIZ3yO3MI4-ypXB43jNbA43w-VA48FGda4ACcrR4BMWOA4BTCnC4GzZsR4IjTGY4MQXTC4Mf08A4R2r7A4UNMUA4XAMyZ4Yd-ZA4aMuuC4ow7XB4puJxB52DOLB55FfYA5AYhcC5AirYB5C8EDA5DEc6A5KFIJR5Krk7S5LNhnB5L_RBQ5MyDZB5WoRyC5XcCUb5_QkUA5cFbCB5cLOOS5e3VWA5poJ5A5r7SBA5ufVkA5y_0YB60dSPY626O_B629p1R65jSUA68uT4C6A8pzB6B24VC6BavVR6FIf-R6FgmjA6GxRIZ6LygEB6O6J5C6T6cRA6We1eQ6Zjq_Z6eRsHZ6egxII6h1VlZ6j0otQ6ja8gC6kMdFI6pvauB6tR4EA6w-jPZ71XaoR7345aB73o6QA76zbRZ77pK3Z79bK2R7AqBMA7JcI8I7JqU-B7PsuoA7aZ0mA7ccW5I7d1niA7dDXbA7euKQA7eu_KZ7i8HTC7lVKfA7llMUZ7pcYpY7qof_Y7siQgA7v6GDR7xKyMA7yf_FB87Q5PA889N-Z8DXemA8H4c1A8NOOfZ8PUPzA8R6E7B8TU-OD8ZxUWR8gpahZ8hROyA8ja9hR8k3hYC8ktcfA8nQgdC8rl6-A8sBbHA8u6qZC8wHi5J92jFbZ95YddA95zDvC96_o_Y9AnpFZ9DCncA9EuLdA9H4R0B9HR7hA9Ih6SA9P4aNZ9UNc1Y9VplOD9l4RTA9qf31A9roQWI9t5VwD9v4ymB9y2HeA9yq3fB9zcYaAA7JIMCABBK7QAKdBqYAT2a-AAUrpcCAX5cVCAg8s6AAmHJZBAuCS_dAzddYDB-w1uSB1WeJBB1okoYB4SySBB7gI6ZBA8F-ABAcuMaBO-vmBBQjeRABRdACYBRtB5CBSdE5CBYokUZBaKbLZBepoAbBk_F7BBnLBeCBshcHCBtrV-BBuSWFAC1HGPCC54OkgCCpfWBCIbTRICRh7naCRlUPZCVms2DCYcgEBCdl3QACrZ40YCyV3OBCyejMAD2TA2BD2jnqID8gCLRDG4CYYDKeuADDPcgoBDbUaxADkNnPTDrt0uRDywdbAE--o0CEEFdcAEGh3sSEOW9CBESSodDEVfGTCEeYNyBEgpsPBEhnrzCEri9JYEwZu_BF2C86ZFEAIlAFUqTIBFWPGbSFf0vdAFkVDnRFlAJkRFqazpbG0mLkAG2N-dDG5h32AGG3rSDGPbBraGQ8fAYGWgW5YG_rTkRG_st_BGm6y3BHClelCHGOTvRHJHzLDHLgWVRHO6iVIHWnZXcHcpCjBHeWDFCHjmbwCHxT8LCHzRRYRI1KmvQILiBkBIP8dnDIUF2CZIVMb8IIWmtlCIZIMJRIeD-FRIefZhCIk-N5ZImMDbBInuPnQIufzPRJ1EDtBJ46JKaJ54RuAJ5cMIZJC3tUIJX5gjIJ_9BFYJdj6sRJwXx1CK39pDAK4NI-aK6DGpdKHdE6RKIWqiLKfB2hTKhoxeJKmYPFBKxNmVBLFZhSCLIu8rBLL5lNBLUSi0CL_CkqRLbEybBLucm-BLxH9TCM2rhNAM5on4YMKLpQDMOJviRMS2RpBMZTsdZMcEksJMzPbQRN-WidAN-YtvSN27ElAN5qfmAN74LodN7zpaBNDU5pDNKI34INPFZJCNPMguANY0akRNgnXCINuD9eBNxE_1BO5ilsAO67evCO9iVOYOGFU0ROLxtgAOS2MvCOeikWROyOPEAOzzVuYP5O95YPHSlDRPMpvhBPPAA8BPReicBPSIu4BPiolYCPlK8nIPqTh4RQ2yf1CQAArFCQAf8oJQCGEtZQTEg9AQX3IgCQa0oQZQee25AQmaFLRQn0cSRQslnsBQvw1eRR-aQYRR3ri7YRIGInDRK2M6YRVZsCBRdf1XBRfig3BRjRSqCRmgCPRRmh27ZRv6u6CSPm6lYSSE9ACSYUcyCS_rpzRSgAMjBSm3ZuASnacDZSroSsASwQUrISyqqQCSzDmpRT69DfRT7XpHCT8_vTZT9Cl5DTDcgVRTWLlVYTk0biITrS-8RTrkNtYTucd3ZTyr1jYUOs2oIUS8lrAUSL5ZSUWWgEAUZEUOYUZwraAUiqyBCUo638CUovTCBV0V76SV3XFxRV9C69ZV9iHQBVCHIpdVELZtZVKF1cAVLdB6ZVMBoNRVOzZ7YVfymcZVhh13DVmgIjBVuXEdDVxvFVbVz4CgAW7aI8CWUoQiBWUxgtIWb3NobWgT7dAWraqVYWrokMYWtBD4RWv_STCX043GCXDZD_AXEJixDXEifrCXO34qIXZd52SXZr8LDXaKp4BXfyuJCXnON9SY1abVIY33BEYY4UsDYY5LNFCYEEXgaYHKFkYYMq9yBYRNUwYYU8_LAYWeCUBYYxkwZYlK6sZYpSH6RYqz3VAYy3kgBZFQmPAZHt6QAZJ0N5AZTTjHAZj_x2BZvD8YAZvs-zQZz4aRS_3R1gB_4dFuR_8lFrC_AhNkA_D_MYC_FKu0A_SgG3D_U19HI_V74mB_WzWoZ_XVmOA_Z-3lY_b7LAR_dLaoR_gopqD_lGoTC_mHYXC_mvFMB_s5L6E_xSu6R_yqe3aa0LVbBa2cy_CaEgwRYaEhOhSaN9AHBaTR9tRacRx8QaeFNqAagm8-Uahzt4BaxexHBaycpACazD_3Ab-bfDDbEYFuBbL2OrAbPLPEAbSvY3AbiVlGCbivsNDblGR4Bbn379IbpZLbZc0k1zCc1XP9Zc6pVPAcBQ1dDcDMNQAcEBdTEcGL1XBcIWfFAcK1uDBcLfICRcOoQBAcn6_QRcoUJWIcrWs5QcySY_Cd-mwhBd02brBd3R8qad5RMrDdGUlwZdT_azCdX-xrBdgWxsSdhJ82YdkAl3RdlnJbbdpWSKSdqm-LBdtJp7CeEtZ4AeFlZeZeGSYwIeJ_HTSeJi7RYeSIVcAeYa73YedOYVGekTWAAem11KJetVkPYetbJNDeu1qiAexflwYf0xoKAf4e1FZf7dQmBfAqywafIZWTIfY2FYIflXllYfp2YhYfrg-UBfrsUyAfw0U-Cg580FYg9YOSYgAjFKZgB04RAgO-grBgXneUAgbON0IgiJbgYh-i_9Ah0SWuCh3qXqAhBdQZChD-JUChaGuNBhbSIQZhbi5DChdi6qChi41DQhobZ4Zhtkv1Ci-sbhSiKcG4BiPfOcRiVVjpAi_vTJBig1sACiorYuZiuWF2AivDjjBj0E73Cj5C3eBjC_1xIjELt7BjGPA0BjIFVZBjNaDdZjOW8RajPtgtDjUJHbAjZ-TwYj_7e_QjfgJGBjkOuTAjm-nwDk0cMSBkPoEtAkSWYjDkTg9qYkdQJ_AkhxgqYkiq0oBkjnouCkkSMFQklHgDRkmTQHQlAXGrBlDk6WRlSO2jClU09PYlXiEMAlXymqCl_HUXAl_X9bYle8v0BlilwxCllfCiIloimVDlpPUyAltxReDm0LAqJm6MA9Cm8XOYbmFBwaZmJf-fBmL9Z6YmNBmESmPLrHRmTr46BmWgdIRm_j_hZmfiJoAmp08hDmqjrOSmwpSqZn15L1Bn1dQvDnA7g2BnHs82AnK73-AnZUlEAnfO5nBnfdjAZnff__Infm2SQnh7HWBnjzmiAnoMGBBnt83bInvWfpZnyWrZDnyhe3Ro0twbCo4WxRYoAxMAYoEEGXYoT1O7BoTahyAoZY0GBoZcP_Ao_hnAAocBUmCon_HZBosG4TZou2DIBoz_P2Dp0YnNEp593wQp9quKYpDd5dYpHl7mCpMgLrYpSpn-Cpdv5xZphLcfSpi1juJpiBfEYpj8tNZpohGqCprG8RBprp-BYq5b1kBqDNrqBqHhQKQqK7Z8BqLeKaBqPPIAYqaok-RqcD_tCqchcUAqm5GyCqwjArBqxHq5Yqy5M7CqyRW-Ar9DsxArB1IFYrJwhzTrLvnMIrQJ8EBrWtZIBrZ6PnQrzKl4Ys6w38Bs7dp3AsGfUiRsO246CsOt7KIsRSI2CseGfkAsf1G1csg12lEslxRJBst5uMSswvhaBsy28sYt18tVRtEK9fZtEgwJBtEk3PQtFdwdAtKZb-RtKc3eCtPXbHItTNO-AtliFeDtrSegCtuitFYtwAmoAu1-dSMu3IDFAu4aNgDuGuf2ZuPjvbAuTb6iBuVazYCuY1J8YubHdEYugOyBAukxZsAuoJDZAuuJO9BuuintGuySTLbv0H7-Av2EOnAv5qA3Av9AYKAvAdbkCvBvt_bvDDM_AvN21lCvPsFAAvROP4AvW5x3DvYukTAvb0p1AvdU1RAvddxYRvgvdMAvh-GGZvhpUTRvnnuiEvqI00CvqqlQRvsy9fDvt43VDvvX6IAvvhJbBw35rIAwC-UYCwD0cSAwEKlNBwL35_AwQKDMAwRVnMZwLine truncated
|
||||
@@ -1 +1 @@
|
||||
-1vdSZ0PkhmZ14lM7A14txtZ1jiFYZ2KnIvZ2L_LrQ2RaIbC2hHGKA30ySMZ3A0b5Z3Sm98Z3Za7lZ3Zk7xZ4U_cYZ5-367Z5BoAKZ5SkfWZ62F06Z6FHUZZ6YWXFZ6_oAdZ7A6oSZ7IRQeZ81ovzZ870GoZ8GClMZ8JGh6Z9CiSoZA9XKaZAA63tZB37ThZBKiAiZBifmaZBkYrFZBlVrFZC04ePZC0uKCZCF4MGZDSZALZDZKM4ZDlds8ZDqwm-ZEci94ZEdgP_ZFD0dhZFQu-QZFS5JGBFnxjsZGQKjCZGnGZtZHSc3AZHYpriZIdTdFZIoWbPZJmrdwZK6DGpRKgs2_ZLd0MIZLnQYQZLst1nZN9PI9ZNDU5pDNpPabZNsAD9ZO7kWHZOlFwxZOuvN5ZOxxVxZRCEM3ZSeUaQZSnlSAZT8YOGZUtKtDZVLdB6ZVshIBZWHsfeZX0kbmZXD4kyZXLn8CZXMP7VZXdUHRZYEPqwZYtOHmZZ9cQIZZgTUHZZsoyqZ_-ccaY_0H5iZ_ZZ6OZa2OMnZaT96YZb27v9ZbeQniBbhNpdYbx2jdZc3NMKYc7jf6ZcaaKuZccRcMZdLyvaZdcBLHZebvbiZeqmtFZfDvUGZfE4WvYfsn-cZfvs7XZg62vvCgFJKFZh6G2zZhS2ttZhbdvpZiRXe-ZjRSmoZj_IQ2Ylu2bWZm3dYGZmElKYZmM6YNZmbWzcZmgRTaZmvzlUZmzlWPZnBiefZnYnh2ZoHm34AonWd5ZoypH2Zp38AHZpTxZWZq2NP4ZqDW-3Zqj0I5ZqrHwAZrUcoXZruTLTZrz6dhZsG_yaZsgPbDZt7crLZu9V_xZux5JzZv3RORZvlSynZwdeKDZwoOZrZwoRUdZwywCwZxeccxZz7qP-Zz9KRfZzqLzQZzvFcpZ
|
||||
--WIOY--lD_Y--poGB--zyYY-13rdZ-1KYzY-1tNAb-1wxcA-2HRaD-3JxqY-3PC6Q-5J3lB-5MzSf-61KSB-6F3xQ-7M1yB-7e5RA-7u1oQ-8n8gY-BFENC-BodLD-Cg73A-CqEpa-D1u7A-D3X3I-DRjFC-E07jQ-EAGXC-EiRZC-G1JdB-Hb3wY-IQdoS-JjUfC-KFaWB-LFFXS-LJCsQ-OXEmD-PpN0D-REbQb-SBGpZ-Sq-FA-SwtOD-T5LJZ-TZOJB-Uw7aB-UwPjY-YjbIA-ZFs8A-ZyuPS-_aaCA-_gwCB-_wvgC-aThua-acKeB-at10C-b9RtA-bWPCA-bae4C-c_jaC-fiDxC-fk94C-flJcB-gsMwA-h0IHe-h9RAY-j4IFY-j58lS-jNVbZ-jynyA-ny6RA-ov--Q-pgtQA-q6AwY-rAGyB-rBQla-rMKCA-st0XB-swlZS-voYRC-wsp3B-x5zlB-xVsHY-xy9OC-yJi6B-zioOY00PLMZ00hM0Z0118K501dxic01kFgZ01y7yC021K9Y02ElbB02Mg9b04srTY05H3GY05L18A05vkHA062JXA064YVQ09vQNS0ABQ9S0BY03b0BuhqA0CV1AA0CYBpY0DQ2Pw0EGC2c0F1WPR0GTiHS0HAB5Q0HkkKB0ITriB0K7XpY0KJe8R0LJ8JB0LkQrZ0M4BQB0MHXsQ0MnhHS0MwSSB0NikoS0Nn8yB0No0HR0OHXRZ0OYvJZ0PCOOY0Pc84B0PgGBZ0PnfeC0Q14XY0QuOQI0Qu_lw0SNKlQ0ST1dB0UIV0b0Vo4fA0Vy0kB0WNk7B0YrK1B0ZvGOA0ay8CY0bCXGB0byNEA0cPiBD0choNC0dybOZ0eFsPD0gDvKb0gvRrB0h-_lB0isgQY0j1ypb0jUfbC0jxZBA0k_JAA0ktlHA0lmQsS0lmQuZ0ltqjY0mkYDC0mujLT0nAgFA0nVuOC0ni83B0o83GB0olFDc0pWHBD0qHkOZ0rMtTC0rbkya0s5cub0sJIzZ0sVMeR0tFifA0tbBUY0v2_6Y0vPN_a0wG5BY0w__jw0zK0rA0zXX1C0zqbcA1-1vCZ1-IHwR10RqzS10onrY11UyRS12jBfB13ADkA14FTqB15HgHa15iRLA16669Y17UqXC18QLSD1ClOGZ1DnDbY1ErK7A1G6gka1GNpIZ1H-utB1HF1yC1IDUrC1JI0FB1Jt1ac1K7dpC1KWa9Y1KfvRB1Mx3eY1Ng6WB1O4EbB1PhLrB1PzkjS1Q-AaA1SJsyB1SmZQB1TJ1EC1VgDAB1WPVFZ1WUexB1W_3ZB1XUPcQ1Xsyqa1Zn0WY1aHDgY1aaF0A1bIEWS1bfKfA1bjrXc1bnhQC1dhisZ1dri9B1eE4pZ1eJ3Qa1fiThC1gtoHZ1gw6iB1h6hsA1hPHoa1hslyS1inEVY1ir1oC1jzjIB1k1tIZ1lcjGB1lm7MB1mQS1B1mj-dZ1nJndZ1naS6b1nnWzY1opjIA1pT_jR1qMkEZ1qz5MS1sgx5D1sj0YB1tl4uc1tyrXY1uF9aB1utAAA1v4omZ1waKmA1wblUC1x83lc1yK2OC1y_q0a1zrNvC2-fs-Y21ea-Z22ExVA22sv9I22vUFZ24FpFB25INcA25gfLR25q5yA26-seY27K4va27bw6B27dzZC28IFtD28VaUD29An5Y2A0O4Z2A40XY2AK0XY2AqHnY2AzOWA2B19FB2BJDXS2BxdcR2ByT7Z2CxpoC2EGA_b2E_sGD2G3AAA2GWwyB2JIglQ2KJyQb2KWETC2MPI4Z2Ms4IA2NECdB2NoYWY2OdxOC2OlqXC2PjeCB2QQGtZ2QbUKE2QwBGB2R4FKb2TAAGA2Ty1BB2VHRuA2Vcr4D2YapxZ2Zuq9Y2c4M2Y2cWLZB2cg_LC2cgeqS2dJvZR2dcmmB2eDTwD2eqbGS2gNLmB2hvMmA2j8Zgc2jOX1D2jazcQ2kDjkC2lefQS2m0uFD2mBBLY2ml-vD2o-nfC2og6CY2p_2sI2qNBED2qPwgB2qlSEY2r7aRD2sXzXD2uYHRY2ueHsa2umPKY2w2E5C2w4UYY2xOlYQ2xpBzC2yFqQZ2yi_qA2zf8oB3-WzNY3-zXlB302cNB30Bb7Y31-PmC315gAB31Ghyc31aR3Q33Iszb33l7wD34SHTY34UpAY34dC1C34iejB34kX2C35GWYY35NkMY35g-GC365aBC37ar8B385LWZ38obLB38rq7B395zlx39gbhD39us9Z39xBqB3DsJSA3Eh46B3ElqeA3FHdDZ3FhLTY3I6I1S3IQqmZ3Il16Y3J1gZR3JZbNB3JhOEY3K-43Z3KY9SB3Ldu-B3MODgA3MotFZ3MxnaA3N8BkR3NEM3Y3Nik7C3OMyfB3OmjpC3OobPS3OvAjA3P3fjQ3PXjIA3QDJ-A3QGUUY3R9oHA3RMEzA3RT7-B3RWsFC3Rri9S3SXCyB3SelOY3TjeXY3TyOuA3WKrII3WbJeC3ZRDpB3ZvZcY3a2azZ3a6UNR3aVI2B3c9QSY3dHa6C3f3GzA3fRa8Y3fcEcZ3fu46I3fxZkC3h9r1A3i4BBD3icJkS3kQOCB3lf1UB3mK9KZ3nMXSA3pthVA3sUnOB3symzC3uVNwY3uXInY3um8FB3ussMZ3wqb9B3xhM-B3xsAJA3xyrGR3yZP0A4-PshQ40KjHS40b7WA41jo9b41mhSc43-KnY43e2-C466YYI496XxA49TpoZ49V5pD49fLBZ49jD6a4A8o-g4AqswI4B5gBB4BfJaY4BvgaC4CXEuZ4Cl1Ya4EnpGa4EschA4GGfDR4GqJSY4GtrnY4JHpnA4K0FCZ4KVCiC4KbbrB4M5CwA4MRwmY4N5XLC4N7Y9Y4NXz2C4NpZII4O9kKA4PAlRZ4PwzVS4QG-_b4RWLTA4S-mbZ4S3r1Y4S4EwY4TCxrC4TGQub4UgHFA4V1WPA4VloBB4Vy4_B4W9MbC4WO02Y4WcqbY4Z0dLC4Z6V-A4ZJC_A4ZfzRC4_Hv6A4adHnC4ePYoB4eTRLA4faUPA4ggT1A4gqADA4hA61C4hFT5d4hNvpY4kQdFQ4kQytY4lCNoD4lQKjY4m5A0w4mBQmZ4mj-SY4neWzQ4ouPlS4q9uOY4rBlaA4rFu0Q4s60sD4sJSEd4t7VdI4tFLJS4tHT1C4u1REY4uIBwB4uX3FA4vfovC4wcppD4xEEJZ4yCZvY4yoDjS4z8IYB4zuffB5-6bHC5-71KB50GZ_A50UvQS50Va-B50nEwA50uanc52M26Y52mqFA53WTbZ53tj2A54T67c56fGvZ57P_wC57n0sA58cMDI59W4VA59x9IA5AMy8B5AbeCY5AsW0C5CBuZb5CX7GZ5DvQ_B5EozXC5F9APB5FqCcD5G8Gqa5G8bvB5Gj8GC5GkJ1S5GquPS5HPq1B5Htqkb5HzLQC5I5FSB5JWzNY5JuTfQ5JwHLZ5K1qzC5L_aFA5LwFKS5MkiDb5MqJlR5MvavB5NV3HD5NVxLA5P8-PY5PXXZS5Py6hY5QvdEY5R1BQB5Reu3C5RsWAT5S0VfI5SuOyB5TXAPY5TyscB5UMQEA5Utssb5Uwm1B5VIWdA5VfYBB5VlY6a5VvVHA5YDRZQ5ZYENC5ZzmNB5atBTQ5cfbVQ5cj5nA5dt5CD5ezkrA5fLHaS5gDfcB5gdxOA5gkM2S5hRENB5iFd6T5iyFlQ5jycTC5k18hA5kzegB5mrFlB5nE9DA5o3U2C5ofQWD5oh3qA5qNyFD5r4H0C5tgwpB5wANFS5wXLF45x-mXY5xU6JB5zSjpZ6-B0xC6-Cl3Y6-TLTC60R7-E60f5fA60znPQ61bTVD6235RC63xvrB64NRuB64Qt0b65JDxS661YlY66HKnB67lzfC67uLNC682EuZ68n-MZ69PymB69T2xY69iQCB6ALkFC6AOvFZ6A_LIB6AjfRA6BFpoY6BiGiY6Boi1A6ChuyB6DaDmS6DeXzD6EB3iA6EacrA6Fs-vY6GNcsI6HY9cA6IISGB6IrTrD6J8ppC6JOnTR6JQFMC6JxBFB6MWpEA6NGqYZ6NUGhB6NwsKD6O4CZD6QsLmA6ROOfA6R_0ZA6RyydC6UZdoB6Uc33B6WLNwY6WoOEA6XLQ4A6XaElB6Xy0PB6YJTxa6YjTjC6ZBRRD6ZW1OB6ZjytB6_1aTC6_FYJA6_eApY6_nQDS6_onzC6a4LQY6a8PgB6b6u0Y6bJpxC6cOsDY6eEmsa6g-sEY6g5GMY6gYagD6h-kSZ6hgVHB6iH8zR6k8k6A6kR_AQ6lm4qK6m5I9B6mTbpA6meyva6nH2gY6oRmAS6p5qbe6qOd3B6qYbx46qzc_A6r4oqb6rAuDY6rqRXB6swQEC6t4lMD6tiRjA6tka5C6u1j6S6uJsmZ6wQpiD6wVG6A7-A6Na7-IEMA7-g5Ac7-os6Q70vaTY71MvUQ71hM3B72LgRQ73VNJb73zPKY74TLZC74jQ8b74yX2Y74zR4A7555CC75IL_B76QeTY76mnSY78-fWZ78B-aA79ICAQ79n2FA7BRTTY7D8nrZ7DlpVD7EdzhB7Ef4BB7Ej0KY7FCO0A7G06mB7Gy9NZ7HFYPQ7IxZqB7JTCUA7JTrzY7JrBOZ7Lu-yD7MSZFA7MUkEC7MVIVA7MePkA7N8NdB7OQ64Y7OaqER7PQnHD7PgFnC7QBuPD7RNeOB7S2PiY7S4RtA7SGqhY7Vb9sZ7WrEAa7XCk-B7YjlpB7ZFHbD7Zg6fC7ZgWOT7ZtfeA7_H2nB7_XiSB7a2x3A7bfD2a7bq9hZ7c4POB7cm6-C7d8LEY7dLTUB7f9DRB7fDYdQ7fU4jA7geQkD7h_5fY7hlRVb7jqfQb7oTd7Y7omMNC7pA6kC7pQEvQ7qe12A7qwjtY7rEA2Q7roXSY7sY8wD7sndPZ7tZE1A7ucOLB7ui0yC7wD2xC7Line truncated
|
||||
@@ -1 +1 @@
|
||||
-C8zZZ-cFhMa-cQgmY025lJB0DeYkY0Gl8_b0YICIT0wjrhZ10smhD18tSxY1D3PZY1OkqFY1_5NCA1jKXmb1mqm2Q2JB7pB2KuKbY2TGZta2qMf8Z2xALuR35BGJD377elZ3FK62Y3en7ER3wa4tZ4-I26B43jNbA4Mf08A4P6BGa4qRvyY5MwvvY5Odk-A5mDxjY6EcYMQ6WLNwY6Zjq_Z6w-jPZ7M5Q_Y7P_FVZ7U8U5Y7fVQVZ7vqN2Y8P_n_Z8PohiR8jMDUA8weXlQ9BdiQa9O4bwY9dCeKYA-5XtYA1eVuQAKdBqYB12q8AB3lW-BBJCalQBepoAbBofwvTBpfI4YBuTocZC2Dh1YC5ur4YCJtDAwCV-hfACWVyKYDG4CYYDGpsgYDQDH7RDsTeBCEJBRLTEKZPFZF8Er6QFEA5DYFHzvFDFwk7WYGRkjcQHClelCHD7IzYHGGtFQHTl_RYIajglTJO8tsAJVUbMEJhSzRZKg5NYYKutZJBL46LaRLLgucYLUdD2YLdbNDQLtwPoFLx-gwZM-O_RYMg3qPAMglEXYN0c5OQNKha_wNNJmQaNYRbJaNuSnRaNv0l-BNxSecZNxW2LYO3BufYOPy-hZOvfQJAP-KY1BPB5orbPO2zPYPUNI0bPXXdfYQR0v6SQiQeWZQlvOZbR-TSGYR-lRDbRiMorARrmcOZRz-XibS2B8BASS97lZS_28qYSyNqrSTXJdkCU35KZYUe_cbbUoRjPQUvU0vbUve2xYV-9-xbV2ljYYVDDAWbVM7JlQVQOTyYVfVzqAVu73jYVwEWHYVz4CgAW-UgPCXNrEHYXaKp4BY2WIZaYAWYRYYDzNVYYEbenRYJOGGaYYxkwZZDU5mQZTTjHAZTdwQYZfc2uY_Ady8S_DkAWY_IMKJQ_wm5hZa-iEIZa0fuiYaRrM-Qa_vdcZb5Ss2ZbE_pxAbSVgQYbbJEKQbiNwKabpZLbZcMZKxBcO9KqAciNeCCcqSTpYe7WbJYeHYHCYePjf0aeZcX0Dem11KJfDkoHYfHXctZfI6H8AfK87rYfRRpfBfV3hwYfXgi4bflxE7Ag-pH_bgDUjoagSiGJAg_muSYgsep5YhCHYEYhN7F4YhOCD2YhQGjTAhlcx7Ai5XybRi_vTJBisJh8YiyxfjYj1OsnAj1aUqZj3tU7bjNDWYAjNaDdZjm-nwDl6RUdalP6BDYlh3FDZm-gzVYmIBpyYmIlGGQmKEYKBmNj-7BmSJWaamgDN6YnaW5TAniXO8YnvQ1OEo7-bOYoFdecQoZY0GBp6Y3WApCpJqapQ0RNYpg1Jmapr9OiZpu7MyYpyCijYqloz8BqoluyQqvk-qYrNbLYYrUxp3Yr_5Q2RrkbkiYrnLgvYsHDg_Zt57epYtAky2Atd5RZYtlQ_6AtrcLaQu5E31YuZDVfYuZJWjYuohsHQur_79AvGPH4YvM_P5SvM_yLCvgEkKZvmOqeYvqon0Ax1LuVBxLddLJxQ7ESAxhUzNZxoEBOQy2pHpQy8p7nCyRH6hZyWVoHYyxHbYEyzdonBz3oGHZzWXuJY
|
||||
---2CY--4ZRB--FgoC--Ip9B--JJ0B--_ziB--lx7Q--mycS--sdNY-090aA-0AY_Y-0gAzQ-0ix9A-0s22a-10mgC-115CQ-1D7pY-1I5HZ-1S7EZ-1WYsD-1YMbY-1ZygB-1__dA-22uga-2mpVC-37GRB-39SiD-3LHxA-3P4RY-3Q_4D-3c1rb-3cjUB-3fK1B-3oeCS-3p6qA-3pEuY-4wCfY-4wPgY-57GZQ-5GX7T-5aTrZ-5bIrQ-5eRVY-681Ua-6AqYA-6Y6_B-6ZZaY-6ooUC-6vSfZ-7Fi8S-7U0sb-7YKTa-88fOD-8J53f-8JnLZ-8O7uf-8YVxb-8dZuY-9-5-B-99FPY-9eq5a-9k5-A-9rS5B-9wWYD-AJnVY-AURsC-AXSuR-AZOSY-AcSnC-AeZfI-Aud9Z-Azl8Y-B51PY-BG7eT-BKaXC-BMdWZ-BTTmd-BcN5a-C0NNA-CEeGA-CLItZ-CPfsA-DY2OY-DaIIY-Du2_Y-E-GVR-EHSUY-ETRnY-E_eJB-EpBGD-EyCDA-Eyk9Y-F-rIB-F2Z4Z-F5TaQ-F6q5Y-FP7fY-Fi6eB-FjnUY-G55fI-G9pea-GKTGA-GWiRA-GYxfR-GbpEZ-GzscD-HDhTQ-HZY1B-I944S-IIdhY-IJNma-IWRSb-IsDcY-IyTFR-JC9VZ-JG2qD-JIhWY-JbDPY-JclrC-Jk3eZ-JnyuQ-JrOLa-KBP0Y-KCFRA-KJkyQ-KN1md-KdMKY-KtcGB-L1c2A-L6TVQ-L8uXQ-LCrVB-LGleB-LJ2hB-LWxIY-LZo5Y-LpS6C-LvJAb-M0AzB-M3NmY-MfT8B-Mfg8B-Mo6XY-MuGUY-N6hzB-NNbrY-NpphY-NtvrC-O2BoD-O6ZBB-O7fFY-OD2aY-OMYmB-OQsLI-OQztB-OXJMZ-OY4OY-OYYhR-Oj3JQ-OpJLB-P-ByB-P7u8B-PDsYA-PYx0d-Pv89a-Q62jC-QWTwY-QvYdY-QzKjB-R52xY-RKYWS-RXJeY-RnOmA-S6HvA-SLSEE-SQoFS-Sch2Q-St1mb-St34Y-SzYLY-T-Oub-TEU4A-TFA3Y-TME1a-TXuTB-Ti62B-Tk_1A-Tq-6b-TqNVb-TsgAB-UYrnA-UdwvB-V33ga-V8uiS-VaJzb-VcjXR-VcmAA-VrANZ-VuC6Y-VwPYD-Vyi3B-W-FsY-WEaLB-WJaUb-WTO0Y-WXbcY-WaeGY-Wc3KB-Wh9OY-Wi3qA-WvZsA-XE65Y-XP7zA-XUFbA-XaETQ-Xes6Y-XgdPB-XycRI-YE9QC-YGdQY-YYhIC-YeEmQ-YfkvS-YgwBY-YzCRY-ZqwmB-ZxfIC-_0DYC-_64VY-_m-dA-_n_Zb-_sLhY-_vmTY-a5t6b-aDkMZ-aIBEY-aPakA-arvdS-b6rIY-b7FjY-bAkMA-bJxtS-bOkoA-bVS_Z-b_POY-bfLHY-bfxEY-bwcgZ-c7_-Y-cGbkS-cN7qB-cPsRx-cfNtB-dBurd-dME-Y-dOdLB-dZheB-dnffY-dpU2B-eBH1B-eJN-C-eNo2R-eYe-D-eb5_Y-enRXY-f-axa-f9qVB-fGVHB-fPJRa-fekCa-fgcfA-fiaXa-fmv5B-fxqLZ-fyGjA-g-_CB-gaGFZ-gnYSY-gzRnA-hFIhT-hW1PB-h_Fbc-hhl5A-hmxVA-hsk0A-i053Z-i9_zR-iIC_Q-iPhwC-j5hKC-jFi5Y-jKAPC-jOC3A-jP9PY-jcyMS-jheiY-jhtqA-kfmtY-ktQ35-l7ZUY-lJ09A-lSczA-lTzuA-lXwgJ-l_B-Z-laugB-lge0Z-m0zJI-m12vZ-m6-VY-m6APB-m7WZY-mCJ7Y-mSCpB-meEjS-mm7SA-nBabd-nTZFA-nZA2B-nk7PB-nloKA-nsRgY-oBeZA-oUPdZ-ofqhY-onMyQ-oyZoQ-ozzDY-p5qIQ-pC91Z-pF-wY-pawLR-pjJdB-ppHBD-pph7A-pyR2Y-qD_SD-qKgdb-qb8JA-qjqcC-ql-IB-r7RIC-rGrvw-rV9FB-sC2cb-sDlPa-sJnKA-srzWd-swZ-Y-szDXS-t8ebI-tKJ6A-tL74C-tLx-Y-tXMyb-tcaeY-tg6SA-u9JBb-uF_EC-uZw6C-ugikB-ujRJY-vGOEM-vNdlB-vOkqS-vZH2d-vcDnD-vvMPY-w-BtC-wANdA-wJ4mD-wLmwB-wQekY-wTFcZ-weq7Q-xC3MC-xKkWA-xSsdY-xX3ba-xX6XZ-y-EjY-y1hsC-y49eY-yHywd-yTS2A-yeMZ--yl-dA-ysyKQ-z5Pxa-zLXOY-zWb2C-zX0pA-zbOOa-zrDhY-ztKxA-ztLPA-zwEFY0--EoY0-2YeY0-8ROY0-hlSY0-kTrI0-ow8Y0-w0RS00Im-Z00cbPZ00iHpZ00q9BB017G2S01MhDB01Q-xY01b7HY01i8bI01zjYB025lJB02D66Y02DYAA02Fg_A02LH0C02OCoQ02PIhZ02YewA02tnDD03-D2A030hzb0361SA03IBtA03Va4a03WpvY03b0US03blrA03c2_a03qeLg044sIB04HkAI04a7CS04fiWD04mjqC055CWA05KShb05VUbZ05gllM05oZVQ065cYR06DG9R06DbCD06LnpA06bcmD06xM3e07-vZB077QCB078LNZ07H0LA07Jo5Y07P_sA07_X4B07iaQY07kvpA07nQvZ0897PA08AcJb08KMeA08n3xY091LwQ09L_pD09UDBZ09eJAB09r0yB0AGgtD0AT1ED0AVoyA0AdHwD0AktPA0B2k0Q0B_pVB0Bdi2Y0BusFZ0COyUa0CRYeC0CYlcZ0CjDcD0CyH_a0DRNWZ0DVaHY0DXlgQ0DiMKQ0E2DFY0E9B1Y0EGEED0EKw1Y0EO2oA0ES5DQ0EZLJA0EcEeM0FB9nb0FGatC0FJ05R0FQkKM0FjkjA0FxZ7Y0G6k0Y0G6wFB0GYT8B0GZ9_Q0Gc0dB0Gd8BZ0GkS3b0H0XRB0H16SY0HJd4Z0HQpVA0Hhq_a0HmMVI0HpTPB0HwQ1A0I4gpB0I5PTA0IAWXA0IDNXb0IHSXR0ITvUY0IZ3DB0IjieY0J9TVI0JGJxZ0JJqgZ0JJsZY0JOWrB0JXPVC0J_q7Y0Jhc7Q0JqOeD0K0RZZ0K9V_Z0KLPjR0KYjnC0KiIMa0L6L6Z0LC7YY0LW9hD0LbHJB0Lv98A0LweKA0M1XOI0M2iqY0M3ioA0MFQpQ0MM9kB0MdVRY0Mi9PY0Ms-DA0Mx0GD0MyXxZ0N4y-D0N6xqY0NIUqN0NaxIb0NfZgw0Nk-UB0Nv5yR0O-o6A0O4ASY0OPRkA0Ob3iA0OrmVA0Owv5Y0P9A2S0PPqMY0PTaYA0Pc7cb0PmWgY0PzOSa0Q0N-Y0Q97cY0QF6-Y0QS71A0QThAb0QXH-A0QwHgC0Qzv0C0RDRFA0RLFGD0Ru6UB0SGr6C0SOvbD0SRRmZ0SUQvY0SZFRY0SjhXY0SmXSD0Sw1UB0T7HgY0TRESd0TTssA0TZ3iT0TnwaB0TpFia0U0d5d0U52PQ0UT-xZ0UaiSb0UawPZ0UjFQA0Uk68B0UoUhZ0UqCwD0UweLZ0VCs6T0VDWLC0VWESZ0VoewB0W7tQC0WESjY0WNwZY0WlcnY0WnigB0X8buA0XJsLa0XKaXY0XRfQY0XRmYB0XS2ia0XlKBQ0XsCAa0XzAXA0YEOdD0YJ87d0YKLYB0Yf2KA0YgMDY0YlvFC0Z2lEJ0Z45bY0Z4DJA0Z5D5J0Z7E8B0ZK0Lb0ZUi_Z0ZsSFY0ZuKbB0Zx_yY0_1voY0_BEKA0_FTKc0_P2mR0_Ro_D0_tlZS0_xyHI0a06OB0afZpZ0aj75Y0amWAC0az93a0bKIDD0bZW1B0bky8Z0cdUAY0cdX_B0dRQtZ0dSC8Y0dvFzZ0eQ_7C0eRE9B0eYHMZ0eiWFC0f-JEY0f8jJC0fQnbQ0fXYqS0fdKbY0ffcJY0fo94A0ftaVB0gJI3D0g_8RZ0h4qwB0h8mYd0hFgAB0hPHUZ0hRHoD0hZn_I0iCQnB0iE7CY0iSb-A0iUiXb0iW6GT0ibKYY0idpBS0ij6Mb0ikqFZ0iwlJZ0iy3sB0j-ftZ0jC64Q0jC64c0jIAdZ0jNu2d0jULQR0jcF8B0jes_Y0jn8xA0jpUfY0k0AOY0k6z6B0k7csb0k9rqY0khXaY0kjTQS0kjfsA0kz2AD0l-6_Y0l48ZB0l4BWR0l8U6T0lGoHC0lWMje0mWwDA0mdy1R0me4DY0mgKzZ0n4DnA0n6_iQ0nCndA0nCtbS0nvBPB0oAXvA0oAgxY0oLITC0oMToY0oNGHY0ooUkY0op5EC0pM5fA0p_f8b0psptA0qC7CA0qVMVQ0qe95Z0qjA9B0r6uJY0r9BlZ0rE7HD0rK4RQ0rvCQA0sVAZI0se6RI0sk0Qa0t0V2R0t326Y0tOdhC0tWopZ0u9i6Z0uDCeA0uUL7B0uV5rQ0uXQzQ0uhHXY0umRiA0v4VQD0v4_gI0vU46B0vXzUZ0vhvDd0vs8eY0vv0dd0wAM5B0wOECI0wcIkB0wlQdY0wnAfY0wxtCA0x-lxR0xKNeB0xP-HC0xQxFC0xfZab0xlzFY0xmmsa0xsRuB0yB53R0yFjkY0yVmxR0ygv4Y0yk7mY0ykA5Y0ywA1C0ywTxY0z041b0zJjwZ0zW96B0ztFTA0zu81Y1-B-oB1-YfNC10IZGS10MXiY10WmUY10c5LD10crwB10pDuI119ebZ11A0xA11Tsfa11amIQ11fO4B11yaWY1271qR129gcB12J8xD12LlZB12N6dZ12SfMY12XhwY12eFEY12pUEa13-UTB1300qS138ISb13Mo2Y13NIpY13RggB13cwCC14--8A14HPJB14USIa14YcFB14hFeA14ovpC14rN_A15Q5yY15ajSB168Y0Y16CLJB1Line truncated
|
||||
@@ -1 +1 @@
|
||||
-7o0Ba-JWd-Y-afjwZ-m7WZY-q-BWR-tcaeY07ZgLY0F1WPR0HlfFZ0abeaY0h_28B1106-Q15BS0R1C_MHB1Cfj1R1NFkEZ1SkEgA1YADlR1pt67A1s1z4Y1tx0uA27ZxpZ2AKMwI2IjYaY2eRoIY2vq8JA2zcvrY3-pg-b37Q2iY3KaNnQ3LItgY3OvIVB3UO7QQ3UUQwR440wBB46DpVA488fHC4B1SIA4H7JfD4Jd3Ba4KP-LQ4KPTeA4Tm7XA4ayItB4cC3FQ4h8W2c4x-lCY5KrjwY5LmwWA5UODMc5adkZY5cVZ7Y5dOn0A5v4FQZ6-u8YB6XfIsY6oCXfQ6spOnY6zSarR73t5yR74JesU7IkoGM7KqC8B7VqFWR7eMPYC7k-N_B7q0GiY802F-Y83lAlQ84eunR8ELPfA8FB_1Y8jxNfc8lBjQA8mDKdA8y0T9c9A4Mjc9VplOD9YZ9EY9dLalA9zqrDRABBK7QACfpYQAUNMhYAZakvDAlj_1BAmbGpYAnGxEYAo9JdYB1Xe1ABDnFrbBVnubBB_L3nYBhfmYRBiTWVABkL74YC4EOdZCDOXwZCI-iOaCIZ2HYCX902QCY1pgbCY9N0BCwsT9YDGSocCDJ1c8BDZGlGBDdoqnADm1SYYE72VyDE9typCEL-FdAEVteNREfrS7BEiUkUIEzCpPYFWN7JAFe3zaBFi53aYFktKRRFmUprRFotJyAFp64bYG0ckXRG1v2GZGE-1nRGOUs4BGTes6cGnnJ2QGtqb-YGzrnfRH-7FkZH8RbLYHIxMbYHWIW1ZH_9rDBHaAhVZHe1_mBHiW_eYHvHNXAI-pQNII5YY2QIAu9vAINqbYMIOp_UYIfNzdEIi6FcAIruQ_ZJ-zbZBJ6E5KRJF7dvBJIUQQQJSDPEZJSlLSZJSrn2YJUqWRBJVjDIEJbmXHQJl_2KAJv87vaJxF99YJxedgcJy8WPQJzDI7JK1lwLDKVQuYBKVarNYKcWXkBKisYPBKkkwyYKlZWFbKr5LiYKt9P4cKzZy0BL0hlAYL8D29ZL9ok8BLKIEKYLNugmaLVLUoYLX0kYQLYKA1BLZ4_3ALletycLnP-WBLqCUFRLqXfuBM3DkOMM3KP8BM5on4YM6iuuYMIsftYMJIRiQMTMa8QMZTsdZMeUfPBMkcDqZMmCn_RMtwTkYMwFxBBMylkERNNE6TRNTe3LENYfyZANaQJZYNeRAXYNkxp0BNpr6FaNsCX5aNx8W6BO8MAOIOA4NPAOQ1BTQOd4VdAOeop_AOmpH_ZP4CZwBPClfrRPHNDjYPKu9KAPNHl5APS932EPT9gNZP_BpAcPaZQxcPcjq8APh0wUYPlT9ZAPq397YQDq2TRQNmL_RQjfBFYQpbd9cQy0AaBR31fQRRBGTwBREl6LbRJBwMYRSV6RZRdylHYRn0AMYRpck1YSC6gpRSEHBvZSFEBoRSR8dQASVZZuES_L7rQS_OUsaSiGf1MSre61MT1s1jZT2kwXRTTeGHYTrIa_YTwGwwATwNb4YUAga7ZUDFYsCUDSEWBUJ8oeZUOB15YUYbxSYUco8HcUfVGnQUl7qXEUmM3HYUnNC_cUnVXiYUpjbBYUr8P9YUtlNjYUx5z1ZV3ovyRV6AeWEVFrvvBVOthFYVWU84YVWXUWRVYo1sEVYz0PIVavp6YVoz_5BVu7_aZVuMM_YW8qL1YWDNTncWm2gRAWpGxTcWryinRX2hYTAX6pEMBXEJixDXZr8LDX_gWqaXvO7wAXvZVEQY6NOcBYI-dWYYRXuHBYVd5bdYWPA2YYWsNGQYWyCQUYhdgTcYzdiWYZ8DekYZOVcXYZPBQgAZb8TIcZjtdwIZvCEtAZvi7IUZzdC5R_4y8dB_59hLY_FJysR_PZ1JZ_Q9wBB_vTIPY_w1_VRa01diYa1wlKQa6ADcYaQs_mBaZRMzda_-xNIab2ScYaeFdNBatfwOAaufONRauuyMYavt1KAawN0EYbRfPCAbZVzFYblzS8YbwsNrRc-Y69AcMF00ZcXOWkccqd_sAd2YwyRdERa2YdO47FgdOFHdAdPGfDYdSw-6YdYwmpSeHxrlBeNiqpYeSzl0AeXenkBeY6rITel-DsYeyWimYf32V5afQt-zBfUNLqEfW4qSYfg7pZBfnlttYg1gCsYg22mMag34iTZgAjFKZgMQBGBgPgplCgR2RlYgZtEZYge8z-BgsgonYgtZ-zAgyIhJAh6ilRQhIXLgQhKJ14YhMNJPQhVwV3Ahd6VIYhguIpMhl51VDhyU7pci2RY8Ai7WRqYiKCO-BiTewWYiepUJQj0E73Cj168bYj3cHNEj5C3eBjAgMqRjDQUQYjUdfeBjv_XgBkCD31AkD6ycZkEVDkZkRMJ2Yksv3YBkvm3zAkywTRQl-C1uEl7LUmQlH0lAQlKV-ZZlOuqoBlqTAialxIjPZm-LKdZm2D2BAm2R7uYm61IBAmDMTnQmcu5IQmlxwhQn0ftZbn6lKyYnBp7IRnKXfMBnb1LkYnbrTIAnd_3RZnlHX7Ann61jQo6ZNfMoBNWaBoIRP9CoLU_fYoPIbHAoptV4BoxU5mEp6U9ZApFUuxQpXb2wRpkeViEpoQOMcpp9PFYpq98ZRprzM1Apw-mxZpw6nrZq7IJRBq7ZbYYqAnF8aqfsIEYqgqTnAqmasMbqs56YIquYdAcr8piBBrEtCKBrJpUGYrWQDoBrhy-4YrpPblcs738XQs8e0Jcs9IxLQsXKAOQsjV1QdskwLMQstpgsAsy_D7Zt66-4CtFLgYYtGOz_YtTaljBtf14aYtg4GGYttqsYgtzsqrYu9AIDCuC3JUcuJIYvRuWHjDYuXFTxYucTxtBumSv1YupJ4BDuqy8xBv2J4xRv96-3Ev9mjYYvEBUNYvaj1DQvcpnNRvgW5uDvgwG0Zvh8ieQvxUMwYw7tkfYwKwDBZwgHGlBwoKCpYwpiFDYwqoEhAwrhHqEx0KXfRxIeXBAxQEUlYxVgrxcxWCQbRxcbKOcxgJMNYxlUdZYxmiEqaxpkwuQy73ykZy7K8MYyNM9rTyQzb1YyW_kdCyar7gYyjlxXYzAgDeYzAzdwwzDUS1BzDjcOCzXw0FQzYvQUYze8-sAzja5ZRzsqe6B
|
||||
--3kAY--51XC--7HLA--8PKZ--8SdZ--9BZQ--F-0a--FhsC--Ib4C--MobA--QJlY--TtoR--YDhB--ewoY--m9IY--mDfZ--ocJS--p-IZ--ruMY--thJT--zcfB-007vY-0BPiA-0CMHZ-0M5wS-0PR4Z-0Uew9-0VkaD-0cupS-0fjkB-0hCQY-0i9UA-0kXzY-0kwTZ-0mTAZ-0nbTY-0sC0a-0ukqa-11wmA-12G1a-12YYY-17-yB-17qB4-19PtA-19jIC-1Ayw8-1EibR-1FJBR-1NLla-1OZyY-1RAnb-1RaWZ-1aCaY-1btzY-1ccYY-1dOfB-1gCWB-1i-WY-1popA-1puEY-1q36A-1uDNI-1uy4B-1wcDY-1xaDY-1xtgB-2-9nA-24Kyb-27LIY-27wJa-2EAnY-2E_SA-2HX_Z-2IcwA-2K06A-2MkFB-2MuvQ-2OeHZ-2PgpR-2TOwY-2URkR-2W9ea-2YKIY-2ZR4S-2bboY-2iYvB-2jkwR-2kgfb-2oMRA-2pVXC-2s2vD-2tyeD-2vHxc-2wCNB-2wzCA-2y5fZ-2z3QY-337gY-35qXC-381ib-38biI-393QQ-3BeLY-3CoMa-3DISI-3GLbY-3GOzZ-3KoFa-3Lg6Y-3Ma9R-3MipR-3RmgZ-3RqIZ-3SXUa-3T-rR-3T8UQ-3U2ZQ-3VirA-3VpJA-3XbMY-3YRRQ-3ajKY-3d3qB-3eBbB-3fdqY-3hQma-3lRNZ-3lxDY-3m2pZ-3oFPA-3ww9A-3xiAY-3xthD-3zc_a-4-sBY-42k3Q-4500Y-45AtC-48AfA-48VkB-49gnM-4CtnB-4EwOD-4FVPb-4Ge9A-4HQMB-4JTAY-4L7wY-4LywY-4MRDA-4N-xB-4O9rB-4OC6A-4OMRR-4Pe4A-4Y3sD-4Y7cA-4ZOaZ-4_ZZb-4a_9D-4bLfY-4beoT-4cMCY-4eh0C-4fdtA-4gUwQ-4sP8Z-4ulER-4wlCQ-52_mB-52_zY-53DwB-54b1A-5FwWB-5FzAQ-5H2ZC-5KwaZ-5L8mY-5M0tZ-5N6jY-5Sn7a-5Tp8B-5UJMY-5UWLR-5UaYY-5X5bR-5a97A-5gw6Y-5hCqY-5l5ua-5r1eA-5ty_Y-5uTUa-5z5GQ-6AHtY-6DzgZ-6FPiZ-6FtmC-6O-qZ-6QCLB-6T37Z-6UYlA-6UbyA-6V4gY-6bLOD-6faWY-6kRyY-6lxIY-6oewB-6p0-Z-6p98Y-6pbxB-6pi7a-6qZBY-6u9uY-6upwY-6wQRA-6wlES-6zZ5a-70WPB-73UCB-78dsB-78y_C-7Ai-A-7CX8J-7IVOZ-7K4bB-7NaYZ-7OagB-7PBVC-7Rxwa-7TAhY-7TvEQ-7VIcT-7YisD-7_bHB-7_yAI-7e0cA-7e_AY-7gV7E-7hTWA-7kWGB-7kYVA-7lrLa-7mK6C-7p-KA-7p3eA-7p9CY-7qEtY-7rUMZ-7uQrA-7w_yA-7y8TY-7zg4A-81-dZ-82ABY-82NnY-82uZZ-87BwA-880MY-8COpQ-8Fk0S-8GESQ-8GFMB-8ISYZ-8KYcA-8Lp4A-8My6Q-8NBfY-8PB2Y-8PsvS-8PtKb-8Q4Bb-8Q4PY-8SchB-8T6jZ-8U9_A-8VSCI-8__pA-8afAB-8heIZ-8i1sY-8ixYN-8jKpY-8qa8R-8qdjY-8rp4R-8sWAY-8u5vY-8v1qZ-8vzIA-8y_rA-9-DJA-90MuZ-91CyR-96AzA-978NQ-99FHT-99asB-9CGVB-9ClXA-9E_gY-9FzwB-9HGda-9NpYB-9PlmY-9Q_2Y-9T-GY-9TEiR-9V7WY-9debz-9eM6R-9iFBD-9iKGQ-9ksNY-9mmEb-9o5sB-9onfb-9seuZ-9t6rQ-9w2WQ-A0fFY-A8mVA-ADgTY-ADlhB-AFV0B-AFWaR-AIWeA-AIrlZ-ALWGY-AS25a-ASViZ-AVvcY-AbEiS-AbHSA-AbVNg-AcVnY-AhO2Z-Ai9bY-AjGSY-AlpIa-AmoWZ-AqlFJ-Ar9DY-AucFZ-Av2HZ-AvaGY-AwfFb-AxFPY-Ayr4B-B0hjA-B6DnY-B6MFB-BHTtZ-BJRRA-BKFCT-BPF_O-BPMAB-BT4fD-BUvpZ-BVzzB-BcqeC-BkcZR-Bktra-BlZxQ-Bp39Z-BrO0Y-Bs-vY-BvmQa-Bz2NA-C0l_Q-C7ksR-C8SFY-CAeiY-CAhZD-CArcQ-CBD5Y-CCv-Q-CFtRY-CG6QA-CGiYT-CI1ZZ-CKJgY-CK_dA-CL3xf-CLF4B-CMTqb-CNuIR-CRglY-CRglc-CY3QY-CZDYY-CZjcZ-CaIZB-Ce4YY-Cg1OZ-CgOPI-CjGVZ-Ck0XA-CkO-b-CkOIZ-CkynR-Cn12Q-CoTqD-CoaAB-CoqkQ-CouGZ-CqAaY-CvKxA-Cx6DA-D-3vY-D22EZ-D41zA-D92kY-D9w2B-DAGwf-DC__Q-DExLS-DIqFQ-DLGLB-DQ_wQ-DRBeZ-DSy8Q-DUFrD-DUHsD-DV3EY-DW2Be-DXVyY-DXzKY-Da1xB-DaG_b-DcU0a-DgjfY-DgyKC-DhlUb-Di7jY-Dq5OB-DqaxQ-DsVHa-DvH4a-DxQPa-DxUCa-E3bBA-E6U8Y-EBtjY-EFGaY-ERfAY-EUc7c-EWluA-EX4qR-E_6na-Eb-tb-EbBia-EhF-I-Eicxa-EjuHB-Ek_Ob-EmkWA-EoKuY-Eq0NY-Etltc-EuRvC-EuXdQ-Ex5FZ-F-6PY-F0vBZ-F172Z-F1rzY-F2vyD-F42rY-F63TY-F9CfY-F9h-Y-FAPuB-FJ_0B-FMK6A-FNTtZ-FNmzD-FOOcB-FOYcQ-FUu7b-F_keR-FbGeA-FcQxB-Fd-oa-FeK4S-FeUxZ-Fep5B-FfdFY-Fi93Z-FidjA-Fk2PY-FlxEB-Fn5fS-FrEHA-FwQOY-FxUDb-FyuCa-FzGkB-G29qQ-G2ruB-G4OJa-G6ngC-G7ChA-G9HYd-G9qha-GB70B-GBZqQ-GCORb-GEyhD-GKweB-GM7sA-GMbCY-GOH5D-GP3tA-GPNYR-GQPN4-GSF0D-GU-bb-GVsZA-GVvHA-GW-yY-GX95A-GZPhA-GZtoQ-G_huA-Ge8SA-GjFhB-GjNTd-Glm2Y-GnF2Z-GwWsE-GxpxM-H-uxB-H0K4C-H19ZA-H2awQ-H7WSC-HA9_a-HAOCZ-HFDkM-HGWCB-HGXIY-HJTub-HJyWQ-HLxHQ-HMFjD-HOnwa-HQoAU-HS5jZ-HSDbR-HSx4Y-HT9ua-HURvZ-HYdxY-HZf-Y-H_1XA-HbmeQ-HdhPA-He3DR-Hh2sC-HmEjA-HmTmI-Hnzzc-HqUUY-HvyeQ-HyHiY-Hyb_Y-I-mtZ-I04ha-I3FjZ-I4k2B-I6ZxC-I7WyY-I8gFQ-I8wkY-IBjaB-IIEyA-IIizY-IJ0UA-IJAjZ-IJYPZ-IJclA-IJllZ-ILSpA-IPGGI-IRS6b-IRkMA-IVLpa-If2HQ-IgAlQ-Ij6XB-IjywT-IkRyZ-IlY5C-IlbZY-ImPWZ-IopfY-IphvA-IuDzZ-J8AHY-J9Oja-JAVGc-JB8pZ-JDCtB-JEYIa-JEtMY-JIsIB-JK1ya-JL0-Y-JMIyR-JN5kQ-JOA2d-JQBKA-JSnJZ-JTX7a-JUq0Z-JVD5Z-JX3MB-JXIPd-JYZdY-Jfm7R-JgyVA-JhEWB-JiRdC-JkqBD-JlPMZ-JlY4A-Jomic-JoqZR-Joz-Q-Js4vA-JuEDA-JuMGQ-JvAJB-K-LyB-K12fY-K2yMB-K3sLY-K42DY-K71ID-K7oaY-K7vlB-K8NuB-KAWTY-KG8Za-KGeja-KHnIR-KIdBR-KM2yA-KNDOY-KQWxC-KRzSY-KXw-Z-Kd3uB-KdPPa-KjYQB-Kk9iA-KoJ6a-KqXUc-KqpDA-KtbUY-Ku58B-KwqQD-KyWsY-L-DCY-L15hb-L1jZC-L1phB-L2OeZ-L3FVB-L62Mb-L7Gwb-L8AUY-LAFvD-LG-ZC-LIeiQ-LKQMY-LM68A-LOViZ-LPXJB-LSYeB-LUtUZ-LW5YM-LXmvY-L_WUY-L_rfB-Laere-LauSb-LgDfA-LgK8Y-LhaMA-Lk5yI-Lse_Q-LspHZ-LtTYY-LtZ4Y-Ltn5Z-Lx2ha-LxKrU-M-TKD-M0bMY-M5YuB-M6I9R-M7_oC-M7aNQ-M7bbZ-M7t7R-M9U5b-MCk65-MEGEQ-MHO9B-MJccY-MJxAB-MK7fB-MN8jF-MNVsR-MONkZ-MTCla-MUvqD-MUw7D-MVHuD-MaG_Y-Mab7C-MaenB-MjTIa-MjZEY-MtrdA-MvRRY-Mz2SD-Mzi0Z-N1d9Y-N2UYY-N2YfZ-N6ljZ-NAcwR-NBEZZ-NEexC-NFF-T-NGGZQ-NHzQY-NKO4Y-NLAKZ-NOS5A-NUUyY-NUuFD-N_EeZ-NdycY-Ne12Q-Nh_1Y-NhwJB-Nj98Y-NkJoR-Nn-gZ-NrAJa-NsHcY-NsJ4A-NwOPA-Nwv-R-Nx0cB-O52EY-O57eB-O7Tzh-O8HlY-O9t4Y-OBNqY-OG80Q-OJC5a-OJzdH-OKPrB-OKyhR-OMMOa-OMRM5-OM_KQ-OQDOY-OSgBY-OViQQ-OYyaB-Oab2Z-ObiAZ-OccHR-OehnZ-Of89Y-OgOMA-OgkzY-Oi-GA-OmBFY-OnnPR-OrERY-OrqcD-Ot8CS-Oy6DY-P-RBB-P-oER-P1TNT-P3JGC-P51OI-P7SHC-P7gIa-PDB9A-PEqvd-PGP_A-PJhTD-PN5pZ-PP3Za-PSI-Y-PTasQ-PUEiw-PVEXZ-PVX8Y-PW6vD-PX5zC-PYrGQ-PbqEC-PeCwZ-PkIKI-PlI4Z-PqBYZ-PqWGB-PrqmZ-Pt_lD-PzcjB-Q1_oC-Q1bBY-Q2Z-Q-Q3OVC-Q4zoD-Q5Kya-Q5NIQ-Q60UZ-Q6m0Y-Q9a-Y-QCKoB-Line truncated
|
||||
@@ -73,6 +73,7 @@ public final class ReferenceContainerCache<ReferenceType extends Reference> exte
|
||||
*/
|
||||
public ReferenceContainerCache(final ReferenceFactory<ReferenceType> factory, final ByteOrder termOrder, final int termSize) {
|
||||
super(factory);
|
||||
assert termOrder != null;
|
||||
this.termOrder = termOrder;
|
||||
this.termSize = termSize;
|
||||
this.containerOrder = new ContainerOrder<ReferenceType>(this.termOrder);
|
||||
@@ -130,10 +131,12 @@ public final class ReferenceContainerCache<ReferenceType extends Reference> exte
|
||||
// write wCache
|
||||
long wordcount = 0, urlcount = 0;
|
||||
byte[] term = null, lwh;
|
||||
assert this.termKeyOrdering() != null;
|
||||
for (final ReferenceContainer<ReferenceType> container: cachecopy) {
|
||||
// get entries
|
||||
lwh = term;
|
||||
term = container.getTermHash();
|
||||
if (term == null) continue;
|
||||
|
||||
// check consistency: entries must be ordered
|
||||
assert (lwh == null || this.termKeyOrdering().compare(term, lwh) > 0);
|
||||
|
||||
@@ -476,36 +476,39 @@ public final class Switchboard extends serverSwitch {
|
||||
// load distributed ranking
|
||||
// very large memory configurations allow to re-compute a ranking table
|
||||
/*
|
||||
final File hostIndexFile = new File(queuesRoot, "hostIndex.blob");
|
||||
final File hostIndexFile = new File(this.queuesRoot, "hostIndex.blob");
|
||||
if (MemoryControl.available() > 1024 * 1024 * 1024) new Thread() {
|
||||
public void run() {
|
||||
ReferenceContainerCache<HostReference> hostIndex; // this will get large, more than 0.5 million entries by now
|
||||
if (!hostIndexFile.exists()) {
|
||||
hostIndex = BlockRank.collect(peers, webStructure);
|
||||
hostIndex = BlockRank.collect(Switchboard.this.peers, Switchboard.this.webStructure, Integer.MAX_VALUE);
|
||||
BlockRank.saveHostIndex(hostIndex, hostIndexFile);
|
||||
} else {
|
||||
hostIndex = BlockRank.loadHostIndex(hostIndexFile);
|
||||
}
|
||||
|
||||
// use an index segment to find hosts for given host hashes
|
||||
String segmentName = getConfig(SwitchboardConstants.SEGMENT_PUBLIC, "default");
|
||||
Segment segment = indexSegments.segment(segmentName);
|
||||
MetadataRepository metadata = segment.urlMetadata();
|
||||
final String segmentName = getConfig(SwitchboardConstants.SEGMENT_PUBLIC, "default");
|
||||
final Segment segment = Switchboard.this.indexSegments.segment(segmentName);
|
||||
final MetadataRepository metadata = segment.urlMetadata();
|
||||
Map<String,HostStat> hostHashResolver;
|
||||
try {
|
||||
hostHashResolver = metadata.domainHashResolver(metadata.domainSampleCollector());
|
||||
} catch (IOException e) {
|
||||
} catch (final IOException e) {
|
||||
hostHashResolver = new HashMap<String, HostStat>();
|
||||
}
|
||||
|
||||
// recursively compute a new ranking table
|
||||
Switchboard.this.log.logInfo("BLOCK RANK: computing new ranking tables...");
|
||||
BlockRank.ybrTables = BlockRank.evaluate(hostIndex, hostHashResolver, null, 0);
|
||||
hostIndex = null; // we don't need that here any more, so free the memory
|
||||
|
||||
// use the web structure and the hostHash resolver to analyse the ranking table
|
||||
BlockRank.analyse(BlockRank.ybrTables, webStructure, hostHashResolver);
|
||||
Switchboard.this.log.logInfo("BLOCK RANK: analysis of " + BlockRank.ybrTables.length + " tables...");
|
||||
BlockRank.analyse(Switchboard.this.webStructure, hostHashResolver);
|
||||
// store the new table
|
||||
//BlockRank.storeBlockRankTable(rankingPath);
|
||||
Switchboard.this.log.logInfo("BLOCK RANK: storing fresh table...");
|
||||
BlockRank.storeBlockRankTable(rankingPath);
|
||||
}
|
||||
}.start();
|
||||
*/
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* BlockRankCollector
|
||||
* Copyright 2011 by Michael Christen
|
||||
* First released 18.05.2011 at http://yacy.net
|
||||
*
|
||||
*
|
||||
* $LastChangedDate: 2011-04-26 19:39:16 +0200 (Di, 26 Apr 2011) $
|
||||
* $LastChangedRevision: 7676 $
|
||||
* $LastChangedBy: orbiter $
|
||||
@@ -11,12 +11,12 @@
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program in the file lgpl21.txt
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
@@ -49,71 +49,71 @@ import net.yacy.peers.Seed;
|
||||
import net.yacy.peers.SeedDB;
|
||||
import net.yacy.peers.graphics.WebStructureGraph;
|
||||
import net.yacy.peers.graphics.WebStructureGraph.HostReference;
|
||||
import net.yacy.search.index.Segment;
|
||||
import net.yacy.search.index.MetadataRepository.HostStat;
|
||||
import net.yacy.search.index.Segment;
|
||||
|
||||
|
||||
public class BlockRank {
|
||||
|
||||
public static BinSearch[] ybrTables = null; // block-rank tables
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* collect host index information from other peers. All peers in the seed database are asked
|
||||
* this may take some time; please wait up to one minute
|
||||
* @param seeds
|
||||
* @return a merged host index from all peers
|
||||
*/
|
||||
public static ReferenceContainerCache<HostReference> collect(final SeedDB seeds, final WebStructureGraph myGraph) {
|
||||
|
||||
ReferenceContainerCache<HostReference> index = new ReferenceContainerCache<HostReference>(WebStructureGraph.hostReferenceFactory, Base64Order.enhancedCoder, 6);
|
||||
|
||||
public static ReferenceContainerCache<HostReference> collect(final SeedDB seeds, final WebStructureGraph myGraph, int maxcount) {
|
||||
|
||||
final ReferenceContainerCache<HostReference> index = new ReferenceContainerCache<HostReference>(WebStructureGraph.hostReferenceFactory, Base64Order.enhancedCoder, 6);
|
||||
|
||||
// start all jobs
|
||||
Iterator<Seed> si = seeds.seedsConnected(true, false, null, 0.99f);
|
||||
ArrayList<IndexRetrieval> jobs = new ArrayList<IndexRetrieval>();
|
||||
while (si.hasNext()) {
|
||||
IndexRetrieval loader = new IndexRetrieval(index, si.next());
|
||||
final Iterator<Seed> si = seeds.seedsConnected(true, false, null, 0.99f);
|
||||
final ArrayList<IndexRetrieval> jobs = new ArrayList<IndexRetrieval>();
|
||||
while (maxcount-- > 0 && si.hasNext()) {
|
||||
final IndexRetrieval loader = new IndexRetrieval(index, si.next());
|
||||
loader.start();
|
||||
jobs.add(loader);
|
||||
}
|
||||
|
||||
|
||||
// get the local index
|
||||
if (myGraph != null) try {
|
||||
ReferenceContainerCache<HostReference> myIndex = myGraph.incomingReferences();
|
||||
final ReferenceContainerCache<HostReference> myIndex = myGraph.incomingReferences();
|
||||
Log.logInfo("BlockRank", "loaded " + myIndex.size() + " host indexes from my peer");
|
||||
index.merge(myIndex);
|
||||
} catch (IOException e) {
|
||||
} catch (final IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
} catch (final RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
|
||||
|
||||
// wait for termination
|
||||
for (IndexRetrieval job: jobs) try { job.join(); } catch (InterruptedException e) { }
|
||||
for (final IndexRetrieval job: jobs) try { job.join(); } catch (final InterruptedException e) { }
|
||||
Log.logInfo("BlockRank", "create " + index.size() + " host indexes from all peers");
|
||||
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
public static class IndexRetrieval extends Thread {
|
||||
|
||||
|
||||
ReferenceContainerCache<HostReference> index;
|
||||
Seed seed;
|
||||
|
||||
public IndexRetrieval(ReferenceContainerCache<HostReference> index, Seed seed) {
|
||||
|
||||
public IndexRetrieval(final ReferenceContainerCache<HostReference> index, final Seed seed) {
|
||||
this.index = index;
|
||||
this.seed = seed;
|
||||
}
|
||||
|
||||
|
||||
public void run() {
|
||||
ReferenceContainerCache<HostReference> partialIndex = Protocol.loadIDXHosts(this.seed);
|
||||
final ReferenceContainerCache<HostReference> partialIndex = Protocol.loadIDXHosts(this.seed);
|
||||
if (partialIndex == null || partialIndex.size() == 0) return;
|
||||
Log.logInfo("BlockRank", "loaded " + partialIndex.size() + " host indexes from peer " + this.seed.getName());
|
||||
try {
|
||||
this.index.merge(partialIndex);
|
||||
} catch (IOException e) {
|
||||
} catch (final IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
} catch (final RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
}
|
||||
@@ -124,47 +124,47 @@ public class BlockRank {
|
||||
* @param index
|
||||
* @param file
|
||||
*/
|
||||
public static void saveHostIndex(ReferenceContainerCache<HostReference> index, File file) {
|
||||
public static void saveHostIndex(final ReferenceContainerCache<HostReference> index, final File file) {
|
||||
Log.logInfo("BlockRank", "saving " + index.size() + " host indexes to file " + file.toString());
|
||||
index.dump(file, Segment.writeBufferSize, false);
|
||||
Log.logInfo("BlockRank", "saved " + index.size() + " host indexes to file " + file.toString());
|
||||
}
|
||||
|
||||
public static ReferenceContainerCache<HostReference> loadHostIndex(File file) {
|
||||
|
||||
public static ReferenceContainerCache<HostReference> loadHostIndex(final File file) {
|
||||
|
||||
Log.logInfo("BlockRank", "reading host indexes from file " + file.toString());
|
||||
ReferenceContainerCache<HostReference> index = new ReferenceContainerCache<HostReference>(WebStructureGraph.hostReferenceFactory, Base64Order.enhancedCoder, 6);
|
||||
final ReferenceContainerCache<HostReference> index = new ReferenceContainerCache<HostReference>(WebStructureGraph.hostReferenceFactory, Base64Order.enhancedCoder, 6);
|
||||
|
||||
// load from file
|
||||
try {
|
||||
ReferenceIterator<HostReference> ri = new ReferenceIterator<HostReference>(file, WebStructureGraph.hostReferenceFactory);
|
||||
final ReferenceIterator<HostReference> ri = new ReferenceIterator<HostReference>(file, WebStructureGraph.hostReferenceFactory);
|
||||
while (ri.hasNext()) {
|
||||
ReferenceContainer<HostReference> references = ri.next();
|
||||
final ReferenceContainer<HostReference> references = ri.next();
|
||||
index.add(references);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
} catch (final IOException e) {
|
||||
Log.logException(e);
|
||||
} catch (RowSpaceExceededException e) {
|
||||
} catch (final RowSpaceExceededException e) {
|
||||
Log.logException(e);
|
||||
}
|
||||
|
||||
Log.logInfo("BlockRank", "read " + index.size() + " host indexes from file " + file.toString());
|
||||
return index;
|
||||
}
|
||||
|
||||
public static BinSearch[] evaluate(final ReferenceContainerCache<HostReference> index, Map<String, HostStat> hostHashResolver, BinSearch[] referenceTable, int recusions) {
|
||||
|
||||
|
||||
public static BinSearch[] evaluate(final ReferenceContainerCache<HostReference> index, final Map<String, HostStat> hostHashResolver, final BinSearch[] referenceTable, int recusions) {
|
||||
|
||||
// first find out the maximum count of the hostHashResolver
|
||||
int maxHostCount = 1;
|
||||
for (HostStat stat: hostHashResolver.values()) {
|
||||
for (final HostStat stat: hostHashResolver.values()) {
|
||||
if (stat.count > maxHostCount) maxHostCount = stat.count;
|
||||
}
|
||||
|
||||
|
||||
// then just count the number of references. all other information from the index is not used because they cannot be trusted
|
||||
ScoreMap<byte[]> hostScore = new OrderedScoreMap<byte[]>(index.termKeyOrdering());
|
||||
final ScoreMap<byte[]> hostScore = new OrderedScoreMap<byte[]>(index.termKeyOrdering());
|
||||
HostStat hostStat;
|
||||
int hostCount;
|
||||
for (ReferenceContainer<HostReference> container: index) {
|
||||
for (final ReferenceContainer<HostReference> container: index) {
|
||||
if (container.size() == 0) continue;
|
||||
if (referenceTable == null) {
|
||||
hostStat = hostHashResolver.get(ASCII.String(container.getTermHash()));
|
||||
@@ -172,7 +172,7 @@ public class BlockRank {
|
||||
hostScore.set(container.getTermHash(), container.size() * maxHostCount / hostCount);
|
||||
} else {
|
||||
int score = 0;
|
||||
Iterator<HostReference> hri = container.entries();
|
||||
final Iterator<HostReference> hri = container.entries();
|
||||
HostReference hr;
|
||||
while (hri.hasNext()) {
|
||||
hr = hri.next();
|
||||
@@ -183,40 +183,40 @@ public class BlockRank {
|
||||
hostScore.set(container.getTermHash(), score);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// now divide the scores into two halves until the score map is empty
|
||||
List<BinSearch> table = new ArrayList<BinSearch>();
|
||||
final List<BinSearch> table = new ArrayList<BinSearch>();
|
||||
while (hostScore.size() > 10) {
|
||||
List<byte[]> smallest = hostScore.lowerHalf();
|
||||
final List<byte[]> smallest = hostScore.lowerHalf();
|
||||
if (smallest.size() == 0) break; // should never happen but this ensures termination of the loop
|
||||
Log.logInfo("BlockRank", "index evaluation: computed partition of size " + smallest.size());
|
||||
table.add(new BinSearch(smallest, 6));
|
||||
for (byte[] host: smallest) hostScore.delete(host);
|
||||
for (final byte[] host: smallest) hostScore.delete(host);
|
||||
}
|
||||
if (hostScore.size() > 0) {
|
||||
ArrayList<byte[]> list = new ArrayList<byte[]>();
|
||||
for (byte[] entry: hostScore) list.add(entry);
|
||||
final ArrayList<byte[]> list = new ArrayList<byte[]>();
|
||||
for (final byte[] entry: hostScore) list.add(entry);
|
||||
Log.logInfo("BlockRank", "index evaluation: computed last partition of size " + list.size());
|
||||
table.add(new BinSearch(list, 6));
|
||||
}
|
||||
|
||||
|
||||
// the last table entry has now a list of host hashes that has the most references
|
||||
int binTables = Math.min(16, table.size());
|
||||
BinSearch[] newTables = new BinSearch[binTables];
|
||||
final int binTables = Math.min(16, table.size());
|
||||
final BinSearch[] newTables = new BinSearch[binTables];
|
||||
for (int i = 0; i < binTables; i++) newTables[i] = table.get(table.size() - i - 1);
|
||||
|
||||
// re-use the new table for a recursion
|
||||
if (recusions == 0) return newTables;
|
||||
return evaluate(index, hostHashResolver, newTables, --recusions); // one recursion step
|
||||
}
|
||||
|
||||
public static void analyse(BinSearch[] tables, final WebStructureGraph myGraph, final Map<String, HostStat> hostHash2hostName) {
|
||||
|
||||
public static void analyse(final WebStructureGraph myGraph, final Map<String, HostStat> hostHash2hostName) {
|
||||
byte[] hosth = new byte[6];
|
||||
String hosths, hostn;
|
||||
HostStat hs;
|
||||
for (int ybr = 0; ybr < tables.length; ybr++) {
|
||||
row: for (int i = 0; i < tables[ybr].size(); i++) {
|
||||
hosth = tables[ybr].get(i, hosth);
|
||||
for (int ybr = 0; ybr < ybrTables.length; ybr++) {
|
||||
row: for (int i = 0; i < ybrTables[ybr].size(); i++) {
|
||||
hosth = ybrTables[ybr].get(i, hosth);
|
||||
hosths = ASCII.String(hosth);
|
||||
hostn = myGraph.hostHash2hostName(hosths);
|
||||
if (hostn == null) {
|
||||
@@ -231,8 +231,8 @@ public class BlockRank {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* load YaCy Block Rank tables
|
||||
* These tables have a very simple structure: every file is a sequence of Domain hashes, ordered by b64.
|
||||
@@ -258,7 +258,7 @@ public class BlockRank {
|
||||
} catch (final IOException e) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void storeBlockRankTable(final File rankingPath) {
|
||||
String ybrName;
|
||||
File f;
|
||||
@@ -280,7 +280,7 @@ public class BlockRank {
|
||||
} catch (final IOException e) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* returns the YBR ranking value in a range of 0..15, where 0 means best ranking and 15 means worst ranking
|
||||
* @param hash
|
||||
@@ -289,8 +289,8 @@ public class BlockRank {
|
||||
public static int ranking(final byte[] hash) {
|
||||
return ranking(hash, ybrTables);
|
||||
}
|
||||
|
||||
public static int ranking(final byte[] hash, BinSearch[] rankingTable) {
|
||||
|
||||
public static int ranking(final byte[] hash, final BinSearch[] rankingTable) {
|
||||
if (rankingTable == null) return 16;
|
||||
byte[] hosthash;
|
||||
if (hash.length == 6) {
|
||||
|
||||
Reference in new issue
Block a user