+
    „WÝjKš  ã                  óX  a€ 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIHtHtHt ^ RIHt ^ RIHt ]P*                  ! R4      tRqtRrt]! 4       tR]R&   ]
P8                  ! 4       t]! 4       tR]R	&   ]
P8                  ! 4       t]! 4       t R]R
&   ]
P8                  ! 4       t!]! 4       t"R]R&   ]
P8                  ! 4       t#]! 4       t$R]R&   ]
P8                  ! 4       t%]! 4       t&R]R&   ]
P8                  ! 4       t'Rt(R R lt)R R lt*R R lt+R R lt,R R lt-R R lt.R R lt/RsR R lltR  R! lt0R" R# lt1R$ R% lt2 ! R& R']Pf                  4      t4]5! 0 Rtm4      t6/ t7R(]R)&   ]
P8                  ! 4       t8]! 4       t9R]R*&   ]
P8                  ! 4       t:]! 4       t;R]R+&   ]
P8                  ! 4       t<RuR, R- llt=RuR. R/ llt>R0 R1 lt?R2 R3 lt@R4 R5 ltAR6R7R8R9/R: R; lltBR< R= ltCR> R? ltDR@ RA ltERBR9/RC RD lltFRE RF ltGRGRHRIRJRKRL/tHRM]#R]P’                  RN3RO]'R]P’                  RP3RQ]R]P”                  RR3RS]R	]P’                  RT3RU]%R]P”                  RV3RW]!R
]P’                  RX3RY]:R*]P’                  RZ3R[]<R+]P”                  R\3/tKR] R^ ltLRGR9/R_ R` lltMRa Rb ltN]Pž                  ! ]LRQ4      tP]Pž                  ! ]LRU4      tQRc^ Rd^Re^Rf^/tRRg]Rh&   ]RP§                  4        U Uu/ uF  w  rWbK	  	  upp tTRi]Rj&   ^tURk Rl ltVRm Rn ltWR6R7/Ro Rp lltXR# u upp i )vz»SQLite journal-mode and PRAGMA policy for state.db (split from hermes_state).

Patchable helpers are looked up as module globals at call time, so tests patch ``hermes_state_wal.<name>``.
)ÚannotationsN)ÚAnyÚDictÚOptional)Úis_sqlite_wal_reset_vulnerable)Úis_sqlite_lock_errorÚhermes_statezset[str]Ú_wal_fallback_warned_pathsÚ!_wal_delete_fallback_failed_pathsÚ_wal_probe_unknown_pathsÚ_wal_reset_bug_warned_pathsÚ_delete_overridden_warned_pathsÚsetÚ_journal_upgrade_warned_pathsuÉ   could not verify journal mode before applying configured journal_mode=delete (database is locked â€” possible concurrent openers); refusing to downgrade a database this process does not exclusively ownc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "ÚDC:\Users\johnn\AppData\Local\hermes\hermes-agent\hermes_state_wal.pyÚ__annotate__r   9   s   € ÷ Mñ M˜3ñ Mó    c                óˆ   € V '       d:   V ^ ,          e/   \        V ^ ,          4      P                  4       P                  4       # R# )zFLower-cased mode from a ``PRAGMA journal_mode`` row, ``""`` if no row.Ú )r   ÚstripÚlower)Úrows   &r   Ú_mode_from_rowr   9   s2   € ç*-°#°aµ&Ò2DŒ3ˆs�1�v‹;×ÑÓ×$Ñ$Ó&ÐLÈ"ÐLr   c               ó    € V ^8„  d   QhRRRR/# )r   Úconnúsqlite3.Connectionr   úOptional[str]r   )r   s   "r   r   r   >   s   € ÷ ñ Ð 2ð °}ñ r   c                óR  € \        ^4       F�  p V P                  R4      P                  4       pT'       d
   T^ ,          MRp\        T\        4      '       d    TP                  R4      pTe*   \        T4      P                  4       P                  4       u # Ru # 	  \        P                  RX4       R#   \        P                   dJ   pR\        T4      P                  4       9  d    Rp? R# Tp\        P                  ! R4        Rp?EK  Rp?ii ; i  \         d      R# i ; i)a  Read the journal mode from the DB header; ``None`` if undeterminable (new DB, or PRAGMA failed) ->
callers take their fail-closed "refuse to downgrade" branch. ``disk i/o error`` can be transient on
virtualized block devices (XFS on cloud hosts), so it is retried a few times first.úPRAGMA journal_modeúdisk i/o errorNçš™™™™™©?Úasciiz:_on_disk_journal_mode: retries exhausted on disk read (%s))ÚrangeÚexecuteÚfetchoneÚsqlite3ÚOperationalErrorr   r   ÚtimeÚsleepÚ
isinstanceÚbytesÚdecodeÚUnicodeDecodeErrorr   ÚloggerÚdebug)r!   Ú_r   ÚexcÚlast_excÚmodes   &     r   Ú_on_disk_journal_moder:   >   sí   € ô �1ŽXˆð	Ø—,‘,Ð4Ó5×>Ñ>Ó@ˆC÷ ˆs�1Žv $ˆÜ�dœE×"Ò"ðØ—{‘{ 7Ó+�ð -1Ò,<Œs�4‹y�‰Ó ×&Ñ&Ó(ÒFÀ$ÒFñ ô  ‡L�LÐMÈxÔXÙøô ×'Ñ'ô 	Ø¤s¨3£x§~¡~Ó'7Ô7ÞØˆHÜ�JŠJ�tÔÞûð	ûô &ô Ûðús/   �B5ÁDÂ5DÃ
DÃ/DÄDÄD&Ä%D&c               ó    € V ^8„  d   QhRRRR/# ©r   r!   r"   r   ÚNoner   )r   s   "r   r   r   V   s   € ÷ @ñ @Ð 2ð @°tñ @r   c                óª   €  V P                  R\         24       R#   \        P                   d"   p\        P                  RT4        Rp?R# Rp?ii ; i)a$  Bound the WAL so it returns space after big transactions. With the default (-1) a checkpointed WAL is
reused in place, never truncated, so ``state.db-wal`` keeps the high-water mark of the largest
transaction ever (a 3 GB optimize left a 3 GB WAL). Best-effort: failure only costs disk slack.zPRAGMA journal_size_limit=z"journal_size_limit not applied: %sN)r*   Ú_WAL_SIZE_LIMIT_BYTESr,   r-   r4   r5   )r!   r7   s   & r   Ú_apply_wal_size_limitr@   V   sH   € ð@Ø�‰Ð1Ô2GÐ1HÐIÖJøÜ×#Ñ#ô @Ü�‰Ð9¸3×?Ò?ûð@ús   ‚ œA±AÁAc               ó$   € V ^8„  d   QhRRRRRR/# )r   r!   r"   Úpragmar   r   r=   r   )r   s   "r   r   r   `   s"   € ÷ !ñ !Ð+ð !°Sð !¸Tñ !r   c                óè   € \         P                  R8X  dI   \        P                  ! \        P
                  4      ;_uu_ 4        V P                  V4       RRR4       R# R#   + '       g   i     R# ; i)zABest-effort PRAGMA on macOS only (no-op elsewhere, never raises).ÚdarwinN)ÚsysÚplatformÚ
contextlibÚsuppressr,   r-   r*   )r!   rB   s   &&r   Ú_darwin_pragmarI   `   sH   € ä
‡|�|�xÔÜ× Ò ¤×!9Ñ!9×:Õ:Ø�L‰L˜Ô ÷ ;Ñ:ñ  ß:×:Ð:ús   ÁA Á A1	c               ó    € V ^8„  d   QhRRRR/# r<   r   )r   s   "r   r   r   g   s   € ÷ :ñ :Ð*<ð :Àñ :r   c                ó   € \        V R4       R# )uó  Enable ``PRAGMA checkpoint_fullfsync`` on macOS. Apple's ``fsync(2)`` guarantees neither data-on-platter nor
ordering, so without ``F_FULLFSYNC`` a launchd shutdown can turn a "durable" checkpoint into a malformed
``state.db``. Checkpoint boundaries only (~+0.1 ms/commit vs ~+4 ms for ``fullfsync=1``).

During a launchd *system* shutdown/reboot the OS page cache is dropped (effectively a power-loss event
for in-flight pages), so a WAL checkpoint whose ``fsync()`` "reported" durable may never have hit the
platter â€” corrupting ``state.db`` with a malformed image. This is the trigger in issue #30636 ("SIGTERM
during launchd shutdown under high load"), distinct from a plain in-session kill (which the page cache
survives and SQLite recovers from).
zPRAGMA checkpoint_fullfsync=1N©rI   ©r!   s   &r   Ú_apply_macos_checkpoint_barrierrN   g   s   € ô �4Ð8Ö9r   c               ó    € V ^8„  d   QhRRRR/# r<   r   )r   s   "r   r   r   u   s   € ÷ 4ñ 4Ð*<ð 4Àñ 4r   c                ó   € \        V R4       R# )zåEnforce ``PRAGMA synchronous=FULL`` on macOS: with NORMAL a WAL checkpoint
racing process termination leaves half-written btree pages (``btreeInitPage
error 11``). Called after every WAL activation so a prior NORMAL never sticks.zPRAGMA synchronous=FULLNrL   rM   s   &r   Ú_enforce_macos_synchronous_fullrQ   u   s   € ô �4Ð2Ö3r   c               ó    € V ^8„  d   QhRRRR/# r<   r   )r   s   "r   r   r   |   s   € ÷ *ñ *Ð 2ð *°tñ *r   c                óH   € \        V 4       \        V 4       \        V 4       R# )zGThe settings every WAL activation carries: size limit + macOS barriers.N)r@   rN   rQ   rM   s   &r   Ú_apply_wal_companionsrT   |   s   € ä˜$ÔÜ# DÔ)Ü# DÖ)r   c               ó    € V ^8„  d   QhRRRR/# )r   Úversion_infozOptional[tuple]r   Úboolr   )r   s   "r   r   r   ƒ   s   € ÷ rñ r°ð rÈDñ rr   c                óH   € \        V f   \        P                  4      # T 4      # )u±   True when the linked SQLite has the WAL-reset bug (3.7.0â€“3.51.2; fixed 3.51.3+, backports 3.50.7 /
3.44.6). Pre-WAL libraries are safe. https://sqlite.org/wal.html#walresetbug)Ú_is_sqlite_wal_reset_vulnerabler,   Úsqlite_version_info)rV   s   &r   r   r   ƒ   s#   € ô +È,ÒJ^¬7×+FÑ+FÓqÐqÐdpÓqÐqr   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   ‰   s   € ÷ =ñ =˜#ñ =r   c                 ód  €  \         P                  ! \        P                  ! R4      4      ;_uu_ 4       p V P	                  R4      P                  4       pRRR4       X'       d   T^ ,          e   \        T^ ,          4      # R#   + '       g   i     L7; i  \        P                   d     R# i ; i)zCReturn ``sqlite_source_id()``, or an empty string when unavailable.z:memory:zSELECT sqlite_source_id()Nr   )rG   Úclosingr,   Úconnectr*   r+   ÚErrorr   ©r!   r   s     r   Úsqlite_source_idra   ‰   s~   € ðÜ×Ò¤§¢°
Ó ;×<Ô<ÀØ—,‘,Ð:Ó;×DÑDÓFˆC÷ =÷  # a¥&Ò"4Œ3ˆs�1�v‹;Ð<¸"Ð<÷	 =×<ûä�=‰=ô Úðús.   ‚2B ´ BÁB ÂB	ÂB ÂB ÂB/Â.B/c               ó    € V ^8„  d   QhRRRR/# )r   r!   r"   r   rW   r   )r   s   "r   r   r   “   s   € ÷ ñ Ð 2ð °tñ r   c                ó  €  V P                  R4      P                  4       p\        V4      ;'       d)    V^ ,          RJ;'       d    \        V^ ,          4      ^ 8„  #   \        P
                  \        \        3 d     R# i ; i)zÓWhether the file already holds pages (existing vs brand-new DB); lock-free header read. Fail-quiet False: the
only caller gates a warning on this and an unknown-answer warning would fire on every fresh database.zPRAGMA page_countNF)r*   r+   rW   Úintr,   r_   Ú	TypeErrorÚ
ValueErrorr`   s   & r   Ú_database_has_contentrg   “   sk   € ðØ�l‰lÐ.Ó/×8Ñ8Ó:ˆÜ�C‹y×CÐC˜S �V¨4Ð/×CÐC´C¸¸A½³KÀ!±OÐCøÜ�M‰Mœ9¤jÐ1ô Úðús   ‚0A ³A ÁA Á B Á?B c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   �   s   € ÷ 
8ñ 
8˜cñ 
8r   c                 óL  €  ^ RI Hp  V ! 4       ;'       g    / P                  R/ 4      p\        V\        4      '       d   VP                  RR4      MRp\        T\        4      '       d   TP                  4       P                  4       MRpTR9   d   T# R#   \
         d     R# i ; i)z²The configured ``database.journal_mode`` (``wal`` default; ``delete`` for filesystems without WAL-safe
durability: macOS virtiofs, NFS, SMB). Invalid values fail safe to ``wal``.)Úload_config_readonlyÚdatabaseÚjournal_modeÚwalr   )rm   Údelete)	Úhermes_cli.configrj   Úgetr0   ÚdictÚ	Exceptionr   r   r   )rj   rk   Úrawr9   s       r   Úresolve_journal_modert   �   s‘   € ðÝ:Ù(Ó*×0Ð0¨b×5Ñ5°jÀ"ÓEˆÜ5?ÀÌ$×5OÒ5Oˆh�l‰l˜>¨5Ô1ÐUZˆô #-¨S´#×"6Ò"6ˆ3�9‰9‹;×ÑÔ¸B€DØÐ,Ô,ˆ4Ð7°%Ð7øô ô Úðús   ‚B –=B ÂB#Â"B#c                  ó   € ] tR t^ªtRtRtR# )ÚWalUnsupportedErrora4  Raised by :func:`apply_wal_with_fallback` under ``require_wal=True`` when
the filesystem cannot provide WAL (SQLITE_PROTOCOL raised, or macOS-NFS silent
refusal) or the on-disk mode cannot be verified (probe blocked by a concurrent
opener). Subclasses ``OperationalError`` so DB-init handlers still catch it.r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   r   r   rv   rv   ª   s   † õTr   rv   zdict[str, bool]Ú_cross_vm_fs_cacheÚ_cross_vm_warned_pathsÚ#_cross_vm_existing_wal_warned_pathsc               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	directoryr   Úmountinfo_pathr   r   )r   s   "r   r   r   Á   s"   € ÷ ñ  ð °cð ÐWZñ r   c                ó²  €  \        VRRRR7      ;_uu_ 4       pVP                  4       P                  4       pRRR4       RRrTX FÚ  pTP	                  R4      w  rxp	TP                  4       p
\        T
4      ^8  g	   T	'       g   KA  T
^,          pRT9   d"   TP                  R	R
4      P                  R4      pY8X  g0   T P                  TP                  R4      R,           4      '       g   K§  \        T4      T8”  g   K¹  \        T4      T	P                  4       ^ ,          rTKÜ  	  TP                  4       #   + '       g   i     EL; i  \         d     R# i ; i)zffstype of the longest mount point that is a prefix of ``directory`` (``""`` if unreadable / no match).Úrzutf-8Úreplace)ÚencodingÚerrorsNr   z - Ú\zlatin-1ÚignoreÚunicode_escapeÚ/éÿÿÿÿ)ÚopenÚreadÚ
splitlinesÚOSErrorÚ	partitionÚsplitÚlenÚencoder2   Ú
startswithÚrstripr   )r�   r‚   ÚfhÚlinesÚbest_lenÚbest_fstypeÚlineÚfieldsr6   ÚtailÚpartsÚmount_points   &&          r   Ú_mountinfo_fstyper    Á   s  € ðÜ�. #°À	×JÕJÈbØ—G‘G“I×(Ñ(Ó*ˆE÷ Kð  ˆkÛˆàŸ.™.¨Ó/‰ˆ�4Ø—‘“ˆÜˆu‹:˜Œ>§ÙØ˜A•hˆØ�;ÔØ%×,Ñ,¨Y¸ÓA×HÑHÐIYÓZˆKØÔ# y×';Ñ';¸K×<NÑ<NÈsÓ<SÐVYÕ<Y×'ZÔ'ZÜ�;Ó (Ö*Ü(+¨KÓ(8¸$¿*¹*»,Àq½/š+ñ ð ×ÑÓÐ÷# K×JÐJûäô Úðús-   ‚E ™D3¸E Ä3E	Ä>E ÅE ÅEÅEc               ó$   € V ^8„  d   QhRRRRRR/# )r   r�   r   r‚   r   rW   r   )r   s   "r   r   r   Ø   s'   € ÷ Mñ M 3ð M¸ð MÐY]ñ Mr   c                óT   € \         P                  R8w  d   R# \        W4      \        9   # )zPTrue only when ``directory`` sits on a virtiofs/9p mount per ``mountinfo_path``.ÚlinuxF)rE   rF   r    Ú_CROSS_VM_FSTYPES)r�   r‚   s   &&r   Ú_detect_cross_vm_fsr¥   Ø   s"   € ä
‡|�|�wÔÙÜ˜YÓ7Ô;LÑLÐLr   c               ó    € V ^8„  d   QhRRRR/# )r   Úpathr   r   rW   r   )r   s   "r   r   r   ß   s   € ÷ ñ ˜sð  tñ r   c                óÌ  €  \         P                  P                  \         P                  P                  V 4      4      ;'       g    Rp\        ;_uu_ 4        \        P                  T4      pRRR4       Xf.   \        T4      p\        ;_uu_ 4        T\        T&   RRR4       T# T#   \        \
        3 d     R# i ; i  + '       g   i     L[; i  + '       g   i     T# ; i)zaTrue when ``path`` resides on a virtiofs/9p (cross-VM) filesystem; cached per resolved directory.r‹   FN)
Úosr§   ÚdirnameÚrealpathr�   rf   Ú_cross_vm_fs_cache_lockr}   rp   r¥   )r§   r�   Úcacheds   &  r   Ú_path_on_cross_vm_fsr®   ß   s©   € ðÜ—G‘G—O‘O¤B§G¡G×$4Ñ$4°TÓ$:Ó;×BÐB¸sˆ	÷ 
!Ö	 Ü#×'Ñ'¨	Ó2ˆ÷ 
!à‚~Ü$ YÓ/ˆß$Ö$Ø,2Ô˜yÑ)÷ %à€Mˆ6€Møô ”ZÐ ô Úðúç	 ×	 ú÷ %Ö$à€Mús0   ‚AB' ÁB' ÁB?Â
CÂ'B<Â;B<Â?C	ÃC#	c               ó    € V ^8„  d   QhRRRR/# )r   r!   r"   r   r   r   )r   s   "r   r   r   î   s   € ÷ ñ Ð0ð °Sñ r   c                óæ   €  V P                  R4      P                  4       pV'       d"   V^,          '       d   \        V^,          4      # R#   \        P                  \
        \        3 d     R# i ; i)zIFilesystem path of the ``main`` database, ``""`` for in-memory / unknown.zPRAGMA database_listr   )r*   r+   r   r,   r-   Ú
IndexErrorre   r`   s   & r   Ú_connection_db_filer²   î   s[   € ðØ�l‰lÐ1Ó2×;Ñ;Ó=ˆß! c¨!§f¤fŒs�3�q•6‹{Ð4°"Ð4øÜ×$Ñ$¤j´)Ð<ô Úðús!   ‚&A ©A ¸A Á
A Á A0Á/A0c               ó    € V ^8„  d   QhRRRR/# )r   Úactualr   r   r   )r   s   "r   r   r   ÷   s   € ÷ ñ  cð ¨cñ r   c                ó\   € V R8w  d%   \         P                  ! RT ;'       g    R R24      hV # )zIRaise unless SQLite reported ``delete`` for an explicit operator request.rn   z2could not set configured journal_mode=delete (got z	no resultÚ))r,   r-   )r´   s   &r   Ú_verify_configured_deleter·   ÷   s6   € à�ÔÜ×&Ò&Ð)[Ð\b×\qÐ\qÐfqÐ[rÐrsÐ'tÓuÐuØ€Mr   Údb_labelzstate.dbÚrequire_walFc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r!   r"   r¸   r   r¹   rW   r   r   )r   s   "r   r   r   þ   s7   € ÷ VBñ VBÐ"4ð VBÀ3ð VBÐbfð VBÐsvñ VBr   c               óB  € \         P                  P                  R4      p\        \        VRR4      RR4      '       d   Rp\        VRR4      pVRJ;'       d    VP	                  RR7      p VeÒ   V'       gÊ   \        V 4      pVR8X  d^   \        4       '       d&   \        WR	7      V'       d   VP                  4        # # \        V 4        V'       d   VP                  4        R# R# VR
8X  dT   V'       gL   \        V 4      '       d;   \        4       '       d   \        VRR7        V'       d   VP                  4        R
# R
# \        4       pV'       d   VP                  4        \        4       '       d   \        YTR
8H  R7      # \        T 4      pTR8X  d+   TR
8X  d   \        T4       \        T 4       \        T 4       R# TR
8X  d4   Tf   \        P                   ! \"        4      h\%        \'        T R4      4      # Tf"   T'       d   \)        R4      h\+        RT4       R# \-        T 4      pT'       dG   \/        T4      '       d6   T'       d   \)        R4      h\+        RT4       \'        T R4      ;'       g    R
# \1        YY&4      #   T'       d   TP                  4        i i ; i)uü  Set ``journal_mode=WAL`` on ``conn``, falling back to DELETE on failure.

Returns the mode actually set â€” or, when the read-only mode probe is blocked by a concurrent opener, ``"wal"``
as the assumed mode with nothing touched (``require_wal=True`` raises instead). Shared by :class:`SessionDB`
and ``hermes_cli.kanban_db_connect.connect``. WAL-incompatible filesystems either raise ``OperationalError`` ("locking protocol" / "disk I/O error") or â€”
macOS NFS / SMB / AgentFS â€” silently refuse and stay in DELETE; either way log ERROR once per process per
``db_label`` and fall back. ``require_wal=True`` raises :class:`WalUnsupportedError` instead. WAL-reset-bug
builds (https://sqlite.org/wal.html#walresetbug) never enable WAL on non-WAL files; an already-WAL DB keeps WAL
with a warning. Gate deliberately RETAINED: re-measured on the bundled 3.50.4 there is no evidence WAL is safer.

Invariant on every path: never downgrade to DELETE if the on-disk header reports WAL or cannot be read â€” other
gateway/cron/worker connections may hold the DB open, and a live downgrade destroys their uncheckpointed
commits.

An earlier revision of the lock-cancellation fix (#71724) reverted it on the theory that DELETE was "the
mode that corrupts", but that comparison was confounded: the clean WAL result came from SQLite 3.53.1,
which carries BOTH the WAL-reset fix AND 3.51.0's defenses against close()-broken POSIX locks, so it
says nothing about 3.50.4. Re-measured on the actually-bundled 3.50.4 with the lock fix in place, WAL
and DELETE are both clean (0/3 each) â€” i.e. there is no evidence that WAL is safer here, and upstream
still documents the WAL-reset bug as real through 3.51.2 with serious consequences. Until a fixed
runtime is delivered, keep new databases out of WAL.
zhermes_cli.configÚ__spec__NÚ_initializingFÚ_CONFIG_LOCK)Úblockingrm   ©r¸   rn   ©Úkept_wal)r¸   Úrequire_deleteÚDELETEut   could not verify the on-disk journal mode (database is locked â€” possible concurrent openers); cannot guarantee WALÚwal_probe_unknownzvjournal_mode=WAL refused: database is on a cross-VM filesystem (virtiofs/9p) where WAL shared-memory silently corruptsÚcross_vm_fs)rE   Úmodulesrp   ÚgetattrÚacquirer:   r   Ú_apply_delete_for_wal_reset_bugÚreleaserT   rg   Ú_log_wal_reset_bug_oncert   Ú&_log_configured_delete_overridden_onceÚ!_warn_existing_wal_on_cross_vm_fsr,   r-   Ú_CANNOT_VERIFY_DELETE_MSGr·   Ú_set_journal_mode_no_waitrv   Ú	_log_oncer²   r®   Ú_enable_wal)	r!   r¸   r¹   Úconfig_moduleÚconfig_lockÚacquiredÚcurrent_modeÚ
configuredÚdb_files	   &$$      r   Úapply_wal_with_fallbackrÙ   þ   sX  € ô. —K‘K—O‘OÐ$7Ó8€MÜŒw�} j°$Ó7¸È%×PÒPØˆÜ˜-¨¸Ó>€KØ $Ð&×NÐN¨;×+>Ñ+>ÈÐ+>Ó+N€Hð"ØÒ"¯8ô 1°Ó6ˆLØ˜uÔ$Ü1×3Ò3Ü:¸4ÔS÷ Ø×ÑÕ!ð ô & dÔ+Ø÷ Ø×ÑÖ!ñ ð ˜xÔ'·Ô@UÐVZ×@[Ò@[Ü1×3Ò3Ü+¨H¸uÕEØ÷ Ø×ÑÖ!ñ ô *Ó+ˆ
çØ×ÑÔ!ô &×'Ò'Ü.¨tÐWaÐemÑWmÔnÐnä(¨Ó.€LØ�uÔØ˜Ô!ä2°8Ô<Ü)¨$Ô/Ü˜dÔ#Ùà�XÔð Òä×*Ò*Ô+DÓEÐEÜ(Ô)BÀ4ÈÓ)RÓSÐSØÒ÷ Ü%ð 'Ró Sð SäÐ% xÔ0Ùô " $Ó'€GßÔ'¨×0Ò0ßÜ%ð 'Ró Sð Sä�- Ô*Ü(¨¨xÓ8×DÐD¸HÐDÜ�t {ÓAÐAø÷U Ø×ÑÕ!ð ús*   Á,J Á8-J Â?J Ã'J Ã6.J Å
J ÊJc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R/# )
r   r!   r"   r¸   r   r¹   rW   rÖ   r#   r   r   )r   s   "r   r   r   W  s9   € ÷ Iñ IÐ(ð I°Cð IÀdð IÐZgð IÐloñ Ir   c                ób  a aaaa€ SRJ;'       d    SR8g  ;'       d    \        S 4      oR V VVV3R llp \        S P                  R4      P                  4       4      pVR8X  d   V! 4       # \	        RV: R24      pV'       d   Vh\        SV4       T;'       g    R#   \         d    h \        P                   Edï   p\        T4      P                  4       o\        ;QJ d#    T3R	 l\         4       F  '       g   K   R
M	  RM! T3R	 l\         4       4      '       g   h RS9   d¬   \        ^4       Fœ  p\        P                  ! R4        S P                  R4      P                  4       p	MD  \        P                   d-   p
R\        T
4      P                  4       9  d   h T
p Rp
?
Kv  Rp
?
ii ; i\        T	4      R8X  d   T! 4       u u Rp?#  M	  \        S 4      R9   d   h T'       d   \	        \        T4      4      Th\        ST4        \!        S R4       M‡  \        P                   dp   p\#        RSY{4        \        S P                  R4      P                  4       4      pM  \        P                   d    Rp Mi ; iT;'       g    Ru Rp?u Rp?# Rp?ii ; i Rp?R# Rp?ii ; i)zIFlip a non-WAL, non-vulnerable connection to WAL, or fall back to DELETE.Nrm   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   Ú!_enable_wal.<locals>.__annotate__]  s   € ÷ ñ ˜Cñ r   c                 óF   <€ S'       d   \        SS4       \        S 4       R # )rm   )Ú_log_journal_mode_upgrade_oncerT   )r!   rÖ   r¸   Úupgrading_existing_dbs   €€€€r   Ú_wal_activatedÚ#_enable_wal.<locals>._wal_activated]  s   ø€ ß Ü*¨8°\ÔBÜ˜dÔ#Ùr   zPRAGMA journal_mode=WALz0journal_mode=WAL refused without raising (still r¶   rn   c              3  ó,   <"  € T F	  qS9   x € K  	  R # 5i©Nr   )Ú.0ÚmarkerÚmsgs   & €r   Ú	<genexpr>Ú_enable_wal.<locals>.<genexpr>r  s   øé € ÐEÑ/D V˜S–=Ó/Dùs   ƒTFr&   r'   rÄ   Úwal_delete_fallback_failedr%   r   )rm   N)rg   r   r*   r+   rv   Ú_log_wal_fallback_oncer,   r-   r   r   ÚanyÚ_WAL_INCOMPAT_MARKERSr)   r.   r/   r:   rÐ   rÑ   )r!   r¸   r¹   rÖ   rá   r9   Ú
silent_excr7   r6   r   Ú	retry_excÚ
delete_excÚ	read_backrç   rà   s   ff&f         @@r   rÒ   rÒ   W  sD  ü€ ð )°Ð4×nÐn¸ÈÑ9N×nÐnÔShÐimÓSnÐ÷ó ð=ô ˜dŸl™lÐ+DÓE×NÑNÓPÓQˆØ�5Œ=Ù!Ó#Ð#Ü(Ð+[Ð\`Ñ[cÐcdÐ)eÓfˆ
ßØÐÜ˜x¨Ô4Ø×Ð�xÐøÜô ØÜ×#Ñ#õ 0Ü�#‹h�n‰nÓˆß‹sÔEÕ/DÓE�s�sŠsÔEÕ/DÓE×EÒEØð ˜sÔ"ô ˜1–X�Ü—
’
˜4Ô ðØŸ,™,Ð'@ÓA×JÑJÓL‘CøÜ×/Ñ/ô Ø'¬s°9«~×/CÑ/CÓ/EÔEØØ#�CÝûð	úô
 " #Ó&¨%Ô/Ù)Ó+×+Ùñ ô ! Ó&¨-Ô7ØßÜ%¤c¨#£hÓ/°SÐ8Ü˜x¨Ô-ð	)Ü% d¨HÕ5øÜ×'Ñ'ô 	)ô Ð2°H¸cÔNðÜ*¨4¯<©<Ð8MÓ+N×+WÑ+WÓ+YÓZ‘	øÜ×+Ñ+ô Ø’	ðúà×(Ð( ×(Ò(ûð	)úõ ûða0úsÑ   ·5B Á-.B ÂB ÂJ.Â?J.Ã <J)Ã?!J)Ä!,J)ÅE.Å-J)Å.F/Æ!F*Æ$J)Æ*F/Æ/J)Ç
J.ÇJ)Ç-!J)ÈHÈJ)ÈJ È1JÈ?(I(É'JÉ(JÉ?JÊJÊJÊJÊJ ÊJ)ÊJ.ÊJ Ê J)Ê)J.c               ó$   € V ^8„  d   QhRRRRRR/# )r   r!   r"   r9   r   r   r   )r   s   "r   r   r   £  s'   € ÷ Dñ DÐ$6ð D¸cð DÀcñ Dr   c           	     óÔ  €  V P                  R4      P                  4       pV'       d   V^ ,          e   \        V^ ,          4      M^ pV P                  R4        \        V P                  RV 24      P                  4       4      \        P                  ! \        P                  4      ;_uu_ 4        V P                  RV 24       RRR4       #   \        P                  \
        \        3 d    ^ p Lªi ; i  + '       g   i     # ; i  \        P                  ! \        P                  4      ;_uu_ 4        T P                  RT 24       RRR4       i   + '       g   i     i ; i; i)an  Execute ``PRAGMA journal_mode=<mode>`` without waiting on other openers.

The ONLY place a non-WAL journal-mode switch may be issued. ``busy_timeout=0`` turns SQLite's exclusivity
requirement into a concurrent-opener detector: leaving WAL needs exclusive access, so if ANY other connection
holds the DB the pragma fails immediately with ``database is locked`` instead of sneaking the flip between a
writer's transactions (how uncheckpointed WAL commits die). Callers must treat a raised ``OperationalError`` as
"not exclusively owned: leave the mode alone", never as retryable. Returns the reported mode, ``""`` if no row.zPRAGMA busy_timeoutNzPRAGMA busy_timeout=0zPRAGMA journal_mode=zPRAGMA busy_timeout=)
r*   r+   rd   r,   r-   re   rf   r   rG   rH   )r!   r9   r   Úprevious_timeouts   &&  r   rÐ   rÐ   £  s  € ðØ�l‰lÐ0Ó1×:Ñ:Ó<ˆß*-°#°aµ&Ò2Dœ3˜s 1�vœ;È!Ðð 	‡L�LÐ(Ô)ðDÜ˜dŸl™lÐ-AÀ$ÀÐ+HÓI×RÑRÓTÓUä× Ò ¤×!9Ñ!9×:Õ:Ø�L‰LÐ/Ð0@Ð/AÐBÔC÷ ;Ð:øô ×$Ñ$¤i´Ð<ô ØÒðú÷ ;×:ûŒZ× Ò ¤×!9Ñ!9×:Õ:Ø�L‰LÐ/Ð0@Ð/AÐBÔC÷ ;×:×:Ð:ýsF   ‚&C ©C Á*D	 Â0C6Ã"C3Ã2C3Ã6DÄ	-E'Ä6E	Å	E'ÅE$ÅE'c               ó    € V ^8„  d   QhRRRR/# r<   r   )r   s   "r   r   r   ¸  s   € ÷ 7ñ 7Ð,>ð 7À4ñ 7r   c                ón   € \        V 4      pV'       d"   \        V4      '       d   \        RV4       R# R# R# )a?  #110848: the fresh-DB cross-VM refusal never sees a DB that was already WAL before the check existed (or was
created on a native volume and then moved). Keeping WAL is right (never live-downgrade); staying silent is not.
Both the vulnerable-SQLite and the regular already-WAL paths return early, so both must call this.Úcross_vm_fs_existing_walN)r²   r®   rÑ   )r!   rØ   s   & r   rÎ   rÎ   ¸  s.   € ô " $Ó'€GßÔ'¨×0Ò0äÐ,¨gÖ6ñ 1�wr   rÃ   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r!   r"   r¸   r   rÃ   rW   r   r   )r   s   "r   r   r   Â  s+   € ÷ #ñ #Ð*<ð #È3ð #Ð`dð #Ðqtñ #r   c               ó  € \        V 4      pVR8X  d9   \        VRR7       V'       d   \        V4       \        V 4       \	        V 4       R# Vf3   V'       d   \
        P                  ! \        4      h\        VRRR7       R# Rp \        V R4      pV'       d   \        V4       \        VR	R7       R#   \
        P                   dD   pT'       d   h \        T4      '       d    \        TRRR7       T;'       g    Ru Rp?#  Rp?LuRp?ii ; i)
uò  Avoid enabling WAL when the linked SQLite has the WAL-reset bug.

Already-WAL on disk: keep WAL (no live downgrade) and warn. Mode unreadable (probe blocked by a concurrent
opener): not provably exclusive â€” leave it and warn; treating "could not read" as "not WAL" once flipped a live
WAL state.db to DELETE under a writer, destroying its uncheckpointed commits. Otherwise set DELETE without
waiting out openers and warn; an explicit operator request additionally verifies SQLite accepted DELETE.rm   TrÁ   N)rÂ   Úindeterminater   rÄ   rn   F)r:   rÌ   rÍ   rÎ   rT   r,   r-   rÏ   rÐ   r   r·   )r!   r¸   rÃ   Úcurrentr´   r7   s   &$$   r   rÊ   rÊ   Â  sß   € ô $ DÓ)€GØ�%ÔÜ °4Õ8ßä2°8Ô<Ü)¨$Ô/Ü˜dÔ#ÙØ‚ßÜ×*Ò*Ô+DÓEÐEÜ °4ÀtÕLÙØ€Fð'Ü*¨4°Ó:ˆ÷ Ü! &Ô)Ü˜H¨uÕ5Ùøô ×#Ñ#ô 'ßØÜ ×$Ò$ä# H°tÈ4ÕPØ×&Ð&˜hÕ&ô %ûð'ús$   ÂB2 Â2D
Ã0DÃ8DÃ:D
ÄD
c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   è  s   € ÷ vñ v ñ vr   c                 óž   €  ^ RI Hp HpHp V ! V! 4       4      pV! V4      pVR9   d   RV R2# VR8X  d   RV R2# T#   \         d     R# i ; i)z`Repair hint matching what ``hermes update`` can actually do for this install type.

See #75153.
)Údetect_install_methodÚget_project_rootÚ%recommended_update_command_for_methodz>Hermes-managed installs can repair the embedded runtime with `Ú`Údockerz!update the container image with `zdinstall a Python build bundled with SQLite 3.51.3+ (or backports 3.50.7 / 3.44.6) and restart Hermes>   ÚgitÚunknown)ro   rþ   rÿ   r   rr   )rþ   rÿ   r   ÚmethodÚcmds        r   Ú_wal_reset_repair_hintr  è  sr   € ð
vßtÑtÙ&Ñ'7Ó'9Ó:ˆÙ3°FÓ;ˆØÐ'Ô'ØSÐTWÐSXÐXYÐZÐZØ=CÀxÔ=OÐ2°3°%°qÐ9ÐXÐUXÐXøÜô vÚuðvús   ‚+= ®= »= ½AÁArú   uÀ   journal mode could not be verified or exclusively switched (database is locked â€” possible concurrent openers); leaving the journal mode untouched (no live downgrade under concurrent openers)rÂ   u\   is already in WAL mode â€” leaving WAL in place (no live downgrade under concurrent openers)rn   z1using journal_mode=DELETE instead of enabling WALÚwal_reset_bugu
  %s: linked SQLite %s (interpreter %s) is vulnerable to the WAL-reset corruption bug (https://sqlite.org/wal.html#walresetbug) â€” %s. Upgrade to SQLite 3.51.3+ (or backports 3.50.7 / 3.44.6); %s. See `hermes doctor`. This warning fires once per process per database.Újournal_upgradeaÔ  %s: on-disk journal_mode was %s and has been switched to WAL. This rewrites the database header and persists after this process exits. If %s was a deliberate choice (for example the mitigation for the SQLite WAL-reset bug, or a WAL-unsafe filesystem), setting it with PRAGMA on the file will not survive -- every open re-applies the configured mode. Set `database.journal_mode: delete` in config.yaml to make it stick. This message fires once per process per database.Úwal_fallbacku  %s: WAL journal_mode unsupported on this filesystem (%s) â€” falling back to journal_mode=DELETE (slower rollback-journal mode; reduces concurrency but works on NFS/SMB/FUSE/ZFS). See https://www.sqlite.org/wal.html for details. This message fires once per process per database.rê   u  %s: both WAL and DELETE journal_mode failed (WAL: %s; DELETE: %s) â€” continuing with the connection's current journal mode (reads/writes still work). Typically seen on APFS external SSDs under heavy contention. This message fires once per process per database.Údelete_overriddena„  %s: database.journal_mode=delete is configured but the on-disk database is already WAL; keeping WAL (a live downgrade under open connections can corrupt the DB). To apply journal_mode=DELETE, stop every Hermes process using this database and run `hermes sessions set-journal-mode delete` (add `--db PATH` for a store other than state.db). This message fires once per process per database.rÅ   aY  %s: could not verify the on-disk journal mode (database is locked / busy); not issuing a journal-mode set-pragma while another connection may hold the file (it could unlink the -wal/-shm sidecars that connection still uses). Leaving the file untouched; this connection inherits the on-disk mode. This message fires once per process per database.rÆ   uÄ  %s: database directory is on a cross-VM filesystem (virtiofs/9p â€” typical for Docker Desktop / OrbStack / Podman host bind mounts). SQLite WAL shared-memory is not coherent across the VM boundary and can silently corrupt the database, so journal_mode=DELETE is used instead. To restore WAL concurrency, move the database onto a native volume (e.g. a named Docker volume) instead of a host bind mount. This message fires once per process per database.r÷   uo  %s: existing WAL-mode database is on a cross-VM filesystem (virtiofs/9p â€” typical for Docker Desktop / OrbStack / Podman host bind mounts). SQLite WAL shared-memory is not coherent across the VM boundary and concurrent writers can silently corrupt the database. Hermes does not live-downgrade an on-disk WAL database. Fix one of two ways: stop every Hermes process using this database and run `hermes sessions set-journal-mode delete` (set `database.journal_mode: delete` in config.yaml to keep it), or move the database onto a native volume (e.g. a named Docker volume). This message fires once per process per database.c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úkindr   r¸   Úargsr   r   r=   r   )r   s   "r   r   r   =  s.   € ÷ 	Uñ 	U�Cð 	U 3ð 	U¨sð 	U°tñ 	Ur   c                ó  € \         V ,          w  r4rV\        4       V,          pT;_uu_ 4        W9   d    RRR4       R# VP                  V4       RRR4       \        P                  ! WVV.R V 4       O5!   R#   + '       g   i     L2; i)z”Emit ``_ONCE_LOGS[kind]`` once per (process, db_label). Callable *args* are
resolved only after the dedupe check, so install-method probes run once.Nc              3  óV   "  € T F  p\        V4      '       d   V! 4       MTx € K!  	  R # 5irä   )Úcallable)rå   Úas   & r   rè   Ú_log_once.<locals>.<genexpr>F  s   é € Ð*SÉdÈ´(¸1·+²+©1¬3À1Ô+DËdùs   ‚'))Ú
_ONCE_LOGSÚglobalsÚaddr4   Úlog)r  r¸   r  ÚlockÚset_nameÚlevelÚmessageÚseens   &&*     r   rÑ   rÑ   =  sj   € ô &0°Õ%5Ñ"€D�EÜ‹9�XÕ€Dß	ŠØÔØ÷ 
‰ð 	�‰�Ô÷ 
ô ‡J‚Jˆu˜xÐTÑ*SÉdÓ*SÖT÷	 
�ús   ¬A9¾A9Á9B		c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¸   r   rÂ   rW   rú   r   r=   r   )r   s   "r   r   r   I  s/   € ÷ qñ q cð q¸ð qÈTð qÐ^bñ qr   c               ó¨   € \         V'       d   RMV'       d   RMR,          p\        RV \        P                  \        P
                  V\        4       R# )zHLog once per (process, db_label) about the WAL-reset vulnerability path.rú   rÂ   rn   r  N)Ú_WAL_RESET_BUG_ACTIONSrÑ   r,   Úsqlite_versionrE   Ú
executabler  )r¸   rÂ   rú   Úactions   &$$ r   rÌ   rÌ   I  s4   € ä#·}¡O×X`É*ÐfnÕo€FÜˆo˜x¬×)?Ñ)?ÄÇÁÐQWÔYoÖpr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r¸   r   Úprevious_moder   r=   r   )r   s   "r   r   r   O  s&   € ÷ Iñ I¨Sð IÀð IÈñ Ir   c                ó    € \        RWV4       R# )zCSingle WARNING per (process, db_label) about a non-WAL -> WAL flip.r	  N)rÑ   )r¸   r$  s   &&r   rß   rß   O  s   € äÐ ¸-ÖHr   ÚOFFÚNORMALÚFULLÚEXTRAzdict[str, int]Ú_SYNCHRONOUS_LEVELSzdict[int, str]Ú_SYNCHRONOUS_NAMESc               ó    € V ^8„  d   QhRRRR/# )r   Ú	raw_valuer   r   zOptional[int]r   )r   s   "r   r   r   _  s   € ÷ ñ ¨ð °ñ r   c                óô  € \        V \        4      '       d   V RJ d   ^ # R# \        V \        4      '       d   V \        9   d   V # R# \	        V 4      P                  4       pVP                  4       \        9   d   \        VP                  4       ,          # \        P                  ! \        \        4      ;_uu_ 4        \        V4      \        9   d   \        V4      MRuuRRR4       #   + '       g   i     R# ; i)záMap ``database.synchronous`` (``OFF``/``NORMAL``/``FULL``/``EXTRA`` any
case, or ``0``-``3``) to its PRAGMA integer; None for anything else so the
caller warns and leaves the level untouched (guessing at durability is worse).FN)r0   rW   rd   r+  r   r   Úupperr*  rG   rH   re   rf   )r-  Útexts   & r   Úresolve_synchronous_levelr1  _  s¯   € ô �)œT×"Ò"à Ó&ˆqÐ0¨DÐ0Ü�)œS×!Ò!Ø%Ô);Ô;ˆyÐEÀÐEÜˆy‹>×ÑÓ!€DØ‡z�zƒ|Ô*Ô*Ü" 4§:¡:£<Õ0Ð0Ü	×	Ò	œY¬
×	3Õ	3Ü ›IÔ);Ô;Œs�4ŒyÀ÷ 
4×	3×	3Ñ	3áús   Â:!C&Ã&C7	c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r!   r"   r-  r   r¸   r   r   r=   r   )r   s   "r   r   r   p  s+   € ÷ 4ñ 4Ð$6ð 4À3ð 4ÐUXð 4Ð]añ 4r   c               ó–  € \        V4      ;pf   \        P                  RW!4       R# \        P                  R8X  d0   V\
        8  d%   \        P                  RV\        V,          4       R# \        P                  ! \        P                  4      ;_uu_ 4        V P                  RV 24       RRR4       R#   + '       g   i     R# ; i)uá  Set ``PRAGMA synchronous`` from config, never below FULL on macOS.

Kept out of the integer loop in :func:`apply_database_pragmas`: this PRAGMA decides whether a commit is on
the platter, so an unrecognised value must not fall through to "SQLite default" the way a bad
``cache_size`` can. Darwin floor: this runs after :func:`_enforce_macos_synchronous_full`, so a configured
``NORMAL`` would silently undo the btree protection â€” raising is allowed, lowering is refused out loud.Nz]%s: ignoring unrecognized database.synchronous=%r (expected OFF, NORMAL, FULL, EXTRA, or 0-3)rD   z¿%s: refusing database.synchronous=%s on macOS; keeping FULL. Darwin's fsync() does not guarantee write ordering, so a lower level readmits the half-written btree pages FULL exists to prevent.zPRAGMA synchronous=)r1  r4   ÚwarningrE   rF   Ú_SYNCHRONOUS_FULLr+  rG   rH   r,   r-   r*   )r!   r-  r¸   r  s   &&$ r   Ú_apply_synchronous_pragmar6  p  s™   € ô +¨9Ó5Ð5ˆÒ>Ü�‰ÐvØô	,áÜ
‡|�|�xÔ EÔ,=Ô$=Ü�‰ð %à&.Ô0BÀ5Õ0Iô	Kñ 	Ü	×	Ò	œW×5Ñ5×	6Õ	6Ø�‰Ð*¨5¨'Ð2Ô3÷ 
7×	6×	6Ò	6ús   ÂB7Â7C	c               ó$   € V ^8„  d   QhRRRRRR/# )r   r!   r"   r¸   r   r   r=   r   )r   s   "r   r   r   „  s(   € ÷ Lñ LÐ!3ð LÀ#ð LÐW[ñ Lr   c          	     ó"  €  ^ RI HpHp V! 4       pR
 F„  pT! TRTRR7      ;pf   K   \	        \        T4      P                  4       4      p\        P                  ! \        P                  4      ;_uu_ 4        T P                  RT RT 24       RRR4       K†  	  T! TRRRR7      ;pe   \!        YTR	7       R# R#   \         d     R# i ; i  \        \        3 d    \        P                  RYT4        Kæ  i ; i  + '       g   i     Kû  ; i)aT  Apply optional performance and WAL-sizing PRAGMAs from ``config.yaml``.

Journal mode is NOT handled here (owned by :func:`apply_wal_with_fallback`). ``database:`` keys: ``cache_size``
(negative = KiB, positive = pages), ``mmap_size`` (bytes, 0 = off), ``temp_store`` (0-3), ``wal_autocheckpoint``
(pages), ``journal_size_limit`` (bytes), ``synchronous`` (unset leaves the compile-time default, which differs
between bundled/distro/Homebrew builds). Best-effort: failures are ignored so DB init never breaks on a
malformed section. Applied to ALL connection types: writer, read_only, WAL readers.)Úcfg_getrj   Nrk   )Údefaultz'%s: ignoring non-integer database.%s=%rzPRAGMA Ú=ÚsynchronousrÀ   )Ú
cache_sizeÚ	mmap_sizeÚ
temp_storeÚwal_autocheckpointÚjournal_size_limit)ro   r9  rj   rr   rd   r   r   re   rf   r4   r4  rG   rH   r,   r-   r*   r6  )	r!   r¸   r9  rj   ÚcfgÚpragma_namer-  ÚvalueÚraw_synchronouss	   &$       r   Úapply_database_pragmasrF  „  s  € ðßCÙ"Ó$ˆó mˆÙ   j°+ÀtÔLÐLˆIÒUÙð	Üœ˜I›×,Ñ,Ó.Ó/ˆEô × Ò ¤×!9Ñ!9×:Õ:Ø�L‰L˜7 ; -¨q°°Ð8Ô9÷ ;Ñ:ñ mñ # 3¨
°MÈ4ÔPÐPˆÒ]Ü! $À(×Kñ ^øô ô Úðûô œ:Ð&ô 	Ü�N‰NÐDÀhÐ]fÔgÚð	ú÷ ;×:Ð:ús.   ‚B< ©"CÁ7C=Â<CÃ
CÃ(C:Ã9C:Ã=D)zlocking protocolznot authorizedr&   i   rä   >   Ú9pÚ9p2000Úvirtiofsú9p2000.lú9p2000.uúfuse.virtiofs)z/proc/self/mountinfo)YÚ__conditional_annotations__r{   Ú
__future__r   rG   Ú	functoolsÚloggingr©   r,   rE   Ú	threadingr.   Útypingr   r   r   Úhermes_cli.sqlite_runtimer   rY   Úhermes_state_errorsr   Ú	getLoggerr4   rí   r?   r   r	   Ú__annotations__ÚLockÚ_wal_fallback_warned_lockr
   Ú _wal_delete_fallback_failed_lockr   Ú_wal_probe_unknown_lockr   Ú_wal_reset_bug_warned_lockr   Ú_delete_overridden_warned_lockr   Ú_journal_upgrade_warned_lockrÏ   r   r:   r@   rI   rN   rQ   rT   ra   rg   rt   r-   rv   Ú	frozensetr¤   r}   r¬   r~   Ú_cross_vm_warned_lockr   Ú"_cross_vm_existing_wal_warned_lockr    r¥   r®   r²   r·   rÙ   rÒ   rÐ   rÎ   rÊ   r  r  ÚWARNINGÚERRORr  rÑ   rÌ   rß   Úpartialrë   rÍ   r*  Úitemsr+  r5  r1  r6  rF  )ÚkÚvrM  s   00@r   Ú<module>rg     sÓ  øðôõ
 #ã Û Û Û 	Û Û 
Û Û ß &Ñ &å gÝ 4ð 
×	Ò	˜>Ó	*€ð QÐ à(Ð ñ (+£uÐ ˜HÓ ,Ø%ŸNšNÓ,Ð ñ /2«eÐ ! 8Ó 3Ø#,§>¢>Ó#3Ð  ñ &)£UÐ ˜(Ó *Ø#Ÿ.š.Ó*Ð Ù(+«Ð ˜XÓ -Ø&Ÿ^š^Ó-Ð Ù,/«EÐ  Ó 1Ø!*§¢Ó!1Ð Ù%(£UÐ ˜sÓ *Ø(Ÿ~š~Ó/Ð ð8Ð õ
Mõ
õ0@õ!õ:õ4õ*÷rõ=õõ
8ôT˜'×2Ñ2ô Tñ ÒcÓdÐ Ø&(Ð �OÓ (Ø#Ÿ.š.Ó*Ð Ù#&£5Ð ˜Ó (Ø!ŸšÓ(Ð Ù03³Ð # XÓ 5Ø%.§^¢^Ó%5Ð "÷÷.MõõõðVBÈð VBÐin÷ VBõrIõXDõ*7ð#Ðgl÷ #õLvð& ð !ð ÐnØÐAðÐ ð Ð0Ð2OÐQX×Q`ÑQ`ð	UðVð
 Ð4Ð6UÐW^×WfÑWfð	<ð	=ð Ð.Ð0LÈgÏmÉmð	iðjð
 !Ð#CÐEhÐjq×jyÑjyð
	Hð#Ið Ð8Ð:[Ð]d×]jÑ]jð	XðYð Ð1Ð3MÈwÏÉð	[ð\ð Ð)Ð+CÀWÇ_Á_ð	 ð!ð Ð!CÐEjÐls×lyÑlyð	ð	!ð_9€
õx	UðqÐTY÷ qõIð #×*Ò*¨9°nÓEÐ Ø)2×):Ò):¸9ÐFYÓ)ZÐ &ð (-¨a°¸1¸fÀaÈÐRSÐ&TÐ �^Ó TØ7J×7PÑ7PÔ7RÔ%SÑ7R©t¨q a¢dÑ7RÒ%SÐ �NÓ SØÐ õõ"4ð(LÈ
÷ Lñ LùóS &Ts   Ë6L&