Files
DomGod/app/__pycache__/site_analyzer.cpython-311.pyc

59 lines
16 KiB
Plaintext
Raw Normal View History

fix: AI worker crash-proof + GDPR/hosting/accessibility analysis AI worker fixes (root cause of "nothing reaches Replicate"): - Worker task died silently — no exception handler around while loop - Added try/except around entire loop body with exc_info logging - Added watchdog task that restarts dead workers every 10 seconds - ensure_workers_alive() called on every /api/ai/assess/batch POST - _assess_one() is now a top-level function (not closure) — avoids subtle scoping bugs with async inner functions in while loops - /api/ai/debug endpoint: shows worker alive status, task exception, last 10 queue entries — browse to /api/ai/debug to diagnose - /api/ai/worker/restart endpoint + UI button - "Restart AI worker" button + "Debug AI queue" link in enrichment tab site_analyzer.py — new signals: - IP resolution + ip-api.com for ASN, org, ISP, host country - EU hosting detection (27 EU + EEA + adequacy countries) - GDPR: detects Cookiebot, OneTrust, CookiePro, Osano, Iubenda, Borlabs, CookieYes, Complianz, Usercentrics + text signals - Privacy policy and GDPR text presence - Accessibility: html lang missing, images without alt count, skip nav link, empty links, inputs without labels Gemini prompt additions: - Hosting section: IP, ASN, org/ISP, EU vs non-EU flag - GDPR section: cookie tool, notice, privacy policy - Accessibility section: all quick-scan results - New output fields: hosting_notes, gdpr_compliance, accessibility_issues[] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 18:01:34 +02:00
<EFBFBD>
<0F>i<EFBFBD>,<00><00><00>dZddlZddlZddlZddlZddlmZddlZddlm Z ej
e <0B><00>Z gd<05>Z gd<06>Zgd<07>dd gd
d gd gd gd<0E>Zdgdgdgd<12>Zgd<13>Zgd<14>Zejd<15><00>Zejd<16><00>Zgd<17>Zdedefd<1A>ZdS)zNDeep site analysis: content quality, SEO signals, performance, indexing hints.<2E>N)<01>Optional)<01> BeautifulSoup)z lorem ipsumzsed ut perspiciatisznunc sem sapienz nulla id nibhzaenean dignissimzaliquam tinciduntzvestibulum commodozfusce nunc lacus<75> consectetuerzcras ornare tristiquezntulla nec antezrisus id metuszpraesent placeratzfusce pellentesquez suscipit nibhzinteger vitae liberozfelis quis tortor)zunder constructionz coming soonz sample pagezthis is a demoz default postz hello worldz test post<73> uncategorized)z gtag('config'z!google-analytics.com/analytics.jszG-zgoogletagmanager.com/gtm.jszGTM-z
fbq('init'z#connect.facebook.net/en_US/fbeventszstatic.hotjar.comzclarity.ms/tag)<05>google_analytics<63>google_tag_manager<65>facebook_pixel<65>hotjar<61>clarityzgoogle-site-verificationz msvalidate.01zyandex-verification)<03>google_search_console<6C>bing_webmaster<65>yandex) <0C>digitalizadores<65> kit-digital<61>
kitdigital<EFBFBD> kit_digitalzfondos-europeos<6F>fondos_europeos<6F>nextgenerationznext-generation<6F>prtrzplan-recuperacion<6F> acelerapyme<6D> cofinanciado)
z kit digitalzagente digitalizadorzfondos europeosznext generation eu<65>nextgenerationeuuplan de recuperaciónru financiado por la unión europeazred.es/kit-digitalrz0[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}z8(?:\+34[\s\-]?)?(?:6|7|8|9)\d{2}[\s\-]?\d{3}[\s\-]?\d{3})z facebook.comz instagram.comz linkedin.comz twitter.comzx.comz
tiktok.com<6F>domain<69>returnc <00><00><><00><00>(<28>)<29>*<2A>+<2B>,K<00>id<01><00>dd<03>dd<05>dd<05>dd<05>dd<05>d d<05>d
d<05>d d<03>d d<05>d d<03>dg<00>dd<03>dg<00>dd<12>dd<12>dd<12>idd<12>dd<03>dd<05>dd<05>dd<05>dd<1B>dd<03>dd<03>dd<03>dg<00>d g<00>d!d<05>d"d<05>d#d<03>d$g<00>d%g<00>d&g<00><01>ggdd'<27><03>} tj<00><00>}tjd(d)dd*d+i<01>,<2C><00>4<00>d{V<00><03> }|<03>d-<2D><00><00><02><00><00>d{V<00><03>}|jd.kr|<03>d/<2F><00><00><02><00><00>d{V<00><03>} ddd<05><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwYt tj<00><00>|z
d0z<00><00>}|j}|<01>|jd.k||jt|j
<00><00>tt|j <00><00>d1z d2<64><00>|j<00>d <09><00>d3<64><06><00>t|d4<64><00>}|<06><00><00><00>+|<07>d5<64><00>}|r|<08>d)<29>6<EFBFBD><00>dd7<64>nd|d<|<07>d8d9d:i<01>;<3B><00>} | r| <09>d<<3C><00>pddd=<3D>nd|d<|<07>d><3E><00>}
|
r|
<EFBFBD>d)<29>6<EFBFBD><00>dd7<64>nd|d<t'|<07>d8d9d?i<01>;<3B><00><00><00>|d<|<07>d@dA<64>B<EFBFBD><00>} | r| <0B>dC<64><00>nd|d!<|<07>d8dD<64>E<EFBFBD><00>} | r| <0C>d<<3C><00>nd|d"<|gdF<64><01><00>D]} | <0A><00><00><00>|<07>dGd)<29>H<EFBFBD><00>}|<0E><00><00>}t|<0F><00>|d<dG<64>|ddI<64><00><00>|d<|<0E><00><00><00>,<2C>,fdJ<64>t.D<00><00>}t|<10><00>dk|d <|ddK<64>|d<<00>,fdL<64>t0D<00><00>}t|<11><00>dk|d<|ddM<64>|d<|<07>dN<64><00>}t|<12><00>|d<t|<07>dOd)<29>P<EFBFBD><00><00><00>|d<t4<00><00><00>D];\}}t9<00>+fdQ<64>|D<00><00><00><00>r|d<00>|<13><00><00><t<<00><00><00>D];\}}t9<00>+fdR<64>|D<00><00><00><00>r|d <00>|<13><00><00><g}|D]<5D>}|<16>dS<64><00>pd|<16>dT<64><00>pdz|<16>dU<64><00>pdz<00><00><00>}t>D] }||vr|<15>dV|<18><00><02><00>n<01>!<21><>t@D]}|<18>+vr|<15>dW|<18><00><02><00><00>|<07>dXd)<29>Y<EFBFBD><00>D]H}|dC<00><00><00>}dZ|vsd[|vsd\|vr |<15>d]|dd^<5E><00><00><02><00><00>ItCtD<00>#|<15><00><00><00>dd_<64>}t|<15><00>dk|d#<||d$<|<07>dXd)<29>Y<EFBFBD><00>D<00>]<5D>}|dC}|<1A>$d`<60><00>ro|dad<05><00>db<64><00>d<00>%<00><00><00><00><00><00>*<2A>*r%<25>*|d%vr|d%<00><00>*<2A><00><00><>|<1A>$dc<64><00>rFtMj'ddd|ded<05><00><00>}|r%||d&vr|d&<00>|<1B><00><00><>df|vsdg|vr/||dhvr#|dh<00>|ddi<64><00><00><00><01>!tPD]m}||<1A><00><00>vrU|<1A>db<64><00>d<00>)dj<64><00>}||dkvr|dk<00>|<1D><00>n<01>n<EFBFBD><01><>tT<00>+|ddl<64><00><00>D]V<>*<2A>*<2A><00><00><00>*<2A>*|d%vr6t9<00>*fdm<64>dnD<00><00><00><00>s|d%<00><00>*<2A><00><00>WtX<00>+|<0E><00>D]=}tMj'dod|<1B><00>}||d&vr|d&<00>|<1E><00><00>>dpD]:}tCtD<00>#||<00><00><00><00>ddK<64>||<<00>;ddql-m.} | |tE|j<00><00><00><00>|d
<n1#t^$r$}!t|!<21><00>dd=<3D>|dr<Yd}!~!nd}!~!wwxYwdstdtt`tfdu<64>}"tcj2|"d-<2D><00>dv<64><03><00>|"d-<2D><00>dw<64><03><00><00><00><00>d{V<00><03>\}#}$|#du|d<|$du|d<|$r|$<24><00><00>}%dx|%vody|%v|d<ddl3<6C>)ddl4<6C>( <00>(<28>)<29>fdz<64>}&tcj5<00><00>}'|'<27>6d|&<26><00><00>d{V<00><03>\|d <|d <n#t^$rYnwxYw|S){zGFetch and deeply analyse a site. Returns a rich dict for the AI prompt.r<00> reachableF<65> load_time_msN<73> status_code<64> final_url<72> page_size_kb<6B>server<65>cms<6D> ssl_valid<69>ssl_expiry_days<79>has_lorem_ipsum<75> lorem_matches<65>has_placeholder<65>placeholder_matches<65>
word_countr<00> image_count<6E> broken_images<65> script_count<6E>has_mobile_viewport<72>
page_title<EFBFBD>meta_description<6F>h1_text<78>visible_text_snippet<65><00> has_sitemap<61>
has_robots<EFBFBD>robots_disallows_google<6C>analytics_present<6E>webmaster_verified<65> canonical_url<72>og_titler<00>kit_digital_signals<6C>emails<6C>phones)<03>whatsapp<70> social_links<6B>error<6F>Tz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)<04>timeout<75>follow_redirects<74>verify<66>headerszhttps://i<>zhttp://i<>i<00>)rrrrr r!z html.parser<65>title)<01>strip<69><70><00>meta<74>name<6D> description)<01>attrs<72>contenti,<00>h1<68>viewport<72>link<6E> canonical)<01>rel<65>hrefzog:title)<01>property)<03>script<70>style<6C>noscript<70> )<02> separatorrGi<>c<00><00><01>g|]}|<01>v<00>|<01><02> S<00>r[<00><03>.0<EFBFBD>p<>vls <20><>./home/malin/c0ding/DomGod/app/site_analyzer.py<70>
<listcomp>z analyze_site.<locals>.<listcomp><3E>s<00><><00>:<3A>:<3A>:<3A>A<EFBFBD>!<21>r<EFBFBD>'<27>'<27>a<EFBFBD>'<27>'<27>'<27><00>c<00><00><01>g|]}|<01>v<00>|<01><02> Sr[r[r\s <20>r`raz analyze_site.<locals>.<listcomp><3E>s<00><><00>=<3D>=<3D>=<3D><11>Q<EFBFBD>"<22>W<EFBFBD>W<EFBFBD>1<EFBFBD>W<EFBFBD>W<EFBFBD>Wrb<00><00>imgrU)<01>srcc3<00>D<00>K<00>|]}|<01><00><00><00>vV<00><00>dS<00>N<><01>lower<65>r]<00>s<>hls <20>r`<00> <genexpr>zanalyze_site.<locals>.<genexpr><3E><00>/<00><><00><00><00>1<>1<>q<EFBFBD>1<EFBFBD>7<EFBFBD>7<EFBFBD>9<EFBFBD>9<EFBFBD><02>?<3F>1<>1<>1<>1<>1<>1rbc3<00>D<00>K<00>|]}|<01><00><00><00>vV<00><00>dSrirjrls <20>r`rozanalyze_site.<locals>.<genexpr><3E>rprbrg<00>alt<6C>srcsetzimg:ztext:<3A>a)rSrzred.esrzlink:<3A>2<00>
zmailto:<3A><00>?ztel:z[^\d+]<5D>zwa.mezapi.whatsapp.comr=<00>P<00>/r>i<>8c3<00>B<00>K<00>|]}<01><02>|<01><00>V<00><00>dSri)<01>endswith)r]<00>x<>ems <20>r`rozanalyze_site.<locals>.<genexpr><3E>s-<00><><00><00><00>5v<35>5v<35><11>b<EFBFBD>k<EFBFBD>k<EFBFBD>!<21>n<EFBFBD>n<EFBFBD>5v<35>5v<35>5v<35>5v<35>5v<35>5vrb)z.pngz.jpgz.cssz.jsz.svgz[\s\-])r;r<r=r>)<01>
detect_cmsr?<00>urlrc<00><00>K<00> tjddd<03><04><00>4<00>d{V<00><03>}|<01>|<00><00><00>d{V<00><03>}|jdkr|jndcddd<00><00><00>d{V<00><03>S#1<00>d{V<00><03>swxYwYdS#t
$rYdSwxYw)N<>TF)rArBrCrH)<06>httpx<70> AsyncClient<6E>getr<00>text<78> Exception)r<><00>c<>rs r`<00>
_check_urlz analyze_site.<locals>._check_url<72>s_<00><00><00><00> <18><1C>(<28><11>T<EFBFBD>RW<52>X<>X<>X<> @<01> @<01> @<01> @<01> @<01> @<01> @<01>\]<5D><1B>%<25>%<25><03>*<2A>*<2A>$<24>$<24>$<24>$<24>$<24>$<24><01>!"<22><1D>#<23>!5<>!5<>q<EFBFBD>v<EFBFBD>v<EFBFBD>4<EFBFBD> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01> @<01><><EFBFBD><EFBFBD> @<01> @<01> @<01> @<01> @<01> @<01><><19> <18> <18> <18><17>4<EFBFBD>4<EFBFBD> <18><><EFBFBD>s4<00>A6<00>/A#<03>A6<00>#
A-<07>-A6<00>0A-<07>1A6<00>6
B<03>Bz /sitemap.xmlz /robots.txtz disallow: /<2F> googlebotc<00><><00><03>ddl}<00><07><00><00>}<01><06><00>dfd<03><04><00>5}|<01>|<02><08><05><00>5}|<03><00><00>}|j<00>|dd<07><00>}d|j<00><00><00>|z
jd zfcddd<00><00>cddd<00><00>S#1swxYwY ddd<00><00>dS#1swxYwYdS)
Nri<>rc)rA)<01>server_hostname<6D>notAfterz%b %d %H:%M:%S %Y %ZT<5A><54><EFBFBD><EFBFBD><EFBFBD>)<08>datetime<6D>create_default_context<78>create_connection<6F> wrap_socket<65> getpeercert<72>strptime<6D>utcnow<6F>days) <09>_dt<64>ctxrm<00>ss<73>cert<72>exp<78>_socket<65>_sslrs <20><><EFBFBD>r`<00>
_ssl_checkz analyze_site.<locals>._ssl_checks<><00><><00> "<22> "<22> "<22> "<22><16>-<2D>-<2D>/<2F>/<2F>C<EFBFBD><18>*<2A>*<2A>F<EFBFBD>C<EFBFBD>=<3D>!<21>*<2A>D<>D<> I<01><01><18>_<EFBFBD>_<EFBFBD>Q<EFBFBD><06>_<EFBFBD>?<3F>?<3F>I<01>2<EFBFBD><1D>><3E>><3E>+<2B>+<2B>D<EFBFBD><1D>,<2C>/<2F>/<2F><04>Z<EFBFBD>0@<40>BX<42>Y<>Y<>C<EFBFBD><1F>#<23>,<2C>"5<>"5<>"7<>"7<>#<23>"=<3D>!C<>b<EFBFBD>!H<>H<>I<01>I<01>I<01>I<01>I<01>I<01>I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01>I<01>I<01>I<01>I<01><><EFBFBD><EFBFBD>I<01>I<01>I<01>I<01>I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01> I<01><><EFBFBD><EFBFBD> I<01> I<01> I<01> I<01> I<01> Is6<00>C<03> AB?<05>& C<03>?C <09>C<03>C <09>C<03>C<07>C)7<>time<6D> monotonicr<63>r<>r<>r<00>intr<74><00>update<74>strr<72><00>round<6E>lenrMrDrrk<00>find<6E>get_text<78>bool<6F> decompose<73>split<69>join<69> LOREM_PHRASES<45>PLACEHOLDER_PHRASES<45>find_all<6C> ANALYTICS<43>items<6D>any<6E>append<6E> WEBMASTER<45> KIT_IMG_PATS<54> KIT_TEXT_PATS<54>list<73>dict<63>fromkeys<79>
startswithrG<00>re<72>sub<75>
SOCIAL_DOM<EFBFBD>rstrip<69>EMAIL_RE<52>findall<6C>PHONE_RE<52> app.enricherr<72>r<>r<00>asyncio<69>gather<65>ssl<73>socket<65>get_event_loop<6F>run_in_executor)-r<00>result<6C>t0<74>client<6E>resp<73>load_ms<6D>html<6D>soup<75> title_tag<61> meta_descrN<00>canon<6F>og<6F>tag<61> visible_text<78>words<64>
lorem_hits<EFBFBD>ph_hits<74>imgsrJ<00>sigs<67>
kd_signalsrf<00>combinedr^rtrS<00>ph<70>sd<73>clean<61>ph_c<5F>kr<6B><00>er<65><00> sitemap_txt<78>
robots_txt<EFBFBD> robots_lowerr<72><00>loopr<70>r<>rrnr_s-` @@@@@r`<00> analyze_siter<65>>s<> <00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><00><00><00>+<06><10>&<26>+<06><13>U<EFBFBD>+<06> <17><04>+<06> <16>t<EFBFBD> +<06>
<14>T<EFBFBD> +<06> <17><04> +<06> <11>$<24>+<06> <0E>t<EFBFBD>+<06> <14>U<EFBFBD>+<06> <1A>4<EFBFBD>+<06> <1A>5<EFBFBD>+<06> <18><12>+<06> <1A>5<EFBFBD>+<06> <1E>r<EFBFBD>+<06> <15>a<EFBFBD>!+<06>" <16>q<EFBFBD>#+<06>$ <18><11>%+<06>+<06>& <17><01>'+<06>( <1E>u<EFBFBD>)+<06>* <15>d<EFBFBD>++<06>, <1B>D<EFBFBD>-+<06>. <12>4<EFBFBD>/+<06>0 <1F><02>1+<06>4 <16>u<EFBFBD>5+<06>6 <15>e<EFBFBD>7+<06>8 "<22>5<EFBFBD>9+<06>: <1C>R<EFBFBD>;+<06>< <1D>b<EFBFBD>=+<06>> <18><14>?+<06>@ <13>D<EFBFBD>A+<06>D <16>u<EFBFBD>E+<06>F <1E>r<EFBFBD>G+<06>J <11>"<22>K+<06>L <11>"<22>M+<06>+<06>N<17><1A><15>U+<06>+<06>+<06>F<EFBFBD>\@'<27> <11>^<5E> <1D> <1D><02><18>$<24><16><14>e<EFBFBD>!<21>$U<02>V<02>
<EFBFBD>
<EFBFBD>
<EFBFBD> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C><14><1F><1A><1A>$7<>v<EFBFBD>$7<>$7<>8<>8<>8<>8<>8<>8<>8<>8<>D<EFBFBD><13><1F>3<EFBFBD>&<26>&<26>#<23>Z<EFBFBD>Z<EFBFBD>(:<3A>&<26>(:<3A>(:<3A>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B>;<3B><04>;<3B>  <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C> <<3C><><EFBFBD><EFBFBD> <<3C> <<3C> <<3C> <<3C><16>t<EFBFBD>~<7E>'<27>'<27>"<22>,<2C><04>4<>5<>5<><07><13>y<EFBFBD><04><0E> <0A> <0A><1D>)<29>C<EFBFBD>/<2F>#<23><1F>+<2B><1C>T<EFBFBD>X<EFBFBD><1D><1D>!<21>#<23>d<EFBFBD>l<EFBFBD>"3<>"3<>d<EFBFBD>":<3A>A<EFBFBD>><3E>><3E><1A>l<EFBFBD>&<26>&<26>x<EFBFBD>0<>0<> 
<EFBFBD>
<EFBFBD> <0B> <0B> <0B><1D>T<EFBFBD>=<3D>1<>1<><04> <11>Z<EFBFBD>Z<EFBFBD>\<5C>\<5C><02><19>I<EFBFBD>I<EFBFBD>g<EFBFBD>&<26>&<26> <09>GP<47>Z<>y<EFBFBD>1<>1<><04>1<>=<3D>=<3D>d<EFBFBD>s<EFBFBD>d<EFBFBD>C<>C<>VZ<56><06>|<7C><1C><18>I<EFBFBD>I<EFBFBD>f<EFBFBD>V<EFBFBD>]<5D>,C<>I<EFBFBD>D<>D<> <09>OX<4F>%b<>i<EFBFBD>m<EFBFBD>m<EFBFBD>I<EFBFBD>&><3E>&><3E>&D<>"<22>d<EFBFBD>s<EFBFBD>d<EFBFBD>%K<>%K<>^b<><06>!<21>"<22> <11>Y<EFBFBD>Y<EFBFBD>t<EFBFBD>_<EFBFBD>_<EFBFBD><02>=?<3F>I<>B<EFBFBD>K<EFBFBD>K<EFBFBD>d<EFBFBD>K<EFBFBD>3<>3<>D<EFBFBD>S<EFBFBD>D<EFBFBD>9<>9<>T<EFBFBD><06>y<EFBFBD><19>)-<2D>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>v<EFBFBD>f<EFBFBD>j<EFBFBD>EY<45>Y<EFBFBD>-Z<>-Z<>([<5B>([<5B><06>$<24>%<25><15> <09> <09>&<26>k<EFBFBD> <09>2<>2<><05>7<<3C>"F<>%<25>)<29>)<29>F<EFBFBD>"3<>"3<>"3<>$<24><06><EFBFBD><1F> <11>Y<EFBFBD>Y<EFBFBD>v<EFBFBD>
<EFBFBD>Y<EFBFBD> 3<> 3<><02>24<32>><3E>R<EFBFBD>V<EFBFBD>V<EFBFBD>I<EFBFBD>.<2E>.<2E>.<2E>$<24><06>z<EFBFBD><1A><18>4<EFBFBD>7<>7<>7<>8<>8<> <1C> <1C>C<EFBFBD> <0F>M<EFBFBD>M<EFBFBD>O<EFBFBD>O<EFBFBD>O<EFBFBD>O<EFBFBD><1B>}<7D>}<7D>s<EFBFBD>$<24>}<7D>?<3F>?<3F> <0C><1C>"<22>"<22>$<24>$<24><05>"<22>5<EFBFBD>z<EFBFBD>z<EFBFBD><06>|<7C><1C>),<2C><18><18>%<25><04><13><04>+<2B>)><3E>)><3E><06>%<25>&<26><1A> <1F> <1F> !<21> !<21><02>:<3A>:<3A>:<3A>:<3A><1D>:<3A>:<3A>:<3A>
<EFBFBD>$'<27>
<EFBFBD>O<EFBFBD>O<EFBFBD>a<EFBFBD>$7<><06> <20>!<21>",<2C>R<EFBFBD>a<EFBFBD>R<EFBFBD>.<2E><06><EFBFBD><1F>=<3D>=<3D>=<3D>=<3D>1<>=<3D>=<3D>=<3D><07>$'<27><07>L<EFBFBD>L<EFBFBD>1<EFBFBD>$4<><06> <20>!<21>(/<2F><02><11><02> <0B><06>$<24>%<25><14>}<7D>}<7D>U<EFBFBD>#<23>#<23><04> #<23>D<EFBFBD> <09> <09><06>}<7D><1D>!$<24>T<EFBFBD>]<5D>]<5D>8<EFBFBD><14>]<5D>%F<>%F<>!G<>!G<><06>~<7E><1E>$<24>/<2F>/<2F>+<2B>+<2B> 9<> 9<>J<EFBFBD>D<EFBFBD>$<24><12>1<>1<>1<>1<>D<EFBFBD>1<>1<>1<>1<>1<> 9<><16>*<2A>+<2B>2<>2<>4<EFBFBD>8<>8<>8<><38>#<23>/<2F>/<2F>+<2B>+<2B> :<3A> :<3A>J<EFBFBD>D<EFBFBD>$<24><12>1<>1<>1<>1<>D<EFBFBD>1<>1<>1<>1<>1<> :<3A><16>+<2B>,<2C>3<>3<>D<EFBFBD>9<>9<>9<><39><18>
<EFBFBD><17> <1A> <1A>C<EFBFBD><1C><17><17><15><1E><1E>-<2D>2<EFBFBD>#<23>'<27>'<27>%<25>.<2E>.<2E>2F<32>B<EFBFBD>G<>3<EFBFBD>7<EFBFBD>7<EFBFBD>S[<5B>K\<5C>K\<5C>Kb<4B>`b<>c<>j<>j<>l<>l<>H<EFBFBD>!<21> <1A> <1A><01><14><08>=<3D>=<3D><1E>%<25>%<25>j<EFBFBD>Q<EFBFBD>j<EFBFBD>j<EFBFBD>1<>1<>1<><19>E<EFBFBD>!<21><><1F> /<2F> /<2F>A<EFBFBD><10>B<EFBFBD>w<EFBFBD>w<EFBFBD><1A>!<21>!<21>+<2B>!<21>+<2B>+<2B>.<2E>.<2E>.<2E><><15><1D><1D>s<EFBFBD><14><1D>.<2E>.<2E> 7<> 7<>A<EFBFBD><14>V<EFBFBD>9<EFBFBD>?<3F>?<3F>$<24>$<24>D<EFBFBD><1C><04>$<24>$<24><08>D<EFBFBD>(8<>(8<>M<EFBFBD>T<EFBFBD><Q<><Q<><1A>!<21>!<21>"5<>$<24>s<EFBFBD><02>s<EFBFBD>)<29>"5<>"5<>6<>6<>6<><36><19>$<24>-<2D>-<2D>
<EFBFBD>3<>3<>4<>4<>S<EFBFBD>b<EFBFBD>S<EFBFBD>9<>
<EFBFBD> #<23>J<EFBFBD><0F><0F>!<21> 3<><06>}<7D><1D>(2<><06>$<24>%<25><16><1D><1D>s<EFBFBD><14><1D>.<2E>.<2E> <1E> <1E>A<EFBFBD><14>V<EFBFBD>9<EFBFBD>D<EFBFBD><13><EFBFBD><EFBFBD>y<EFBFBD>)<29>)<29> <1E><19>!<21>"<22>"<22>X<EFBFBD>^<5E>^<5E>C<EFBFBD>(<28>(<28><11>+<2B>1<>1<>3<>3<>9<>9<>;<3B>;<3B><02><15>0<>"<22>F<EFBFBD>8<EFBFBD>$4<>4<>4<><1A>8<EFBFBD>$<24>+<2B>+<2B>B<EFBFBD>/<2F>/<2F>/<2F><><15><1F><1F><16>(<28>(<28> <1E><17>V<EFBFBD>I<EFBFBD>r<EFBFBD>4<EFBFBD><01><02><02>8<EFBFBD>4<>4<><02><15>0<>"<22>F<EFBFBD>8<EFBFBD>$4<>4<>4<><1A>8<EFBFBD>$<24>+<2B>+<2B>B<EFBFBD>/<2F>/<2F>/<2F><><18>D<EFBFBD><1F><1F>$6<>$<24>$><3E>$><3E><17>v<EFBFBD>j<EFBFBD>1<>1<>1<><1A>:<3A>&<26>-<2D>-<2D>d<EFBFBD>3<EFBFBD>B<EFBFBD>3<EFBFBD>i<EFBFBD>8<>8<>8<><38>$<24><1E><1E>B<EFBFBD><19>T<EFBFBD>Z<EFBFBD>Z<EFBFBD>\<5C>\<5C>)<29>)<29> $<24>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F><0F><01> 2<> 9<> 9<>#<23> ><3E> ><3E><05> <20><06>~<7E>(><3E>><3E>><3E>"<22>><3E>2<>9<>9<>%<25>@<40>@<40>@<40><1D><05> *<2A><>
<1B>"<22>"<22>4<EFBFBD><06><15><06><<3C>0<>0<> ,<2C> ,<2C>B<EFBFBD><13><18><18><1A><1A>B<EFBFBD><11><16><08>)<29>)<29>)<29>#<23>5v<35>5v<35>5v<35>5v<35>Nu<4E>5v<35>5v<35>5v<35>2v<32>2v<32>)<29><16>x<EFBFBD> <20>'<27>'<27><02>+<2B>+<2B>+<2B><><1A>"<22>"<22><<3C>0<>0<> .<2E> .<2E>B<EFBFBD><15>6<EFBFBD>)<29>R<EFBFBD><12>,<2C>,<2C>D<EFBFBD><13>6<EFBFBD>(<28>+<2B>+<2B>+<2B><16>x<EFBFBD> <20>'<27>'<27><04>-<2D>-<2D>-<2D><>A<> ;<3B> ;<3B>A<EFBFBD><1C>T<EFBFBD>]<5D>]<5D>6<EFBFBD>!<21>9<EFBFBD>5<>5<>6<>6<>r<EFBFBD><01>r<EFBFBD>:<3A>F<EFBFBD>1<EFBFBD>I<EFBFBD>I<EFBFBD> ,<2C>+<2B>+<2B>+<2B>+<2B>+<2B>"<22>
<EFBFBD>4<EFBFBD><14>d<EFBFBD>l<EFBFBD>);<3B>);<3B><<3C><<3C><06>u<EFBFBD> <0A> <0A><> <14>'<27>'<27>'<27><1D>a<EFBFBD>&<26>&<26><14>#<23><14>,<2C><06>w<EFBFBD><0F><0F><0F><0F><0F><0F><><EFBFBD><EFBFBD><EFBFBD>'<27><><EFBFBD><EFBFBD><18>c<EFBFBD><18>h<EFBFBD>s<EFBFBD>m<EFBFBD><18><18><18><18>%,<2C>N<EFBFBD><12>
<EFBFBD>2<>f<EFBFBD>2<>2<>2<>3<>3<><12>
<EFBFBD>1<>f<EFBFBD>1<>1<>1<>2<>2<>%<06>%<06><06><06><06><06><06><06><1B>K<EFBFBD><1A>(<28>t<EFBFBD>3<>F<EFBFBD>=<3D><19>%<25>T<EFBFBD>1<>F<EFBFBD><<3C><18><11>
<EFBFBD>!<21>'<27>'<27>)<29>)<29> <0C> <19>\<5C> )<29> I<>k<EFBFBD>\<5C>.I<> <0F>(<28>)<29>
*<2A>)<29>)<29>)<29>)<29>)<29>)<29>)<29>  <0A> I<01> I<01> I<01> I<01> I<01> I<01> I<01><17>%<25>'<27>'<27><04>?C<>?S<>?S<>TX<54>Zd<5A>?e<>?e<>9e<39>9e<39>9e<39>9e<39>9e<39>9e<39>6<><06>{<7B><1B>V<EFBFBD>$5<>6<>6<><36> <14> <0A> <0A> <0A> <0C><04> <0A><><EFBFBD><EFBFBD> <12>MsP<00>:3e<00>.AD <03>7e<00>
D<07>e<00>D<07>ae<00>
f<03>$f<03>f<03>?i<00>
i%<03>$i%)<1A>__doc__r<5F>r<>r<><00>logging<6E>typingrr<><00>bs4r<00> getLogger<65>__name__<5F>loggerr<72>r<>r<>r<>r<>r<><00>compiler<65>r<>r<>r<>r<>r<>r[rbr`<00><module>r<>sm<00><01>T<>T<><0E><0E><0E><0E> <09> <09> <09> <09> <0B> <0B> <0B> <0B><0E><0E><0E><0E><1B><1B><1B><1B><1B><1B> <0C> <0C> <0C> <0C><1D><1D><1D><1D><1D><1D> <1A><17> <1A>8<EFBFBD> $<24> $<24><06><02><02><02> <0A><02><02><02><13>X<01>W<>W<>9<>6<EFBFBD>B<>(<28>*O<>P<>/<2F>0<>,<2C>-<2D>  <02> <02> <09>9<>9<>-<2D>.<2E>3<>4<> <02> <02> <09> <02><02><02> <0C>
<02><02><02> <0A> <18>R<EFBFBD>Z<EFBFBD>K<> L<> L<><08> <17>R<EFBFBD>Z<EFBFBD>S<> T<> T<><08> d<> d<> d<>
<EFBFBD>W<12>s<EFBFBD>W<12>t<EFBFBD>W<12>W<12>W<12>W<12>W<12>Wrb