Ë
    å({j4  ã                   ó¬  — d Z ddlZddlZddlZddlZddlZddlZddlZ	ddl
Z
ddlZddlmZmZ dZdZdZdZdZd	Zd
Zej,                  j/                  dd«      Zej2                  j5                  ej2                  j7                  ej2                  j9                  e«      «      d«      ZdZddddœZ d„ Z!dd„Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(e)dk(  r e(«        yy)už  
å·¦æ�ƒåŽ¿äººæ°‘æ”¿åºœ - æ°‘æ„�å¾�é›† (www.jzzq.gov.cn æ³¨æ„�: jzzq=æ™‹ä¸­å·¦æ�ƒ, å±±è¥¿)
æ �ç›®: æ”¿æ°‘äº’åŠ¨ > æ°‘æ„�å¾�é›† /hdjl/zmyzj (26æ�¡/3é¡µ)
CMS: å¼€æ™®äº‘ kaipuyun (BBI JSå��çˆ¬æ··æ·†, éœ€ ?LMCL=HcSri1 å�‚æ•°ç»•è¿‡)
åˆ—è¡¨: /hdjl/zmyzj (ç¬¬1é¡µ) /hdjl/zmyzj_{page} (ç¬¬2é¡µèµ·), å�‡éœ€ ?LMCL=HcSri1
      ul.pageTPList > li > div.title > a.tit (href=/hdjl/zmyzj/content_{id}, title=å®Œæ•´æ ‡é¢˜)
      æ‘˜è¦� div.intro, æ—¥æœŸ span.date
è¯¦æƒ…: /hdjl/zmyzj/content_{id}?LMCL=HcSri1
      æ ‡é¢˜ h2.title, æ—¥æœŸ div.property "å�‘å¸ƒæ—¶é—´ï¼šYYYY-MM-DD", æ­£æ–‡ div.conTxt (å�«è¡¨æ ¼)
ç”¨æ³•: python3 crawl_jzzq_zmyzj.py [--pages=N | N] [--sync] [--sync-only]
é    N)ÚThreadPoolExecutorÚas_completedu   å·¦æ�ƒåŽ¿-æ°‘æ„�å¾�é›†zhttp://www.jzzq.gov.cnz5http://www.jzzq.gov.cn/hdjl/zmyzj{suffix}?LMCL=HcSri1z?LMCL=HcSri1zwww.jzzq.gov.cnu   å±±è¥¿z
2020-01-01ÚDB_PATHz/root/search.dbzquality_results.dbé   zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languagec                 óÚ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      j	                  «       S )NÚ z$&middot;|&nbsp;|&#160;|\u200b|\ufeffu   ^[â€¢Â·]\s*z\s+ú )Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    ú%/root/gov_crawler/crawl_jzzq_zmyzj.pyÚclean_titler   *   sW   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð6¸¸AÓ>€AÜ
�‰ˆ~˜r 1Ó%€AÜ�6‰6�&˜#˜qÓ!×'Ñ'Ó)Ð)ó    c                 ó>  — t        |«      D ]\  }	 t        j                  | t        dd¬«      }d|_        |j
                  dk(  r&t        |j                  «      dkD  r|j                  c S Œ^ y # t        $ r'}||dz
  k  rt        j                  d«       Y d }~Œ‹d }~ww xY w)	Né   F)ÚheadersÚtimeoutÚverifyzutf-8éÈ   iô  é   é   )ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚlenÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚiÚrÚes        r   Úfetchr,   1   sˆ   € Ü�7‹^ò ˆð	Ü—‘˜S¬'¸2ÀeÔLˆAØ ˆAŒJØ�}‰} Ò#¬¨A¯F©F«°cÒ(9Ø—v‘v’øðð øô ò 	Ø�7˜Q‘;ŠÜ—
‘
˜1”ÿøð	ús   �AA,Á,	BÁ5BÂBc                 ó
  — g }| s|S t        j                  d| t         j                  «      D ]Ô  }|j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      j	                  «       f\  }}}}}t        |«      }|rt        |«      dk  rŒ…|j                  |||z   t        z   |j	                  «       |t        t        j                  dd|«      «      d d	 d
œ«       ŒÖ |S )NzÅ<li[^>]*>\s*<div class="title">\s*<a[^>]*href="(/hdjl/zmyzj/content_(\d+))"[^>]*title="([^"]*)"[^>]*>.*?</a>.*?<div class="con">.*?<div class="intro">(.*?)</div>.*?<span class="date">([^<]*)</span>r   r   é   é   r   ú<[^>]+>r	   r   )Útitler'   Úpub_dateÚidÚintro)
r   ÚfinditerÚDOTALLÚgroupr   r   r"   ÚappendÚLMCLr   )	Ú	html_textÚbase_urlÚitemsÚmÚhrefÚiidr1   r4   Údates	            r   Úextract_list_itemsrA   >   só   € Ø€EÙØˆä�[‰[ð	eà”2—9‘9óò ˆð )*¯©°«
°A·G±G¸A³JÀÇÁÈÃ
ÈAÏGÉGÐTUËJÐXY×X_ÑX_Ð`aÓXb×XhÑXhÓXjÐ(jÑ%ˆˆc�5˜% Ü˜EÓ"ˆÙœ˜E›
 QšØØ�‰ØØ˜d‘?¤TÑ)ØŸ
™
›ØÜ ¤§¡¨
°B¸Ó!>Ó?ÀÀÐEñ
õ 	ðð €Lr   c                 óp   — t        j                  d| xs d«      }|rt        |j                  d«      «      S y)Nu   å…±(\d+)æ�¡ä¿¡æ�¯/å…±(\d+)é¡µr	   r   r   )r   ÚsearchÚintr7   )r:   r=   s     r   Úget_page_countrE   U   s/   € Ü
�	‰	Ð2°I²OÀÓD€AÙÜ�1—7‘7˜1“:‹ÐØr   c           	      óR	  ‡‡— t        | «      }|sy d}t        j                  d|t        j                  «      }|r/t	        t        j
                  dd|j                  d«      «      «      }|sdt        j                  d|t        j                  «      }|r=t	        t        j
                  dd|j                  d«      j                  «       «      «      }d}t        j                  d|t        j                  «      }|r8t        j                  d|j                  d«      «      }|r|j                  d	«      }|s)t        j                  d|«      }|r|j                  d	«      }dŠt        j                  d
|t        j                  «      }|r|j                  d«      Š‰s8t        j                  d|t        j                  «      }|r|j                  d«      Št        j
                  dd‰t        j                  t        j                  z  ¬«      Št        j
                  dd‰t        j                  t        j                  z  ¬«      Šg }t        j                  d‰«      D �]  }|j                  d«      j                  «       t	        |j                  d«      «      }}t        j                  d|t        j                  «      s%d|j                  «       v sd|j                  «       v sŒ‡|j                  d«      r|n1|j                  d«      r|nt        |j                  d«      r|nd|z   z   Št        ˆfd„|D «       «      rŒá|j                  |xs& |j!                  d«      d   j!                  d«      d	   ‰dœ«       �Œ d„ }	t        j
                  d|	‰«      Št        j
                  d|	‰«      Št        j
                  dd‰«      Št        j
                  d d‰«      Št        j
                  d!d‰t        j                  t        j                  z  ¬«      Š|rDt        ˆfd"„|D «       «      }
|
s.dj#                  d#„ |D «       «      }‰j%                  «       d$z   |z   Št'        t        j
                  dd‰«      j                  «       «      }d%‰v }d&‰v xs d'‰v }|d(k  r|s|s	|s|d|g d)œS |‰||d)œS )*Nr	   z!<h2 class="title"[^>]*>(.*?)</h2>r0   r   z<title>(.*?)</title>u'   _\s*æ°‘æ„�å¾�é›†.*$|_\s*æ”¿æ°‘äº’åŠ¨.*$z&<div class="property"[^>]*>(.*?)</div>z(\d{4})-(\d{2})-(\d{2})r   z2<div class="conTxt"[^>]*>(.*?)</div>\s*(?:</div>)?z<div class="conTxt"[^>]*>(.*)z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z,<a[^>]*href="([^"]+)"[^>]*>([^<]{0,120})</a>r   z0\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|7z|et|dps)$z/attachz	/downloadÚhttpú//ú/c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w©r'   N© )Ú.0ÚaÚabs_urls     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>‡   s   øè ø€ Ò9¨q�q˜‘x 7Õ*Ñ9ùs   ƒéÿÿÿÿú?)Únamer'   c                 óÄ  — | j                  d«      j                  «       }|j                  d«      s"|j                  d«      s|j                  d«      r| j                  d«      S |j                  d«      r$| j                  d«      j                  |d|z   «      S | j                  d«      j                  ||j                  d«      rt        |z   «      S t        dz   |z   «      S )	Nr   rH   Ú
javascriptú#r   rI   zhttp:rJ   )r7   r   Ú
startswithÚreplaceÚBASE_URL)r=   r>   s     r   Úabs_linkzparse_detail.<locals>.abs_link‹   s³   € Ø�w‰w�q‹z×ÑÓ!ˆØ�?‰?˜6Ô" d§o¡o°lÔ&CÀtÇÁÐWZÔG[Ø—7‘7˜1“:ÐØ�?‰?˜4Ô Ø—7‘7˜1“:×%Ñ% d¨G°d©NÓ;Ð;Ø�w‰w�q‹z×!Ñ! $¸4¿?¹?È3Ô;O¬°4©ÓkÐkÔU]Ð`cÑUcÐfjÑUjÓkÐkr   zhref="([^"]+)"zsrc="([^"]+)"z<p[^>]*>z<p>z
<p>\s*</p>zI<div[^>]*class="[^"]*(share|ewm|qrcode|print|bshare)[^"]*"[^>]*>.*?</div>c              3   ó,   •K  — | ]  }|d    ‰v –— Œ y­wrL   rM   )rN   rO   Ú	body_htmls     €r   rQ   zparse_detail.<locals>.<genexpr>œ   s   øè ø€ Ò:°�a˜‘h )Ô+Ñ:ùs   ƒc              3   ó`   K  — | ]&  }d |d   › dt        j                  |d   «      › d�–— Œ( y­w)z<p><a href="r'   z">rT   z</a></p>N)r   Úescape)rN   rO   s     r   rQ   zparse_detail.<locals>.<genexpr>ž   s3   è ø€ ÒmÐcd ¨a°©h¨Z°r¼(¿/¹/È!ÈFÉ)Ó:TÐ9UÐU]Ô^Ñmùs   ‚,.ú
z<imgz<iframeÚvideor   ©r1   Úcontentr2   Úattachments)r,   r   rC   r6   r   r   r7   r   ÚSÚIr5   ÚlowerrX   rZ   Úanyr8   ÚsplitÚjoinÚrstripr"   )r'   r:   r1   r=   r2   ÚdÚattsr>   rT   r[   Úhas_attÚatt_htmlÚtext_lenÚhas_imgÚ	has_videorP   r]   s                  @@r   Úparse_detailrs   \   s%  ù€ Ü�c“
€IÙØà€EÜ
�	‰	Ð6¸	Ä2Ç9Á9ÓM€AÙÜœBŸF™F :¨r°1·7±7¸1³:Ó>Ó?ˆÙÜ�I‰IÐ-¨y¼"¿)¹)ÓDˆÙÜ¤§¡Ð'QÐSUÐWX×W^ÑW^Ð_`ÓWa×WgÑWgÓWiÓ jÓkˆEà€HÜ
�	‰	Ð;¸YÌÏ	É	ÓR€AÙÜ�I‰IÐ0°!·'±'¸!³*Ó=ˆÙØ—w‘w˜q“zˆHÙÜ�I‰IÐ0°)Ó<ˆÙØ—w‘w˜q“zˆHà€IÜ
�	‰	ÐGÈÔTV×T]ÑT]Ó^€AÙØ—G‘G˜A“Jˆ	ÙÜ�I‰IÐ6¸	Ä2Ç9Á9ÓMˆÙØŸ™ ›
ˆIä—‘Ð3°R¸Ì"Ï$É$ÔQS×QUÑQUÉ+ÔV€IÜ—‘Ð1°2°yÌÏÉÌrÏtÉtÉÔT€Ið €DÜ�[‰[ÐHÈ)ÓTó aˆØ—W‘W˜Q“Z×%Ñ%Ó'¬°Q·W±W¸Q³ZÓ)@ˆdˆÜ�9‰9ÐHÈ$ÔPR×PTÑPTÔUÐYbÐfj×fpÑfpÓfrÑYrð  wBð  FJ÷  FPñ  FPó  FRò  wRØ"Ÿo™o¨fÔ5‘dÀDÇOÁOÐTXÔDY¹DÔ_gÐsw÷  tCñ  tCð  DGô  tHÑkoð  NQð  TXñ  NXñ  `YˆGÜÓ9°DÔ9Õ9Ø—‘ TÒ%N¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NÐW^Ñ_Ö`ðaòlô —‘Ð(¨(°IÓ>€IÜ—‘Ð'¨°9Ó=€IÜ—‘�{ E¨9Ó5€IÜ—‘�} b¨)Ó4€Iô —‘ÐcÐegÐirÔz|×z~Ñz~ô  BD÷  BFñ  BFñ  {Fô  G€IáÜÓ:°TÔ:Ó:ˆÙØ—w‘wÑmÐhlÔmÓmˆHØ!×(Ñ(Ó*¨TÑ1°HÑ<ˆIä”2—6‘6˜* b¨)Ó4×:Ñ:Ó<Ó=€HØ˜	Ð!€GØ˜YÐ&Ò>¨'°YÐ*>€IØ�!‚|™G©I¹dØ¨2¸8ÐTVÑWÐWØ y¸hÐW[Ñ\Ð\r   c                 ó0  — t        j                  t        «      }|j                  d«       |j	                  «       }|j                  d«       d}| D ]Î  }	 |j                  d|j                  dd«      |j                  dd«      |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      f
«       ||j                  z  }ŒÐ |j                  «        |j                  «        t        d|› dt        | «      |z
  › �«       |S # t        $ r,}t        d|j                  dd«      › d|› �«       Y d }~�Œ@d }~ww xY w)NúPRAGMA busy_timeout=300000aî  CREATE TABLE IF NOT EXISTS crawl_results (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_id INTEGER DEFAULT 0,
        title TEXT, url TEXT, content TEXT,
        publish_date TEXT, summary TEXT,
        domain TEXT, category TEXT DEFAULT '',
        content_hash TEXT, crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        industry TEXT DEFAULT '', group_name TEXT DEFAULT '',
        script_name TEXT DEFAULT '', attachments TEXT DEFAULT '[]',
        UNIQUE(domain, url)
    )r   z¥INSERT OR IGNORE INTO crawl_results (domain, title, url, content, publish_date, summary, industry, group_name, script_name, attachments) VALUES (?,?,?,?,?,?,?,?,?,?)Údomainr	   r1   r'   rc   r2   ÚsummaryÚindustryÚ
group_nameÚscript_namerd   ú[]z  [push] ERR ú: z[push_local] new=z skip=)Úsqlite3ÚconnectÚ
QUALITY_DBÚexecuteÚcursorr   Úrowcountr$   ÚprintÚcommitÚcloser"   )Úrecordsrz   ÚconnÚcurÚn_newr*   r+   s          r   Ú
push_localrŠ   ©   sp  € Ü�?‰?œ:Ó&€DØ‡L�LÐ-Ô.Ø
�+‰+‹-€CØ‡K�Kð 
	ô 

ð €EØò :ˆð
	:Ø�K‰Kð xØ—‘�x Ó$ a§e¡e¨G°RÓ&8¸!¿%¹%ÀÀrÓ:JØ—‘�y "Ó% q§u¡u¨Z¸Ó'<¸a¿e¹eÀIÈrÓ>RØ—‘�z 2Ó&¨¯©¨l¸BÓ(?Ø—‘�} bÓ)¨1¯5©5°ÀÓ+EðGôð �S—\‘\Ñ!‰Eð:ð 	‡K�K„MØ‡J�J„LÜ	Ð˜e˜W F¬3¨w«<¸Ñ+=Ð*>Ð
?Ô@Ø€Løô ò 	:Ü�M !§%¡%¨¨b£/Ð!2°"°Q°CÐ8×9Ò9ûð	:ús   ÁCE Å 	FÅ)!FÆFc                  ó¼  — 	 t        j                  t        «      } | j                  d«       | j                  dt        f«      j                  «       }| j                  «        |st        d«       y t        j                  t        d¬«      }|j                  d«       |j                  d«       dx}}	 |D ]Â  }|\	  }}}	}
}}}}}|j                  d	|f«      }|j                  «       }	 |rF|j                  d
||	xs dd d |
xs d|xs dd d |xs d|xs d|xs d|xs d|d   f	«       |dz  }nH|j                  d|||	xs dd d |
xs d|xs dd d |xs d|xs d|xs d|xs dt        |f«       |dz  }ŒÄ |j                  «        |j                  dt        f«       |j                  «        |j                  dt        f«      j                  «       d   }|j                  «        t        d|› d|› d|› d�«       y # t        $ r}t        d|› �«       Y d }~y d }~ww xY w# t        $ r}t        d|› d|› �«       Y d }~�ŒŽd }~ww xY w# |j                  «        w xY w)Nru   z�SELECT title, url, content, publish_date, summary, industry, group_name, script_name, attachments FROM crawl_results WHERE domain=? ORDER BY idz[sync] local read ERR: u   [sync] æœ¬åœ°æ²¡æœ‰æ•°æ�®i,  )r   zPRAGMA journal_mode=WALr   z'SELECT id FROM gov_raw WHERE page_url=?zƒUPDATE gov_raw SET title=?, content=?, publish_date=?, summary=?, industry=?, group_name=?, script_name=?, attachments=? WHERE id=?r	   i ¡ r{   r   z«INSERT INTO gov_raw (title, page_url, content, publish_date, summary, industry, group_name, script_name, attachments, site_name, source_url) VALUES (?,?,?,?,?,?,?,?,?,?,?)z  [sync] ERR r|   z±INSERT INTO gov_search(rowid,title,site_name,summary) SELECT r.id,r.title,r.site_name,r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z[sync] OK updated=z
 inserted=u    DBå…±u   æ�¡)r}   r~   r   r€   ÚDOMAINÚfetchallr…   r$   rƒ   r   ÚfetchoneÚ	SITE_NAMEr„   )r‡   Úrowsr+   ÚdstÚupdÚinsr*   r1   r'   rc   r2   rw   ÚindÚgrpÚsnÚattrˆ   ÚrowÚtotals                      r   Úsync_to_serverrš   Ë   s‘  € ð
Ü�‰œzÓ*ˆØ�‰Ð1Ô2Ø�|‰|ð ^ÜˆIó
÷ ‰(‹*ð 	ð 	�
‰
Œñ ÜÐ)Ô*ØÜ
�/‰/œ'¨3Ô
/€CØ‡K�KÐ)Ô*Ø‡K�KÐ,Ô-Ø€M€Cˆ#ðØò 	2ˆAØHIÑEˆE�3˜ ¨7°C¸¸bÀ#Ø—+‘+ÐGÈ#ÈÓPˆCØ—,‘,“.ˆCð2ÙØ—K‘Kð ^Ø ¢¨B°°Ð 8¸(º.ÀbÈ7Ê=ÐVXÐZ^Ð[^ÐJ_Øš  C¢I¨2¨rªx°R¸ºÀÀcÈ!ÁfðNôOð ˜1‘H‘Cà—K‘Kð FØ  g¢m°°W°fÐ%=¸xº~È2ÐPWÒP]Ð[]Ð_cÐ`cÐOdØš  C¢I¨2¨rªx°R¸ºÀÄiÐQTðVôWð ˜1‘H�Cøð!	2ð& 	�
‰
ŒØ�‰ðQô ˆLô		ð
 	�
‰
ŒØ—‘ÐLÌyÈlÓ[×dÑdÓfÐghÑiˆà�	‰	ŒÜ	Ð˜s˜e :¨c¨U°&¸¸¸sÐ
CÕDøôQ ò ÜÐ'¨ sÐ+Ô,Üûðûô8 ò 2Ü˜ c U¨"¨Q¨CÐ0×1Ò1ûð2ûð 	�	‰	�úsP   ‚AG= Â14I	 Ã&BH!Å6A!I	 Ç=	HÈHÈHÈ!	IÈ*IÈ;I	 ÉIÉI	 É	Ic                  ó  — dt         j                  v } d }dt         j                  v }t         j                  dd  D ]O  }|j                  d«      r 	 t        |j	                  dd«      d   «      }Œ4|j                  «       sŒEt        |«      }ŒQ t        d|› d| › �«       | rt        «        y g }d}t        dd	«      D ]°  }|r||kD  r n§|dk(  rd
nd|› �}t        j                  |¬«      }t        |«      }	|	st        d|› d�«        ng|dk(  rt        |	«      }t        d|› �«       t        |	t        «      }
t        d|› dt!        |
«      › d�«       |
s n|j#                  |
«       ||k\  sŒ° n t        dt!        |«      › d�«       g }t%        t&        ¬«      5 }|D �ci c]  }|j)                  t*        |d   «      |“Œ }}d}t-        |«      D �]-  }||   }|j/                  «       }|dz  }|€!t        d|d   d d › �«       |d   d
|d   g dœ}|d   r'|d   t0        k  rt        d|d   › d|d   d d › �«       Œmt2        t4        |d   xs |d   |d   |d   |d   xs |d   t7        j8                  dd
|d   «      d d xs |j;                  dd
«      d
t<        t>        j@                  jC                  t         j                  d   «      |d    rtE        jF                  |d    d!¬"«      nd#d$œ}|jI                  |«       �Œ0 	 d d d «       t        d%t!        |«      › �«       |rHtK        |t>        j@                  jC                  t         j                  d   «      «       |rt        «        y y y # t
        $ r Y �Œ:w xY wc c}w # 1 sw Y   Œ€xY w)&Nz--sync-onlyz--syncr   z--pages=ú=z[JZZQ-ZMYZJ] max_pages=z sync_only=r   iè  r	   Ú_)Úsuffixz[list] Pu    èŽ·å�–å¤±è´¥u   [list] æ€»é¡µæ•°=r|   u    æ�¡u   [total] åˆ—è¡¨å…± )Úmax_workersr'   z	  [fail] r1   é(   r2   rb   z  [cutoff] r
   rc   r0   r   r4   rd   F)Úensure_asciir{   )rv   Ú	site_namer1   r'   rc   r2   rw   rx   ry   rz   rd   z[total] valid=)&ÚsysÚargvrX   rD   ri   Ú
ValueErrorÚisdigitrƒ   rš   r   ÚLIST_TPLÚformatr,   rE   rA   rZ   r"   Úextendr   ÚMAX_WORKERSÚsubmitrs   r   ÚresultÚCUTOFFrŒ   r�   r   r   r   ÚGROUPÚosÚpathÚbasenameÚjsonÚdumpsr8   rŠ   )Ú	sync_onlyÚ	max_pagesÚdo_syncrO   Ú	all_itemsÚtotal_pagesÚpgrž   r'   r:   r<   ÚvalidÚexecutorÚitÚfut_mapÚdoneÚfutÚdetÚrecs                      r   ÚmainrÂ   ÿ   sš  € Ø¤§¡Ð)€IØ€IØœ#Ÿ(™(Ð"€GÜ�X‰X�a�bˆ\ò ˆØ�<‰<˜
Ô#ðÜ §¡¨¨Q£°Ñ 2Ó3‘	ð �Y‰Y�[Ü˜A›‰Iðô 
Ð# I ;¨k¸)¸Ð
EÔFÙÜÔØà€IØ€KÜ�A�t‹nò ˆÙ˜˜išÙØ˜Q’w‘ a¨ t HˆÜ�o‰o VˆoÓ,ˆÜ˜#“Jˆ	ÙÜ�H˜R˜D Ð.Ô/ÙØ�Š7Ü(¨Ó3ˆKÜÐ% k ]Ð3Ô4Ü" 9¬hÓ7ˆÜ�˜˜˜Bœs 5›z˜l¨$Ð/Ô0ÙÙØ×Ñ˜ÔØ�ÓÙð%ô& 
Ðœs 9›~Ð.¨dÐ
3Ô4à€EÜ	¬Ô	4ð ¸ØJSÖTÀB�8—?‘?¤<°°E±Ó;¸RÑ?ÐTˆÐTØˆÜ Ó(ó 	ˆCØ˜‘ˆBØ—*‘*“,ˆCØ�A‰IˆDØˆ{Ü˜	 " W¡+¨c¨rÐ"2Ð!3Ð4Ô5Ø " 7¡¸ÈÈ:ÉÐgiÑj�Ø�:Š 3 z¡?´VÒ#;Ü˜ C¨
¡OÐ#4°A°c¸'±lÀ3ÀBÐ6GÐ5HÐIÔJØä Ü&Ø˜W™Ò4¨¨G©Ø˜%‘yØ˜y™>Ø 
™OÒ=¨r°*©~ÜŸ6™6 *¨b°#°i±.ÓAÀ$À3ÐGÒ^È2Ï6É6ÐRYÐ[]ÓK^ØÜ#Ü!Ÿw™w×/Ñ/´·±¸±Ó<ØUXÐYfÒUgœtŸz™z¨#¨mÑ*<È5ÕQÐmqñˆCð �L‰L˜Öñ/	÷ô6 
ˆNœ3˜u›:˜,Ð
'Ô(ÙÜ�5œ"Ÿ'™'×*Ñ*¬3¯8©8°A©;Ó7Ô8ÙÜÕð ð øô{ ò ÚðüòD U÷ð ús1   ÁM(ÆM=Æ!M8Æ=E M=Í(	M5Í4M5Í8M=Í=NÚ__main__)r.   )*Ú__doc__r   r£   r¯   r²   r%   Úhtmlr   Úurllib.parseÚurllibr   r}   Úconcurrent.futuresr   r   r�   rZ   r§   r9   rŒ   r®   r­   Úenvironr   r   r°   rj   ÚdirnameÚabspathÚ__file__r   rª   r   r   r,   rA   rE   rs   rŠ   rš   rÂ   Ú__name__rM   r   r   ú<module>rÎ      sê   ðñ
ó 
Û 
Û 	Û Û Û Û Û Û ß ?à$€	Ø#€ØB€Ø€Ø	€Ø€Ø	€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø�W‰W�\‰\˜"Ÿ'™'Ÿ/™/¨"¯'©'¯/©/¸(Ó*CÓDÐFZÓ[€
Ø€àØOØ'ñ€ò*ó
òò.òJ]òZòD1EòhHðV ˆzÒÙ…Fð r   