ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ \[c@sdZdgZddlmZyddlmZWn)ek r^ZdefdYZnXddlZddlZej d \Z Z Z e dkoe d koe dkZ e dkoe dkZe dkoe d kZdd lmZmZmZmZmZdd lmZmZdd lmZmZmZdZdefdYZdefdYZe dkre d kre rddl Z e j!dZ"e"e_"e j!de j#Z$e$e_$ddl%m&Z&m'Z'dZ(dZ)e(e_(e)e_)e*Z ndS(sCUse the HTMLParser library to parse HTML files that aren't too bad.tHTMLParserTreeBuilderi(t HTMLParser(tHTMLParseErrorRcBseZRS((t__name__t __module__(((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyRsNiii(tCDatatCommentt DeclarationtDoctypetProcessingInstruction(tEntitySubstitutiont UnicodeDammit(tHTMLtHTMLTreeBuildertSTRICTs html.parsertBeautifulSoupHTMLParsercBszeZdZdZdZedZedZdZdZ dZ dZ d Z d Z d ZRS( cOs tj|||g|_dS(N(Rt__init__talready_closed_empty_element(tselftargstkwargs((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR9s cCstj|dS(siIn Python 3, HTMLParser subclasses must implement error(), although this requirement doesn't appear to be documented. In Python 2, HTMLParser implements error() as raising an exception. In any event, this method is called only on very strange markup and our best strategy is to pretend it didn't happen and keep going. N(twarningstwarn(Rtmsg((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyterrorEs cCs)|j||dt}|j|dS(Nthandle_empty_element(thandle_starttagtFalset handle_endtag(Rtnametattrsttag((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pythandle_startendtagPsc Csi}x9|D]1\}}|dkr.d}n|||][^\s/=>]*)(\s*=+\s*(\'[^\']*\'|"[^"]*"|(?![\'"])[^>\s]*))?s <[a-zA-Z][-.a-zA-Z0-9:_]* # tag name (?:\s+ # whitespace before attribute name (?:[a-zA-Z_][-.:a-zA-Z0-9_]* # attribute name (?:\s*=\s* # value indicator (?:'[^']*' # LITA-enclosed value |\"[^\"]*\" # LIT-enclosed value |[^'\">\s]+ # bare value ) )? ) )* \s* # trailing whitespace (ttagfindtattrfindcCsd|_|j|}|dkr(|S|j}|||!|_g}tj||d}|sotd|j}||d|!j|_ }x ||kr|j rt j||}nt j||}|sPn|j ddd\} } } | sd} nX| d dko.| dknsW| d dkoR| dknrg| dd!} n| r|j| } n|j| j| f|j}qW|||!j} | dkrv|j\} }d |jkr | |jjd } t|j|jjd }n|t|j}|j r^|jd |||!d fn|j|||!|S| jd r|j||n/|j||||jkr|j|n|S(Niis#unexpected call to parse_starttag()iis'it"t>s/>s s junk characters in start tag: %ri(Rjs/>(R#t__starttag_texttcheck_for_whole_start_tagtrawdataRgtmatchtAssertionErrortendtlowertlasttagRLRhtattrfind_toleranttgrouptunescapeR&tstriptgetpostcountREtrfindRR,tendswithR RtCDATA_CONTENT_ELEMENTStset_cdata_mode(RtitendposRmRRntkRtmtattrnametrestR*Rptlinenotoffset((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pytparse_starttags\      $$    cCs2|j|_tjd|jtj|_dS(Ns (Rqt cdata_elemtretcompiletIt interesting(Rtelem((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyR|Ts(+t__doc__t__all__RRt ImportErrorR<t ExceptiontsysRt version_infotmajortminortreleaseRNRORPt bs4.elementRRRRR t bs4.dammitR R t bs4.builderR R RRdRRRRRstVERBOSEtlocatestarttagendt html.parserRgRhRR|RK(((s;/usr/lib/python2.7/site-packages/bs4/builder/_htmlparser.pyts@   $(2      7