Files
JiboAutoMod/__pycache__/jibo_updater.cpython-314.pyc

296 lines
53 KiB
Plaintext
Raw Normal View History

2026-03-28 21:49:33 +02:00
+
<00>.<2E>i<EFBFBD><00><01>8<00>Rt^RIHt^RIt^RIt^RIt^RIt^RIt^RIt^RI t ^RI
t
^RI t ^RI t ^RIt ^RIt ^RIt^RIt^RIHt^RIHt^RIHtHt^RIt^RIt^RIt^RIt^RIt]!]4P@PC4t"]"R, t#]#R, t$]#R, t%R t&R
t'R t(!R R 4t)RRlt*RRlt+RRlt,RRlt-RRlt.R^RRllt/]!RR7!RR44t0R_RR llt1R!R"lt2!R#R$4t3]Ph!R%4t5R&R'lt6R(R)lt7R*R+lt8R,R-lt9R.R/R/R0llt:R.R/R1R2llt;R3R4lt<R5R6lt=R7R8lt>R9R:lt?R;R<lt@R=R>ltAR`R?R@lltBRARBltCRaRCR/RDREllltDRFRGltERHRIltFRbRJRKlltGRLRMltHRNROltIRPRQltJRRRSltKRTRUltLRcRVRWlltMRXRYltNRZR[ltO]PR\8Xd]Q!]O!44hR# ]Rd]S!R]4]Q!^<5E>4h]TdtU].!]V!]U44]Q!^4hRtUAUii;i)da<64>Jibo OS Updater
Downloads the latest JiboOs release from the configured Gitea instance,
extracts it, then uploads the contents of the release "build" folder into
Jibo's root filesystem over SFTP.
High-level flow:
1) Check latest release
2) Download + extract archive
3) SSH into Jibo (root / password)
4) Remount / as read-write
5) SFTP upload build/ contents into /
6) Optionally switch /var/jibo/mode.json back to "normal"
This tool assumes your Jibo is already modded and reachable via SSH.
)<01> annotationsN)<01> dataclass)<01>Path)<02>Iterable<6C>Optional<61> jibo_work<72>updateszupdate_state.jsonz0.1.0zHhttps://kevinblog.sytes.net/Code/api/v1/repos/Kevin/JiboUpdater/releaseszChttps://kevinblog.sytes.net/Code/api/v1/repos/Kevin/JiboOs/releasesc<01>2<00>]tRt^<tRtRtRtRtRtRt Rt
Rt R #)
<EFBFBD>Colorszzzzzzz<31>N) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__<5F>RED<45>GREEN<45>YELLOW<4F>BLUE<55>CYAN<41>RESET<45>BOLD<4C>__static_attributes__r <00><00>3/home/kevin/Documents/JiboAutoModv2/jibo_updater.pyr
r
<s%<00><00>
<14>C<EFBFBD> <16>E<EFBFBD> <17>F<EFBFBD> <15>D<EFBFBD> <15>D<EFBFBD> <15>E<EFBFBD> <14>Drr
c<01><00>V^8<>dQhRR/#<00><03><00>return<72>Noner )<01>formats"r<00> __annotate__r Fs<00><00>&<26>&<26>d<EFBFBD>&rc<01><><00>\PP4'gC\\4F-pVP R4'dK\ \VR4K/ R#R#)<03>_<>N)<07>sys<79>stdout<75>isatty<74>dirr
<00>
startswith<EFBFBD>setattr)<01>attrs r<00>_no_color_if_not_ttyr+FsF<00><00> <0E>:<3A>:<3A> <1C> <1C> <1E> <1E><17><06>K<EFBFBD>D<EFBFBD><13><EFBFBD><EFBFBD>s<EFBFBD>#<23>#<23><18> <13>F<EFBFBD>D<EFBFBD>"<22> %<25> <20> rc<01> <00>V^8<>dQhRRRR/#<00>r<00>msg<73>strrrr )rs"rr r Ns<00><00>3<>3<>C<EFBFBD>3<>D<EFBFBD>3rc<01>b<00>\\P RV \P 24R#)u N)<04>printr
rr<00>r.s&r<00>
print_infor3Ns!<00><00> <09>V<EFBFBD>[<5B>[<5B>M<EFBFBD><14>c<EFBFBD>U<EFBFBD>6<EFBFBD><<3C><<3C>.<2E>
1<EFBFBD>2rc<01> <00>V^8<>dQhRRRR/#r-r )rs"rr r Rs<00><00>4<>4<>s<EFBFBD>4<>t<EFBFBD>4rc<01>b<00>\\P RV \P 24R#)u✓ N)r1r
rrr2s&r<00> print_successr6Rs!<00><00> <09>V<EFBFBD>\<5C>\<5C>N<EFBFBD>$<24>s<EFBFBD>e<EFBFBD>F<EFBFBD>L<EFBFBD>L<EFBFBD>><3E>
2<EFBFBD>3rc<01> <00>V^8<>dQhRRRR/#r-r )rs"rr r Vs<00><00>5<>5<>s<EFBFBD>5<>t<EFBFBD>5rc<01>b<00>\\P RV \P 24R#)u⚠ N)r1r
rrr2s&r<00> print_warningr9Vs!<00><00> <09>V<EFBFBD>]<5D>]<5D>O<EFBFBD>4<EFBFBD><03>u<EFBFBD>V<EFBFBD>\<5C>\<5C>N<EFBFBD>
3<EFBFBD>4rc<01> <00>V^8<>dQhRRRR/#r-r )rs"rr r Zs<00><00>2<>2<>S<EFBFBD>2<>T<EFBFBD>2rc<01>b<00>\\P RV \P 24R#)u✗ N)r1r
rrr2s&r<00> print_errorr<Zs!<00><00> <09>V<EFBFBD>Z<EFBFBD>Z<EFBFBD>L<EFBFBD><04>S<EFBFBD>E<EFBFBD>&<26>,<2C>,<2C><1E>
0<EFBFBD>1rFc<01>$<00>V^8<>dQhRRRRRR/#)r<00>questionr/<00>default<6C>boolrr )rs"rr r ^s!<00><00>
'<27>
'<27>C<EFBFBD>
'<27>$<24>
'<27>4<EFBFBD>
'rc<01><><00>V'dRMRp\V RV R24P4P4pV'gV#VR9dR#VR9dR#\R4KW)z[Y/n]z[y/N]T<> FzPlease answer y or n.><00>y<>yes><00>n<>no)<04>input<75>strip<69>lowerr1)r>r?<00>suffix<69>anss&& r<00> prompt_yes_norL^s^<00><00><1F>W<EFBFBD>W<EFBFBD>F<EFBFBD>
<0E><13>x<EFBFBD>j<EFBFBD><01>&<26><18><11>+<2B>,<2C>2<>2<>4<>:<3A>:<3A><<3C><03><12><1A>N<EFBFBD> <0E>,<2C> <1E><17> <0E>+<2B> <1D><18> <0A>%<25>&rT)<01>frozenc<01>J<00>]tRt^kt$R]R&R]R&R]R&R]R&R]R&RtR #)
<EFBFBD>Releaser/<00>tag_name<6D>namer@<00>
prerelease<EFBFBD> tarball_url<72> zipball_urlr N)r r rr<00>__annotations__rr rrrOrOks<00><00><11>M<EFBFBD>
<0A>I<EFBFBD><14><14><14><14><14>rrOc<01>$<00>V^8<>dQhRRRRRR/#)r<00>urlr/<00>timeout<75>intr<00>objectr )rs"rr r ts!<00><00>
><3E>
><3E>s<EFBFBD>
><3E>S<EFBFBD>
><3E>&<26>
>rc<01>B<00>\PPVRRRR/R7p\PPW!R7;_uu_4pVP 4pRRR4\
P !XPRRR 74# +'giL7;i)
<EFBFBD>Acceptzapplication/json<6F>
User-Agent<6E>JiboUpdater/1.0<EFBFBD><01>headers<72>rXN<>utf-8<>replace<63><01>errors)<08>urllib<69>request<73>Request<73>urlopen<65>read<61>json<6F>loads<64>decode)rWrX<00>req<65>resp<73>datas&& r<00> http_get_jsonrqts<><00><00>
<10>.<2E>.<2E>
<20>
<20> <0B> <14>(<28> <18>+<2B>
<EFBFBD> !<21> <06>C<EFBFBD>
<10><1E><1E> <1F> <1F><03> <1F> 5<> 5<><14><13>y<EFBFBD>y<EFBFBD>{<7B><04>
6<EFBFBD> <0F>:<3A>:<3A>d<EFBFBD>k<EFBFBD>k<EFBFBD>'<27>)<29>k<EFBFBD><<3C> =<3D>=<3D>
6<EFBFBD> 5<>s <00>B<05> B c<01>$<00>V^8<>dQhRRRRRR/#)r<00> releases_apir/<00>current_versionrztuple[Optional[str], bool]r )rs"rr r <00>s"<00><00><1C><1C><03><1C>c<EFBFBD><1C>F`<60>rc <05> <00>\V4p\T\4'd T'gR#.pTFEp\T\4'gKTP \ TPRR444KG TUu.uFqU'gK TNK ppT'gR#TP\RR7T^,p\T4\T48<>pYg3# \dRu#i;iuupi \dRpYg3#i;i)zgReturn (latest_tag, is_newer) comparing semantic-ish tags.
If the check fails, returns (None, False).
FrPr#T<><02>key<65>reverse)NF)
rq<00> Exception<6F>
isinstance<EFBFBD>list<73>dict<63>appendr/<00>get<65>sort<72>_version_tuple)rsrt<00>raw<61>tags<67>item<65>t<>latest<73>is_newers&& r<00>check_updater_versionr<6E><00>s<><00><00>
<1B><1B>L<EFBFBD>)<29><03> <16>c<EFBFBD>4<EFBFBD> <20> <20><03><1A><1A><18>D<EFBFBD><13><04><19>$<24><04>%<25>%<25> <14> <0C> <0B> <0B>C<EFBFBD><04><08><08><1A>R<EFBFBD>0<>1<>2<><14>
<1C> !<21>t<EFBFBD>!<21>q<EFBFBD>A<EFBFBD>A<EFBFBD>t<EFBFBD>D<EFBFBD> !<21> <0F><1A><1A><08>I<EFBFBD>I<EFBFBD>.<2E>$<24>I<EFBFBD>/<2F> <11>!<21>W<EFBFBD>F<EFBFBD><19>!<21>&<26>)<29>N<EFBFBD>?<3F>,K<>K<><08> <12> <1B><1B><>- <15><1B><1A><1A><1B><> "<22><> <15><19><18><08> <11> <1B><1B><19>s/<00> C<00>> C,<04> C,<04>?C1<00> C)<03>(C)<03>1 D<03>Dc<01>2<00>]tRt^<5E>tRRRlltRtRtRtR#)<08>_Spinnerc<01><00>V^8<>dQhRR/#)r<00>messager/r )rs"rr <00>_Spinner.__annotate__<5F>s<00><00><1F><1F><03>rc <09>T<00>\P!4VnRVnWnR#<00>N)<05> threading<6E>Event<6E>_stop<6F>_threadr<64>)<02>selfr<66>s&&r<00>__init__<5F>_Spinner.__init__<5F>s<00><00><1E>_<EFBFBD>_<EFBFBD>&<26><04>
<EFBFBD>37<EFBFBD><04> <0C><1E> rc <09><>a<00>V3Rlp\P!VRR7SnSPP4R#)c
<01>0<<01>Rp^pSPP4'g<>\PP RSP
RW\ V4,, 24\PP4V^, p\P!R4K<>\PP RR\ SP
4^,,,R,4\PP4R#)z|/-\<5C> rBg<><1E><>Q<EFBFBD><51>?N)
r<EFBFBD><00>is_setr$r%<00>writer<65><00>len<65>flush<73>time<6D>sleep)<03>chars<72>ir<69>s <20>r<00>_spin<69>_Spinner.start.<locals>._spin<69>s<><00><><00><1B>E<EFBFBD><11>A<EFBFBD><1A>j<EFBFBD>j<EFBFBD>'<27>'<27>)<29>)<29><13>
<EFBFBD>
<EFBFBD> <20> <20>2<EFBFBD>d<EFBFBD>l<EFBFBD>l<EFBFBD>^<5E>1<EFBFBD>U<EFBFBD>s<EFBFBD>5<EFBFBD>z<EFBFBD>><3E>5J<35>4K<34>!L<>M<><13>
<EFBFBD>
<EFBFBD> <20> <20>"<22><11>Q<EFBFBD><06><01><14>
<EFBFBD>
<EFBFBD>4<EFBFBD> <20> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C>T<EFBFBD>C<EFBFBD>3<EFBFBD>t<EFBFBD>|<7C>|<7C>+<<3C>q<EFBFBD>+@<40>$A<>A<>D<EFBFBD>H<> I<> <0F>J<EFBFBD>J<EFBFBD> <1C> <1C> rT)<02>target<65>daemonN)r<><00>Threadr<64><00>start)r<>r<>sf rr<><00>_Spinner.start<72>s.<00><><00> <1F>!<21>'<27>'<27>u<EFBFBD>T<EFBFBD>B<><04> <0C> <0C> <0C> <0C><1A><1A>rc <09><><00>VPP4VP'dVPP^R7R#R#)<03>raN)r<><00>setr<74><00>join)r<>s&r<00>stop<6F> _Spinner.stop<6F>s3<00><00> <0C>
<EFBFBD>
<EFBFBD><0E><0E><18> <0F><<3C><<3C><<3C> <10>L<EFBFBD>L<EFBFBD> <1D> <1D>a<EFBFBD> <1D> (<28> r)r<>r<>r<>N)r#)r r rrr<>r<>r<>rr rrr<>r<><00>s<00><00><1F>
<1D>)rr<>z ^v?(\d+)(?:\.(\d+))?(?:\.(\d+))?c<01> <00>V^8<>dQhRRRR/#)r<00>tagr/rztuple[int, int, int]r )rs"rr r <00>s<00><00>!<21>!<21><03>!<21> 4<>!rc<01><<00>\PVP44pV'gR#\VP ^4;'g^4p\VP ^4;'g^4p\VP ^4;'g^4pW#V3#)<02>)r<>r<>r<>)<05> _VERSION_RE<52>matchrHrY<00>group)r<><00>m<>major<6F>minor<6F>patchs& rr<>r<><00>st<00><00><13><19><19>#<23>)<29>)<29>+<2B>&<26>A<EFBFBD> <0C><18><18> <0F><01><07><07><01>
<EFBFBD><0F><0F>a<EFBFBD> <20>E<EFBFBD> <0F><01><07><07><01>
<EFBFBD><0F><0F>a<EFBFBD> <20>E<EFBFBD> <0F><01><07><07><01>
<EFBFBD><0F><0F>a<EFBFBD> <20>E<EFBFBD> <11>%<25> <20> rc<01>$<00>V^8<>dQhRRRRRR/#)rrsr/<00>allow_prereleaser@rrOr )rs"rr r <00>s!<00><00><17><17>S<EFBFBD><17>D<EFBFBD><17>W<EFBFBD>rc<01>v<00>\V4p\V\4'd V'g\RV 24h.pVF<>p\V\4'gK\ VP RR44pV'd V'gKHVP\\VP RR44\VP RR44V\VP RR44\VP RR44R74K<> V'g \R 4hVPR
R R 7V^,#) z&Unexpected releases API response from rRFrPr#rQrSrT<00>rPrQrRrSrTz.No releases found (after prerelease filtering)c<01>,<00>\VP4#r<><00>r<>rP<00><01>rs&r<00><lambda><3E>$get_latest_release.<locals>.<lambda><3E><00> <00><00><0E>q<EFBFBD>z<EFBFBD>z<EFBFBD> :rTrv) rqrzr{<00> RuntimeErrorr|r@r~r}rOr/r)rsr<>r<><00>releasesr<73>rRs&& r<00>get_latest_releaser<65><00>s<><00><00>
<17> <0C>
%<25>C<EFBFBD> <15>c<EFBFBD>4<EFBFBD> <20> <20><03><1A>C<>L<EFBFBD>><3E>R<>S<>S<> <20>H<EFBFBD><13><04><19>$<24><04>%<25>%<25> <14><19>$<24>(<28>(<28><<3C><15>7<>8<>
<EFBFBD> <15>.<2E> <14><10><0F><0F> <13><1C>T<EFBFBD>X<EFBFBD>X<EFBFBD>j<EFBFBD>"<22>5<>6<><18><14><18><18>&<26>"<22>-<2D>.<2E>%<25><1F><04><08><08><1D><02> ;<3B><<3C><1F><04><08><08><1D><02> ;<3B><<3C>  <0E>
<EFBFBD> <14> <14><1A>K<>L<>L<> <0A>M<EFBFBD>M<EFBFBD>:<3A>D<EFBFBD>M<EFBFBD>I<> <13>A<EFBFBD>;<3B>rc<01>$<00>V^8<>dQhRRRRRR/#)r<00> download_urlr/<00>base_urlrr )rs"rr r <00>s!<00><00><06><06><13><06><03><06><03>rc<05><><00>V'gV#\PPV4p\PPV4pVPVP8XdVPVP8XdV#\PP VPVPVP VPVPVP34#)z<>Force downloads to use the same scheme/host as the API base.
Some Gitea instances can be configured with a different ROOT_URL than the
externally reachable hostname, which can leak into tarball_url/zipball_url.
)
rf<00>parse<73>urlparse<73>scheme<6D>netloc<6F>
urlunparse<EFBFBD>path<74>params<6D>query<72>fragment)r<>r<><00>base<73>dls&& r<00>normalize_download_urlr<6C><00>s<><00><00> <18><1B><1B> <11><<3C><<3C> <20> <20><18> *<2A>D<EFBFBD> <0F><1C><1C> <1E> <1E>|<7C> ,<2C>B<EFBFBD>
<EFBFBD>y<EFBFBD>y<EFBFBD>D<EFBFBD>K<EFBFBD>K<EFBFBD><1F>B<EFBFBD>I<EFBFBD>I<EFBFBD><14><1B><1B>$<<3C><1B><1B> <12><<3C><<3C> "<22> "<22> <0A><1B><1B>d<EFBFBD>k<EFBFBD>k<EFBFBD>2<EFBFBD>7<EFBFBD>7<EFBFBD>B<EFBFBD>I<EFBFBD>I<EFBFBD>r<EFBFBD>x<EFBFBD>x<EFBFBD><12><1B><1B>M<> <06>rc<01><00>V^8<>dQhRR/#rr )rs"rr r <00>s<00><00>3<>3<>d<EFBFBD>3rc<01>b<00>\PRRR7\PRRR7R#)T<><02>parents<74>exist_okN)<03>WORK_DIR<49>mkdir<69> UPDATES_DIRr rr<00> _ensure_dirsr<73><00>s%<00><00> <0C>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F><0F><15><15>d<EFBFBD>T<EFBFBD><15>2r<00>forcec<01>(<00>V^8<>dQhRRRRRRRR/#) rrWr/<00>destrr<>r@rrr )rs"rr r s.<00><00>0H<01>0H<01>3<EFBFBD>0H<01>d<EFBFBD>0H<01>d<EFBFBD>0H<01>t<EFBFBD>0Hrc<01><><00>VPPRRR7VP4'dV'g\RV 24R#\RV 24VP VP
R,4pRp\ ^^4EF<>pVP4'dVPRR7\PPV^<5E>R7;_uu_4pVPPR4pV'd"VP4'd \V4MRp^p Rp
\VR 4;_uu_4p VP!V
4p V 'gM<>V P#V 4V \%V 4, p V'gKHV R
,V, p \&P(P#R V R , R RVR , R RV R R24\&P(P+4K<>RRR4RRR4X'd \&P(P#R4VP-V4\/RV 24R# VP4'dVPRR7\9RV 24h +'giL<>;i +'giL<>;i \0dCpTp^T,p\3RT RT RT R24\4P6!T4Rp?EKgRp?ii;i)Tr<54>zUsing cached download: Nz Downloading: z.part)<01>
missing_okrazContent-Length<74>wbgY@z g<00><>.Az.1fzMB / zMB (z%)<29>
zDownloaded to zDownload attempt z /3 failed: z. Retrying in zs...z"Download failed after 3 attempts: i)<1D>parentr<74><00>existsr3<00> with_suffixrJ<00>range<67>unlinkrfrgrir`r~<00>isdigitrY<00>openrjr<>r<>r$r%r<>rcr6ryr9r<>r<>r<>)rWr<>r<><00>tmp<6D>last_err<72>attemptro<00>total<61> total_int<6E>
downloaded<EFBFBD>
chunk_size<EFBFBD>f<>chunk<6E>pct<63>e<>waits&&$ r<00> _downloadr<64>sV<00><00><08>K<EFBFBD>K<EFBFBD><15><15>d<EFBFBD>T<EFBFBD><15>2<> <0B>{<7B>{<7B>}<7D>}<7D>U<EFBFBD><12>,<2C>T<EFBFBD>F<EFBFBD>3<>4<><0E><0E><1D>s<EFBFBD>e<EFBFBD>$<24>%<25>
<0E>
<1A>
<1A>4<EFBFBD>;<3B>;<3B><17>0<>
1<EFBFBD>C<EFBFBD>(,<2C>H<EFBFBD><18><11>A<EFBFBD>;<3B><07>! <1D><12>z<EFBFBD>z<EFBFBD>|<7C>|<7C><13>
<EFBFBD>
<EFBFBD>d<EFBFBD>
<EFBFBD>+<2B><17><1E><1E>'<27>'<27><03>S<EFBFBD>'<27>9<>9<>T<EFBFBD><1C> <0C> <0C>(<28>(<28>)9<>:<3A><05>*/<2F>E<EFBFBD>M<EFBFBD>M<EFBFBD>O<EFBFBD>O<EFBFBD>C<EFBFBD><05>J<EFBFBD><14> <09><1E>
<EFBFBD>'<27>
<EFBFBD><19>#<23>t<EFBFBD>_<EFBFBD>_<EFBFBD><01><1E> $<24> <09> <09>*<2A> 5<><05>$<24>!<21><19><07><07><05><0E>"<22>c<EFBFBD>%<25>j<EFBFBD>0<>
<EFBFBD>$<24>9<EFBFBD>",<2C>u<EFBFBD>"4<>y<EFBFBD>"@<40>C<EFBFBD><1F>J<EFBFBD>J<EFBFBD>,<2C>,<2C>"&<26>z<EFBFBD>#<23>~<7E>c<EFBFBD>&:<3A>%<25> <09>#<23> <0A>c<EFBFBD>?R<>RV<52>WZ<57>[^<5E>V_<56>_a<5F> b<><1E> <20>J<EFBFBD>J<EFBFBD>,<2C>,<2C>.<2E>%<25> :<3A>&<19><13>
<EFBFBD>
<EFBFBD> <20> <20><14>&<26> <0F>K<EFBFBD>K<EFBFBD><04> <1D> <19>N<EFBFBD>4<EFBFBD>&<26>1<> 2<> <12>9<1F>H <0B>z<EFBFBD>z<EFBFBD>|<7C>|<7C> <0B>
<EFBFBD>
<EFBFBD>d<EFBFBD>
<EFBFBD>#<23>
<16>;<3B>H<EFBFBD>:<3A>F<>
G<EFBFBD>G<>9%<25>_<EFBFBD><5F> :<3A>9<><39>2<19> <1D><18>H<EFBFBD><14>g<EFBFBD>:<3A>D<EFBFBD> <19>-<2D>g<EFBFBD>Y<EFBFBD>k<EFBFBD>!<21><13>N<EFBFBD>SW<53>RX<52>X\<5C>]<5D> ^<5E> <10>J<EFBFBD>J<EFBFBD>t<EFBFBD> <1C> <1C><>  <1D>sb<00>AJ)<02> 9J<07>%J<07>?J <0B>)J <0B>A*J <0B>2J<07>:J)<02>
>J)<02> J<0F>J<07> J& <0B>!J)<02>) K6<05>46K1<05>1K6c<01>(<00>V^8<>dQhRRRRRRRR/#)r<00>archiver<00> extract_dirr<72>r@rr )rs"rr r 6s(<00><00>(<17>(<17>d<EFBFBD>(<17><14>(<17><14>(<17>$<24>(rc<01>~<00>VP4'dV'd\P!V4VP4'd\RV 24V#VP RRR7\RVP
R24RRlpVP RRRR .8XgVPR
8Xd<>\P!VR 4;_uu_4pVP4F;pWP
, pV!W4'dK%\R VP
24h VPVR R7RRR4M<>VPR8Xd<>\P!V4;_uu_4pVP!4F;pWP", pV!W4'dK%\RVP" 24h VPV4RRR4M\RV 24h\%RV 24V# \dTPT4L<>i;i +'giLB;i +'giLU;i)zUsing cached extraction: Tr<54>z Extracting <20> ...c<01>$<00>V^8<>dQhRRRRRR/#)rr<>rr<>rr@r )rs"rr <00>_extract.<locals>.__annotate__As!<00><00><19><19><14><19>t<EFBFBD><19><04>rc<01><><00>VP4PVP44R# \dR#i;i)TF)<03>resolve<76> relative_tory)r<>r<>s&&r<00>
_is_within<EFBFBD>_extract.<locals>._is_withinAs7<00><00> <19> <12>N<EFBFBD>N<EFBFBD> <1C> (<28> (<28><14><1C><1C><1E> 8<><17><><18> <19><18> <19>s<00>-1<00> A<03>ANz.tarz.gz<67>.tgzzr:gzzUnsafe path in tar archive: rp)<01>filter<65>.zipzUnsafe path in zip archive: zUnsupported archive type: z Extracted to <20><><EFBFBD><EFBFBD><EFBFBD>)r<><00>shutil<69>rmtreer3r<>rQ<00>suffixesrJ<00>tarfiler<65><00>
getmembersr<EFBFBD><00>
extractall<EFBFBD> TypeError<6F>zipfile<6C>ZipFile<6C>infolist<73>filenamer6)r<>r<>r<>r<00>tf<74>member<65> member_path<74>zfs&&$ r<00>_extractr6s<><00><00><12><19><19><1B><1B><05><0E> <0A> <0A>k<EFBFBD>"<22><12><19><19><1B><1B><12>.<2E>{<7B>m<EFBFBD><<3C>=<3D><1A><1A><0F><15><15>d<EFBFBD>T<EFBFBD><15>2<><0E><1B>W<EFBFBD>\<5C>\<5C>N<EFBFBD>$<24>/<2F>0<><19><0F><17><17><02><03><1C><16><15><0F>/<2F>7<EFBFBD>><3E>><3E>V<EFBFBD>3K<33> <14>\<5C>\<5C>'<27>6<EFBFBD> *<2A> *<2A>b<EFBFBD><1C>-<2D>-<2D>/<2F><06>)<29>K<EFBFBD>K<EFBFBD>7<> <0B>!<21>+<2B>;<3B>;<3B>&<26>)E<>f<EFBFBD>k<EFBFBD>k<EFBFBD>]<5D>'S<>T<>T<>*<2A>
 +<2B><12> <0A> <0A>k<EFBFBD>&<26> <0A>9<>+<2B> *<2A>
<11><1E><1E>6<EFBFBD> !<21> <14>_<EFBFBD>_<EFBFBD>W<EFBFBD> %<25> %<25><12><1C>+<2B>+<2B>-<2D><06>)<29>O<EFBFBD>O<EFBFBD>;<3B> <0B>!<21>+<2B>;<3B>;<3B>&<26>)E<>f<EFBFBD>o<EFBFBD>o<EFBFBD>EV<45>'W<>X<>X<>(<28> <0F>M<EFBFBD>M<EFBFBD>+<2B> &<26> &<26> %<25><1B>7<><07>y<EFBFBD>A<>B<>B<><11>M<EFBFBD>+<2B><1D>/<2F>0<> <16><16><><1D> +<2B><12> <0A> <0A>k<EFBFBD>*<2A> +<2B><>+<2B> *<2A><>&<26> %<25>sB<00>1H<05> H<05>$G7<04>/1H,<05>%+H,<05>7H<07>H<05>H<07>H<05> H) <09>, H< c<01> <00>V^8<>dQhRRRR/#)r<00>rootrrzIterable[Path]r )rs"rr r as<00><00><17><17><14><17>.<2E>rc#<01>v"<00>VPR4FpVP4'gKVx<00>K! R#5i)<02>buildN)<02>rglob<6F>is_dir)rr<>s& r<00>_iter_build_candidatesr!as(<00><00><00><14>
<EFBFBD>
<EFBFBD>7<EFBFBD>#<23><04> <0F>;<3B>;<3B>=<3D>=<3D><16>J<EFBFBD>$<24>s<00>(9<01>
9c<01> <00>V^8<>dQhRRRR/#)rr<>rrrYr )rs"rr r gs<00><00> <11> <11>4<EFBFBD> <11>C<EFBFBD> rc<01>L<00>^pRF+wr#W, P4'gK#W, pK- VPUu0uFqDP4kK pp\;QJdRV4F 'gK RM RM !RV44'd
V^, pV#uupi)r<>c3<01>p"<00>TF,p\P!RV\PR7x<00>K. R#5i)zv\d+(?:\.\d+)*)<01>flagsN)<03>re<72> fullmatch<63>
IGNORECASE)<02>.0<EFBFBD>ps& r<00> <genexpr><3E>#_score_build_dir.<locals>.<genexpr>ns%<00><00><00>
R<EFBFBD>E<EFBFBD>q<EFBFBD>2<EFBFBD><<3C><<3C>)<29>1<EFBFBD>B<EFBFBD>M<EFBFBD>M<EFBFBD> B<> B<>E<EFBFBD>s<00>46TF))<02>etc<74>)<02>optr.)<02>varr)<02>usrr)<02>libr<62>)<02>binr<6E>)r<><00>partsrI<00>any)r<><00>scorerQ<00>weightr*r4s& r<00>_score_build_dirr8gs~<00><00> <0A>E<EFBFBD>`<60> <0C><04> <10>K<EFBFBD> <1F> <1F> !<21> !<21> <11>O<EFBFBD>E<EFBFBD>a<01>!%<25>
<EFBFBD>
<EFBFBD> +<2B>
<EFBFBD>1<EFBFBD>W<EFBFBD>W<EFBFBD>Y<EFBFBD>
<EFBFBD>E<EFBFBD> +<2B>
<EFBFBD>s<EFBFBD>
R<EFBFBD>E<EFBFBD>
R<EFBFBD>s<EFBFBD>s<EFBFBD>s<EFBFBD>
R<EFBFBD>E<EFBFBD>
R<EFBFBD>R<>R<> <0A><11>
<EFBFBD><05> <10>L<EFBFBD><4C> ,s<00>B!c<01>$<00>V^8<>dQhRRRRRR/#)r<00> extract_rootr<00>explicit<69> Optional[str]rr )rs"rr r ss!<00><00><10><10><14><10><1D><10>4<EFBFBD>rc<01><><00>V'dSW, P4pVP4'dVP4'g\RV 24hV#\ \ V44pV'g \R4hVP \RR7V^,p\V4^8Xd\V4^8<>d \R4\RV 24V#)z--build-path not found: z{Could not find a 'build' folder in the extracted archive. Use --build-path to point to it (relative to the extracted root).TrvzFFound build folders, but none look like a rootfs overlay (no etc/opt).zUsing build folder: ) rr<>r r<>r{r!rr8r<>r9r3)r:r;r*<00>
candidates<EFBFBD>bests&& r<00>find_build_dirr@ss<><00><00><0F> <19> $<24> -<2D> -<2D> /<2F><01><10>x<EFBFBD>x<EFBFBD>z<EFBFBD>z<EFBFBD><11><18><18><1A><1A><1E>!9<>!<21><13>=<3D>><3E> ><3E><10><08><15>,<2C>\<5C>:<3A>;<3B>J<EFBFBD> <15><1A> P<01>
<EFBFBD>
<EFBFBD>
<0F>O<EFBFBD>O<EFBFBD>(<28>$<24>O<EFBFBD>7<> <15>a<EFBFBD>=<3D>D<EFBFBD><17><04><1D><11>"<22>s<EFBFBD>:<3A><EFBFBD><11>':<3A><15>^<5E>_<><0E>%<25>d<EFBFBD>V<EFBFBD>,<2C>-<2D> <0F>Krc<01> <00>V^8<>dQhRRRR/#<00>rr<>rrr|r )rs"rr r <00>s<00><00><12><12>T<EFBFBD><12>d<EFBFBD>rc<01><><00>VP4'g/#\P!VPR44# \d/u#i;i<01>rb)r<>rkrl<00> read_textry)r<>s&r<00>
load_staterF<00>sC<00><00> <0F>;<3B>;<3B>=<3D>=<3D><11> <09><12><13>z<EFBFBD>z<EFBFBD>$<24>.<2E>.<2E><17>1<>2<>2<><32> <14><12><11> <09><12>s<00>$?<00> A<03>Ac<01>$<00>V^8<>dQhRRRRRR/#)rr<>r<00>stater|rrr )rs"rr r <00>s&<00><00>Z<01>Z<01>T<EFBFBD>Z<01>$<24>Z<01>4<EFBFBD>Zrc<01><><00>VPPRRR7VP\P!V^RR7R,RR7R#)Tr<54>)<02>indent<6E> sort_keysr<73>rb<00><01>encodingN)r<>r<><00>
write_textrk<00>dumps)r<>rHs&&r<00>
save_staterP<00>s<<00><00><08>K<EFBFBD>K<EFBFBD><15><15>d<EFBFBD>T<EFBFBD><15>2<><08>O<EFBFBD>O<EFBFBD>D<EFBFBD>J<EFBFBD>J<EFBFBD>u<EFBFBD>Q<EFBFBD>$<24>?<3F>$<24>F<>QX<51>O<EFBFBD>Yrc
<01>,<00>V^8<>dQhRRRRRRRRRR/#) r<00>hostr/<00>user<65>passwordrXrYr<00>paramiko.SSHClientr )rs"rr r <00>s0<00><00> <12> <12>c<EFBFBD> <12><13> <12><03> <12>c<EFBFBD> <12>FX<46> rc <01><><00>\P!4pVP\P!44VP VVVRRVVVR7V#)F)<08>hostname<6D>usernamerT<00> look_for_keys<79> allow_agentrX<00>banner_timeout<75> auth_timeout)<05>paramiko<6B> SSHClient<6E>set_missing_host_key_policy<63> AutoAddPolicy<63>connect)rRrSrTrX<00>clients&&&& r<00> ssh_connectrc<00>sW<00><00> <15> <1F> <1F> !<21>F<EFBFBD>
<EFBFBD>&<26>&<26>x<EFBFBD>'=<3D>'=<3D>'?<3F>@<40>
<EFBFBD>N<EFBFBD>N<EFBFBD><15><15><19><1B><19><17><1E><1C><13> <06> <12>Mrc<01>(<00>V^8<>dQhRRRRRRRR/#) rrbrU<00>commandr/rXrYrztuple[int, str, str]r )rs"rr r <00>s*<00><00><1A><1A>'<27><1A>#<23><1A><03><1A>Ma<4D>rc<01><><00>VPWR7wr4pTpVP4PRRR7pVP4PRRR7pVPP 4p W<>V3#)rarbrcrd)<05> exec_commandrjrm<00>channel<65>recv_exit_status)
rbrerX<00>stdinr%<00>stderrr"<00>out<75>err<72>codes
&&& r<00>ssh_execro<00>sq<00><00>"<22>/<2F>/<2F><07>/<2F>I<><19>E<EFBFBD>6<EFBFBD> <0A>A<EFBFBD>
<10>+<2B>+<2B>-<2D>
<1E>
<1E>w<EFBFBD>y<EFBFBD>
<1E>
9<EFBFBD>C<EFBFBD>
<10>+<2B>+<2B>-<2D>
<1E>
<1E>w<EFBFBD>y<EFBFBD>
<1E>
9<EFBFBD>C<EFBFBD> <11>><3E>><3E> *<2A> *<2A> ,<2C>D<EFBFBD> <0F>c<EFBFBD>><3E>rc<01>$<00>V^8<>dQhRRRRRR/#)r<00>sftp<74>paramiko.SFTPClient<6E>
remote_dirr/rrr )rs"rr r <00>s"<00><00> <1C> <1C>/<2F> <1C>S<EFBFBD> <1C>T<EFBFBD> rc<01><00>VPR4Uu.uFq"'gK VNK ppRpVF+p\P!WE4pVPV4K- R#uupi \dTP T4KUi;i)<02>/N)<06>split<69> posixpathr<68><00>stat<61>IOErrorr<72>)rqrsr*r4<00>cur<75>parts&& r<00>ensure_remote_dirr|<00>su<00><00>"<22>(<28>(<28><13>-<2D> 3<>-<2D>1<EFBFBD><11>Q<EFBFBD>Q<EFBFBD>-<2D>E<EFBFBD> 3<>
<0A>C<EFBFBD><15><04><17>n<EFBFBD>n<EFBFBD>S<EFBFBD>'<27><03> <1C> <10>I<EFBFBD>I<EFBFBD>c<EFBFBD>N<EFBFBD><16><> 4<><34> <17> <1C> <10>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD> <1C>s<00> A<04>A<04>A$<02>$B<05>B<05>dry_runc
<01>,<00>V^8<>dQhRRRRRRRRR R
/#) rrqrr<00>
local_rootr<00> remote_rootr/r}r@rrr )rs"rr r <00>sA<00><00>J;<3B>J;<3B>
<1D>J;<3B><14>J;<3B><15>J;<3B>
<12> J;<3B> 
<EFBFBD> J;rc<01>l<00>VP4p\VPR44p\V4p^pVEF<>pVP V4P 4p\ P!W(4p VP4'd+V'dKY\W 4VPV R4KyVP4'd<>\P!V4p
V'd V^, pK<>\V\ P!V 44VP!V 4VP%W<>4VPV R4V^, pV^<5E>,^8Xd\+RV RV R24EK;VP-4'gEKTV'd V^, pEKh\V\ P!V 44VP'\)V4V 4VPV R4V^, pV^<5E>,^8XgEK<>\+RV RV R24EK<> \/RV R24R# \dEL<>i;i \"dEL-i;i \d0TP4p TP'\)T 4T 4ELYi;i \dELXi;i \dL<>i;i)<08>*i<>z Uploaded ruz entries...zUpload complete (z files/links)N)r<00>sortedrr<>r<00>as_posixrwr<>r r|<00>chmodry<00>
is_symlink<EFBFBD>os<6F>readlink<6E>dirname<6D>removery<00>symlink<6E>putr/r3<00>is_filer6) rqrr<>r}<00>pathsr<73><00>sentr*<00>rel<65> remote_pathr<68><00> real_paths &&&$ r<00> upload_treer<65><00>sJ<00><00><1C>#<23>#<23>%<25>J<EFBFBD> <12>:<3A>#<23>#<23>C<EFBFBD>(<28> )<29>E<EFBFBD> <0F><05>J<EFBFBD>E<EFBFBD> <0C>D<EFBFBD> <12><01><0F>m<EFBFBD>m<EFBFBD>J<EFBFBD>'<27>0<>0<>2<><03><1F>n<EFBFBD>n<EFBFBD>[<5B>6<> <0B> <0C>8<EFBFBD>8<EFBFBD>:<3A>:<3A><16><18> <1D>d<EFBFBD> 0<> <15><14>
<EFBFBD>
<EFBFBD>;<3B><05>.<2E> <15> <0C><<3C><<3C>><3E>><3E><17>[<5B>[<5B><11>^<5E>F<EFBFBD><16><14><01> <09><04><18> <1D>d<EFBFBD>I<EFBFBD>$5<>$5<>k<EFBFBD>$B<> C<>
6<><19><18>K<EFBFBD>K<EFBFBD> <0B>,<2C><15> <0C> <0C>V<EFBFBD>1<>  <15><14>
<EFBFBD>
<EFBFBD>;<3B><05>.<2E> <11>A<EFBFBD>I<EFBFBD>D<EFBFBD><13>c<EFBFBD>z<EFBFBD>Q<EFBFBD><EFBFBD><1A>Y<EFBFBD>t<EFBFBD>f<EFBFBD>A<EFBFBD>e<EFBFBD>W<EFBFBD>K<EFBFBD>@<40>A<> <14> <0C>9<EFBFBD>9<EFBFBD>;<3B>;<3B><16><14><01> <09><04><18> <1D>d<EFBFBD>I<EFBFBD>$5<>$5<>k<EFBFBD>$B<> C<> <10>H<EFBFBD>H<EFBFBD>S<EFBFBD><11>V<EFBFBD>[<5B> )<29> <15><14>
<EFBFBD>
<EFBFBD>;<3B><05>.<2E>
<11>A<EFBFBD>I<EFBFBD>D<EFBFBD><13>c<EFBFBD>z<EFBFBD>Q<EFBFBD><EFBFBD><1A>Y<EFBFBD>t<EFBFBD>f<EFBFBD>A<EFBFBD>e<EFBFBD>W<EFBFBD>K<EFBFBD>@<40>A<>w<13>z<12>%<25>d<EFBFBD>V<EFBFBD>=<3D>9<>:<3A><>e<1D> <15><14> <15><><1F><19><18><19><><1D> 6<><1D>I<EFBFBD>I<EFBFBD>K<EFBFBD> <09><14><08><08><13>Y<EFBFBD><1E><1B>5<> 6<><36><1D> <15><14> <15><>"<1D> <15><14> <15>sf<00>H2<02>I<02>%I<02>7J<02>J%<02>2 I<05>I<05> I<05>I<02>I<05>I<02>6J<05>J<05> J"<05>!J"<05>% J3<05>2J3c<01> <00>V^8<>dQhRRRR/#)rrqrrrrr )rs"rr r s<00><00>-<2D>-<2D>"5<>-<2D>$<24>-rc<01><><00>RpVPVR4;_uu_4pVP4PRRR7pRRR4\
P !X4p\T\4'g \R4hR TR
&\
P!TRR 7R ,pTPTR4;_uu_4pTPTPR44RRR4R# +'giL<>;i \dp\ RT RT 24hRp?ii;i \d$\P!R RX4pYc8XdRpL<>i;i +'giR#;i)z/var/jibo/mode.jsonr<6E>rbrcrdNzFailed to read <20>: zmode.json is not a JSON object<63>normal<61>mode)<01>
separatorsr<EFBFBD>z("mode"\s*:\s*")([^"]+)(")z
\1normal\3z{"mode": "normal"}
<EFBFBD>w)<02>,r<>)r<>rjrmryr<>rkrlrzr|<00>
ValueErrorrOryr&<00>subr<62><00>encode)rq<00>remoter<65><00>contentr<74>rp<00> new_contents& r<00>set_mode_json_to_normalr<6C> s%<00><00> "<22>F<EFBFBD><<3C> <11>Y<EFBFBD>Y<EFBFBD>v<EFBFBD>s<EFBFBD> #<23> #<23>q<EFBFBD><17>f<EFBFBD>f<EFBFBD>h<EFBFBD>o<EFBFBD>o<EFBFBD>g<EFBFBD>i<EFBFBD>o<EFBFBD>@<40>G<EFBFBD>$<24> 1<><13>z<EFBFBD>z<EFBFBD>'<27>"<22><04><19>$<24><04>%<25>%<25><1C>=<3D>><3E> ><3E><1F><04>V<EFBFBD> <0C><1A>j<EFBFBD>j<EFBFBD><14>+<2B>><3E><14>E<> <0B>
<0E><19><19>6<EFBFBD>3<EFBFBD> <1F> <1F>1<EFBFBD> <09><07><07> <0B>"<22>"<22>7<EFBFBD>+<2B>,<2C>
<20> <1F>'$<24> #<23><> <12><<3C><1A>_<EFBFBD>V<EFBFBD>H<EFBFBD>B<EFBFBD>q<EFBFBD>c<EFBFBD>:<3A>;<3B>;<3B><><<3C><> <15>1<><18>f<EFBFBD>f<EFBFBD>:<3A>M<EFBFBD>7<EFBFBD>S<> <0B> <16> !<21>0<>K<EFBFBD><4B> 1<><31>
<20> <1F> <1F>sS<00>C<<00>"C)<05>C<<00> AD <00>>!E<05>) C9 <09>4C<<00>9C<<00>< D<03>D<03>D<03> +E<03> E<03> E" c<01> <00>V^8<>dQhRRRR/#rBr )rs"rr r %s<00><00><12><12><14><12>$<24>rc<01><><00>\P!VPR44p\V\4'dV#/# \
d/u#i;irD)rkrlrErzr|ry)r<>r<>s& r<00>load_distributors_filer<65>%sI<00><00><12><12>j<EFBFBD>j<EFBFBD><14><1E><1E><07>0<>1<><03> <20><13>d<EFBFBD>+<2B>+<2B>s<EFBFBD>3<><12>3<><33> <14><12><11> <09><12>s<00><A<00>A<00> A<03>Ac<01>$<00>V^8<>dQhRRRRRR/#)rrWr/rXrYr<00>floatr )rs"rr r -s!<00><00> <1C> <1C>c<EFBFBD> <1C>C<EFBFBD> <1C><05> rc<01><><00>\P!4p\PPVRR/R7p\PP W1R7;_uu_4pVP R4RRR4\P!4V,
# +'giL,;i \ d\R4u#i;i)r]r^r_raiN<>inf)r<>rfrgrhrirjryr<>)rWrXr<>rnros&& r<00>measure_host_latencyr<79>-s<><00><00> <10>I<EFBFBD>I<EFBFBD>K<EFBFBD>E<EFBFBD><1C><14>n<EFBFBD>n<EFBFBD>$<24>$<24>S<EFBFBD><<3C>AR<41>2S<32>$<24>T<><03> <13>^<5E>^<5E> #<23> #<23>C<EFBFBD> #<23> 9<> 9<>T<EFBFBD> <10>I<EFBFBD>I<EFBFBD>c<EFBFBD>N<EFBFBD>:<3A><14>y<EFBFBD>y<EFBFBD>{<7B>U<EFBFBD>"<22>"<22>:<3A> 9<><39> <15><1C><14>U<EFBFBD>|<7C><1B><1C>s*<00>A B+<00>"B<05>4#B+<00> B( <09>#B+<00>+C<03>Cc<01> <00>V^8<>dQhRRRR/#)r<00>api_urlr/r<00> list[Release]r )rs"rr r 9s<00><00><14><14>C<EFBFBD><14>M<EFBFBD>rc<01><><00>\V4p.p\T\4'd<>TF<>p\T\4'gKTP \ \TPRR44\TPRR44\TPRR44\TPRR44\TPRR44R74K<> T# \d.u#i;i)rPr#rQrRFrSrTr<>)
rqryrzr{r|r}rOr/r~r@)r<>r<>r<>r<>s& r<00>get_releases_from_hostr<74>9s<><00><00><12><1B>G<EFBFBD>$<24><03>!<21>H<EFBFBD><11>#<23>t<EFBFBD><1C><1C><17>D<EFBFBD><1D>d<EFBFBD>D<EFBFBD>)<29>)<29><18> <14>O<EFBFBD>O<EFBFBD><17> <20><14><18><18>*<2A>b<EFBFBD>!9<>:<3A><1C>T<EFBFBD>X<EFBFBD>X<EFBFBD>f<EFBFBD>b<EFBFBD>1<>2<>#<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>\<5C>5<EFBFBD>$A<>B<> #<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>]<5D>B<EFBFBD>$?<3F> @<40> #<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>]<5D>B<EFBFBD>$?<3F> @<40> <12> <0E><18> <14>O<EFBFBD><4F>! <15><12><11> <09><12>s<00> C$<00>$ C4<03>3C4c<01><00>V^8<>dQhRR/#)rrr<>r )rs"rr r Os<00><00> <11> <11>]<5D> rc <01>|<00>\R, p.pVP4'gV#VP4F<>pVP4'gKVPpVP R4'gK@VP R^4^,pVP\WDR\V4RR74K<> V#)<06> downloads<64>.Fr#r<>)<03>.tar.gzrr )
r<EFBFBD>r<><00>iterdirr<72>rQ<00>endswith<74>rsplitr}rOr/)r<><00>foundr*rQr<>s r<00>list_local_archivesr<73>Os<><00><00> <14>{<7B> "<22>B<EFBFBD><1D>E<EFBFBD> <0A>9<EFBFBD>9<EFBFBD>;<3B>;<3B><14> <0C> <0F>Z<EFBFBD>Z<EFBFBD>\<5C><01><10>y<EFBFBD>y<EFBFBD>{<7B>{<7B> <14><10>v<EFBFBD>v<EFBFBD><04> <0F>=<3D>=<3D>4<> 5<> 5<><16>+<2B>+<2B>c<EFBFBD>1<EFBFBD>%<25>a<EFBFBD>(<28>C<EFBFBD> <11>L<EFBFBD>L<EFBFBD><17>#<23>E<EFBFBD>WZ<57>[\<5C>W]<5D>km<6B>n<> o<> <1A> <11>Lrc<01><00>V^8<>dQhRR/#)rrrr )rs"rr r ^s<00><00>$<24>$<24>D<EFBFBD>$rc<01><00>\R, #)z robots.json)r<>r rr<00>robots_config_pathr<68>^s <00><00> <13>m<EFBFBD> #<23>#rc<01><00>V^8<>dQhRR/#)rrr|r )rs"rr r bs<00><00><12><12>T<EFBFBD>rc<01><><00>\4pVP4'g/#\P!VP R44# \
d/u#i;irD)r<>r<>rkrlrEry)r*s r<00> load_robotsr<73>bsK<00><00><1A><1C>A<EFBFBD> <0C>8<EFBFBD>8<EFBFBD>:<3A>:<3A><11> <09><12><13>z<EFBFBD>z<EFBFBD>!<21>+<2B>+<2B>g<EFBFBD>.<2E>/<2F>/<2F><> <14><12><11> <09><12>s<00>$A <00> A<03>Ac<01> <00>V^8<>dQhRRRR/#)rrpr|rrr )rs"rr r ls<00><00>F<01>F<01>d<EFBFBD>F<01>t<EFBFBD>Frc<01><><00>\4pVPPRRR7VP\P
!V^R7R,RR7R#)Tr<54>)rJr<>rbrLN)r<>r<>r<>rNrkrO)rpr*s& r<00> save_robotsr<73>ls><00><00><1A><1C>A<EFBFBD><05>H<EFBFBD>H<EFBFBD>N<EFBFBD>N<EFBFBD>4<EFBFBD>$<24>N<EFBFBD>/<2F><05>L<EFBFBD>L<EFBFBD><14><1A><1A>D<EFBFBD><11>+<2B>d<EFBFBD>2<>W<EFBFBD>L<EFBFBD>Erc
<01>,<00>V^8<>dQhRRRRRRRRRR/#) rrRr/rSrTrXrYrr<r )rs"rr r rs0<00><00><10><10>s<EFBFBD><10>#<23><10><13><10>s<EFBFBD><10>Ta<54>rc<01><><00>\WW#R7pVP4pVPRR4;_uu_4pVP4P RRR7p\
P !V4pRp \V\4'dmVPR4;'gVPR4p \V \4'd-V uuRRR4VP4VP4#RRR4VP4VP4R# +'giL3;i TP4i;i TP4i;i \dR#i;i) raz/var/jibo/identity.jsonr<6E>rbrcrdNrQ<00>
robot_name) rc<00> open_sftpr<70>rjrmrkrlrzr|r~r/<00>closery)
rRrSrTrXrbrqr<>r<>rprQs
&&&& r<00>fetch_robot_identityr<79>rs<00><00><14><1C>T<EFBFBD><18>C<><06> <1B><19>#<23>#<23>%<25>D<EFBFBD> <1D><19>Y<EFBFBD>Y<EFBFBD>8<>#<23>><3E>><3E>!<21><1F>f<EFBFBD>f<EFBFBD>h<EFBFBD>o<EFBFBD>o<EFBFBD>g<EFBFBD>i<EFBFBD>o<EFBFBD>H<>G<EFBFBD><1F>:<3A>:<3A>g<EFBFBD>.<2E>D<EFBFBD><1F>D<EFBFBD>!<21>$<24><04>-<2D>-<2D>#<23>x<EFBFBD>x<EFBFBD><06>/<2F>I<>I<>4<EFBFBD>8<EFBFBD>8<EFBFBD>L<EFBFBD>3I<33><04>%<25>d<EFBFBD>C<EFBFBD>0<>0<>#'<27>?<3F>><3E><15>
<EFBFBD>
<EFBFBD> <0C> <12>L<EFBFBD>L<EFBFBD>N<EFBFBD>?<3F><15>
<EFBFBD>
<EFBFBD> <0C> <12>L<EFBFBD>L<EFBFBD>N<EFBFBD> <10>?<3F>><3E><><15>
<EFBFBD>
<EFBFBD> <0C><> <12>L<EFBFBD>L<EFBFBD>N<EFBFBD><4E> <14><14><13><14>so<00> E<00>E
<00>D5<00>A'D"<05>#)D"<05>
D5<00>E
<00>&E<00>7D5<00>?E
<00>E<00>" D2 <09>-D5<00>5E<03>E
<00>
E<03>E<00> E.<03>-E.c<01> <00>V^8<>dQhRRRR/#)r<00>distributors_filerrz,tuple[Optional[Release], Optional[str], str]r )rs"rr r <00>s<00><00>C <20>C <20>d<EFBFBD>C <20>?k<>C rc <01><<00>\V4pVPR4;'gVPR4;'g.pVUu.uFp\V\4'gKVNK pp\ R4.pVF,p\ V4p\ V4pVPW5V34K. \4pV'dVPRRV34\R4VPRR7\V^R7F:wpwr5p T R VR8XdRMVR
R 2 R \V 4 R 2p
\V RV
24K< Rp V f<>\R4P4p V P4R9dR #V P!4'g\R4KW\#V 4p V ^8gV \V48<>d\R4K<>V ^,
p K<>WK,wr<>pV'g\%R4RVR3#VPRRR7\V^R7FDwr<>VP&'dRMRp\V RVP( V RVP* 24KF \R4P4p V P4R8XdRVR3#V P4R8Xd<>\R4P4pVP!4'df\#V4^,
p^Tu;8:d\V48d<MM8\VV,P*4\VV,P(4RVR3#V P!4'gRVR3#\#V 4^,
pV^8gV\V48<>dRVR3#VV,pVR8XdRMRpVVV3#uupi)!<21> UpdateHosts<74> OfficialHostsz4Checking hosts for latency and available releases...<2E>localgz Hosts (lower latency preferred):c<01>d<00>\V^,\4'd
V^,#\R4#)r<>r<>)rzr<>)r<>s&rr<><00>0prompt_select_release_and_host.<locals>.<lambda><3E>s$<00><00>:<3A>a<EFBFBD><01>d<EFBFBD>E<EFBFBD>+B<>+B<>1<EFBFBD>Q<EFBFBD>4<EFBFBD>#T<><05>e<EFBFBD> <0C>#Tr)rw)r<><00> (z.2f<EFBFBD>sz) - z releasesz) Nz8Choose host number to browse releases (or q to cancel): <20>qr#zEnter a number.z Out of rangez No releases found for that host.r<>c<01>,<00>\VP4#r<>r<>r<>s&rr<>r<><00>r<>rTrvz [prerelease]z - zSChoose release number (or 'l' to list release notes, number to pick, q to cancel): <20>lzRelease number to show notes: >r<><00>exit<69>quit)NNr#)r<>r~rzr/r3r<>r<>r}r<>r1r<00> enumerater<65>rGrHrIr<>rYr9rRrPrQ)r<><00>d<>hosts<74>h<>
host_infos<EFBFBD>latr<74><00>local_releases<65>idx<64>rels<6C>label<65>chosen_host_idxrKr<>rRr<><00>prer<65><00>si<73>ri<72>chosen<65>sources& r<00>prompt_select_release_and_hostr<74><00>s;<00><00><1E>0<>1<>A<EFBFBD> <0A>E<EFBFBD>E<EFBFBD>-<2D> <20> @<40> @<40>A<EFBFBD>E<EFBFBD>E<EFBFBD>/<2F>$:<3A> @<40> @<40>b<EFBFBD>E<EFBFBD><1D> 4<><05>1<EFBFBD><1A>A<EFBFBD>s<EFBFBD>!3<>Q<EFBFBD>Q<EFBFBD><05>E<EFBFBD> 4<><0E>E<>F<><13>J<EFBFBD> <12><01>"<22>1<EFBFBD>%<25><03>)<29>!<21>,<2C><08><12><19><19>1<EFBFBD>8<EFBFBD>,<2C>-<2D><13> )<29>*<2A>N<EFBFBD><15><12><19><19>7<EFBFBD>C<EFBFBD><1E>8<>9<>
<EFBFBD>
,<2C>-<2D><0E>O<EFBFBD>O<EFBFBD>U<>O<EFBFBD>V<>(<28><1A>1<EFBFBD>=<3D><1B><03>^<5E>a<EFBFBD>d<EFBFBD><14>#<23>R<EFBFBD>1<EFBFBD>g<EFBFBD>:<3A><07>c<EFBFBD>#<23>Y<EFBFBD>a<EFBFBD>=<3D>A<><14>c<EFBFBD>$<24>i<EFBFBD>[<5B>PY<50>Z<><05> <0A><13><05>R<EFBFBD><05>w<EFBFBD><1F> <20> ><3E><1B>O<EFBFBD>
<19>
!<21><13>N<>O<>U<>U<>W<><03> <0E>9<EFBFBD>9<EFBFBD>;<3B>/<2F> /<2F>!<21> !<21><12>{<7B>{<7B>}<7D>}<7D> <11>#<23> $<24> <14> <0F><03>H<EFBFBD><01> <0C>q<EFBFBD>5<EFBFBD>A<EFBFBD><03>J<EFBFBD><0F>'<27> <11>.<2E> !<21> <14><1B>a<EFBFBD>%<25><0F>$<24>5<><17>D<EFBFBD>x<EFBFBD> <13><15>8<>9<><13>T<EFBFBD>8<EFBFBD>#<23>#<23> <0A>M<EFBFBD>M<EFBFBD>:<3A>D<EFBFBD>M<EFBFBD>I<><1B>H<EFBFBD>A<EFBFBD>.<2E><06><03>!"<22><1C><1C><1C>o<EFBFBD>2<EFBFBD><03> <0A><13><05>R<EFBFBD><01>
<EFBFBD>
<EFBFBD>|<7C>C<EFBFBD>5<EFBFBD><03>A<EFBFBD>F<EFBFBD>F<EFBFBD>8<EFBFBD>4<>5<>/<2F> <10>e<>
f<EFBFBD>
l<EFBFBD>
l<EFBFBD>
n<EFBFBD>C<EFBFBD>
<EFBFBD>y<EFBFBD>y<EFBFBD>{<7B>c<EFBFBD><19><13>T<EFBFBD>2<EFBFBD>~<7E><1D>
<EFBFBD>y<EFBFBD>y<EFBFBD>{<7B>c<EFBFBD><19><13>4<>5<>;<3B>;<3B>=<3D><03> <0E>;<3B>;<3B>=<3D>=<3D><14>S<EFBFBD><18>A<EFBFBD><1C>B<EFBFBD><10>B<EFBFBD>&<26><13>X<EFBFBD><1D>&<26><15>h<EFBFBD>r<EFBFBD>l<EFBFBD>'<27>'<27>(<28><15>h<EFBFBD>r<EFBFBD>l<EFBFBD>+<2B>+<2B>,<2C><13>T<EFBFBD>2<EFBFBD>~<7E><1D> <0E>;<3B>;<3B>=<3D>=<3D><13>T<EFBFBD>2<EFBFBD>~<7E><1D> <0C>S<EFBFBD><18>A<EFBFBD><1C>B<EFBFBD> <09>A<EFBFBD>v<EFBFBD><12>s<EFBFBD>8<EFBFBD>}<7D>$<24><13>T<EFBFBD>2<EFBFBD>~<7E><1D> <15>b<EFBFBD>\<5C>F<EFBFBD><1C><07><0F>W<EFBFBD>X<EFBFBD>F<EFBFBD> <11>4<EFBFBD><16> <1F><1F><> 5s <00>N<04>!Nc<01><00>V^8<>dQhRR/#)rrrYr )rs"rr r <00>s<00><00>[<17>[<17>c<EFBFBD>[rc <01>\<00>\4\P!RR7pVPRRRRRR7VPRR R
R 7VPR R RR 7VPR\RR 7VPR\
\ R4RR7VPRRRR7VPR\ RR 7VPRRRR7VPRRR7VPR R!R7VPR"\
\R#R7VPR$RR%R7VPR&RR'R7VPR(RR)R7VPR*RR+R7VPR,RR-R7VPR.\^R/R7VP4p\4\R0, pVPPRRR17\P!\P R2\P"!VR3R47\P$!\&P(4.R57\P*!R6\,4\/R74pVP14\3VP4\,4wrEVP74V'ddV'd0R8V R9\, R:2p\9V4\P*!V4MBR;\, R:2p\;V4\P*!V4M\P*!R<4VP<'*p\;R=4R>pR?p VP>'d2\AVPB4wr<>p V
f\;R@4^#T
p T pT p EM_VPD'Ed6\GVPH4p\KV\L4'g \ORA4hR>pVF<>p\KV\P4'gK\SVPURBRC44VPD8XgKG\W\SVPURBRC44\SVPURDRC44\YVPURERF44\SVPURGRC44\SVPURHRC44RI7pM V'g\ORJVPD 24hTp M\[VPHVRK7p V P\'dV P^'g \ORL4h\aVPb4p\KV\P4'd&\SVPUVPdRC44MRCp\;RMV P\ RNV Pf'dREMRO R:24V'd\;RPV 24VPh'g'V'dVV P\8Xd\kRQ4^#VPl'g/\oRRVPd RS2RFRT7'g\;RU4^#V P\ RV2p\pRW, V, p\pRX, V P\, pV'dV R?8Xd\sV P^V4pM4V RY8XdV P^pM \sV P^VPH4p\KV\R4'd:\ V4Pu4'd\ V4p\;RZV 24M\wVVVPhR[7\VVVPhR[7VP<>4Uu.uFpVP<>4'gKVNK pp\<5C>V4^8Xd
V^,MTp\<5C>VVP<>4p\;R]VP<> R^VPd R_24\<5C>VPdVP<>VP<>VP<>R`7p\<5C>VRa4wpppRbV9d \;Rc4Mp\;Rd4\<5C>VRe^<R`7wpppV^8wd \9RfV RgVP<>4 24\<5C>VRa4wpppRbV9d \ORh4h\kRi4VP<>'d \kRj4M;\;Rk4VP<>4p \<5C>V VRlRFRm7V P<>4RFp!VP<>'dRp!M7VP<>'dRFp!M"VPl'dRFp!M \oRnRFRT7p!V!'dVVP<>'d \;Ro4M7VP<>4p \<5C>V 4\kRp4V P<>4VP<>'gF\KV\P4'd0V P\VVPd&\<5C>VPbV4\kRqV P\ R:24VP<>4^# TP74i;i \xPzP|dp\OR\T 24hR>p?ii;iuupi T P<>4i;i T P<>4i;i TP<>4i;i)rz3Update a modded Jibo with the latest JiboOs release)<01> descriptionz--ipz--hostrRTzJibo IP/hostname)r<><00>required<65>helpz--userrzSSH username (default: root))r?r<>z
--password<72>jibozSSH password (default: jibo)z--releases-apizGitea releases API URLz--distributorszDistributors.jsonz1Path to Distributors.json to check multiple hosts)<03>typer?r<>z--tui<75>
store_truez/Run an interactive text UI to pick host/release)<02>actionr<6E>z--updater-releases-apiz)Releases API to check for updater updatesz--stablezIgnore prereleasesz--tagz6Install a specific tag (e.g. v3.3.0) instead of latest)r<>z --build-pathz5Path to build folder inside extracted tree (relative)z --state-filez#Where to store last applied versionz--forcez2Re-download and re-install even if version matchesz--yesuDont prompt for confirmationz --dry-runu3Download/extract + connect, but dont write filesz--return-normalzEAfter update, set /var/jibo/mode.json mode back to normal (no prompt)z--no-return-normalz1After update, do not ask to return to normal modez --ssh-timeoutzSSH connect timeout secondsz updater.logr<67>z&%(asctime)s %(levelname)s: %(message)srbrL)<03>levelr<00>handlersz!jibo_updater starting, version %szChecking updater version...zUpdater update available: z
(current <20>)zUpdater is up-to-date (z1Updater version check failed or no releases foundzChecking latest release...Nr<4E>zNo release selected; aborting.z Unexpected releases API responserPr#rQrRFrSrTr<>zTag not found in releases: )r<>z,Release JSON missing tag_name or tarball_urlzLatest: r<><00>stablezLast applied (from state): zFAlready at latest version (per local state). Use --force to reinstall.z5This will upload the release build overlay into / on z and overwrite files. Continue?)r?zAborted.r<>r<><00> extractedr<64>zUsing local archive: )r<>zDownload failed: zConnecting to <20>@r<>razksh -c 'touch /.jibo_rw_test 2>/dev/null && rm /.jibo_rw_test 2>/dev/null && echo WRITABLE || echo READONLY'<27>WRITABLEzRoot FS already writablezRemounting / as read-write...zsh -c 'mount -o remount,rw /'zRemount command returned z
. stderr: z0Failed to remount / as writable (still READONLY)z/ remounted writablezDry-run: skipping uploadz/Starting SFTP upload (this can take a while)...ru)r<>r}z@Return Jibo to normal mode (mode.json: int-developer -> normal)?z"Dry-run: skipping mode.json changez%Updated /var/jibo/mode.json to normalzUpdate finished ()Sr+<00>argparse<73>ArgumentParser<65> add_argument<6E>DEFAULT_RELEASES_APIr<00>DEFAULT_UPDATER_RELEASES_API<50>STATE_FILE_DEFAULTrY<00>
parse_argsr<EFBFBD>r<>r<>r<><00>logging<6E> basicConfig<69>INFO<46> FileHandler<65> StreamHandlerr$r%<00>info<66> __version__r<5F>r<>r<><00>updater_releases_apir<69>r9r3r<><00>tuir<69><00> distributorsr<73>rqrsrzr{r<>r|r/r~rOr@r<>rPrSrF<00>
state_filerRrRr<>r6rDrLr<>r<>r<>r<>rf<00>error<6F>URLErrorrr<>r r<>r@<00>
build_pathrSrcrT<00> ssh_timeoutrorHr}r<>r<>r<><00> return_normal<61>no_return_normalr<6C>rP)"<22>parser<65>args<67>logp<67>spinner<65>
latest_tagr<EFBFBD>r.r<><00>chosen_remote_source<63>chosen_source_type<70>
rel_choice<EFBFBD> host_choicer<65><00>releaser<65>r<>r<>rH<00>last<73> archive_name<6D> archive_pathr<68>rSr<>r*<00>children<65> search_root<6F> build_dirrbrnrlrmrq<00> do_returns" r<00>mainr"<00>s<><00><00><18><1A> <15> $<24> $<24>1f<31> g<>F<EFBFBD>
<EFBFBD><17><17><06><08>v<EFBFBD><04>K]<5D><17>^<5E>
<EFBFBD><17><17><08>&<26>7U<37><17>V<>
<EFBFBD><17><17> <0C>f<EFBFBD>;Y<><17>Z<>
<EFBFBD><17><17>(<28>2F<32>Me<4D><17>f<>
<EFBFBD><17><17>(<28>t<EFBFBD>T<EFBFBD>BU<42>=V<>^Q<02><17>R<02>
<EFBFBD><17><17><07> <0C>;l<><17>m<>
<EFBFBD><17><17>0<>:V<>^I<02><17>J<02>
<EFBFBD><17><17>
<EFBFBD><<3C>>R<><17>S<>
<EFBFBD><17><17><07>&^<5E><17>_<>
<EFBFBD><17><17><0E>-d<><17>e<>
<EFBFBD><17><17><0E>T<EFBFBD>;M<>Ty<54><17>z<>
<EFBFBD><17><17> <09>,<2C>=q<><17>r<>
<EFBFBD><17><17><07> <0C>;\<5C><17>]<5D>
<EFBFBD><17><17> <0B>L<EFBFBD>?t<><17>u<>
<EFBFBD><17><17><19><1B> T<><18><06>
 <0B><17><17><1C><1B> @<40><18><06>  <0B><17><17><0F>c<EFBFBD>2<EFBFBD>Da<44><17>b<> <11> <1C> <1C> <1E>D<EFBFBD><10>N<EFBFBD> <14>m<EFBFBD> #<23>D<EFBFBD><08>K<EFBFBD>K<EFBFBD><15><15>d<EFBFBD>T<EFBFBD><15>2<> <0B><17><17><15>l<EFBFBD>l<EFBFBD>7<><19>%<25>%<25>d<EFBFBD>W<EFBFBD>=<3D>w<EFBFBD>?T<>?T<>UX<55>U_<55>U_<55>?`<60>a<><06>
 <0C>L<EFBFBD>L<EFBFBD>4<>k<EFBFBD>B<><17>4<>5<>G<EFBFBD> <0B>M<EFBFBD>M<EFBFBD>O<EFBFBD><17>4<>T<EFBFBD>5N<35>5N<35>P[<5B>\<5C><1C>
<EFBFBD><0F> <0C> <0C><0E><11> <13>.<2E>z<EFBFBD>l<EFBFBD>*<2A>[<5B>M<EFBFBD>QR<51>S<>C<EFBFBD> <19>#<23> <1E> <13>L<EFBFBD>L<EFBFBD><13> <1D>+<2B>K<EFBFBD>=<3D><01>:<3A>C<EFBFBD> <16>s<EFBFBD>O<EFBFBD> <13>L<EFBFBD>L<EFBFBD><13> <1D><0F> <0C> <0C>H<>I<><1F>;<3B>;<3B><EFBFBD><14><0E>+<2B>,<2C>*.<2E><18>!<21><16> <0B>x<EFBFBD>x<EFBFBD>x<EFBFBD>*H<><14>IZ<49>IZ<49>*[<5B>'<27>
<EFBFBD><16> <15> <1D> <16>7<> 8<><14><1C><07>*<2A><1C>#<23><1A> <0A><18><18><18><1B>D<EFBFBD>-<2D>-<2D>.<2E><03><19>#<23>t<EFBFBD>$<24>$<24><1E>A<>B<> B<>$(<28><06><17>D<EFBFBD><1D>d<EFBFBD>D<EFBFBD>)<29>)<29><18><12>4<EFBFBD>8<EFBFBD>8<EFBFBD>J<EFBFBD><02>+<2B>,<2C><04><08><08>8<> <20> <20><14><18><18>*<2A>b<EFBFBD>!9<>:<3A><1C>T<EFBFBD>X<EFBFBD>X<EFBFBD>f<EFBFBD>b<EFBFBD>1<>2<>#<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>\<5C>5<EFBFBD>$A<>B<> #<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>]<5D>B<EFBFBD>$?<3F> @<40> #<23>D<EFBFBD>H<EFBFBD>H<EFBFBD>]<5D>B<EFBFBD>$?<3F> @<40> <12><06><16><18><16><1E>!<<3C>T<EFBFBD>X<EFBFBD>X<EFBFBD>J<EFBFBD>G<>H<> H<><18><07>$<24>T<EFBFBD>%6<>%6<>IY<49>Z<><07> <12> <1B> <1B> <1B>7<EFBFBD>#6<>#6<>#6<><1A>I<>J<>J<> <16>t<EFBFBD><EFBFBD><EFBFBD> '<27>E<EFBFBD>,6<>u<EFBFBD>d<EFBFBD>,C<>,C<>3<EFBFBD>u<EFBFBD>y<EFBFBD>y<EFBFBD><14><19><19>B<EFBFBD>'<27> (<28><12>D<EFBFBD><0E><18>'<27>*<2A>*<2A>+<2B>2<EFBFBD>g<EFBFBD>>P<>>P<>>P<>l<EFBFBD>V^<5E>-_<>_`<60>a<>b<> <0B><12>0<><14><06>7<>8<> <10>J<EFBFBD>J<EFBFBD>J<EFBFBD>D<EFBFBD>T<EFBFBD>W<EFBFBD>-=<3D>-=<3D>%=<3D><15>^<5E>_<><10> <0F>8<EFBFBD>8<EFBFBD>8<EFBFBD><1C>C<>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B>Nm<4E> n<><19>
<EFBFBD>
<EFBFBD> <17>z<EFBFBD> "<22><14><1E>&<26>&<26>'<27>w<EFBFBD>/<2F>L<EFBFBD><1E><1B>,<2C>|<7C>;<3B>L<EFBFBD><1D> <0B>+<2B>g<EFBFBD>.><3E>.><3E>><3E>K<EFBFBD><1C> 2<>h<EFBFBD> ><3E>,<2C>W<EFBFBD>-@<40>-@<40>BV<42>W<> <0B> <1B>w<EFBFBD> &<26><1D>)<29>)<29> <0B>,<2C>W<EFBFBD>-@<40>-@<40>$<24>BS<42>BS<42>T<> <0B>4<> <15>k<EFBFBD>3<EFBFBD> '<27> '<27>D<EFBFBD><1B>,=<3D>,D<>,D<>,F<>,F<><1F> <0B>,<2C>L<EFBFBD> <16>.<2E>|<7C>n<EFBFBD>=<3D> ><3E> <15>k<EFBFBD><<3C>t<EFBFBD>z<EFBFBD>z<EFBFBD> B<> <0A>\<5C>;<3B>d<EFBFBD>j<EFBFBD>j<EFBFBD>9<>'<27>.<2E>.<2E>0<>?<3F>0<>a<EFBFBD>A<EFBFBD>H<EFBFBD>H<EFBFBD>J<EFBFBD><01><01>0<>H<EFBFBD>?<3F>!$<24>X<EFBFBD><1D>!<21>!3<>(<28>1<EFBFBD>+<2B><1B>K<EFBFBD><1E>{<7B>D<EFBFBD>O<EFBFBD>O<EFBFBD><<3C>I<EFBFBD><0F><1E><04> <09> <09>{<7B>!<21>D<EFBFBD>I<EFBFBD>I<EFBFBD>;<3B>d<EFBFBD>;<3B><<3C> <18><14><19><19>D<EFBFBD>I<EFBFBD>I<EFBFBD>t<EFBFBD>}<7D>}<7D>d<EFBFBD>FV<46>FV<46> W<>F<EFBFBD>7<17>!<21>&<26>+X<02>Y<02><0E><04>c<EFBFBD>3<EFBFBD> <15><13> <1C> <16>1<> 2<> <16>6<> 7<>%<25>f<EFBFBD>.M<>WY<57>Z<>N<EFBFBD>D<EFBFBD>#<23>s<EFBFBD><13>q<EFBFBD>y<EFBFBD><1D> 9<>$<24><16>z<EFBFBD>#<23>)<29>)<29>+<2B><1D>W<>X<>%<25>f<EFBFBD>/\<02>]<02>N<EFBFBD>D<EFBFBD>#<23>s<EFBFBD><19><13>$<24>"<22>#U<>V<>V<> <19>0<> 1<> <0F><<3C><<3C><<3C> <19>4<> 5<> <16>H<> I<><19>#<23>#<23>%<25>D<EFBFBD> <1D><1B>D<EFBFBD>)<29><13>e<EFBFBD>L<><14>
<EFBFBD>
<EFBFBD> <0C><19> <09> <0F> <1D> <1D> <1D><1C>I<EFBFBD> <11> "<22> "<22> "<22><1D>I<EFBFBD> <11>X<EFBFBD>X<EFBFBD>X<EFBFBD><1D>I<EFBFBD>%<25>&h<>rw<72>x<>I<EFBFBD> <14><13>|<7C>|<7C>|<7C><1A>?<3F>@<40><1D>'<27>'<27>)<29><04>!<21>+<2B>D<EFBFBD>1<>!<21>"I<>J<><18>J<EFBFBD>J<EFBFBD>L<EFBFBD><13>|<7C>|<7C>|<7C><19>%<25><14>&<26>&<26>#*<2A>#3<>#3<><05>d<EFBFBD>i<EFBFBD>i<EFBFBD> <20><1A>4<EFBFBD>?<3F>?<3F>E<EFBFBD>2<><15>)<29>'<27>*:<3A>*:<3A>);<3B>1<EFBFBD>=<3D>><3E><10> <0F> <0C> <0C><0E><>I <10> <0C> <0C><0E><>~ <12><<3C><<3C> <20> <20>4<><1A>.<2E>q<EFBFBD>c<EFBFBD>2<>3<>3<><33>4<><34> @<01><><<15>
<EFBFBD>
<EFBFBD> <0C><>*<19>J<EFBFBD>J<EFBFBD>L<EFBFBD><4C> <0F> <0C> <0C><0E>s<EFBFBD><00>6h <00>Ah5<00>h5<00>i*<04>/i*<04>B$j<00>+'j<00>i/<00>"#j<00>j<00>j<00>0j<00>j<00>j<00>7j<00> !j<00>/Aj<00> h2<03>5i'<03>i"<03>"i'<03>/j<03>j<00>j<03>j<00>j+<03>__main__z
Interrupted.)F)<01>)<01><)ru)r.)<01>
)W<>__doc__<5F>
__future__rr<>rkr<>rwr&r r$rr<><00> urllib.errorrf<00> urllib.parse<73>urllib.requestrr<00> dataclassesr<00>pathlibr<00>typingrr<00>socketr<74><00> http.server<65>http<74> socketserverr]<00>__file__r<5F>r<00>
SCRIPT_DIRr<EFBFBD>r<>r<>rr<>r<>r
r+r3r6r9r<rLrOrqr<>r<><00>compiler<65>r<>r<>r<>r<>r<>rr!r8r@rFrPrcror|r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r"r <00>
SystemExit<EFBFBD>KeyboardInterruptr1ryr<>r/r rr<00><module>r8s<00><01><04>"#<23><0F> <0B> <09><10> <09> <0A>
<EFBFBD><0E> <0B><13><13><15><0E><0E>!<21><18>%<25> <0A><10><12><13><0F><12>(<28>^<5E> "<22> "<22> *<2A> *<2A> ,<2C>
<EFBFBD> <15> <0B> #<23><08><16><19>"<22> <0B><1D> 3<>3<><12><16> <0B> j<01><1C>\<5C><14><15><15>&<26>3<>4<>5<>2<>
'<27> <0B>$<24><17><15><15><18><15>
><3E><1C>@)<29>)<29>6<11>j<EFBFBD>j<EFBFBD><<3C>=<3D> <0B>!<21><17><<06>.3<>
0H<01>U<EFBFBD>0H<01>f(<17><05>(<17>V<17> <11><10>0<12>Z<01>
<12> <1A> <1C>J;<3B>
<1A> J;<3B>J;<3B>Z-<2D>4<12> <1C><14>, <11>$<24><12>F<01> <10>0C <20>L[<17>| <0C>z<EFBFBD><19><1C><18><14><16> <20> <20><1A><> <1D><1E> <0A><1E><1F><18><13>o<EFBFBD><1D> <14><1C><13>C<EFBFBD><01>F<EFBFBD><1B><18><11>m<EFBFBD><1B><><1C>s<00> G!<00>!H<03>=H<03>>H<03>H