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

173 lines
27 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*=<00> <00><00>UddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl
Z
ddl Z ddl Z ddlmZddlmZmZmZddlmZeje<17><00>Zeejdd<07><00><00><00>ZdZdae ejed <da e ejed
<d a!da"e ej#ed <d a$d<0E>Z%gd<0F>gd<10>gd<11>ddgddgddgddgddgddgddgd <20>
Z&d!e'd"e(d#e e'fd$<24>Z)gd%<25>Z*gd&<26>Z+gd'<27>Z,d!e'd#e-e.e/ffd(<28>Z0ej1d)<29><00>Z2ej1d*<2A><00>Z3gd+<2B>Z4d!e'd#e(fd,<2C>Z5d-e'd#e-e.e effd.<2E>Z6d-e'd#e.fd/<2F>Z7d0e'd#e e'fd1<64>Z8d-e'd#e(fd2<64>Z9d3e(fd4<64>Z:d>d-e'd5e'd6e'fd7<64>Z;d8<64>Z<d9<64>Z=d:<3A>Z>d;<3B>Z?d<<3C>Z@d#e.fd=<3D>ZAdS)?<3F>N)<01>Optional)<01> BeautifulSoup)<03> SQLITE_PATH<54>queue_ai<61>save_ai_assessment)<01>score<72>CONCURRENCY_LIMIT<49>50<35>-<00> _worker_task<73>_ai_worker_taskF<6B>_ip_semgc<00>F<00>t<00>tjd<01><00>atS)N<>)r<00>asyncio<69> Semaphore<72><00><00>)/home/malin/c0ding/DomGod/app/enricher.py<70> _get_ip_semrs<00><00><0E><EFBFBD><19>#<23>A<EFBFBD>&<26>&<26><07> <12>Nr)z /wp-content/z /wp-includes/zcontent="WordPress)z/components/com_zJoomla!zcontent="Joomla)z/sites/default/files/zDrupal.settingszcontent="Drupalzstatic.wixstatic.comzX-Wix-zsquarespace.comzX-Squarespace-zcdn.shopify.comz Shopify.theme<6D>
PrestaShopz/modules/prestashopz Mage.Cookiesz
X-Magento-<2D> typo3tempz TYPO3 CMSzroute=common/home<6D>OpenCart)
<EFBFBD> wordpress<73>joomla<6C>drupal<61>wix<69> squarespace<63>shopify<66>
prestashop<EFBFBD>magento<74>typo3<6F>opencart<72>html<6D>headers<72>returnc<00>$<00><05>|dd<01>d<02>d<03>|<01><00><00>D<00><00><00><00>z}|<02><00><00><00>t<00><00><00>D]$\}}t <00>fd<04>|D<00><00><00><00>r|cS<00>%dS)Ni`<60><00> c3<00>*K<00>|]\}}|<01>d|<02><00>V<00><00>dS)<02>:Nr)<03>.0<EFBFBD>k<>vs r<00> <genexpr>zdetect_cms.<locals>.<genexpr>7s0<00><00><00><00>&N<>&N<>d<EFBFBD>a<EFBFBD><11>!<21>z<EFBFBD>z<EFBFBD>a<EFBFBD>z<EFBFBD>z<EFBFBD>&N<>&N<>&N<>&N<>&N<>&Nrc3<00>D<00>K<00>|]}|<01><00><00><00>vV<00><00>dS<00>N)<01>lower)r+<00>s<>cls <20>rr.zdetect_cms.<locals>.<genexpr>:s/<00><><00><00><00>-<2D>-<2D>1<EFBFBD>q<EFBFBD>w<EFBFBD>w<EFBFBD>y<EFBFBD>y<EFBFBD>B<EFBFBD><EFBFBD>-<2D>-<2D>-<2D>-<2D>-<2D>-r)<05>join<69>itemsr1<00>CMS_SIGNATURES<45>any)r$r%<00>combined<65>cms<6D>sigsr3s @r<00>
detect_cmsr;6s<><00><><00><13>F<EFBFBD>U<EFBFBD>F<EFBFBD>|<7C>c<EFBFBD>h<EFBFBD>h<EFBFBD>&N<>&N<>g<EFBFBD>m<EFBFBD>m<EFBFBD>o<EFBFBD>o<EFBFBD>&N<>&N<>&N<>N<>N<>N<>H<EFBFBD> <11><1E><1E> <19> <19>B<EFBFBD>#<23>)<29>)<29>+<2B>+<2B><17><17> <09><03>T<EFBFBD> <0E>-<2D>-<2D>-<2D>-<2D><04>-<2D>-<2D>-<2D> -<2D> -<2D> <17><16>J<EFBFBD>J<EFBFBD>J<EFBFBD> <17> <0F>4r)<0F>digitalizadores<65> kit-digital<61>
kitdigital<EFBFBD> kit_digitalzfondos-europeos<6F>fondos_europeos<6F>nextgenerationznext-generation<6F>prtrzplan-recuperacion<6F>planderecuperacion<6F> acelerapymezlogo-uez recovery-eu<65> cofinanciado)z kit digitalzagente digitalizadorzagentes digitalizadoreszfondos europeosznext generation eu<65>nextgenerationeuuplan de recuperaciónzplan de recuperacionuplan de digitalizaciónudigitalización pymesrBu financiado por la unión europeazred.es/kit-digitalzacelerapyme.es)rDzred.esr=r>c<00><00><08>g}|<01><00><00>}|<00>d<01><00>D]<5D>}|<04>d<02><00>pd|<04>d<04><00>pdz|<04>d<05><00>pdz<00><00><00>}tD] }||vr|<02>d|<06><00><02><00>n<01>!<21><>t
D]}||vr|<02>d|<06><00><02><00><00>|<00>dd <09>
<EFBFBD><00>D]\}|d <00><00><00><00>t <00>fd <0C>tD<00><00><00><00>r |<02>d <0A>dd<0E><00><00><02><00><00>]tt<00>
|<02><00><00><00>dd<0F>}t|<02><00>dk|fS)N<>img<6D>src<72><00>alt<6C>srcsetzimg:ztext:<3A>aT<61><01>hrefrOc3<00> <00>K<00>|]}|<01>vV<00><00> dSr0r)r+<00>prOs <20>rr.z%detect_kit_digital.<locals>.<genexpr>cs'<00><><00><00><00>0<>0<>Q<EFBFBD>q<EFBFBD>D<EFBFBD>y<EFBFBD>0<>0<>0<>0<>0<>0rzlink:<3A><<00>r) r1<00>find_all<6C>get<65> KIT_IMG_PATS<54>append<6E> KIT_TEXT_PATSr7<00> KIT_LINK_PATS<54>list<73>dict<63>fromkeys<79>len) <09>soupr$<00>signals<6C>hlrHr8rQrMrOs @r<00>detect_kit_digitalraRs<><00><><00><10>G<EFBFBD> <0A><1A><1A><1C><1C>B<EFBFBD><13>}<7D>}<7D>U<EFBFBD>#<23>#<23><16><16><03><18>W<EFBFBD>W<EFBFBD>U<EFBFBD>^<5E>^<5E>)<29>r<EFBFBD>c<EFBFBD>g<EFBFBD>g<EFBFBD>e<EFBFBD>n<EFBFBD>n<EFBFBD>.B<><02>C<>s<EFBFBD>w<EFBFBD>w<EFBFBD>x<EFBFBD>GX<47>GX<47>G^<5E>\^<5E>_<>f<>f<>h<>h<><08><1D> <16> <16>A<EFBFBD><10>H<EFBFBD>}<7D>}<7D><17><0E><0E>z<EFBFBD>a<EFBFBD>z<EFBFBD>z<EFBFBD>*<2A>*<2A>*<2A><15><05><1D><><1B>(<28>(<28><01> <0C><02>7<EFBFBD>7<EFBFBD> <13>N<EFBFBD>N<EFBFBD>;<3B>1<EFBFBD>;<3B>;<3B> '<27> '<27> '<27><> <11>]<5D>]<5D>3<EFBFBD>T<EFBFBD>]<5D> *<2A> *<2A>0<>0<><01><10><16>y<EFBFBD><EFBFBD><EFBFBD> <20> <20><04> <0E>0<>0<>0<>0<>-<2D>0<>0<>0<> 0<> 0<> 0<> <13>N<EFBFBD>N<EFBFBD>.<2E>4<EFBFBD><03><12><03>9<EFBFBD>.<2E>.<2E> /<2F> /<2F> /<2F><><12>4<EFBFBD>=<3D>=<3D><17>)<29>)<29>*<2A>*<2A>3<EFBFBD>B<EFBFBD>3<EFBFBD>/<2F>G<EFBFBD> <0E>w<EFBFBD><<3C><<3C>!<21> <1B>W<EFBFBD> $<24>$rz0[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.comc<00><><00>ggggd<01>}|<00>dd<03><04><00>D<00>]<5D>}|d}|<04>d<06><00>r]|dd<00><00>d<08><00>d <00><00><00>}|r%||d
vr|d
<00>|<05><00><00>}|<04>d <0B><00>rFt jd d |dd<00><00><00>}|r%||dvr|d<00>|<06><00><00><>d|vsd|vr/||dvr#|d<00>|dd<13><00><00><00><01>tD]m}||<04><00><00>vrU|<04>d<08><00>d <00> d<14><00>}||dvr|d<00>|<08><00>n<01>n<EFBFBD><01><>t<00> |dd<16><00><00>D]P}|<05><00><00>}||d
vr0|<05> d<17><00>s|d
<00>|<05><00><00>Qt<00> |<00><00><00><00><00>D]=}t jdd |<06><00>} | |dvr|d<00>| <09><00><00>>|D]:}
tt <00>||
<00><00><00><00>dd<19>||
<<00>;|S)N)<04>emails<6C>phones<65>whatsapp<70>socialrMTrNrOzmailto:<3A><00>?rrcztel:z[^\d+]rJ<00>rdzwa.mezapi.whatsapp.comre<00>P<00>/rfi<><69>)z.pngz.jpgz.cssz.jsz[\s\-]<5D>)rT<00>
startswith<EFBFBD>split<69>striprW<00>re<72>sub<75>SOCIAL_DOMAINSr1<00>rstrip<69>EMAIL_RE<52>findall<6C>endswith<74>PHONE_RE<52>get_textrZr[r\) r^r$<00>contactsrMrO<00>em<65>ph<70>sd<73>clean<61>ph_cleanr,s r<00>extract_contactsrqs<><00><00> "<22>b<EFBFBD>b<EFBFBD>B<EFBFBD>O<>O<>H<EFBFBD><12>]<5D>]<5D>3<EFBFBD>T<EFBFBD>]<5D> *<2A> *<2A><1A><1A><01><10><16>y<EFBFBD><04> <0F>?<3F>?<3F>9<EFBFBD> %<25> %<25> <1A><15>a<EFBFBD>b<EFBFBD>b<EFBFBD><18><1E><1E><03>$<24>$<24>Q<EFBFBD>'<27>-<2D>-<2D>/<2F>/<2F>B<EFBFBD><11> .<2E>b<EFBFBD><08><18> 2<>2<>2<><18><18>"<22>)<29>)<29>"<22>-<2D>-<2D>-<2D><> <11>_<EFBFBD>_<EFBFBD>V<EFBFBD> $<24> $<24> <1A><13><16> <09>2<EFBFBD>t<EFBFBD>A<EFBFBD>B<EFBFBD>B<EFBFBD>x<EFBFBD>0<>0<>B<EFBFBD><11> .<2E>b<EFBFBD><08><18> 2<>2<>2<><18><18>"<22>)<29>)<29>"<22>-<2D>-<2D>-<2D><> <14><04>_<EFBFBD>_<EFBFBD> 2<>d<EFBFBD> :<3A> :<3A><13>8<EFBFBD>J<EFBFBD>/<2F>/<2F>/<2F><18><1A>$<24>+<2B>+<2B>D<EFBFBD><13>"<22><13>I<EFBFBD>6<>6<>6<><36>$<24> <1A> <1A><02><15><14><1A><1A><1C><1C>%<25>%<25> <20>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD>O<EFBFBD>A<EFBFBD>.<2E>5<>5<>c<EFBFBD>:<3A>:<3A>E<EFBFBD><1C>H<EFBFBD>X<EFBFBD>$6<>6<>6<> <20><18>*<2A>1<>1<>%<25>8<>8<>8<><19>E<EFBFBD> &<26><><17><1E><1E>t<EFBFBD>G<EFBFBD>V<EFBFBD>G<EFBFBD>}<7D>-<2D>-<2D>*<2A>*<2A><02> <0F>X<EFBFBD>X<EFBFBD>Z<EFBFBD>Z<EFBFBD><02> <0A>X<EFBFBD>h<EFBFBD>'<27> '<27> '<27><02> <0B> <0B><[<5B>0\<5C>0\<5C> '<27> <14>X<EFBFBD> <1E> %<25> %<25>b<EFBFBD> )<29> )<29> )<29><><17><1E><1E>t<EFBFBD>}<7D>}<7D><EFBFBD><EFBFBD>/<2F>/<2F>0<>0<><02><15>6<EFBFBD>)<29>R<EFBFBD><12>,<2C>,<2C><08> <13>8<EFBFBD>H<EFBFBD>-<2D> -<2D> -<2D> <14>X<EFBFBD> <1E> %<25> %<25>h<EFBFBD> /<2F> /<2F> /<2F><><16>;<3B>;<3B><01><1A>4<EFBFBD>=<3D>=<3D><18>!<21><1B>5<>5<>6<>6<>r<EFBFBD><01>r<EFBFBD>:<3A><08><11> <0B> <0B> <13>Or<00>domainc<00><00><><00><00>K<00> tj<00><00><00>tj<00><00>}<01><03>fd<01>}|<01>d|<02><00><00>d{V<00><03>S#t
$rYdSwxYw)Nc<00><><00><02>tj<00>dfd<02><03><00>5}<00><04>|<00><05><04><00>5}|<01><00><00>}tj<00>|dd<06><00>}d|tj<00><00><00>z
jfcddd<00><00>cddd<00><00>S#1swxYwY ddd<00><00>dS#1swxYwYdS)Ni<4E>rl<00><01>timeout)<01>server_hostname<6D>notAfterz%b %d %H:%M:%S %Y %ZT)<08>socket<65>create_connection<6F> wrap_socket<65> getpeercert<72>datetime<6D>strptime<6D>utcnow<6F>days)<06>sock<63>ssock<63>cert<72>expiry<72>ctxr<78>s <20><>r<00>_checkzcheck_ssl.<locals>._check<63>s<><00><><00><17>)<29>6<EFBFBD>3<EFBFBD>-<2D><11>C<>C<>C<> L<01>t<EFBFBD><18>_<EFBFBD>_<EFBFBD>T<EFBFBD>6<EFBFBD>_<EFBFBD>B<>B<>L<01>e<EFBFBD> <20>,<2C>,<2C>.<2E>.<2E>D<EFBFBD>%<25>.<2E>7<>7<><04>Z<EFBFBD>8H<38>J`<60>a<>a<>F<EFBFBD><1F>&<26>8<EFBFBD>+<<3C>+C<>+C<>+E<>+E<>"E<>!K<>K<>L<01>L<01>L<01>L<01>L<01>L<01>L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01>L<01>L<01>L<01>L<01><><EFBFBD><EFBFBD>L<01>L<01>L<01>L<01>L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01> L<01><><EFBFBD><EFBFBD> L<01> L<01> L<01> L<01> L<01> Ls5<00>C<03>A"B-<05> C<03>-B1 <09>1C<03>4B1 <09>5C<03>C
<07> C
)FN)<06>ssl<73>create_default_contextr<00>get_event_loop<6F>run_in_executor<6F> Exception)r<><00>loopr<70>r<>s` @r<00> check_sslr<6C><00>s<><00><><EFBFBD><00><00><00> <1B><11>(<28>*<2A>*<2A><03><16>%<25>'<27>'<27><04> L<01> L<01> L<01> L<01> L<01> L<01> <1A>)<29>)<29>$<24><06>7<>7<>7<>7<>7<>7<>7<>7<>7<><37> <14><1B><1B><1B><1A>{<7B>{<7B><1B><><EFBFBD>s<00>AA<00>
A<03>Ac<00><00><><00>K<00> tj<00><00>}<01>fd<01>}|<01>d|<02><00><00>d{V<00><03>S#t$rYdSwxYw)Nc<00><><00><01> ttj<00><00>dd<02><03><00><00><00>dkS#t$rYdSwxYw)N<>MXrl)<01>lifetimerF)r]<00>dns<6E>resolver<65>resolver<65>)r<>s<00>rr<>zcheck_mx.<locals>._check<63>sT<00><><00> <1D><1A>3<EFBFBD><<3C>/<2F>/<2F><06><04>q<EFBFBD>/<2F>I<>I<>J<>J<>Q<EFBFBD>N<>N<><4E><1C> <1D> <1D> <1D><1C>u<EFBFBD>u<EFBFBD> <1D><><EFBFBD>s<00>26<00>
A<03>AF)rr<>r<>r<>)r<>r<>r<>s` r<00>check_mxr<78><00>s<00><><00><00><00> <15><16>%<25>'<27>'<27><04> <1D> <1D> <1D> <1D> <1D>
<1A>)<29>)<29>$<24><06>7<>7<>7<>7<>7<>7<>7<>7<>7<><37> <14><15><15><15><14>u<EFBFBD>u<EFBFBD><15><><EFBFBD>s<00>39<00>
A<03>A<03>ipc<00><00><>K<00>t<00><00>4<00>d{V<00><03>tj<00><00><00><00><00>}dtz |t
z
z
}|dkrtj|<02><00><00>d{V<00><03>tj<00><00><00><00><00>addd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY tjd<03><04><00>4<00>d{V<00><03>}|<03> d|<00>d<06><03><00><00>d{V<00><03>}|j
dkr9|<04> <00><00><00> d<08><00>cddd<00><00><00>d{V<00><03>S ddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwYn#t$rYnwxYwdS) NrRrrlr<>zhttp://ip-api.com/json/z?fields=countryCode<64><65><00> countryCode) rrr<><00>time<6D> IP_API_RATE<54> _ip_last_call<6C>sleep<65>httpx<70> AsyncClientrU<00> status_code<64>jsonr<6E>)r<><00>now<6F>wait<69>client<6E>rs r<00>get_ip_countryr<79><00>s<><00><00><00><00><1A>}<7D>}<7D>8<>8<>8<>8<>8<>8<>8<>8<><15>$<24>&<26>&<26>+<2B>+<2B>-<2D>-<2D><03><12>[<5B> <20>S<EFBFBD>=<3D>%8<>9<><04> <0F>!<21>8<EFBFBD>8<EFBFBD><19>-<2D><04>%<25>%<25> %<25> %<25> %<25> %<25> %<25> %<25> %<25><1F>.<2E>0<>0<>5<>5<>7<>7<> <0A> 8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<>8<><38><EFBFBD><EFBFBD>8<>8<>8<>8<>  <0A><18>$<24>Q<EFBFBD>/<2F>/<2F>/<2F> 3<> 3<> 3<> 3<> 3<> 3<> 3<>6<EFBFBD><1C>j<EFBFBD>j<EFBFBD>!R<>2<EFBFBD>!R<>!R<>!R<>S<>S<>S<>S<>S<>S<>S<>S<>A<EFBFBD><10>}<7D><03>#<23>#<23><18>v<EFBFBD>v<EFBFBD>x<EFBFBD>x<EFBFBD>|<7C>|<7C>M<EFBFBD>2<>2<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<>#<23> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<> 3<><33><EFBFBD><EFBFBD> 3<> 3<> 3<> 3<><33><EFBFBD> <15> <0A> <0A> <0A> <0C><04> <0A><><EFBFBD><EFBFBD> <0F>4sO<00>BB)<03>)
B3<07>6B3<07>;E<00>AE <03>'E<00>;E<00>
E<07>E<00>E<07>E<00>
E,<03>+E,c<00><00>K<00>|ddddddddddddtj<00><00><00><00><00><00>dd<04>} tjdddddi<01> <09><00>4<00>d{V<00><03> }|<02>d
|<00><00><02><00><00>d{V<00><03>}|jd v|d <|j|d <|j<00>d<0E><00>|d<|j}t|d<0F><00>}|<05>
d<10><00>}|r|<06> d<06><11><00>dd<12>nd|d<t|t|j<00><00><00><00>|d<t||<04><00>\}}||d<tj|<08><00>|d<tjt#||<04><00><00><00>|d< t%j<00><00>} | <09>dt*j|<00><00><00>d{V<00><03>}
t/|
<EFBFBD><00><00>d{V<00><03>|d<n#t0$rYnwxYwddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwYn1#t0$r$} t3| <0B><00>dd<12>|d<Yd} ~ nd} ~ wwxYwt5|<00><00><00>d{V<00><03>\} } | |d<| |d<t7|<00><00><00>d{V<00><03>|d<t9|<01><00>|d<|S)NFz[]z{})r<><00>is_liver<65><00> ssl_valid<69>ssl_expiry_daysr9<00>has_mx<6D>
ip_country<EFBFBD>
page_title<EFBFBD>serverr?<00>kit_digital_signals<6C> contact_info<66> enriched_at<61>error<6F> Tz
User-Agentz$Mozilla/5.0 (compatible; DomGod/1.0))r<><00>follow_redirects<74>verifyr%zhttp://)r<>i-i.i/i3i4r<>r<>r<>z html.parser<65>title)ro<00><>r<>r9r?r<>r<>r<>r<>r<>r<>r<>r)r<>r<><00> isoformatr<74>r<>rUr<>r%<00>textr<00>findrxr;r[rar<><00>dumpsrrr<>r<>r<><00> gethostbynamer<65>r<><00>strr<72>r<>r)r<><00>resultr<74><00>respr$r^r<><00>kitr_r<>r<><00>er<65><00>ssl_dayss r<00> enrich_domainr<6E><00>s<><00><00><00><00><18><18><14><1A>t<EFBFBD><13>u<EFBFBD><1A>$<24><16><1C>T<EFBFBD><1C><1F>(<28>/<2F>/<2F>1<>1<>;<3B>;<3B>=<3D>=<3D><15> <06> <06>F<EFBFBD>'<27><18>$<24><16><14>e<EFBFBD>!<21>#I<>J<>
<EFBFBD>
<EFBFBD>
<EFBFBD> <15> <15> <15> <15> <15> <15> <15> <15><14><1F><1A><1A>$6<>f<EFBFBD>$6<>$6<>7<>7<>7<>7<>7<>7<>7<>7<>D<EFBFBD> $<24> 0<>4R<34> R<>F<EFBFBD>9<EFBFBD> <1D>$(<28>$4<>F<EFBFBD>=<3D> !<21>#<23>|<7C>/<2F>/<2F><08>9<>9<>F<EFBFBD>8<EFBFBD> <1C><17>9<EFBFBD>D<EFBFBD> <20><14>}<7D>5<>5<>D<EFBFBD><18>I<EFBFBD>I<EFBFBD>g<EFBFBD>&<26>&<26>E<EFBFBD>GL<47>#V<>5<EFBFBD>><3E>><3E><04>><3E>#=<3D>#=<3D>d<EFBFBD>s<EFBFBD>d<EFBFBD>#C<>#C<>RV<52>F<EFBFBD><<3C> <20>&<26>t<EFBFBD>T<EFBFBD>$<24>,<2C>-?<3F>-?<3F>@<40>@<40>F<EFBFBD>5<EFBFBD>M<EFBFBD>-<2D>d<EFBFBD>D<EFBFBD>9<>9<>L<EFBFBD>C<EFBFBD><17>$'<27>F<EFBFBD>=<3D> !<21>,0<>J<EFBFBD>w<EFBFBD>,?<3F>,?<3F>F<EFBFBD>(<28> )<29>%)<29>Z<EFBFBD>0@<40><14>t<EFBFBD>0L<30>0L<30>%M<>%M<>F<EFBFBD>><3E> "<22> <15><1E>-<2D>/<2F>/<2F><04><1F>/<2F>/<2F><04>f<EFBFBD>6J<36>F<EFBFBD>S<>S<>S<>S<>S<>S<>S<>S<><02>-;<3B>B<EFBFBD>-?<3F>-?<3F>'?<3F>'?<3F>'?<3F>'?<3F>'?<3F>'?<3F><06>|<7C>$<24>$<24><><1C> <15> <15> <15><14><04> <15><><EFBFBD><EFBFBD>3 <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15> <15><><EFBFBD><EFBFBD> <15> <15> <15> <15><><EFBFBD>8 <15>'<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>!*<2A>&<26> 1<> 1<>1<>1<>1<>1<>1<>1<><17>I<EFBFBD>x<EFBFBD>#<23>F<EFBFBD>;<3B><17> (<28>F<EFBFBD> <1C><1D>%<25>f<EFBFBD>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>-<2D>F<EFBFBD>8<EFBFBD><14><1B>F<EFBFBD>m<EFBFBD>m<EFBFBD>F<EFBFBD>7<EFBFBD>O<EFBFBD> <11>Msb<00> H <00>%DG7<03>AG<02>G7<03>
G"<05>G7<03>!G"<05>"G7<03>%H <00>7
H<07>H <00>H<07>H <00>
H7<03>H2<03>2H7<03>datac<00><00>LK<00>tjt<00><00>4<00>d{V<00><03>}|<01>d|d|d|d|d|d|d|d|d |d
|d |d |d |dt |d<00><00>|d|df<10><00><00>d{V<00><03>|<01>d|d|df<02><00><00>d{V<00><03>|<01><00><00><00>d{V<00><03>ddd<00><00><00>d{V<00><03>dS#1<00>d{V<00><03>swxYwYdS)Na<4E>INSERT INTO enriched_domains
(domain, is_live, status_code, ssl_valid, ssl_expiry_days, cms,
has_mx, ip_country, page_title, server, enriched_at, error, score,
kit_digital, kit_digital_signals, contact_info)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
ON CONFLICT(domain) DO UPDATE SET
is_live=excluded.is_live, status_code=excluded.status_code,
ssl_valid=excluded.ssl_valid, ssl_expiry_days=excluded.ssl_expiry_days,
cms=excluded.cms, has_mx=excluded.has_mx, ip_country=excluded.ip_country,
page_title=excluded.page_title, server=excluded.server,
enriched_at=excluded.enriched_at, error=excluded.error, score=excluded.score,
kit_digital=excluded.kit_digital,
kit_digital_signals=excluded.kit_digital_signals,
contact_info=excluded.contact_infor<6F>r<>r<>r<>r<>r9r<>r<>r<>r<>r<>r<>rr?r<>r<>z<>INSERT INTO scores (domain, score) VALUES (?,?)
ON CONFLICT(domain) DO UPDATE SET score=excluded.score, scored_at=datetime('now'))<06> aiosqlite<74>connectr<00>execute<74>int<6E>commit)r<><00>dbs r<00> save_enrichedr<64>s<><00><00><00><00><18> <20><1B>-<2D>-<2D><1A><1A><1A><1A><1A><1A><1A><12><10>j<EFBFBD>j<EFBFBD> 7<><15>X<EFBFBD><0E><04>Y<EFBFBD><0F><14>m<EFBFBD>1D<31><14>[<5B>!<21>4<EFBFBD>(9<>#:<3A>D<EFBFBD><15>K<EFBFBD><14>X<EFBFBD><0E><04>\<5C> 2<>D<EFBFBD><1C>4F<34><14>X<EFBFBD><0E><04>]<5D> 3<>T<EFBFBD>'<27>]<5D>D<EFBFBD><17>M<EFBFBD><13>D<EFBFBD><1D>'<27>(<28>(<28>$<24>/D<>*E<>t<EFBFBD>N<EFBFBD>G[<5B>  <0E>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>.<11>j<EFBFBD>j<EFBFBD> d<01> <11>(<28>^<5E>T<EFBFBD>'<27>]<5D> +<2B>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<11>i<EFBFBD>i<EFBFBD>k<EFBFBD>k<EFBFBD><19><19><19><19><19><19><19>;<1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><1A><><EFBFBD><EFBFBD><1A><1A><1A><1A><1A>s<00>CD<03>
D<07> D<07>statusr<73>c<00><00>VK<00>tjt<00><00>4<00>d{V<00><03>}|dkr|<03>d||f<02><00><00>d{V<00><03>n#|dvr|<03>d|||f<03><00><00>d{V<00><03>|<03><00><00><00>d{V<00><03>ddd<00><00><00>d{V<00><03>dS#1<00>d{V<00><03>swxYwYdS)N<>runningzHUPDATE job_queue SET status=?, started_at=datetime('now') WHERE domain=?)<02>done<6E>failedzSUPDATE job_queue SET status=?, completed_at=datetime('now'), error=? WHERE domain=?)r<>r<>rr<>r<>)r<>r<>r<>r<>s r<00>mark_jobr<62>(s<><00><00><00><00><18> <20><1B>-<2D>-<2D> <1A> <1A> <1A> <1A> <1A> <1A> <1A><12> <11>Y<EFBFBD> <1E> <1E><14>*<2A>*<2A>Z<><17><16> <20>"<22>"<22> "<22> "<22> "<22> "<22> "<22> "<22> "<22> "<22><14>)<29> )<29> )<29><14>*<2A>*<2A>e<><17><15><06>'<27>)<29>)<29> )<29> )<29> )<29> )<29> )<29> )<29> )<29><11>i<EFBFBD>i<EFBFBD>k<EFBFBD>k<EFBFBD><19><19><19><19><19><19><19> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A> <1A><><EFBFBD><EFBFBD> <1A> <1A> <1A> <1A> <1A> s<00>A#B<03>
B"<07>%B"c<00><00>Z<00><03>K<00>tjt<00><00><00>dtf<02>fd<02> <0C> trtjd<04><00><00>d{V<00><03><00>#t jt<00><00>4<00>d{V<00><03>}|<00> d<05><00>4<00>d{V<00><03> }|<01>
<00><00><00>d{V<00><03>}ddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwYddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|stjd<06><00><00>d{V<00><03><00><>tj <00>fd<07>|D<00><00>ddi<01><01>d{V<00><03><00><01>) Nr<4E>c <00><00><><00>K<00><00>4<00>d{V<00><03>t|d<01><00><00>d{V<00><03> t|<00><00><00>d{V<00><03>}t|<01><00><00>d{V<00><03>t|d<02><00><00>d{V<00><03>nC#t$r6}t|dt |<02><00>dd<04><00><00><00>d{V<00><03>Yd}~nd}~wwxYwddd<00><00><00>d{V<00><03>dS#1<00>d{V<00><03>swxYwYdS)Nr<4E>r<>r<>r<>)r<>r<>r<>r<>r<>)r<>r<>r<><00>sems <20>r<00>processzworker_loop.<locals>.process:s<><00><><00><00><00><16> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F><1A>6<EFBFBD>9<EFBFBD>-<2D>-<2D> -<2D> -<2D> -<2D> -<2D> -<2D> -<2D> -<2D> ?<3F>*<2A>6<EFBFBD>2<>2<>2<>2<>2<>2<>2<>2<><04>#<23>D<EFBFBD>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29>)<29><1E>v<EFBFBD>v<EFBFBD>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E><><1C> ?<3F> ?<3F> ?<3F><1E>v<EFBFBD>x<EFBFBD><13>Q<EFBFBD><16><16><04><13><04><1C>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E>><3E><><EFBFBD><EFBFBD><EFBFBD> ?<3F><><EFBFBD><EFBFBD>  ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F><><EFBFBD><EFBFBD> ?<3F> ?<3F> ?<3F> ?<3F> ?<3F> ?s;<00>B;<03>AA%<02>$B;<03>%
B%<05>/,B <05>B;<03> B%<05>%B;<03>;
C<07>CTrz=SELECT domain FROM job_queue WHERE status='pending' LIMIT 100<30>c<00>V<00><01>g|]%}tj<00>|d<00><00><00><00><00><02>&S<00>r<00>r<00> create_task)r+r<>r<>s <20>r<00>
<listcomp>zworker_loop.<locals>.<listcomp>Ps0<00><><00>P<>P<>P<>a<EFBFBD>w<EFBFBD>2<>7<EFBFBD>7<EFBFBD>1<EFBFBD>Q<EFBFBD>4<EFBFBD>=<3D>=<3D>A<>A<>P<>P<>Pr<00>return_exceptions) rrr r<><00>_pausedr<64>r<>r<>rr<><00>fetchall<6C>gather)r<><00>cur<75>rowsr<73>r<>s @@r<00> worker_loopr<70>7s<><00><><EFBFBD><00><00><00>
<11>
<1B>-<2D>
.<2E>
.<2E>C<EFBFBD>?<3F>c<EFBFBD>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F> j<01> <12> <15><19>-<2D><01>"<22>"<22> "<22> "<22> "<22> "<22> "<22> "<22> "<22> <14><1C>$<24>[<5B>1<>1<> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C>R<EFBFBD><19>z<EFBFBD>z<EFBFBD>O<><0E><0E> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><14> <20>\<5C>\<5C>^<5E>^<5E>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><04> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><><EFBFBD><EFBFBD> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><><EFBFBD><EFBFBD> ,<2C> ,<2C> ,<2C> ,<2C>
<14> <15><19>-<2D><01>"<22>"<22> "<22> "<22> "<22> "<22> "<22> "<22> "<22> <14><15>n<EFBFBD>P<>P<>P<>P<>4<EFBFBD>P<>P<>P<>i<>dh<64>i<>i<>i<>i<>i<>i<>i<>i<>i<> js6<00>-C<03>
B7<05>%C<03>7
C <09>C<03>C <09>C<03>
C$<07>'C$c<00><00><><00><03><04>K<00>ddlm<01>ddlm<03> t jt <00><00>4<00>d{V<00><03>}|<00>d<05><00>4<00>d{V<00><03> }|<01><00><00><00>d{V<00><03>}ddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|r@|<00> dd<07>|D<00><00><00><00><00>d{V<00><03>|<00>
<00><00><00>d{V<00><03>ddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwY|stj d<08><00><00>d{V<00><03><00><>d tf<02><03>fd
<EFBFBD> <0C>tj<00>fd <0B>|D<00><00>d di<01><01>d{V<00><03><00><01>/) Nr)<01> assess_domain)<01> analyze_siteTz;SELECT domain FROM ai_queue WHERE status='pending' LIMIT 10z3UPDATE ai_queue SET status='running' WHERE domain=?c<00> <00>g|] }|df<01><02> Sr<>r)r+r<>s rr<>z"ai_worker_loop.<locals>.<listcomp>bs<00><00>+<2B>+<2B>+<2B><11>a<EFBFBD><01>d<EFBFBD>W<EFBFBD>+<2B>+<2B>+r<00>r<>c<00><00><<00>K<00> <00>|<00><00><00>d{V<00><03>}<00>|<01><00><00>d{V<00><03>}t|||<01><01><00><00>d{V<00><03>t<00>d||<02>d<03><00><00><00>dS#t$r<>}t jt<00><00>4<00>d{V<00><03>}|<04>d|f<01><00><00>d{V<00><03>|<04> <00><00><00>d{V<00><03>ddd<00><00><00>d{V<00><03>n#1<00>d{V<00><03>swxYwYt<00>
d||<03><00>Yd}~dSd}~wwxYw)N)<01> site_analysisuAI done: %s → %s<> lead_qualityzPUPDATE ai_queue SET status='failed', completed_at=datetime('now') WHERE domain=?zAI worker error %s: %s) r<00>logger<65>inforUr<>r<>r<>rr<>r<>r<>)r<><00>analysis<69>
assessmentr<EFBFBD>r<>r<><00> gemini_assesss <20><>r<00>
assess_onez"ai_worker_loop.<locals>.assess_onejs<00><><00><00><00> B<01>!-<2D><1C>f<EFBFBD>!5<>!5<>5<>5<>5<>5<>5<>5<><08>#0<>=<3D><18>#:<3A>#:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>:<3A>
<EFBFBD>(<28><16><1A>8<EFBFBD>T<>T<>T<>T<>T<>T<>T<>T<>T<>T<><16> <0B> <0B>0<>&<26>*<2A>.<2E>.<2E><1E>:X<>:X<>Y<>Y<>Y<>Y<>Y<><59><1C> B<01> B<01> B<01>$<24>,<2C>[<5B>9<>9<>&<26>&<26>&<26>&<26>&<26>&<26>&<26>R<EFBFBD><1C>*<2A>*<2A>j<><1F> <09><16><16><16><16><16><16><16><16><16><1D>)<29>)<29>+<2B>+<2B>%<25>%<25>%<25>%<25>%<25>%<25>%<25> &<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26>&<26><><EFBFBD><EFBFBD>&<26>&<26>&<26>&<26> <17> <0C> <0C>5<>v<EFBFBD>q<EFBFBD>A<>A<>A<>A<>A<>A<>A<>A<>A<><41><EFBFBD><EFBFBD><EFBFBD> B<01><><EFBFBD>s<<00>A)A0<00>0
D<03>:D<03>8C#<05>D<03>#
C- <09>-D<03>0C- <09>1D<03>Dc<00>V<00><01>g|]%}tj<00>|d<00><00><00><00><00><02>&Sr<>r<>)r+r<>r<>s <20>rr<>z"ai_worker_loop.<locals>.<listcomp>{s2<00><><00>S<>S<>S<><11>w<EFBFBD>2<>:<3A>:<3A>a<EFBFBD><01>d<EFBFBD>3C<33>3C<33>D<>D<>S<>S<>Srr<>)<0F>app.replicate_air<69><00>app.site_analyzerr<72>r<>r<>rr<>r<><00> executemanyr<79>rr<>r<>r<>)r<>r<>r<>r<>r<>r<>s @@@r<00>ai_worker_looprUs<><00><><EFBFBD><EFBFBD><00><00><00>?<3F>?<3F>?<3F>?<3F>?<3F>?<3F>.<2E>.<2E>.<2E>.<2E>.<2E>.<2E>"m<01><1C>$<24>[<5B>1<>1<>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>R<EFBFBD><19>z<EFBFBD>z<EFBFBD>M<><0E><0E> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><14> <20>\<5C>\<5C>^<5E>^<5E>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B><04> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C> ,<2C><><EFBFBD><EFBFBD> ,<2C> ,<2C> ,<2C> ,<2C><14> "<22><18>n<EFBFBD>n<EFBFBD>I<>+<2B>+<2B>d<EFBFBD>+<2B>+<2B>+<2B><12><12><12><12><12><12><12><12><12><19>i<EFBFBD>i<EFBFBD>k<EFBFBD>k<EFBFBD>!<21>!<21>!<21>!<21>!<21>!<21>!<21>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22>
"<22><><EFBFBD><EFBFBD>
"<22>
"<22>
"<22>
"<22><14> <15><19>-<2D><01>"<22>"<22> "<22> "<22> "<22> "<22> "<22> "<22> "<22> <14> B<01>S<EFBFBD> B<01> B<01> B<01> B<01> B<01> B<01> B<01>"<16>n<EFBFBD>S<>S<>S<>S<>d<EFBFBD>S<>S<>S<>l<>gk<67>l<>l<>l<>l<>l<>l<>l<>l<>l<>E"ms6<00>C!<03>A<<05>*C!<03><
B <09>C!<03> B <09>
AC!<03>!
C+<07>.C+c<00>
<00>t<00>t<00><00><00>r tjt <00><00><00><00>at
<00>t
<00><00><00>r"tjt <00><00><00><00>adSdSr0)r r<>rr<>r<>r rrrr<00> start_workerr~sf<00><00><13><1B>|<7C>0<>0<>2<>2<><1B><1E>*<2A>;<3B>=<3D>=<3D>9<>9<> <0C><16><1E>/<2F>"6<>"6<>"8<>"8<><1E>!<21>-<2D>n<EFBFBD>.><3E>.><3E>?<3F>?<3F><0F><0F><0F><1F>rc<00>
<00>dadS)NT)r<>rrr<00> pause_workerr<00>s <00><00><12>G<EFBFBD>G<EFBFBD>Grc<00>&<00>dat<00><00>dS)NF)r<>rrrr<00> resume_workerr
<00>s<00><00><13>G<EFBFBD><10>N<EFBFBD>N<EFBFBD>N<EFBFBD>N<EFBFBD>Nrc<00>X<00>tduo!t<00><00><00> ot Sr0)r r<>r<>rrr<00>
is_runningr <00>s(<00><00> <17>t<EFBFBD> #<23> O<>L<EFBFBD>,=<3D>,=<3D>,?<3F>,?<3F>(?<3F> O<><07>K<EFBFBD>Orr0)Brr<><00>osrpr<>r<>r<><00>logging<6E>typingrr<><00> dns.resolverr<72>r<><00>bs4r<00>app.dbrrr<00>
app.scorerr<00> getLogger<65>__name__r<5F>r<><00>getenvr r<>r <00>Task<73>__annotations__r r<>rrr<>rr6r<>r[r;rVrXrY<00>tuple<6C>boolrZra<00>compilertrwrrrr<>r<>r<>r<>r<>r<>r<>rrrr
r rrr<00><module>rs<><00><01><0E><0E><0E><0E><0E> <0B> <0B> <0B> <0B> <09> <09> <09> <09> <09> <09> <09> <09>
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> <0A> <0A> <0A> <0A><0F><0F><0F><0F><0E><0E><0E><0E><1B><1B><1B><1B><1B><1B> <0C> <0C> <0C> <0C><13><13><13><13><10><10><10><10><1D><1D><1D><1D><1D><1D><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><<3C><1C><1C><1C><1C><1C><1C> <1A><17> <1A>8<EFBFBD> $<24> $<24><06><17>C<EFBFBD> <09><02> <09>"5<>t<EFBFBD><<3C><<3C>=<3D>=<3D><11><10> <0B>'+<2B> <0C>h<EFBFBD>w<EFBFBD>|<7C>$<24>+<2B>+<2B>+<2B>*.<2E><0F><18>'<27>,<2C>'<27>.<2E>.<2E>.<2E>
<0F><07>'+<2B><07><18>'<27>#<23> $<24>+<2B>+<2B>+<2B><13> <0A><13><13><13>K<01>J<>J<>E<>E<>E<>R<>R<>R<>*<2A>H<EFBFBD>5<>%<25>'7<>8<>%<25><EFBFBD>7<> <20>"7<>8<>"<22>L<EFBFBD>1<><1F><1B>-<2D>'<27><1A>4<> <02> <02><0E><10>S<EFBFBD><10>4<EFBFBD><10>H<EFBFBD>S<EFBFBD>M<EFBFBD><10><10><10><10><02><02><02> <0C> <02><02><02> <0A>G<01>F<>F<> <0A>%<25>3<EFBFBD>%<25>5<EFBFBD><14>t<EFBFBD><1A>+<<3C>%<25>%<25>%<25>%<25>4 <16>2<EFBFBD>:<3A>I<> J<> J<><08> <15>2<EFBFBD>:<3A>Q<> R<> R<><08>h<>h<>h<><0E>)<14><13>)<14><14>)<14>)<14>)<14>)<14>\ <1B>C<EFBFBD> <1B>E<EFBFBD>$<24><08><13> <0A>*=<3D>$><3E> <1B> <1B> <1B> <1B>
<15>3<EFBFBD>
<15>4<EFBFBD>
<15>
<15>
<15>
<15><10>S<EFBFBD><10>X<EFBFBD>c<EFBFBD>]<5D><10><10><10><10>(4<12><03>4<12><04>4<12>4<12>4<12>4<12>n<1A>d<EFBFBD><1A><1A><1A><1A>B
<1A>
<1A>3<EFBFBD>
<1A><03>
<1A>C<EFBFBD>
<1A>
<1A>
<1A>
<1A>j<01>j<01>j<01><&m<01>&m<01>&m<01>R@<01>@<01>@<01><13><13><13>
<13><13><13> P<01>D<EFBFBD>P<01>P<01>P<01>P<01>P<01>Pr