
    j2                   $   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d	Zd
ZdZdZdZdZdZ e        Z! e        Z" e        Z# e        Z$dZ%dZ& e'h d      Z( e'h d      Z)dZ* G d d      Z+dZ,dZ-dZ.dZ/dZ0 e'ddh      Z1dZ2dZ3d Z4d!Z5 e'h d"      Z6dd#Z7dd$Z8dd%Z9d&d'dd(Z:dd)Z;dd*Z<dd+Z= G d, d-e>      Z? G d. d/e?      Z@ G d0 d1e?      ZA G d2 d3eBe      ZC ed45       G d6 d7             ZD ed45       G d8 d9             ZEdd:ZF ed45       G d; d<             ZGdd=ZH ed4d4>       G d? d@             ZI G dA dB      ZJddCZKddDZLddEZM ed4d4>       G dF dG             ZN ed4d4>       G dH dI             ZO ed4d4>       G dJ dK             ZP ed4d4>       G dL dM             ZQ ed4d4>       G dN dO             ZR ed4d4>       G dP dQ             ZS ed4d4>       G dR dS             ZT G dT dU      ZU G dV dWeU      ZV G dX dYeU      ZW G dZ d[eU      ZX G d\ d]eU      ZY G d^ d_eU      ZZ G d` daeU      Z[ G db dc      Z\ G dd de      Z] ed45       G df dg             Z^ ed45       G dh di             Z_ ed45       G dj dk             Z` ed45       G dl dm             Za ed45       G dn do             Zbe_e`z  eaz  ebz  Zc e'h dp      ZddqZe e'h dr      Zf e'h ds      ZgddtZhdduZiddvZjddwZkddxZleddy       ZmddzZndd{Zoe	 	 	 	 	 	 dd|       Zpe	 	 	 	 	 	 dd}       Zqdd~	 	 	 	 	 ddZrddZsddZtddZuddZvddZw G d d      Zxy)    )annotationsN)contextmanager)	dataclassfield)datetimetimezone)Enum)Path)AnyIteratorMappinguc   전송 결과를 확인할 수 없습니다. 다시 보내지 마세요. 조정이 필요합니다.uk   고객 전송 영수증은 확인됐습니다. 재전송하지 말고 감사 기록을 복구해 주세요.u!   이미 처리된 전송입니다.diagnostic_authority_journal_v1zdelivery-authority.jsonlzdelivery-authority.lock@0000000000000000000000000000000000000000000000000000000000000000live_diagnostic_authority_v1	activated>   activeenabledgrantedapprovedr   >   staterevokedrevision
session_idepoch_digestowner_digestconfig_digestpolicy_digestsource_digestcatalog_digestconsent_digestexpires_at_kstschema_versionproposal_digestregistry_digestrevision_digestdestination_digestsession_generationcustomer_key_digestregistration_digestrendered_body_digestmeal_constraints_digestactivation_receipt_digest#diagnostic_transport_binding_digest)r(   r   r$   r    r,   r#   r%   r*   r&   r   r   r   r+   r   r)   r   r-   c                      e Zd ZdZddZy)_DiagnosticAdmissionToken	authorityc                    || _         y Nr0   selfr1   s     q/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/dualcoach/profile/checkin_cli/diagnostic_isolation.py__init__z"_DiagnosticAdmissionToken.__init__V   s	    "    N)r1   objectreturnNone)__name__
__module____qualname__	__slots__r7    r8   r6   r/   r/   S   s    I#r8   r/    diagnostic_activated_delivery_v1diagnostic_isolation_spec_v1diagnostic_transport_binding_v1ztelegram-test-botsend_diagnostic_customer_v1operatorcustomer   r(   r#   r%   r*   r&   r$   r,   r   r   r   r+   )r(   r#   r*   r&   r-   r$   r,   r   r   r   r+   zactivated-delivery.json>   r   r   destinationr   r   rendered_bodyr   r!   r"   r#   r$   r%   r&   r'   r(   r*   r+   r,   r-   c                T    t        j                  | dddd      j                  d      S )NFT),:)ensure_ascii	sort_keys
separators	allow_nanutf-8)jsondumpsencodevalues    r6   
_canonicalrX      s-    :: fWor8   c                Z    t        j                  t        |             j                         S r3   )hashlibsha256rX   	hexdigestrV   s    r6   _digestr]      s    >>*U+,6688r8   c                l    t        |       t        u xr" t        |       dk(  xr t        d | D              S )N@   c              3  $   K   | ]  }|d v  
 yw)0123456789abcdefNr@   ).0chars     r6   	<genexpr>z_is_digest.<locals>.<genexpr>   s      ;/4t""u   )typestrlenallrV   s    r6   
_is_digestrj      s<    ;# #e*"2 s ;/4; 8 r8   Fallow_emptyc               h    |rt        |       t        u r| dk(  ry t        |       st        | d      y )N z" must be a lowercase SHA256 digest)rf   rg   rj   
ValueError)rW   labelrl   s      r6   _require_digestrq      s9    tE{c)erkeE7"DEFF r8   c                    t        |       t        us$| r"t        |       t        kD  s| j	                         st        | d      | S )Nz# must be a bounded non-empty string)rf   rg   rh   _MAX_VALIDATED_TEXT_LENGTHstripro   )rW   rp   s     r6   _require_bounded_textru      s?    U3u:22{{}E7"EFGGLr8   c                @   t        | |      }d|vrt        | d      	 t        j                  |j	                  d      r|d d dz   n|      }|j                  |j                         t        | d      |S # t
        t        f$ r}t        | d      |d }~ww xY w)NTz must be an ISO-8601 timestampZ+00:00z" is not a valid ISO-8601 timestampz must include a timezone offset)ru   ro   r   fromisoformatendswith	TypeErrortzinfo	utcoffset)rW   rp   textparsedexcs        r6   _parse_timestampr      s     .D
$E7"@ABBP''$(MM#$6D"I D

 }} 0 0 2 :E7"ABCCM	 z" PE7"DEFCOPs   .A: :B	BBc                x    t        j                  t        |       j                  d            j	                         S )NrR   )rZ   r[   rg   rU   r\   )paths    r6   _path_digestr      s)    >>#d)**734>>@@r8   c                      e Zd Zy)DiagnosticIsolationErrorNr<   r=   r>   r@   r8   r6   r   r          r8   r   c                      e Zd Zy)DiagnosticAuthorityErrorNr   r@   r8   r6   r   r      r   r8   r   c                      e Zd Zy)DiagnosticReservationConflictNr   r@   r8   r6   r   r      r   r8   r   c                  0    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)DiagnosticSessionStateprepared
activatingr   restart_unvalidated	detachingexpiredr   closedrecovery_requiredN)r<   r=   r>   PREPARED
ACTIVATINGACTIVERESTART_UNVALIDATED	DETACHINGEXPIREDREVOKEDCLOSEDRECOVERY_REQUIREDr@   r8   r6   r   r      s1    HJF/IGGF+r8   r   T)frozenc                  P    e Zd ZU ded<   ded<   ded<   ded<   ded<   ddZdd	Zy
)DiagnosticRoleRouteintuser_idchat_idtopic_idrg   role
generationc                4   t        |       t        urt        d      dD ]+  }t        | |d       }t        |      t        us"t        d       t        | dd      dk  rt        d      t        | dd       }t        |      t
        us|t        vrt        d	      y )
Nz%diagnostic role route class is sealedr   r   r   r   z2diagnostic role route identifiers must be integersr   r      z+diagnostic role route generation is invalidr   z%diagnostic role route role is invalid)rf   r   r   getattrr   rg   _DIAGNOSTIC_ROLE_NAMES)r5   namerW   r   s       r6   __post_init__z!DiagnosticRoleRoute.__post_init__   s    :00*+RSSDDD$-EE{#%./cdd E 4q)A-*+XYYtVT*:S D0F$F*+RSS %Gr8   c               l    | j                   | j                  | j                  | j                  f||||fk(  S r3   r   )r5   r   r   r   r   s        r6   matcheszDiagnosticRoleRoute.matches   s:    dllDMM4??K	P
 
 	
r8   Nr:   r;   )
r   r   r   r   r   r   r   r   r:   bool)r<   r=   r>   __annotations__r   r   r@   r8   r6   r   r      s&    LLM
IOT
r8   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   dZded<   eZded<    ed      Zded<    ed      Z	ded<    ed      Z
ded<    ed      Zded<   ddZy)DiagnosticIsolationSpecV1rg   r   test_bot_digestcustomer_destination_digestoperator_destination_digestprofile_digestr   max_provider_timeout_seconds
expires_atapproved_byapproved_atrn   supersedes_digestr"   F)initspec_core_digestr-   spec_digestauthority_digestc           
        	 t        |        | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d}t        |      }t        t        t        | j                  | j                  | j                  t         |d      }t        ||d      }t        || j"                  | j$                  | j&                  d      }t(        j+                  | d|       t(        j+                  | d|       t(        j+                  | d|       t(        j+                  | d	|       y # t        t        t        f$ r}t	        d      |d }~ww xY w)
Nz$diagnostic isolation spec is invalid)r"   r   r   r   r   r   r   r   )r"   adapter_kindr   r   r   method_versionr   )r   r-   )r   r   r   r   r   r-   r   r   )_validate_spec_fieldsAttributeErrorr}   ro   r   r"   r   r   r   r   r   r   r   r]   _DIAGNOSTIC_TRANSPORT_SCHEMA_DIAGNOSTIC_TRANSPORT_ADAPTER_DIAGNOSTIC_METHOD_VERSIONr   r   r   r9   __setattr__)r5   r   corecore_digestbindingr   r1   s          r6   r   z'DiagnosticIsolationSpecV1.__post_init__  s^   	\!$' #11 --#33+/+K+K+/+K+K"11,0,M,M//	
 dm"> =#'#7#7/3/O/O040Q0Q"<$/

 $/7>
 *#//#//%)%;%;	
	 	4!3[A4!FP4<4!3Y?S 	:6 	\*+QRX[[	\s   E	 	E.E))E.Nr   )r<   r=   r>   r   r   _DIAGNOSTIC_SPEC_SCHEMAr"   r   r   r-   r   r   r   r@   r8   r6   r   r     s    !$$!$$"%%Os1NC1!u-c-/4%/@'@%(K(!u-c-,@r8   r   c                ~   t        |       t        urt        d      t        | j                        t        us| j                  t
        k7  rt        d      dD ]  }t        t        | |      d|         t        | j                  dd       t        | j                        t        us!d| j                  cxk  rd	k  st        d
       t        d
      t        | j                  d      }t        | j                  d      }||k\  rt        d      |t        j                   t"        j$                        k  rt        d      t'        | j(                  d       t'        | j                  d       t'        | j                  d       | j*                  | j,                  f}t/        t1        |            dk7  rt        d      y )Nz'diagnostic isolation spec must be exactz/diagnostic isolation spec schema is unsupported)r   r   r   r   r   zspec zspec supersedes_digestTrk   r      zprovider timeout must be 1..30zspec approved_atzspec expires_atz!spec approval must precede expiryz!spec expiry must be in the futurezspec approved_by   z-diagnostic role destinations must be distinct)rf   r   r}   r"   rg   r   ro   rq   r   r   r   r   r   r   r   r   nowr   utcru   r   r   r   rh   set)specr   r   r   destinationss        r6   r   r   E  s   Dz22ABBD +t/B/BF]/]JKK 	d+uTF^< D**,DRVWD--.c9	T..4"49:: 	59::"4#3#35GHK!$//3DEJj <==X\\(,,//<==$**,>?$**,>?$//+<=((((L 3|"HII #r8   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ddZdd	 	 	 	 	 	 	 ddZy)DiagnosticSessionrg   r   r   r   r   r   
boot_epochr   r   transport_binding_digestr   c                l    	 t        |        y # t        t        t        f$ r}t	        d      |d }~ww xY w)Nzdiagnostic session is invalid)_validate_session_fieldsr   r}   ro   r   )r5   r   s     r6   r   zDiagnosticSession.__post_init__p  s8    	U$T*	:6 	U*+JKQTT	Us    3.3N)r   c                  |xs# t        j                  t        j                        }t	        |      t         us|j
                  |j                         t        d      	 t        | j                  d      }| j                  t        j                  urt        d      || j                  k7  s|| j                   k7  rt        d      ||k\  rt        d      y # t        t        f$ r}t        d      |d }~ww xY w)Nz%diagnostic now must be timezone-awarediagnostic session expiryzinvalid diagnostic expiryz diagnostic session is not activezdiagnostic generation is stalezdiagnostic session expired)r   r   r   r   rf   r~   r   r   r   r   r}   ro   r   r   r   r   r   )r5   r   r   r   expiryr   s         r6   require_activez DiagnosticSession.require_activev  s     /X\\(,,/IX%zz!}}&*+RSS	Q%doo7RSF ::3:::*+MNN(J$//,I*+KLL&=*+GHH  :& 	Q*+FGSP	Qs   !C C8'C33C8r   )r   r   r   rg   r   zdatetime | Noner:   r;   )r<   r=   r>   r   r   r   r@   r8   r6   r   r   f  sk    O!!OO!!OU  $I I 	I
 I 
Ir8   r   c                   t        |       t        urt        d      t        | j                  d       t        | j
                        t        urt        d      t        | j                        t        us| j                  dk  rt        d      t        | j                  d       dD ]  }t        t        | |      d|         t        | j                  d	      }|t        j                   t"        j$                        k  rt        d
      y )Nz diagnostic session must be exactzdiagnostic session idz#diagnostic session state is invalidr   z(diagnostic session generation is invalidzdiagnostic session boot epoch)r   r   r   zdiagnostic session r   z/diagnostic session expiry must be in the future)rf   r   r}   ru   r   r   r   ro   r   r   r   rq   r   r   r   r   r   r   r   )sessionr   r   s      r6   r   r     s    G}--:;;',,.EFGMM"88>??Gs*g.@.@1.DCDD',,.MNO.2EdV0LM Pg002MNFhll++JKK ,r8   )r   slotsc                  |   e Zd ZU dZded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d dZe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!d       Zed"d       Z	ed#d       Z
ed"d       Zd$dZed"d       Zy)%ActivatedDiagnosticDeliveryzDOne immutable, persisted activation admitted to the diagnostic host.rg   r"   r(   r#   r   r   bytesrJ   r*   tuple[str, str]rI   r&   r   r'   r-   r$   r,   r   r   r   r+   r!   c                   t        |       t        urt        d      	 t        | j                        t        us| j                  t
        k7  rt        d      t        D ]4  }t        | |      }t        |d|        |t        k(  s(t        d|        t        | j                        t        us| j                  dk  rt        d      t        | j                        t        us| j                  st        d      t        | j                        t         ust#        | j                        dk7  rt        d	      | j                  D ]  }t%        |d
        t%        | j&                  d       t        | j(                        t        us| j(                  dk  rt        d      t+        | j,                  d      }|t/        j0                  t2        j4                        k  rt        d      	 t;        j<                  | j                        j?                         | j@                  k7  rt        d      tC        | j                        | jD                  k7  rt        d      y # t6        t8        t        f$ r}t        d      |d }~ww xY w)N%diagnostic activation class is sealed'diagnostic activation schema is invaliddiagnostic activation z&diagnostic activation pin is invalid: r   )diagnostic activation revision is invalidz#diagnostic rendered body is invalidr   ,diagnostic activation destination is invalid!diagnostic activation destinationdiagnostic activation session+diagnostic activation generation is invaliddiagnostic activation expiry diagnostic activation is expired diagnostic activation is invalidz(diagnostic rendered body digest mismatchz&diagnostic destination digest mismatch)#rf   r   r   r"   rg   _ACTIVATED_DELIVERY_SCHEMAro   _ACTIVATION_DIGEST_NAMESr   rq   _DIGEST_ZEROr   r   rJ   r   rI   tuplerh   ru   r   r'   r   r!   r   r   r   r   r   r}   rZ   r[   r\   r*   r]   r&   )r5   r   rW   r   r   s        r6   r   z)ActivatedDiagnosticDelivery.__post_init__  s2   :88*+RSS	XT(()4&&*DD !JKK0d+)?v'FGL($'MdV%TUU	 1
 DMM"#-1B !LMMD&&'u4D<N<N !FGGD$$%U2c$:J:J6Kq6P !OPP))%e-PQ *!$//3RSD++,C74;R;RUV;V !NOO%##%CF hll33 !CDD 4 >>$,,-779T=V=VV*+UVV4##$(?(??*+STT @	 	:6 	X*+MNTWW	Xs   A&I E#I J0I<<Jc               Z    | t         urt        d       | |||||||||	|
||||||||      S )zABuild a delivery only from the closed persisted activation shape.r   )r   r   )clsr"   r(   r#   r   rJ   r*   rI   r&   r   r'   r-   r$   r,   r   r   r   r+   r!   s                      r6   from_persistedz*ActivatedDiagnosticDelivery.from_persisted  s\    0 11*+RSS /%#%
 	
r8   c                ,    t        | j                        S r3   )r]   r   r5   s    r6   r%   z+ActivatedDiagnosticDelivery.revision_digest	  s    t}}%%r8   c                   | j                   | j                  t        | j                        | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  dS )NrH   )r(   r#   r]   r   r*   r&   r$   r,   r   r   r   r+   r   s    r6   pinsz ActivatedDiagnosticDelivery.pins  st     $(#;#;#33&t}}5$($=$="&"9"9#33)-)G)G!//!//"11'+'C'C
 	
r8   c                x    dj                  | j                  | j                  t        | j                        f      S )NrM   )joinr(   r#   r]   r   r   s    r6   
dedupe_keyz&ActivatedDiagnosticDelivery.dedupe_key  s0    xx1143G3GQUQ^Q^I_`aar8   c                b   	 | j                   j                  d      }i d| j                  d| j
                  d| j                  d| j                  d| j                  d	|d
| j                  dt        | j                        d| j                  d| j                  d| j                  d| j                  d| j                   d| j"                  d| j$                  d| j&                  d| j(                  | j*                  | j,                  dS # t        $ r}t        d      |d}~ww xY w)z?Return the closed JSON record shape used by the profile loader.rR   z%diagnostic rendered body is not UTF-8Nr"   r(   r#   r   r%   rJ   r*   rI   r&   r   r'   r-   r$   r,   r   r   r   )r+   r!   )rJ   decodeUnicodeDecodeErrorr   r"   r(   r#   r   r%   r*   listrI   r&   r   r'   r-   r$   r,   r   r   r   r+   r!   )r5   bodyr   s      r6   to_persisted_recordz/ActivatedDiagnosticDelivery.to_persisted_record   s   	]%%,,W5D
d11
!4#;#;
 t33
 	

 t33
 T
 #D$=$=
 4 0 01
 !$"9"9
 $//
 !$"9"9
 243[3[
 t33
 ()G)G
 T//
  T//!
" d11#
$ (,'C'C"11'
 	
 " 	]*+RSY\\	]s   D 	D.D))D.c                4    t        | j                               S r3   )r]   r
  r   s    r6   record_digestz)ActivatedDiagnosticDelivery.record_digest<  s    t//122r8   Nr   )&r"   rg   r(   rg   r#   rg   r   r   rJ   r   r*   rg   rI   r   r&   rg   r   rg   r'   r   r-   rg   r$   rg   r,   rg   r   rg   r   rg   r   rg   r+   rg   r!   rg   r:   z'ActivatedDiagnosticDelivery')r:   rg   )r:   Mapping[str, str]r:   dict[str, object])r<   r=   r>   __doc__r   r   classmethodr   propertyr%   r  r  r
  r  r@   r8   r6   r   r     s   NM  O),,""  #UJ ,
 ,
 !	,

 ,
 ,
 ,
 ",
 %,
  ,
 ,
  ,
 .1,
 ,
 $',
  !,
" #,
$ %,
& "%',
( ),
* 
'+,
 ,
\ & &
 
 b b
8 3 3r8   r   c                  n    e Zd ZdZd
dZedd       Zedd       Zdd	 	 	 	 	 ddZddZ	e
dd	       Zy)!DurableDiagnosticActivationLoaderzJRead the one profile-owned activated delivery record under authority lock.c                z    t        |      t        urt        d      || _        |j                  | _        d | _        y )Nz*diagnostic activation authority is invalid)rf   DiagnosticDeliveryAuthorityr   
_authorityactivation_path_path_record_identityr4   s     r6   r7   z*DurableDiagnosticActivationLoader.__init__B  s7    	?"==*+WXX#..
8<r8   c                    | j                   S r3   )r  r   s    r6   r   z&DurableDiagnosticActivationLoader.pathI      zzr8   c                    | j                   S r3   r  r   s    r6   r1   z+DurableDiagnosticActivationLoader.authorityM      r8   N
lock_tokenc               D   t        |      t        usG|rEt        |      t        kD  s3|j	                         r#|| j
                  j                  j                  k7  rt        d      || j
                  j                  |       | j
                  j                  |      5  t        | j                  | j
                  j                        \  }}| j                  || _        n| j                  |k7  rt        d      | j                  |      }d d d        | j
                  j                  }j                  |j                  k7  rt        d      |j                   |j"                  k7  rt        d      |j$                  |j&                  k7  rt        d      |S # 1 sw Y   xY w)N&diagnostic activation session is staleprofile_root)diagnostic activation record was replaced)diagnostic activation generation is stale&diagnostic activation binding is stale)rf   rg   rh   rs   rt   r  r   r   r   _require_host_admission_authority_lock_read_activation_recordr  r%  r  _from_recordr'   r   r-   r   )r5   r   r!  recordidentityr   r   s          r6   load_activated_deliveryz9DurableDiagnosticActivationLoader.load_activated_deliveryQ  sc    C':!;;##%T__44???*+STT!OO33J?__,,Z86

!__99 FH $$,(0%&&(2./Z[[))&1I 9 //))7#5#55*+STT''7+=+==*+VWW88G<\<\\*+STT# 98s   A.FFc                R    t        |      t        urt        d      |j                  S )Nr   )rf   r   r   r  )r5   r   s     r6   r  z/DurableDiagnosticActivationLoader.record_digestt  s'    	?"==*+MNN&&&r8   c                   t        |       t        urt        d      t        |       t        k7  rt        d      | d   }| d   }t        |      t
        us|st        d      t        |      t        ust        |      dk7  rt        d      	 |D ]  }t        |d        |j                  d	      }t        | d
         t
        us| d
   t        k7  rt        d      t        dz   D ]  }t        | |   d|         | d   }t        |      t        us|dk  rt        d      t        | d   d       t        | d         t        us| d   dk  rt        d      t        | d   d      }|t'        j(                  t*        j,                        k  rt        d      | d   t/        |      k7  rt        d      	 t0        j3                  | d
   | d   | d   ||| d   |d   |d   f| d   | d   | d   | d    | d!   | d"   | d#   | d$   | d%   | d&   | d   '      S # t         t"        t$        t        f$ r}t        d      |d }~ww xY w# t         t"        t        t        f$ r"}t5        |t              r t        d      |d }~ww xY w)(Nz)diagnostic activation record is not exactz,diagnostic activation record schema mismatchrJ   rI   z%diagnostic activation body is invalidr   r   r   rR   r"   r   )r%   r   r   r   r   r   r   r'   r   r!   r   z'diagnostic activation record is invalidr   r%   z+diagnostic activation revision pin mismatchr(   r#   r*   r   r&   r-   r$   r,   r   r   r   r+   )r"   r(   r#   r   rJ   r*   rI   r&   r   r'   r-   r$   r,   r   r   r   r+   r!   )rf   dictr   r   _ACTIVATION_RECORD_FIELDSrg   r  rh   ru   rU   r   ro   r   rq   r   r   KeyErrorr}   UnicodeErrorr   r   r   r   r]   r   r   
isinstance)	r-  r	  rI   rW   
body_bytesr   r   r   r   s	            r6   r,  z.DurableDiagnosticActivationLoader._from_recordy  s   <t#*+VWWv;33*+YZZo&]+:S *+RSSD(C,<,A*+YZZ	$%e-PQ %W-JF+,-S8'(,FF !JKK03GGt0Ftf.MN Hj)HH~S(HqL !LMM!&"68WXV012#=./!3 !NOO%'(*HF X\\(,,//*+MNN#$(99*+XYY	_.==%&67$*+@$A &'8 9!(%+,B%C(^[^<#)*>#?!,/#)*>#?4:95 !''8 9*01L*M$_5$_5%&67(./H(I%&67) >   )\:> 	*9	> )Z1IJ 	_#78*+TU[^^	_s2   CH 5AH> H;*H66H;>I9I44I9)r1   'DiagnosticDeliveryAuthority'r:   r;   r:   r
   r:   r8  )r   rg   r!  object | Noner:   r   )r   r   r:   rg   )r-  Mapping[str, object]r:   r   )r<   r=   r>   r  r7   r  r   r1   r/  r  staticmethodr,  r@   r8   r6   r  r  ?  sv    T=     %)	!! "	!
 
%!F'
 C_ C_r8   r  c                L    t        |      r	|t        k(  rt        d|  d      |S )Ndiagnostic live z pin is invalid)rj   r   r   r   rW   s     r6   _validate_live_digestrA    s+    e 5&)9$'OPPLr8   c                V    t        |      t        us|t        vrt        d|  d      |S )Nr?  z state is invalid)rf   rg   _LIVE_SOURCE_STATESr   r@  s     r6   _validate_live_staterD    s1    E{#.A!A&)9$?P'QRRLr8   c                >   t        |       t        urt        d      	 t        j                  | j                  dd            }|j                  &|t        j                  t        j                        k  rt        d      | S # t        $ r}t        d      |d }~ww xY w)Nz!diagnostic live expiry is invalidrx   rz   )rf   rg   r   r   r{   replacero   r~   r   r   r   )rW   r   r   s      r6   _validate_live_expiryrG    s    E{#&'JKKU''c8(DE }}(,,x||*D D&'JKKL	  U&'JKQTTUs   %B 	BBBc                  *    e Zd ZU ded<   ded<   ddZy)DiagnosticOwnerSnapshotrg   r   r   c                    t        |       t        urt        d      t        d| j                         t        d| j                         y )Nz#diagnostic owner snapshot is sealedowner)rf   rI  r   rA  r   rD  r   r   s    r6   r   z%DiagnosticOwnerSnapshot.__post_init__  s9    :44*+PQQgt'8'89Wdjj1r8   Nr   r<   r=   r>   r   r   r@   r8   r6   rI  rI    s    J2r8   rI  c                  H    e Zd ZU ded<   ded<   ded<   ded<   ded<   d	dZy)
DiagnosticRegistrySnapshotrg   r(   r$   r   r)   r   c                    t        |       t        urt        d      dD ]  }t        |t	        | |              t        d| j                         y )Nz&diagnostic registry snapshot is sealed)r(   r$   r   r)   registry)rf   rN  r   rA  r   rD  r   r5   r   s     r6   r   z(DiagnosticRegistrySnapshot.__post_init__  sJ    :77*+STT
D "$d(;<
 	Z4r8   Nr   rL  r@   r8   r6   rN  rN    s$    J
5r8   rN  c                  \    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   d	ed
<   ddZy)#DiagnosticConsentActivationSnapshotrg   r    r,   r   r   r'   r!   r   r   r   c                4   t        |       t        urt        d      t        d| j                         t        d| j
                         t        | j                        t        us$| j                  rt        | j                        dkD  rt        d      t        | j                        t        us| j                  dk  rt        d      t        | j                         t        d| j                         t        | j                        t         urt        d	      y )
Nz%diagnostic consent snapshot is sealedconsentzactivation receiptrG   "diagnostic live session is invalidr   %diagnostic live generation is invalidzconsent/activationz%diagnostic live revocation is invalid)rf   rS  r   rA  r    r,   r   rg   rh   r'   r   rG  r!   rD  r   r   r   r   s    r6   r   z1DiagnosticConsentActivationSnapshot.__post_init__  s    :@@*+RSSi)<)<=2D4R4RS +4??c$//FZ]`F`*+OPP''(3t7N7NQR7R*+RSSd11214::>T)*+RSS *r8   Nr   rL  r@   r8   r6   rS  rS    s/    ""OJMTr8   rS  c                  \    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   dd
Zy)DiagnosticProposalSnapshotrg   r#   r   r   r%   r*   r&   r   r!   c                   t        |       t        urt        d      dD ]  }t        |t	        | |              t        | j
                        t        us| j
                  dk  rt        d      | j                  t        | j
                        k7  rt        d      t        d| j                         t        | j                         y )Nz&diagnostic proposal snapshot is sealed)r#   r%   r*   r&   r   #diagnostic live revision is invalid(diagnostic live revision digest mismatchproposal)rf   rY  r   rA  r   r   r   r%   r]   rD  r   rG  r!   rQ  s     r6   r   z(DiagnosticProposalSnapshot.__post_init__  s    :77*+STT
D "$d(;<
 c)T]]Q->*+PQQ74==#99*+UVVZ4d112r8   Nr   rL  r@   r8   r6   rY  rY    s/    MJ3r8   rY  c                  >    e Zd ZU ded<   ded<   ded<   ded<   ddZy)	DiagnosticConfigSnapshotrg   r   r   r-   r   c                    t        |       t        urt        d      t        d| j                         t        d| j
                         t        d| j                         t        d| j                         y )Nz$diagnostic config snapshot is sealedconfigepochztransport binding)	rf   r_  r   rA  r   r   r-   rD  r   r   s    r6   r   z&DiagnosticConfigSnapshot.__post_init__5  sZ    :55*+QRRh(:(:;gt'8'89143[3[\Xtzz2r8   Nr   rL  r@   r8   r6   r_  r_  .  s    ),,J3r8   r_  c                  >    e Zd ZU ded<   ded<   ded<   ded<   ddZy)	DiagnosticArtifactSnapshotrg   r   r   r+   r   c                    t        |       t        urt        d      t        d| j                         t        d| j
                         t        d| j                         t        d| j                         y )Nz&diagnostic artifact snapshot is sealedpolicycatalogzmeal constraintsartifact)	rf   rd  r   rA  r   r   r+   rD  r   r   s    r6   r   z(DiagnosticArtifactSnapshot.__post_init__E  sZ    :77*+STTh(:(:;i)<)<=0$2N2NOZ4r8   Nr   rL  r@   r8   r6   rd  rd  >  s      J5r8   rd  c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   d dZed!d       Zd"dZy)#LiveDiagnosticAuthoritySnapshotrg   r"   r(   r   r   r'   r   r$   r    r,   r#   r   r%   r*   r&   r   r   r   r+   r   r)   r   r-   r   r!   r   r   c                F   t        |       t        urt        d      | j                  t        k7  rt        d      t
        D ]  }t        |t        | |              t        | j                        t        us$| j                  rt        | j                        dkD  rt        d      t        | j                        t        us| j                  dk  rt        d      t        | j                        t        us| j                  dk  rt        d      | j                  t        | j                        k7  rt        d      | j                   t"        k7  rt        d	      t        | j$                        t&        us| j$                  rt        d
      t)        | j*                         y )Nz,diagnostic live authority snapshot is sealedz+diagnostic live authority schema is invalidrG   rV  r   rW  r[  r\  z*diagnostic live authority is not activatedz$diagnostic live authority is revoked)rf   rj  r   r"   _LIVE_AUTHORITY_SCHEMA_LIVE_PIN_FIELDSrA  r   r   rg   rh   r'   r   r   r%   r]   r   _LIVE_AUTHORITY_STATEr   r   rG  r!   rQ  s     r6   r   z-LiveDiagnosticAuthoritySnapshot.__post_init__i  sG   :<<*+YZZ"88*+XYY$D!$d(;< % +4??c$//FZ]`F`*+OPP''(3t7N7NQR7R*+RSSc)T]]Q->*+PQQ74==#99*+UVV::..*+WXXT)T\\*+QRRd112r8   c                4     t         fdt        D              S )Nc              3  6   K   | ]  }t        |        y wr3   )r   )rb   r   r5   s     r6   rd   z=LiveDiagnosticAuthoritySnapshot.pin_values.<locals>.<genexpr>  s     F5ETWT4(5Es   )r   rm  r   s   `r6   
pin_valuesz*LiveDiagnosticAuthoritySnapshot.pin_values~  s    F5EFFFr8   c                J    t         D ci c]  }|t        | |       c}S c c}w r3   )_LIVE_SNAPSHOT_FIELDSr   rQ  s     r6   to_closed_recordz0LiveDiagnosticAuthoritySnapshot.to_closed_record  s(    6KL6KdgdD))6KLLLs    Nr   )r:   ztuple[str, ...]r  )r<   r=   r>   r   r   r  rq  rt  r@   r8   r6   rj  rj  N  s    O""M  ),,JM3* G GMr8   rj  c                      e Zd ZdZd
dZ	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zedd       Z	 	 	 	 	 	 ddZ		 	 	 	 	 	 ddZ
ddZy	)_DiagnosticLiveSourceLoader)r  _spec	_snapshot_snapshot_typec                h    |dv rt        | |      rt        d      t        j                  | ||       y )N>   rw  rx  r  ry  z diagnostic live loader is sealedhasattrr   r9   r   r5   r   rW   s      r6   r   z'_DiagnosticLiveSourceLoader.__setattr__  s4    IIgVZ\`Na*+MNN4u-r8   c               r   t        |       t        t        t        t        t
        t        fvrt        d      |t        urt        d      |t        |      t        urt        d      t        |      t        urt        d      t        |      |urt        d      || _        || _        || _        || _        y )Nz&diagnostic live loader class is sealedz-diagnostic live loader construction is sealed+diagnostic live loader authority is invalidz&diagnostic live loader spec is invalid*diagnostic live loader snapshot is invalid)rf   DiagnosticOwnerLiveLoaderDiagnosticRegistryLiveLoader%DiagnosticConsentActivationLiveLoaderDiagnosticProposalLiveLoaderDiagnosticConfigLiveLoaderDiagnosticArtifactLiveLoaderr   %_DIAGNOSTIC_LIVE_LOADER_FACTORY_TOKENr  r   r  rw  rx  ry  )r5   r1   r   snapshotsnapshot_typefactory_tokens         r6   r7   z$_DiagnosticLiveSourceLoader.__init__  s     :%(1(&(
 
 ++STT EE*+Z[[ T)_<W%W*+XYY:66*+STT>.*+WXX#
!+r8   c                    | j                   S r3   r  r   s    r6   r1   z%_DiagnosticLiveSourceLoader.authority  r  r8   c                    | j                   S r3   rw  r   s    r6   r   z _DiagnosticLiveSourceLoader.spec  r  r8   c                   |t         urt        d      t        |      t        urt        d      | j                  | j                  |urt        d      t
        j                  | d|       y )Nz(diagnostic live loader binding is sealedr  z(diagnostic live loader authority changedr  )r  r   rf   r  r  r9   r   )r5   r1   r  s      r6   _bind_authorityz+_DiagnosticLiveSourceLoader._bind_authority  se      EE*+UVV	?"==*+XYY??&4??)+K*+UVV4y9r8   c                   | j                   t        d      | j                   j                  |       t        |      t        urt        d      | j
                  S )Nz!diagnostic live loader is unbound%diagnostic live activation is invalid)r  r   r)  rf   r   rx  r5   r   r!  s      r6   load_snapshotz)_DiagnosticLiveSourceLoader.load_snapshot  sO     ??"*+NOO//
;	?"==*+RSS~~r8   c                   |t         urt        d      t        |      | j                  urt        d      t        j                  | d|       y )Nz)diagnostic live loader mutation is sealedr  rx  )r  r   rf   ry  r9   r   )r5   r  r  s      r6   replace_snapshotz,_DiagnosticLiveSourceLoader.replace_snapshot  sG     EE*+VWW>!4!44*+WXX4h7r8   Nr   rg   rW   r9   r:   r;   )r1   $'DiagnosticDeliveryAuthority | None'r   r   r  r9   r  ztype[object]r  r9   r:   r;   r:  r:   r   r1   r8  r  r9   r:   r;   )r   r   r!  r9   r:   r9   )r  r9   r  r9   r:   r;   )r<   r=   r>   r?   r   r7   r  r1   r   r  r  r  r@   r8   r6   rv  rv    s    FI.
,7, (, 	,
 $, , 
,>    :0: 	:
 
:. 	
 
8r8   rv  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y Nr  )superr7   rI  r5   r1   r   r  r  	__class__s        r6   r7   z"DiagnosticOwnerLiveLoader.__init__  s&     	#' 	 	
r8   )
r1   r8  r   r   r  rI  r  r9   r:   r;   r<   r=   r>   r?   r7   __classcell__r  s   @r6   r  r    sB    I
0
 (
 *	
 
 

 
r8   r  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y r  )r  r7   rN  r  s        r6   r7   z%DiagnosticRegistryLiveLoader.__init__  &     	&' 	 	
r8   )
r1   r8  r   r   r  rN  r  r9   r:   r;   r  r  s   @r6   r  r    B    I
0
 (
 -	
 
 

 
r8   r  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y r  )r  r7   rS  r  s        r6   r7   z.DiagnosticConsentActivationLiveLoader.__init__  s&     	/' 	 	
r8   )
r1   r8  r   r   r  rS  r  r9   r:   r;   r  r  s   @r6   r  r    sB    I
0
 (
 6	
 
 

 
r8   r  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y r  )r  r7   rY  r  s        r6   r7   z%DiagnosticProposalLiveLoader.__init__  r  r8   )
r1   r8  r   r   r  rY  r  r9   r:   r;   r  r  s   @r6   r  r    r  r8   r  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y r  )r  r7   r_  r  s        r6   r7   z#DiagnosticConfigLiveLoader.__init__,  s&     	$' 	 	
r8   )
r1   r8  r   r   r  r_  r  r9   r:   r;   r  r  s   @r6   r  r  )  sB    I
0
 (
 +	
 
 

 
r8   r  c                  8     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 d fdZ xZS )r  r@   c               6    t         |   |||t        |       y r  )r  r7   rd  r  s        r6   r7   z%DiagnosticArtifactLiveLoader.__init__@  r  r8   )
r1   r8  r   r   r  rd  r  r9   r:   r;   r  r  s   @r6   r  r  =  r  r8   r  c                      e Zd ZdZddZ	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Ze	dd       Z
	 	 	 	 	 	 ddZe	dd	       Ze	dd
       Zy)DiagnosticLiveAuthoritySources)	r  rw  owner_loaderregistry_loaderconsent_activation_loaderproposal_loaderconfig_loaderartifact_loader_record_pathc                h    |dv rt        | |      rt        d      t        j                  | ||       y )N>	   rw  r  r  r  r  r  r  r  r  z diagnostic live source is sealedr{  r}  s      r6   r   z*DiagnosticLiveAuthoritySources.__setattr__]  s9     

 

 dD!*+MNN4u-r8   Nc
                  t        |       t        urt        d      |
t        urt        d      t              t        urt        d      t              t
        urt        d      |t        f|t        f|t        f|t        f|t        f|t        ff}t        d |D              rt        d      t        fd|D              rt        d      t        fd	|D              rt        d
      |	9t        |	      t        t                     urt        d      |	j                         }	| _        | _        || _        || _        || _        || _        || _        || _        |	| _        y )Nz&diagnostic live source class is sealedz-diagnostic live source construction is sealed+diagnostic live source authority is invalidz&diagnostic live source spec is invalidc              3  <   K   | ]  \  }}t        |      |u  y wr3   )rf   )rb   loaderloader_types      r6   rd   z:DiagnosticLiveAuthoritySources.__init__.<locals>.<genexpr>  s     S(3F6;tF|;.(s   z(diagnostic live source loader is invalidc              3  @   K   | ]  \  }}|j                   u  y wr3   )r   )rb   r  _r   s      r6   rd   z:DiagnosticLiveAuthoritySources.__init__.<locals>.<genexpr>  s     A961v{{$&s   z#diagnostic live source spec changedc              3  `   K   | ]%  \  }}|j                   d uxr |j                   u ' y wr3   r0   )rb   r  r  r1   s      r6   rd   z:DiagnosticLiveAuthoritySources.__init__.<locals>.<genexpr>  s;      
%	 D(NV-=-=Y-NN%s   +.&diagnostic live source binding changedz&diagnostic live record path is invalid)rf   r  r   *_DIAGNOSTIC_LIVE_SOURCES_CONSTRUCTOR_TOKENr  r   r  r  r  r  r  r  anyr
   absoluter  rw  r  r  r  r  r  r  r  )r5   r1   r   r  r  r  r  r  r  record_pathr  expecteds    ``         r6   r7   z'DiagnosticLiveAuthoritySources.__init__l  sy    :;;*+STT JJ*+Z[[ T)_<W%W*+XYY:66*+STT45:;&(MN:;67:;
 S(SS*+UVVAAA*+PQQ 
%
 
 ++STT"K TV4./WXX%..0K#
(.)B&.*.'r8   c       	        z    | t         urt        d      |	t        urt        d       | ||||||||t        d 
      S )N(diagnostic live source factory is sealed)r  r  )r  r   r  r  )
r   r1   r   r  r  r  r  r  r  r  s
             r6   from_verified_loadersz4DiagnosticLiveAuthoritySources.from_verified_loaders  sY     44*+UVV EE*+UVV%D
 	
r8   c                  | t         urt        d      |t        urt        d      t        |      t        t	                     urt        d      |j                         dz  dz  dz  }t        ||      \  }}t        |      t        t              k7  rt        d      t        di |}t        d |t        |j                  d      |	      t        d |t        |j                  |j                   |j"                  |j$                  d
      |	      t'        d |t)        |j*                  |j,                  |j.                  |j0                  |j2                  d|j4                        |	      t7        d |t9        |j:                  |j<                  |j>                  |j@                  |jB                  d|j2                        |	      tE        d |tG        |jH                  |jJ                  |jL                  d      |	      tO        d |tQ        |jR                  |jT                  |jV                  d      |	      f} | d |g||tX        dS )Nr  'diagnostic live profile root is invaliddatazdiagnostic-isolationzlive-authority.jsonr$  +diagnostic live authority record is invalidr   r  r   r   r   )r  r  r@   )-r  r   r  rf   r
   r  r+  r   rs  rj  r  rI  r   r  rN  r(   r$   r   r)   r  rS  r    r,   r   r'   r!   r   r  rY  r#   r   r%   r*   r&   r  r_  r   r   r-   r  rd  r   r   r+   r  )	r   r%  r   r  r  r-  r  r  loaderss	            r6   from_profile_recordz2DiagnosticLiveAuthoritySources.from_profile_record  sq    44*+UVV EE*+UVVT$&\1*+TUU!!#$% $$ 	 ,%
	 v;#344*+XYY2<V<%d'(=(=xH+
 )d*00,,**00 ,
 2d3++66''//++$$ , )d*,,%%,,11//++ , 'd(**))@@	 ,	 )d***++44	 ,	k?
@ 
 
 $D
 	
r8   c                    | j                   S r3   )r  r   s    r6   r  z*DiagnosticLiveAuthoritySources.record_path"         r8   c                  |t         urt        d      t        |      t        urt        d      | j                  | j                  |urt        d      | j
                  | j                  | j                  | j                  | j                  | j                  fD ]  }|j                  ||        t        j                  | d|       y )Nz(diagnostic live source binding is sealedr  z(diagnostic live source authority changedr  r  )r  r   rf   r  r  r  r  r  r  r  r  r  r9   r   )r5   r1   r  r  s       r6   r  z.DiagnosticLiveAuthoritySources._bind_authority&  s      EE*+UVV	?"==*+XYY??&4??)+K*+UVV  **    
F ""9M"J
 	4y9r8   c                    | j                   S r3   r  r   s    r6   r1   z(DiagnosticLiveAuthoritySources.authority=  r  r8   c                    | j                   S r3   r  r   s    r6   r   z#DiagnosticLiveAuthoritySources.specA  r  r8   r  r3   )r1   r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  Path | Noner  r9   r:   r;   )r1   r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r9   r:    'DiagnosticLiveAuthoritySources')r%  r
   r   r   r  r9   r:   r  )r:   r  r  r:  r  )r<   r=   r>   r?   r   r7   r  r  r  r  r  r  r1   r   r@   r8   r6   r  r  Q  s   
I.2 $(3(73( (3( 0	3(
 63( $I3( 63( 23( 63( !3( 3( 
3(j 
 8
 (	

 0
 6
 $I
 6
 2
 6
 
 
*
 
: `
 `
 (	`

 `
 
*`
 `
D ! !:0: 	:
 
:.    r8   r  c                      e Zd ZdZddZ	 	 	 	 	 	 	 	 	 	 	 	 ddZe	 	 	 	 	 	 	 	 	 	 	 	 dd       Zedd       Z	edd       Z
edd       Zedd       Z	 	 	 	 	 	 dd	Z	 	 	 	 	 	 dd
Zy)DiagnosticLiveAuthorityLoader)_profile_rootrw  r  _sourcesc                h    |dv rt        | |      rt        d      t        j                  | ||       y )N>   rw  r  r  r  z*diagnostic live authority loader is sealedr{  r}  s      r6   r   z)DiagnosticLiveAuthorityLoader.__setattr__H  s4    GGGTXZ^L_*+WXX4u-r8   c               j   t        |       t        urt        d      |t        urt        d      t        |      t        t	                     urt        d      t        |      t
        urt        d      t        |      t        urt        d      t        |      t        urt        d      |j                  |us|j                  |urt        d      |j                  j                         |j                         k7  rt        d      |j                         | _        || _        || _        || _        y )	Nz0diagnostic live authority loader class is sealedz7diagnostic live authority loader construction is sealedr  zdiagnostic live spec is invalidz$diagnostic live authority is invalidz#diagnostic live sources are invalidr  z$diagnostic live profile root changed)rf   r  r   r  r
   r   r  r  r1   r   r%  r  r  rw  r  r  )r5   r%  r   r1   sourcesr  s         r6   r7   z&DiagnosticLiveAuthorityLoader.__init__M  s    :::*+]^^ EE*+deeT$&\1*+TUU:66*+LMM	?"==*+QRR= >>*+PQQI-T1I*+STT!!**,0E0E0GG*+QRR)224
#r8   c               B    | t         urt        d       | |||||      S )Nz(diagnostic live loader factory is sealedr  )r  r   )r   r%  verified_specr1   r  r  s         r6   for_authorityz+DiagnosticLiveAuthorityLoader.for_authorityk  s5     33*+UVV'
 	
r8   c                    | j                   S r3   r  r   s    r6   r1   z'DiagnosticLiveAuthorityLoader.authority  r  r8   c                    | j                   S r3   )r  r   s    r6   r  z%DiagnosticLiveAuthorityLoader.sources      }}r8   c                    | j                   S r3   r  r   s    r6   r   z"DiagnosticLiveAuthorityLoader.spec  r  r8   c                    | j                   S r3   r  r   s    r6   r%  z*DiagnosticLiveAuthorityLoader.profile_root      !!!r8   c                  | j                   j                  |       t        |      t        urt	        d      | j
                  j                  }|Kt        || j                        \  }}t        |      t        t              k7  rt	        d      t        di |S | j
                  j                  j                  ||      }| j
                  j                  j                  ||      }| j
                  j                  j                  ||      }| j
                  j                   j                  ||      }	| j
                  j"                  j                  ||      }
| j
                  j$                  j                  ||      }t        |      t&        usUt        |      t(        usDt        |      t*        us3t        |	      t,        us"t        |
      t.        ust        |      t0        urt	        d      |j2                  dk7  sd|j2                  dk7  sU|j2                  dk7  sF|	j2                  d	k7  s7|
j2                  dk7  s(|j2                  d	k7  s|	j4                  |j4                  k7  rt	        d
      t        t6        |j8                  |j:                  |j<                  |j>                  |j@                  |jB                  |jD                  |	jF                  |	jH                  |	jJ                  |	jL                  |	jN                  |
jP                  |jR                  |jT                  |jV                  |jX                  |jZ                  |
j\                  |
j^                  t`        |j4                  |jb                        S )Nr  r$  r  r   z*diagnostic live source snapshot is invalidr   r   r   r   z%diagnostic live source state is staler@   )2r  r)  rf   r   r   r  r  r+  r  r   rs  rj  r  r  r  r  r  r  r  rI  rN  rS  rY  r_  rd  r   r!   rl  r(   r   r'   r   r$   r    r,   r#   r   r%   r*   r&   r   r   r   r+   r   r)   r   r-   rn  r   )r5   r   r!  r  r-  r  rK  rP  rU  r]  ra  	artifactss               r6   load_live_diagnostic_authorityz<DiagnosticLiveAuthorityLoader.load_live_diagnostic_authority  s    	//
;	?"==*+RSSmm//"/!//IFA 6{c"788./\]]2<V<<**88z8Z==00>>yU_>`--99GG! H 
 ==00>>yU_>`,,::9Q[:\MM11??	V`?a	K66H~%??G}$GGH~%??F|#;;I&@@*+WXXKK8#~~*}}+~~+||x'*,&&'*@*@@*+RSS."((&&$$""--$$$$))''  ##$$--""((66!""OO1
 	
r8   c               (    | j                  ||      S )Nr   )r  r  s      r6   r  z+DiagnosticLiveAuthorityLoader.load_snapshot  s     2292TTr8   Nr  )r%  r
   r   r   r1   r8  r  r  r  r9   r:   r;   )r%  r
   r  r   r1   r8  r  r  r  r9   r:   z'DiagnosticLiveAuthorityLoader'r:  r:   r  r  r9  )r   r   r!  r9   r:   rj  )r<   r=   r>   r?   r   r7   r  r  r  r1   r  r   r%  r  r  r@   r8   r6   r  r  F  s2   DI.
   (  1	 
 0    
 < 

 1
 1	

 0
 
 
)
 
&      " "G
.G
 	G

 
)G
RU.U 	U
 
)Ur8   r  c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<    edd      Zded<    edddd      Zded<    edddd      Zded<   ddZe	dd	 	 	 	 	 	 	 dd       Z
y)DiagnosticDeliveryCandidaterg   r  session_digestr   r   r   r7  body_digestr&   r   r  r  )rn   rn   T)defaultkw_onlyr   rI   NFr  r  reprcomparez"ActivatedDiagnosticDelivery | Noner   r;  _factory_tokenc                   t        |       t        urt        d      | j                  t        urt        d      t        | j
                        t        urt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      t        | j                         t        | j
                  j                         k7  rt        d	      y )
N$diagnostic candidate class is sealed&diagnostic candidate factory is sealed*diagnostic candidate activation is invalid+diagnostic candidate destination is invalid$diagnostic candidate body is invalid+diagnostic candidate body digest is invalid2diagnostic candidate destination digest is invalid'diagnostic candidate binding is invalid%diagnostic candidate pins are invalid)rf   r  r   r  #_DIAGNOSTIC_CANDIDATE_FACTORY_TOKENr   r   rI   r7  rJ   r  r*   r&   r   r-   r2  r  r   s    r6   r   z)DiagnosticDeliveryCandidate.__post_init__  s6   :88*+QRR&II*+STT'BB*+WXXt~~999*+XYY??dnn:::*+QRRt~~BBB*+XYY""dnn&G&GG*+_``((DNN,^,^^*+TUU		?d4>>#6#677*+RSS 8r8   )r  c               ~   | t         urt        d      |t        urt        d      t        |      t        urt        d       | |j
                  ||nt        d|j                  i      |j                  |j                  |j                  |j                  |j                  |j                  |j                  ||      S )Nr  r  r   r   )rI   r   r  )r  r   r  rf   r   r  r]   r   r'   rJ   r*   r&   r-   r  rI   )r   r   r  r  s       r6   from_activatedz*DiagnosticDeliveryCandidate.from_activated  s     11*+QRR CC*+STT	?"==*+MNN  ) ,	(<(<=>((##**((99NN!--(
 	
r8   r   )r   r   r  r9   r  
str | Noner:   z'DiagnosticDeliveryCandidate')r<   r=   r>   r   r   rI   r   r  r   r  r  r@   r8   r6   r  r    s    OO!!
#(4#HKH49d5I1  %*d%NM T(  &*
.
 	

 #
 
'
 
r8   r  c                  \    e Zd ZU ded<   ded<   ded<   dZded<    ed	dd
d
      Zded<   y	)VerifiedDiagnosticReservationrg   reservation_idr  	candidatereservation_digestTr   provider_authorityNFr  r;  _authority_token)r<   r=   r>   r   r  r   r  r@   r8   r6   r  r  $  s:    **##&+d'm r8   r  c                  F    e Zd ZU dZded<   eZded<   dZded<   dZded<   y	)
DiagnosticUnknownNoSenddelivery_unknownrg   statusr   Fr   reconciliation_availabler  N)	r<   r=   r>   r  r   UNKNOWN_TEXTr   r  r  r@   r8   r6   r  r  /  s,    $FC$D#%*d*$$r8   r  c                  F    e Zd ZU dZded<   eZded<   dZded<   dZded	<   y
)DiagnosticAuditPendingNoSendaudit_pendingrg   r  r   Tr   r  Fr  N)	r<   r=   r>   r  r   AUDIT_PENDING_TEXTr   r  r  r@   r8   r6   r  r  7  s,    !FC!"D#"%)d)$$r8   r  c                  F    e Zd ZU dZded<   eZded<   dZded<   dZded<   y	)
DiagnosticDuplicateNoSend	duplicaterg   r  r   Fr   r  r  N)	r<   r=   r>   r  r   DUPLICATE_TEXTr   r  r  r@   r8   r6   r  r  ?  s,    FCD#%*d*$$r8   r  >   r  reasonr  sequencer   r  r   
row_digestr   r  prev_digestreceipt_digestr  r"   r  r   r&   r
  profile_root_digestr   session_bound>   sent_auditedr  r  provider_receiptdelivery_attempt_started>   r"  r  r  c                b    | j                         D ci c]  \  }}|dk7  s|| c}}S c c}}w )Nr  )items)rowkeyrW   s      r6   _row_without_digestr)  t  s/    ),L:3|8KCJLLLs   ++c                    t        || j                  | j                  | j                  | j                  | j
                  | j                  t        | j                        d      S )N)r  r  r  r&   r  r   r   r  )	r]   r  r  r&   r  r   r   r2  r  )r	  r  s     r6   _reservation_digestr+  x  sY    ,#..$00"+">">'66#..(1(J(J(		
 r8   c                   	 | j                         r| j                         s| j                         st        d      | j	                         j
                  t        j                         k7  s | j	                         j                  dz  dk7  rt        d      y | j                  ddd       y # t        $ r t        |        Y y t        $ r}t        d      |d }~ww xY w)	Nz2diagnostic profile root is not a private directory  i  z&diagnostic profile root is not privateTF)modeparentsexist_okz&diagnostic profile root is unavailable)exists
is_symlinkis_dirr   statst_uidosgeteuidst_modemkdirFileExistsError_ensure_private_directoryOSError)r   r   s     r6   r;  r;    s    Z;;= ./cddyy{!!RZZ\1diik6I6IE6QV[5[./WXX

te
< (!$' Z&'OPVYYZs$   BB- B- -CCCCc                  	 t        j                  |       }|j                         }t         j
                  j                  |      rt|j                  |j                  k7  s[|j                  |j                  k7  sB|j                  t        j                         k7  s!|j                  dk7  s|j                  dz  |k7  rt	        d      |j                  |j                  fS # t        $ r}t	        d      |d }~ww xY w)Nz'diagnostic journal inode is unavailabler   r-  z'diagnostic journal inode is not private)r6  fstatlstatr<  r   r   isfilest_devst_inor5  r7  st_nlinkr8  )fdr   r.  openedcurrentr   s         r6   _verify_private_fdrG    s    ["**, GGNN4 ==GNN*==GNN*==BJJL(??aNNU"t+&'PQQ==&--''  [&'PQWZZ[s   %C 	C7&C22C7c                   t         j                  t        t         dd      z  t        t         dd      z  }	 t        j                  | |      }	 t        j                  |       	 t        j                  |       y # t        $ r}t        d      |d }~ww xY w# t        $ r}t        d      |d }~ww xY w# t        j                  |       w xY w)NO_DIRECTORYr   	O_CLOEXECz+diagnostic journal directory is unavailablez+diagnostic journal directory is not durable)r6  O_RDONLYr   openr<  r   fsyncclose)r   flagsrD  r   s       r6   _fsync_directoryrP    s    KK'"mQ77'"kST:UUE_WWT5!
 	  _&'TU[^^_  _&'TU[^^_ 	s;   A9 B 9	BBB	B0B++B00B3 3C
c              #     K   t         j                  t         j                  z  t        t         dd      z  t        t         dd      z  }	 t        j                  | |d      }	 t        || d      }t        j                  |t        j                         |t        || d      k7  rt        d      d  	 t        j                  |t        j                         t        j                  |       y # t
        $ r}t        d      |d }~ww xY w# t        j                  |       w xY w# 	 t        j                  |t        j                         t        j                  |       w # t        j                  |       w xY wxY ww)N
O_NOFOLLOWr   rJ    z&diagnostic journal lock is unavailabler.  z$diagnostic journal lock was replaced)r6  O_RDWRO_CREATr   rL  r<  r   rG  fcntlflockLOCK_EXLOCK_UNrN  )r   rO  rD  r   r.  s        r6   _exclusive_lockr[    s    II

"WRq%AAGBP[]^D__EZWWT5%(
%b$U;B&)"d??*+QRR	KKEMM*HHRL  Z&'OPVYYZ HHRL	KKEMM*HHRLBHHRLsg   AE>	C. !AD% 4$D E>.	D7DDE>D""E>%E;'$E!E;!E88E;;E>c                   t         j                  t        t         dd      z  t        t         dd      z  }	 t        j                  | |      }	 t        || d      }g }	 t        j                  |d      }|sn|j                  |       +|t        || d      k7  rt        d      	 t        j                  |       d
j                  |      }|sg S |j                  d      st        d      g }|j                         D ]`  }	|	st        d      	 t        j                  |	j!                  d            }
t'        |
t(              st        d      |j                  |
       b |S # t        $ r g cY S t
        $ r}t        d      |d }~ww xY w# t
        $ r}t        d	      |d }~ww xY w# t        j                  |       w xY w# t"        t        j$                  f$ r}t        d      |d }~ww xY w)NrR  r   rJ  z#diagnostic journal cannot be openedrS  rT     diagnostic journal was replacedz!diagnostic journal cannot be readr8      
z'diagnostic journal has a torn final rowz'diagnostic journal contains a blank rowrR   z(diagnostic journal contains invalid JSONz'diagnostic journal row is not an object)r6  rK  r   rL  FileNotFoundErrorr<  r   rG  readappendrN  r  r|   
splitlinesrS   loadsr  r  JSONDecodeErrorr6  r2  )r   rO  rD  r   r.  chunkschunkrawrowslinerW   s              r6   _read_journalrk    s   KK'"lA66[RS9TTEWWWT5!
%b$U; GGB,EMM% 	 
 )"d??*+LMM @
 	
((6
C	<<&'PQQ$&D *+TUU	`JJt{{734E %&*+TUUE ! KE  	 W&'LMSVVW  U&'JKQTTU 	 #D$8$89 	`*+UV\__	`sZ   E# AF $G#F	0F	8FF		F&F!!F&&F) )G G-G((G-c                :   | j                         }|j                         st        d      t        j                  t        t        dd      z  t        t        dd      z  t        t        dd      z  }g }	 t        j                  d|      }|j                  |       |j                  dd  D ]+  }t        j                  |||      }|j                  |       - |S # t        $ r6}t        |      D ]  }t        j                  |        t        d	      |d }~ww xY w)
Nz$diagnostic root path is not absoluterI  r   rR  rJ  /r   dir_fdz)diagnostic root ancestor cannot be opened)r  is_absoluter   r6  rK  r   rL  rb  partsr<  reversedrN  )r   r  rO  descriptorsrF  	componentr   
descriptors           r6   _open_absolute_directory_chainrv    s   }}H!&'MNN

"mQ
'	(
"lA
&	' "k1
%	& 
  K''#u%7#!+Iggiw?Gw' ,  ";/JHHZ  0&7
	s   5A%C 	D$1DDc              #    K   | j                         }|j                         }	 |j                  |      }t	        d |j
                  D              rt        d      t        j                  t        t        dd      z  t        t        dd      z  t        t        dd      z  }g }	 |j                  t        |             |d   }|j
                  D ]  }	t        j                  |      }
t        j                  |
j                        r0|
j                  t        j                          k7  s|
j                  d	z  rt        d
      t        j"                  |	||      }|j%                  |        t        j                  |      }
t        j                  |
j                        r0|
j                  t        j                          k7  s|
j                  d	z  rt        d
      | 	 t)        |      D ]  }t        j*                  |        y # t        $ r}t        d      |d }~ww xY w# t        $ r  t&        $ r}t        d      |d }~ww xY w# t)        |      D ]  }t        j*                  |        w xY ww)Nz-diagnostic directory escapes the profile rootc              3  $   K   | ]  }|d v  
 yw>   ..rn   .Nr@   rb   parts     r6   rd   z*_open_profile_directory.<locals>.<genexpr>  s     
>~t4?"~re   z$diagnostic directory path is invalidrI  r   rR  rJ  ry      z'diagnostic directory ancestor is unsafern  z%diagnostic directory cannot be opened)r  relative_toro   r   r  rq  r6  rK  r   extendrv  r>  r4  S_ISDIRr8  r5  r7  rL  rb  r<  rr  rN  )r%  	directoryroottargetrelativer   rO  rs  rF  rt  inforu  s               r6   _open_profile_directoryr  
  s    
   "D!F%%d+
 
>x~~
>>&'MNN

"mQ
'	(
"lA
&	' "k1
%	& 
  K!9$?@b/!I88G$DLL.;;"**,.<<%'.=  ggiw?Gw' ( xx T\\*{{bjjl*||e#*+TUU #;/JHHZ  0W  &;
	H $  &3
	
 #;/JHHZ  0sY   !I4H A/I4%D;H$ !&I4	H!HH!!I4$I6III
 
'I11I4c              #  	  K   | j                         }|j                         }	 |j                  |      }|j                  rt        d |j                  D              rt        d      t        j                  t        t        dd      z  t        t        dd      z  t        t        dd      z  }g }	 |j                  t        |             |d   }|j                  d d D ]  }	t        j                  |      }
t        j                  |
j                        r0|
j                  t        j                          k7  s|
j                  d	z  rt        d
      t        j"                  |	||      }|j%                  |        t        j                  |      }t        j                  |j                        r0|j                  t        j                          k7  s|j                  d	z  rt        d
      t        j                  t        t        dd      z  t        t        dd      z  }t        j"                  |j                  d   ||      }|j%                  |       t        j                  |      }t        j                  |j                  d   |d      }t        j&                  |j                        rt|j(                  |j(                  k7  s[|j*                  |j*                  k7  sB|j                  t        j                          k7  s!|j,                  dk7  s|j                  dz  dk7  rt        d      ||j(                  |j*                  ff t        j                  |      }t        j                  |j                  d   |d      }|j(                  |j*                  f|j(                  |j*                  fk7  s1|j(                  |j*                  f|j(                  |j*                  fk7  rt        d      	 t1        |      D ]  }t        j2                  |        y # t        $ r}t        d      |d }~ww xY w# t        $ r  t.        $ r}t        d      |d }~ww xY w# t1        |      D ]  }t        j2                  |        w xY ww)Nz*diagnostic record escapes the profile rootc              3  $   K   | ]  }|d v  
 ywry  r@   r|  s     r6   rd   z-_open_profile_private_file.<locals>.<genexpr>N  s      T^T!8^re   z!diagnostic record path is invalidrI  r   rR  rJ  ry   r~  z$diagnostic record ancestor is unsafern  Fro  follow_symlinksr   r-  rS  z&diagnostic record inode is not privatezdiagnostic record was replacedz"diagnostic record cannot be opened)r  r  ro   r   rq  r  r6  rK  r   r  rv  r>  r4  r  r8  r5  r7  rL  rb  S_ISREGrA  rB  rC  r<  rr  rN  )r%  r   r  r  r  r   directory_flagsrs  rF  rt  r  parent_info
file_flagsru  rE  current_entryfinals                    r6   _open_profile_private_filer  A  s    
   "D]]_F%%d+
 >>S TX^^ TT&'JKK

"mQ
'	(
"lA
&	' "k1
%	&   K?!9$?@b/!,I88G$DLL.;;"**,.<<%'.:  ggiIGw' - hhw'[001!!RZZ\1""U**+QRRKKb,*+b+q)* 	
 WWX^^B/GL
:&*%NN2!
 V^^,}} 4 44}} 4 44}}

,!#~~%.*+STT6==&--888$NN2!
 \\5<<(V]]FMM,JJ$$m&:&:;v}}-. ++KLL. #;/JHHZ  0W  &8
	L $  V&'KLRUUV #;/JHHZ  0sY   !RP A;R1L?P4 1&R	P1 P,,P11R4QQQQ 'RRr$  c                  g }|Ft        ||       5 \  }}	 t        j                  |d      }|sn|j                  |       +	 d d d        nt        j                  t        t        dd      z  t        t        dd      z  }	 t        j                  | |      }	 t        || d      }	 t        j                  |d      }|sn|j                  |       +|t        || d      k7  rt        d	      	 t        j                  |       	 t        j                  dj                  |      j                  d            }t%        |t&              st        d      |fS # 1 sw Y   \xY w# t        $ r}t        d      |d }~wt        $ r}t        d      |d }~ww xY w# t        $ r}t        d
      |d }~ww xY w# t        j                  |       w xY w# t         t        j"                  f$ r}t        d      |d }~ww xY w)Nr]  rR  r   rJ  z+diagnostic activation record is unavailablez-diagnostic activation record cannot be openedrS  rT  r&  z+diagnostic activation record cannot be readr8   rR   z,diagnostic activation record is invalid JSONz-diagnostic activation record is not an object)r  r6  ra  rb  rK  r   rL  r`  r   r<  rG  rN  rS   rd  r  r  r  re  r6  r2  )	r   r%  rf  rD  r.  rg  rO  r   rW   s	            r6   r+  r+    s   
 F'd;~HK0e$	  	 <; KKb,*+b+q)* 	
		u%B	)"d?HK0e$	 
 -b$UCC.?  D HHRL`

388F+227;< eT"&'VWW(?[ <; ! 	*=  	*?	  	*=	
 HHRL  4 45 `&'UV\__`sl   0E E" AF 3G E"	F+E77FFF	F1 F,,F11F4 4GG8'G33G8c                   t        |      dz   }t        j                  t        j                  z  t        j                  z  t        t        dd      z  t        t        dd      z  }	 t        j                  | |d      }	 t        || d      }d}|t        |      k  r+|t        j                  |||d        z  }|t        |      k  r+t        j                  |       |t        || d      k7  rt        d      t        | j                         	 t        j                  |       y # t        $ r}t        d      |d }~ww xY w# t        $ r}t        d	      |d }~ww xY w# t        j                  |       w xY w)
Nr_  rR  r   rJ  rS  z.diagnostic journal cannot be opened for appendrT  r^  z(diagnostic journal append is not durable)rX   r6  O_WRONLYO_APPENDrV  r   rL  r<  r   rG  rh   writerM  rP  parentrN  )r   r'  encodedrO  rD  r   r.  offsets           r6   _append_journal_rowr    sF   o%GKK"++%

2WRq5QQT[\^`kmnTooEbWWT5%(%b$U;s7|#bhhr767#344F s7|#
)"d??*+LMM% 	  b&'WX^aab  \&'QRX[[\ 	sD   &D$ >AE AE $	D>-D99D>	E
EEE E5c                  t         }t               }i }t        | d      D ]  \  }}t        |      t        k7  rt	        d      |j                  d      t        k7  rt	        d      t        |j                  d            t        us|d   |k7  rt	        d      |j                  d      |k7  st        |j                  d            st	        d	      t        |j                  d
            rt        t        |            |d
   k7  rt	        d      |j                  d      |k7  rt	        d      t        |j                  d      t              r|d   rt        |d         dkD  rt	        d      t        |j                  d      t              r|d   rt        |d         dkD  rt	        d      t        |j                  d            t        us|d   dk  rt	        d      dD ]'  }t        |j                  |            rt	        d       |j                  d      }|t        k(  r2t!        |       |d   |v rt	        d      |j#                  |d          n|t$        v rt'        |       |d   |vrt	        d      |d   }	t        |	t              sJ |j)                  |	g       }
|
s"|dk7  rt	        d      |
j+                  |       n)t-        |
|       |
j+                  |       nt	        d      |d
   } |S )Nr   )startz"diagnostic journal schema mismatchr"   z*diagnostic journal schema version mismatchr  z-diagnostic journal sequence is not contiguousr  z2diagnostic journal hash chain predecessor mismatchr  z&diagnostic journal row digest mismatchr   z+diagnostic journal profile binding mismatchr   rG   z-diagnostic journal session binding is invalidr   z*diagnostic journal boot binding is invalidr   z(diagnostic journal generation is invalid)r  r   r   z.diagnostic journal authority digest is invalidr  z,diagnostic journal repeats a session bindingz0diagnostic delivery precedes its session bindingr  r$  z,diagnostic delivery chain has no reservationz#diagnostic journal state is invalid)r   r   	enumerate_JOURNAL_FIELDSr   getDIAGNOSTIC_JOURNAL_SCHEMArf   r   rj   r]   r)  r6  rg   rh   _SESSION_STATUS_validate_session_rowadd_DELIVERY_STATUSES_validate_delivery_row
setdefaultrb  _validate_transition)ri  r   previoussession_idsstatesexpected_sequencer'  r(  r  r  chains              r6   _validate_journalr    s   HEK13F"+D":":3s8&*+OPP77#$(AA*+WXX
#$C/3z?FW3W*+Z[[77=!X-Z@V5W*+_``#'',/0G<OPS<T4UY\]iYj4j*+STT77()-@@*+XYY#'',/5S=NRUVYZfVgRiloRo*+Z[[#'',/5S=NRUVYZfVgRhknRn*+WXX%&c1S5F5J*+UVVUCcggcl+./_`` V "_$!#&< K/./]^^OOC-.))"3'< 3./abb\*Jj#...%%j"5E7723abbS!$UC0S!*+PQQ|$Y #;Z Mr8   c                p     d}t         fd|D              s j                  d      i k7  rt        d      y )N)r  r  r
  r  r&   r  r  c              3  D   K   | ]  }j                  |      d u  y wr3   r  rb   r(  r'  s     r6   rd   z(_validate_session_row.<locals>.<genexpr>$  s     
?3773<t#s    r  z.diagnostic session row contains delivery state)r  r  r   )r'  delivery_fieldss   ` r6   r  r    s=    O 
?
??3776?VXCX&'WXX DYr8   c                    d}t         fd|D              rt        d      dD ]'  }t         j                  |            rt        d       t	         j                  d      t
              st        d       d   j                         D ]-  \  }}t	        |t              r|rt        |      r$t        d        d   } j                  d	      }|d
k(  r(t        |      r j                  d      t        d      y |dk(  r2|$t	         j                  d      t              r d   st        d      y |dv r| j                  d      t        d      y y )N)r  r  r
  r  r&   c              3  n   K   | ],  }t        j                  |      t               xs |     . y wr3   )r6  r  rg   r  s     r6   rd   z)_validate_delivery_row.<locals>.<genexpr>0  s2     
Qz#''#,,,<CH<s   25z'diagnostic delivery identity is invalid)r
  r  r&   z%diagnostic delivery digest is invalidr  z$diagnostic delivery pins are invalidr  r  r#  r  z*diagnostic provider receipt row is invalidr  z!diagnostic unknown row is invalid>   r"  r  r$  zdiagnostic audit row is invalid)r  r   rj   r  r6  r2  r&  rg   )r'  requiredr(  rW   r  r  s   `     r6   r  r  (  sd   H 
Q
QQ&'PQQJ#''#,'*+RSS K cggfot,&'MNN&k'')
U#s#3j6G*+QRR * ]FWW-.N##.)SWWX->-J*+WXX .K	%	%%Z8I3-OWZ[cWd*+NOO Xe	P	P%):)F*+LMM *G 
Qr8   c                d   | d   }|d   dk(  r|d   dk7  rft        d      |d   dk(  r|d   dk7  rKt        d      |d   dk(  r|d   dk7  r0t        d	      |d   d
k(  r|d   dvrt        d      t        d      dD ]0  }|j                  |      |j                  |      k7  s't        d       y )Nry   r  r  r$  z(diagnostic unknown transition is invalidr#  z(diagnostic receipt transition is invalidr  z&diagnostic audit transition is invalidr"  >   r  r#  z(diagnostic audited transition is invalidz,diagnostic reservation transition is invalid)r   r   r   r  r   r   r  r  r
  r  r&   r  z-diagnostic delivery identity changed in place)r   r  )r  r'  r  r(  s       r6   r  r  G  s    RyH
8}**H!;;*+UVV	X,	,H!;;*+UVV	X/	)H!33*+STT	X.	(H%JJ*+UVV&'UVV 773<8<<,,*+Z[[r8   c                     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 d*dZe	 	 	 	 	 	 	 	 	 	 d+d       Zed,d       Zed,d       Z	ed-d       Z
ed,d       Zed,d       Zed.d	       Zed/d
       Zed0d       Zed1d       Zed2d       Zed3d4d       Zd5dZd6dZd7dZd8dZ	 	 	 	 	 	 	 	 d9dZdd	 	 	 	 	 d:dZ	 	 	 	 	 	 	 	 	 	 	 	 d;dZ	 	 	 	 	 	 	 	 	 	 	 	 d<dZdd	 	 	 	 	 	 	 	 	 d=dZd>dZd?dZdd	 	 	 	 	 d@dZdAdZ dAd Z!d1d!Z"	 	 	 	 	 	 dBd"Z#dCd#Z$e%dDd$       Z&e%dEd%       Z'dddddddd&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dFd'Z(e%dGd(       Z)e%	 	 	 	 	 	 dHd)       Z*y)Ir  zPHost-owned, fail-closed reservation authority backed by a private JSONL journal.c               2   t        |      t        urt        d      t        |      t        urt        d      t        |      t        urt        d      |j
                  |urt        d      |j                  t        d      	 t        |       t        |       dD ]  }t        t        ||      d|         	 |j                  |j                  k7  rt        d	      |j                  |j                  k7  s2|j                   |j                   k7  s|j"                  |j$                  k7  rt        d
      	 t'        |d       |t        d      t        |      t        t)                     urt        d      |j+                         rt        d      |j-                  | t.               t1        |       |j3                         | _        || _        t8        j;                  | j4                  || |t.              | _        | j4                  dz  | _        t1        | j>                         | j>                  t@        z  | _!        | j>                  tD        z  | _#        | j>                  dz  | _$        || _%        || _&        || _'        tQ        | j4                        | _)        d| _*        d | _+        d| _,        d | _-        | j]                         | _/        y # t        t        t        f$ r}t        d      |d }~ww xY w# t        t        f$ r}t        d      |d }~ww xY w)N%diagnostic session binding is invalid%diagnostic isolation spec is requiredz$diagnostic live sources are requiredz,diagnostic live source spec binding mismatchz)diagnostic live sources are already bound)r   r-   r   r   zdiagnostic spec z'diagnostic authority inputs are invalidz*diagnostic session expiry binding mismatchz*diagnostic authority spec binding mismatchzdiagnostic boot epochz!diagnostic boot epoch is requiredz,isolated diagnostic profile root is required/isolated diagnostic profile root must be a path0diagnostic profile root symlinks are not allowedr  
diagnosticz diagnostic-session-terminal.jsonFr   )0rf   r   r   r   r  r   r1   r   r   rq   r   r   r}   ro   r   r   r   r-   r   ru   r
   r2  r  r  r;  r  r  _live_sourcesr  r  _live_loader_journal_dirDIAGNOSTIC_JOURNAL_FILENAME_journal_pathDIAGNOSTIC_LOCK_FILENAME
_lock_path_terminal_path_sessionrw  _boot_epochr   _profile_root_digest_boot_epoch_revalidated_authority_lock_owner_authority_lock_depth_admission_token_initialize_durable_session_restart_unvalidated)r5   r   r   r%  r   live_sourcesr   r   s           r6   r7   z$DiagnosticDeliveryAuthority.__init__l  s    = 11*+RSS:66*+RSS%CC*+QRRD(*+YZZ!!-*+VWW	_$W-!$'  d 37Gv5NO 0*+WXX 3 33$$(@(@@77//0 ++WXX	Y!*.EF *+YZZT$&\1*+\]]""$*+]^^$$? 	% 	
 	",/)224)9GG? H 
 !..=!$"3"34!..1LL++.FF"//2TT
%$01C1C$D!',$15"%&"BF$($D$D$F!a 	:6 	_*+TU[^^	_ :& 	Y*+NOUXX	Ys0   6K 8K6 K3"K..K36LLLc                  | t         urt        d      t        |      t        urt        d      t        |      t        t	                     urt        d      |j                         rt        d      t        |      t        urt        d      |j                  t        j                  t        j                  hvrt        d      t        j                  ||t              } | |||||      S )	zGCreate a record-backed authority for dormant start or restart recovery.z&diagnostic authority factory is sealedr  r  r  r  z7diagnostic factory requires a dormant or active session)r%  r   r  )r   r%  r   r  )r  r   rf   r   r
   r2  r   r   r   r   r   r  r  r  )r   r   r   r%  r   r  s         r6   r  z/DiagnosticDeliveryAuthority.from_profile_record  s     11*+STT= 11*+RSST$&\1*+\]]""$*+]^^:66*+RSS=="++"))!
 
 +I  6II%? J 

 !%%
 	
r8   c                    | j                   S r3   )r  r   s    r6   journal_pathz(DiagnosticDeliveryAuthority.journal_path  r  r8   c                    | j                   S r3   )r  r   s    r6   	lock_pathz%DiagnosticDeliveryAuthority.lock_path  r  r8   c                    | j                   S r3   )r  r   s    r6   r   z#DiagnosticDeliveryAuthority.session  r  r8   c                    | j                   S r3   r  r   s    r6   r%  z(DiagnosticDeliveryAuthority.profile_root  r  r8   c                (    | j                   t        z  S r3   )r  DIAGNOSTIC_ACTIVATION_FILENAMEr   s    r6   r  z+DiagnosticDeliveryAuthority.activation_path  s      #AAAr8   c                    | j                   S r3   )r  r   s    r6   r  z(DiagnosticDeliveryAuthority.live_sources  r  r8   c                    | j                   S r3   )r  r   s    r6   live_loaderz'DiagnosticDeliveryAuthority.live_loader  r  r8   c                    | j                   S r3   r  r   s    r6   r   z DiagnosticDeliveryAuthority.spec  r  r8   c                    | j                   S r3   )r  r   s    r6   r   z/DiagnosticDeliveryAuthority.restart_unvalidated 	  s    (((r8   c              #     K   |t         urt        d      | j                         5  | j                  t        d      t	        |       }|| _        	 | j                          | d| _        	 ddd       y# d| _        w xY w# 1 sw Y   yxY ww)zIHold the shared authority lock through provider admission and invocation.+diagnostic host admission token is requiredNz/diagnostic delivery admission is already active) _DIAGNOSTIC_HOST_ADMISSION_TOKENr   r*  r  r/   _require_not_detached)r5   
host_tokentokens      r6   delivery_admissionz.DiagnosticDeliveryAuthority.delivery_admission	  s      ==*+XYY!!#$$0./`aa-d3E$)D!-**,(,% $# )-% $#s4   $B*BA6%B-	B6	A??BBBNc              #    K   t        j                         }| j                  |k(  rF| xj                  dz  c_        	 d  | xj                  dz  c_        | j                  dk(  rd | _        y t	        | j
                        5  || _        d| _        	 d  d| _        d | _        	 d d d        y # | xj                  dz  c_        | j                  dk(  rd | _        w w xY w# d| _        d | _        w xY w# 1 sw Y   y xY ww)Nr   r   )	threading	get_identr  r  r[  r  )r5   r!  rK  s      r6   r*  z+DiagnosticDeliveryAuthority._authority_lock	  s     ##%%%.&&!+&6**a/*--215D.T__-).D&)*D&2-.*-1* .-	 **a/*--215D. 3 ./*-1* .-sM   9C=B-  AC=C1CC1$	C=-.CC=C..C11C:6C=c                    || j                   u xrC t        |t              xr1 |j                  | u xr! | j                  t        j                         k(  S r3   )r  r6  r/   r1   r  r  r  )r5   r!  s     r6   _admission_is_activez0DiagnosticDeliveryAuthority._admission_is_active(	  sY    $/// D:'@AD$$,D **i.A.A.CC		
r8   c               P   t        |      t        us|dk  rt        d      | j                  rt        d      | j                  j
                  t        j                  urt        d      || j                  j                  k7  rt        d      | j                         5  t        | j                        }t        || j                         |D cg c]D  }|j                  d      t        k(  r*|j                  d      | j                  j                   k(  r|F }}t#        |      dk7  s| j%                  |d	         st        d
      t'        | j                  j                   t        j(                  | j                  j                  | j                  j*                  | j                  j,                  | j                  j.                  | j                  j0                  | j                  j2                        | _        ddd       | j                  S c c}w # 1 sw Y   | j                  S xY w)z:Atomically consume the current dormant session generation.r   r   (diagnostic restart requires revalidationz!diagnostic session is not dormantr'  r   r  r   r   +diagnostic session journal binding mismatchN)rf   r   r   r  r  r   r   r   r   r*  rk  r  r  r  r  r  r   rh   _session_row_matchesr   r   r   r   r   r   r   )r5   r   ri  r'  bounds        r6   activate_sessionz,DiagnosticDeliveryAuthority.activate_session0	  s   
3&*q.*+XYY$$*+UVV==&<&E&EE*+NOO111*+VWW!!# !3!34Dd8Q8QR  C778$7GGL)T]]-E-EE    5zQd&?&?a&I./\]]-((&--(((())..66((	DM $* }}% $* }}s    1HA	HC HHH%c               ,   t        |      t        us|dk  rt        d      | j                         5  | j	                          | j
                  rt        d      | j                  j                  || j                         d d d        y # 1 sw Y   y xY w)Nr   z&diagnostic route generation is invalidr  r   r   )	rf   r   r   r*  _require_not_detached_lockedr  r  r   r  )r5   r   s     r6   verify_route_activez/DiagnosticDeliveryAuthority.verify_route_activeQ	  s    
3&*q.*+STT!!#--/((.>  MM((%++ )  $##s   AB

Bc                    | j                         5  t        | j                        }t        || j                         t        fd|D              cd d d        S # 1 sw Y   y xY w)Nr  c              3  ^   K   | ]$  }|j                  d       k(  st        |       & yw)r  N)r  r2  )rb   r'  r  s     r6   rd   z3DiagnosticDeliveryAuthority.rows.<locals>.<genexpr>d	  s&     Zdscggl6Kz6Ycds   --)r*  rk  r  r  r  r   )r5   r  ri  s    ` r6   ri  z DiagnosticDeliveryAuthority.rows_	  sI    !!# !3!34Dd8Q8QRZdZZ $##s   A AA%c               ~   | j                  |       t        |      t        urt        d      | j                  }t        |      t
        us|j                  | urt        d      	 |j                  ||      }t        |      t        urt        d      t               }d}|D ]0  }	t        ||	|      }
|
|u s|
t        ||	      k7  s$t        d|	        |j                  |j                  k7  rt        d      |j                  |j                  k7  s2|j                   |j                   k7  s|j"                  |j"                  k7  rt        d      |j                  | j$                  j                  k7  rt        d	      |j                   | j$                  j&                  k7  rt        d
      |j(                  | j$                  j*                  k7  rt        d      |j,                  #|j,                  j                  |j                  k7  rt        d      t.        D ]0  }	t        ||	|      }
|
|u s|
t        ||	      k7  s$t        d|	        t        |d|      |j                  k7  rt        d      |j&                  |j                   k7  rt        d      |S # t        t        t        f$ r}t        d      |d }~ww xY w)Nr   z+diagnostic live authority loader is invalidr   z-diagnostic live authority snapshot is invalid)r(   r#   r%   r*   r&   r$   r,   r   r   r   r+   r-   z)diagnostic live activation pin is stale: z,diagnostic live activation revision is stalez+diagnostic live activation session is stalez diagnostic live session is stalez#diagnostic live generation is stalez*diagnostic live transport binding is stalez*diagnostic live candidate session is stalez(diagnostic live candidate pin is stale: r   z+diagnostic live candidate revision is stalez-diagnostic live candidate generation is stale)r)  rf   r   r   r  r  r1   r  r   r}   ro   rj  r9   r   r   r   r'   r!   r  r   r-   r   r   rm  )r5   r   r	  r!  r  r  r   sentinelactivation_fieldsr   actuals              r6   _load_live_snapshotz/DiagnosticDeliveryAuthority._load_live_snapshote	  s    	$$Z0	?"==*+MNN""<<<@P@PX\@\*+XYY	e<<% = H >!@@*+Z[[8
 &DYh7F!Vwx/F%F.1Z[_Z`/abb & !2!22*+YZZ  H$7$77++x/J/JJ''8+B+BB*+XYY$--":"::*+MNN&&$--*B*BB*+PQQ774==;a;aa*+WXX&)*=*=*H*HHL_L_*_*+WXX$DYh7F!Vwx/F%F.1YZ^Y_/`aa % 9j(3x7H7HH*+XYY8#>#>>*+Z[[_ 	:6 	e*+Z[add	es   %J J<+J77J<r   c                  | j                  |       | j                  |       | j                  j                  |j                  | j
                         |j                  | j                  j                  k7  rt        d      |j                  | j                  j                  k7  rt        d      | j                  |      5  | j                          | j                  rt        d      |j                  }|t        d      | j                  |||       t        | j                         }t#        || j$                        }|j'                  |j(                        }|r|d   }| j+                  ||       |d	   d
   }|dk(  rt-               cd d d        S |dk(  rt/               cd d d        S |dk(  r'| j1                  |d|       t/               cd d d        S |dk(  rt3               cd d d        S |dk(  r(| j1                  |d|d       t3               cd d d        S t        d      t5        j6                  |j(                   d|j8                   d|j                   j;                  d            j=                         d d }	t?        ||	      }
| j1                  |d||	|
       tA        |	||
tB              cd d d        S # 1 sw Y   y xY w)Nr  "diagnostic session digest mismatch%diagnostic transport binding mismatchr  z+diagnostic candidate activation is requiredr	  r!  r  r   ry   r  r"  r  r#  r  sourcer  r$  +diagnostic_started_without_provider_receiptr  r  r  z'diagnostic reservation state is invalidrM   rR       )r  r	  r  r
  )r  )"r)  _validate_candidater  r   r   r  r  r   r   r   r*  r  r  r   r  rk  r  r  r  r  r  _ensure_candidate_matches_rowr  r  _append_event_lockedr  rZ   r[   r  rU   r\   r+  r  r  )r5   r	  r!  r   ri  r  r  firstr  r  r
  s              r6   reserve_and_verifyz.DiagnosticDeliveryAuthority.reserve_and_verify	  s    	$$Z0  +$$ ++'' 	% 	
 ##t}}'@'@@*+OPP--1W1WW*+RSS!!*-&&(((./YZZ!++I ./\]]$$#% % 
 !!3!34D&tAZAZ[FJJy334Ea229eDr8,^+46) .-* _,79- .-. //--.$ . 
 89; .-< //24? .-@ 77--1$L	 .  34O .-P //XYY$^^''()*?*?)@)BZBZA[\ccdklik#2N "5Y!O%%1#-#5 &  1"!A	i .--s,   CKK."KK2#KBKKc                  | j                  |       | j                  |       t        |      t        urt	        d      t        |      t
        us|| j                  j                  k7  rt	        d      t        |      t        urt	        d      |j                  | urt	        d      |j                  } |||      }t        |      t        us||k7  rt	        d      	 t        |j                  d      }|j                  | j                  j                  k7  s&|t!        j"                  t$        j&                        k  rt	        d
      |j                  | j                  j                  k7  rt	        d      |j(                  | j                  j*                  k7  rt	        d      |j,                  | j                  j.                  k7  rt	        d      |j0                  |k7  s|j*                  |j(                  k7  rt	        d      |j2                  | j                  j4                  k7  rt	        d      | j7                  |||       |S # t        t        f$ r}	t	        d      |	d	}	~	ww xY w)zGReload and compare every persisted activation pin under host admission.r   r#  z&diagnostic activation loader is sealedz'diagnostic activation authority changedr   zdiagnostic activation changedr   z'diagnostic activation expiry is invalidNr   r'  r(  z(diagnostic activation candidate is staler  r   )r)  r  rf   r   r   rg   r  r   r  r1   r/  r   r!   r}   ro   r   r   r   r   r   r'   r   r-   r   r   r  r   r  )
r5   r	  r   r   activation_loaderr!  r  reloadedr   r   s
             r6   verify_activated_deliveryz5DiagnosticDeliveryAuthority.verify_activated_delivery	  s.    	$$Z0  +	?"==*+MNN
3&*8P8P*P*+STT!"*KK*+STT&&d2*+TUU"::*<>!<<I@U*+JKK	_%'')GF ##t}}'?'??hll33*+MNN$--":"::*+STT&&$--*B*BB*+VWW774==;a;aa*+STT(*i.B.BhFaFa.a*+UVV##t}}'@'@@*+OPP  ! 	! 	

 - :& 	_*+TU[^^	_s   !I I,I''I,c                  | j                  |d       t        |t              st        d      |j                  dus|j
                  t        urt        d      t        |t              st        |t        t        f      st        d      	 t        |      }t        j                  |      r|t        j                          k  rt        d      |j"                  }| j%                  |       | j&                  j)                  |j*                  | j,                         |j.                  | j&                  j0                  k7  rt        d      |j2                  | j&                  j2                  k7  rt        d	      | j5                  |||j6                  ||
       | j9                  |      5  | j;                          | j<                  rt        d      t?        | j@                        }	tC        |	| jD                        }
|	D cg c]D  }|jG                  d      tH        k(  r*|jG                  d      | j&                  j6                  k(  r|F }}tK        |      dk7  s2| j&                  jL                  | j,                  k7  s|d   jG                  d      | j&                  jL                  k7  r| jN                  r|d   jG                  d      | j&                  j6                  k7  s|d   jG                  d      | j&                  j*                  k7  s|d   jG                  d      | j&                  j0                  k7  sV|d   jG                  d      | j&                  jP                  k7  s+|d   jG                  d      | j&                  j2                  k7  rt        d      |
jG                  |jR                        }|st        d      |d   }|jG                  d      |jT                  k7  rt        d      | jW                  ||       |jG                  d      |jX                  k7  rt        d      |d   d   dk7  rt        d      	 d d d        |S # t        t        f$ r}t        d      |d }~ww xY wc c}w # 1 sw Y   |S xY w)NTrequire_contextreservation is not verifiedz reservation authority is invalidzdiagnostic deadline is invalidzdiagnostic deadline elapsedr  r  r  )r   r  r!  r  r  r  r   r   r   r   r   r  r   r   r  reservation is not currentr  r
  reservation digest is stalery   r$  )-r)  r6  r  r   r  r  r  r   r   floatr   OverflowErrorro   mathisfinitetime	monotonicr	  r  r  r   r   r  r  r   r   r  r   r*  r  r  rk  r  r  r  r  r  rh   r   r  r   r  r  r  r
  )r5   verifieddeadline_monotonicr!  r   r  deadliner   r	  ri  r  r'  r  r  r	  s                  r6   verify_provider_startz1DiagnosticDeliveryAuthority.verify_provider_start'
  s    	$$Z$F($AB/0MNN''t3((0PP/0RSS($/ze8
 ++KLL	V/0H }}X&(dnn6F*F*+HII&&	  +$$ ++'' 	% 	
 ##t}}'@'@@*+OPP--1W1WW*+RSS&& ++/! 	' 	
 !!*-&&(((./YZZ !3!34D&tAZAZ[F  C778$7GGL)T]]-E-EE    E
a==++t/?/??!HLL.$--2J2JJ 888<<-1I1II8<<-1I1II8<< 01T]]5N5NN8<< 23t}}7U7UU8<< :;==99: //\]]JJy334E34PQQ!HEyy)*h.E.EE34PQQ..y%@yy-.(2M2MM34QRRRy"&@@34PQQ AI .L w z* 	V*+KLRUU	V6 .L s9   Q
 )AQ2A	Q-
G5Q2
Q*Q%%Q*-Q22Q<c               F   ||r| j                  |d       n|| j                  |       t        |t              r|j                  t        urt        d      | j                  |j                         | j                  |      5  t        | j                        }t        || j                        }|j                  |j                  j                        }|r!|d   j                  d      |j                  k7  rt        d      |d   }| j!                  |j                  |       |j                  d	      |j"                  k7  rt        d
      |d   d   }	|	dk(  r| j%                  |d         cddd       S |	dk(  r| j%                  |d         cddd       S |t'        |      nd}
|	dk(  r|r`| j)                  |      }|
|
|j                  d      k7  rt        d      | j+                  |d|      }| j%                  |      cddd       S | j%                  |d         cddd       S |	dk(  rZ|d   }|
|
|j                  d      k7  rt        d      |rdnd}| j+                  |||      }| j%                  |      cddd       S |	dk7  rt        d      |/| j+                  |d|d      }| j%                  |      cddd       S | j+                  |d||
      }|rdnd}| j+                  |||      }| j%                  |      cddd       S # 1 sw Y   yxY w)z:Finalize a reservation; provider admission is lease-gated.NTr  r  r  r   r  r  r
  r  ry   r  r  r"  r  r  zdiagnostic receipt changedr  r#  r$  provider_receipt_unavailabler  )r  r  r  )r)  r6  r  r  r  r   r  r	  r*  rk  r  r  r  r  r  r  r  r
  _terminal_resultr]   _provider_rowr  )r5   r  receiptauditedr!  ri  r  r  r	  r  r  providerr'  r  s                 r6   record_terminalz+DiagnosticDeliveryAuthority.record_terminal{
  s8    '((T(J#((48%BC((0PP/0MNN  !3!34!!*- !3!34D&tAZAZ[FJJx11<<=EE!HLL)9:h>U>UU34PQQ!HE..x/A/A5Iyy-.(2M2MM34QRR2Yx(F++,,U2Y7 .- ',,U2Y7 .- 291DWW-$N(#11%8H%1nUeHf6f;<XYY33DX]3^C005- .-. ,,U2Y7/ .-0 ++ 9!-.HLLQaDb2b78TUU+2//VE/R,,S1= .-> 3334PQQ//- 9	 0  ,,S1Q .-R 00)-	 1 H (/^OF++D+NC((-c .--s3   C*L9LA,LL.AL7L?LL c          
        | j                   st        d      t        |t              r|r|| j                  k(  rt        d      || _        t        | j                  j                  t        j                  | j                  j                  || j                  j                  | j                  j                  | j                  j                  | j                  j                        | _        d| _        d| _         | j                  S )zCBind a reconstructed authority to a fresh process epoch explicitly.z7diagnostic authority is not awaiting restart validationz'fresh diagnostic boot epoch is requiredTF)r  r   r6  rg   r  r   r  r   r   r   r   r   r   r   r   r  )r5   new_boot_epochs     r6   revalidate_after_restartz4DiagnosticDeliveryAuthority.revalidate_after_restart
  s    ((*+dee.#.nZ^ZjZjHj*+TUU))MM$$"))MM$$MM%%MM**MM22MM$$	
 (,$$)!}}r8   c               	   |dvrt        d      || j                  j                  k7  rt        d      | j                  ,| j                  t        j                         k(  rt        d      d| j                  j                  |dz   || j                  j                  | j                  j                  | j                  j                  d}t        |      |d	<   | j                         5  t        | j                  | j                  j                         5 }	 t#        j$                  | j                  j&                  |d
      }|Lt+        | j                  | j                        \  }}t-        |      t-        |      k7  s||k7  rt        d      d| j                  j&                   dt#        j.                          dt        j                          d}t#        j0                  |t"        j2                  t"        j4                  z  t"        j6                  z  t9        t"        dd      z  t9        t"        dd      z  d|      }		 t;        |      }
d}|t=        |
      k  r=t#        j>                  |	|
|d       }|dk  rt        d      ||z  }|t=        |
      k  r=t#        j@                  |	       	 t#        jF                  |	       	 	 t#        jH                  || j                  j&                  ||d
       t#        j@                  |       	 t#        jD                  ||       ddd       ddd       tM        | j                  j                  tO        |      |dz   | j                  jP                  | j                  j                  | j                  j                  | j                  j                  | j                  jR                        S # t(        $ r d}Y w xY w# tB        $ r) 	 t#        jD                  ||        # t(        $ r Y  w xY ww xY w# t#        jF                  |	       w xY w# tJ        $ rO t+        | j                  | j                        \  }}t-        |      t-        |      k7  s||k7  rt        d      Y w xY w# t(        $ r Y nw xY w# 	 t#        jD                  ||       w # t(        $ r Y w w xY wxY w# 1 sw Y   xY w# 1 sw Y   xY w)zIDurably fence the current generation before routes or provider admission.>   r   r   r   r   r   z$diagnostic terminal state is invalidz%diagnostic detach generation is staleNz<diagnostic detach is blocked by an active delivery admissiondiagnostic_session_terminal_v1r   )r"   r   r   r   r   r   r   digestFr  r$  #diagnostic terminal fence conflictsr{  z.tmprR  r   rJ  rS  rn  z.diagnostic terminal fence write was incomplete)
src_dir_fd
dst_dir_fdr  )*r   r  r   r  r  r  r  r   r   r   r   r]   r*  r  r  r  r  r6  r4  r   r`  r+  r   getpidrL  r  rV  O_EXCLr   rX   rh   r  rM  BaseExceptionunlinkrN  linkr:  r   r   r   r   )r5   r   r   r  	parent_fdexistingrW   r  temporary_nameru  r  r  writtens                r6   detachz"DiagnosticDeliveryAuthority.detach
  sf   ZZ*+QRR111*+RSS  ,1K1KyObObOd1d*+ijj>--22$q.==44 $ > >(,(N(N
 %X.!!#(""##** $!ww++00((- H '6++%)%7%7 HE1 5zS]2ex6G6A 
 D//445Q99;-q)<)<)>(?tE # "$&**%))$ ""lA67 ""k15	6
 (	"J-",X"6!"$s7|3&(hhz767;K&LG&!|&>$T'" !" #g-F %s7|3 , ,!"GG . $ 3 3 8 8+4+405  +!IInYGY $` !MM$$"5)NMM$$MM%%MM**MM22MM$$	
 		
K ) $#H$J ) !IInYG   1 ! ! ,  / "'> $ 3 3-1-?-?(HE1  #5zS]:ex>O&>$I'" !" ?P"  1 ! !!IInYG0 ! ![  $#s  '+SR>,O C?R> AOO.R>.P'3R	R SOR>OR>	P
"O:9P
:	P	P
P	P

PP$$R>'AQ?;R>Q??R	RR>RR>R;R,+R;,	R85R;7R88R;;R>>S	SSFr  c               b    |t         u rt        d      | j                  |      ry t        d      )Nz1diagnostic delivery admission context is requiredr  )r  r   r  )r5   r!  r  s      r6   r)  z3DiagnosticDeliveryAuthority._require_host_admissionC  s<     99*C  $$Z0&'TUUr8   c                n    | j                         5  | j                          d d d        y # 1 sw Y   y xY wr3   )r*  r  r   s    r6   r  z1DiagnosticDeliveryAuthority._require_not_detachedQ  s&    !!#--/ $##s   +4c                   | j                   t        j                         k7  rt        d      t	        | j
                  | j                  j                        5 }	 t        j                  | j                  j                  |d       t        | j                  | j
                        \  }}d d d        h d}t              |k7  rt        d      |j                  d      }|j                         D ci c]  \  }}|dk7  s|| }}}t!        |      rt#        |      |k7  rt        d      |j                  d	      d
k7  s|j                  d      | j$                  j&                  k7  s|j                  d      | j$                  j(                  dz   k7  s|j                  d      dvsx|j                  d      | j$                  j*                  k7  sP|j                  d      | j$                  j,                  k7  s(|j                  d      | j$                  j.                  k7  rt        d      t        d      # t        $ r Y d d d        y w xY w# 1 sw Y   xY wc c}}w )Nz%diagnostic authority lock is requiredFr  r$  >   r   r,  r   r   r   r"   r   r   z$diagnostic terminal fence is corruptr,  z)diagnostic terminal fence digest mismatchr"   r+  r   r   r   r   >   r   r   r   r   r   r   r   r   r-  z&diagnostic session is durably detached)r  r  r  r   r  r  r  r  r6  r4  r   r`  r+  r   r  r&  rj   r]   r  r   r   r   r   r   )	r5   r5  rW   r  expected_keysr,  r(  itemunsigneds	            r6   r  z8DiagnosticDeliveryAuthority._require_not_detached_lockedU  s   %%)<)<)>>*+RSS$&&
 '',,$$) /##!//HE1
 	
 u:&*+QRR8$/4{{}P})#txCI}P&!WX%6&%@*+VWWII&'+KKyy&$--*B*BByy&$--*B*BQ*FFyy!UVyy'4==+D+DDyy+,0N0NNyy34}}556 ++PQQ&'OPPE % 
 

 
: Qs<   I,H4$I2I I4	I=IIIIc                   | j                         5  t        | j                        }t        || j                        }|D cg c]F  }|j                  d      t        k(  s|j                  d      | j                  j                  k(  sE|H }}|r$|d   }| j                  |      st        d      d}nP| j                  |t        | j                         t        | j                        }t        || j                        }d}| j                  j                  t        j                  ur| j                  ||       |cd d d        S c c}w # 1 sw Y   y xY w)	Nr  r  r   r   r  T)r  r   F)r*  rk  r  r  r  r  r  r  r   r  r   r  r   r   r   _recover_incomplete_locked)r5   ri  r  r'  r  r   s         r6   r  z7DiagnosticDeliveryAuthority._initialize_durable_session  s:   !!# !3!34D&tAZAZ[F$(  HDSCGGH,=,PUXU\U\]iUjnrn{n{  oG  oG  VGSDE  HAh00523`aa&*#))$PTP]P])^$T%7%78*4TE^E^_&+#}}""*@*I*II//f=&! $# H $#s*   1EE (E	EB1EEEc                    t        |j                               D ]H  }|d   }|d   dk(  r| j                  |d|d   d       )|d   dk(  s2| j                  |d	|d   
       J y )Nry   r  r$  r  r   +diagnostic_restart_without_terminal_receiptr  r#  r  r  )r   valuesr  )r5   ri  r  r  lasts        r6   rA  z6DiagnosticDeliveryAuthority._recover_incomplete_locked  s    
 6==?+E9DH~!;;))- 8H	 *  h#55))* 8 *  ,r8   c                   |j                  d      | j                  j                  k(  xr |j                  d      | j                  j                  k(  xr |j                  d      | j                  j                  k(  xr| |j                  d      | j                  j
                  k(  xrR |j                  d      | j                  j                  k(  xr( |j                  d      | j                  j                  k(  S )Nr   r   r   r  r   r   )r  r  r   r   r   r   r   r   )r5   r'  s     r6   r  z0DiagnosticDeliveryAuthority._session_row_matches  s    GGL!T]]%=%== ^%)A)AA^%)A)AA^ ()T]]-F-FF^ *+t}}/M/MM	^
 23t}}7]7]]	
r8   c                P    t        |       D ]  }|d   dk(  s|c S  t        d      )Nr  r#  z.diagnostic provider receipt row is unavailable)rr  r   )r  r'  s     r6   r"  z)DiagnosticDeliveryAuthority._provider_row  s0    E?C8} 22
 # ''WXXr8   c                N    | d   | d   d}| j                  d      | d   |d<   |S )Nr  r  )r  r  r  r  )r'  results     r6   r!  z,DiagnosticDeliveryAuthority._terminal_result  sC     (m!"23%
 77#$0'*+;'<F#$r8   )r   r	  r  r
  r  r  r  c          	        |r|d   }
|
d   }t        |
d         dz   }nt        }d}|xs | j                  }|_|j                  |||j                  |j
                  t        |j                        d}|j                  }|j                  }|j                  }nc|4|d   |d   |d   |d	   |d
   t        |d         d}|d   }|d   }|d   }n-d d d d d i d}|j                  }|j                  }|j                  }i dt        d|d|d|ddd| j                  d||j                  n|d   d|d||j                  n|d   d|d||j                   n|d   d|d|d   d|d   d|d   d	|d	   d
|d
   ||d   |	d}t#        t%        |            |d<   t'        | j(                  |       |j+                  |       |S )Nry   r  r  r   )r  r  r
  r  r&   r  r  r  r
  r  r&   r  r  r   r   r"   r  r  rn   r   r   r   r   )r  r  r  )r   r   r  r  r  r&   r2  r  r  r   r   r   r  r  r   r   r   r]   r)  r  r  rb  )r5   ri  r  r   r	  r  r
  r  r  r  r  r  r  bound_session
row_valuesr  r   r   r'  s                      r6   r  z0DiagnosticDeliveryAuthority._append_event_locked  s    BxH"<0K8J/014H&KH04== '22"0&8(44&/&B&BY^^,-J '55N"--J'0'I'I$$\2"()9":&,-A&B%m4&,-A&BVF^,J $$45N-J'-.H'I$ #"&&*#&*J +66N&11J'4'M'M$"
7"
"
 f"
 ;	"

 ""
 "4#<#<"
 fn-22&Q]J^"
 *"
 fn-22&Q]J^"
 n"
 &. > >V\]oVp"
 '(@"
 *\2"
 j)9:"
 !*-A"B"
  :m4!"
" !*-A"B#"
$ -v&)"
, $$7$<=LD..4C
r8   c                P   t        |       t        urt        d      | j                  t        urt        d      t        | j
                        t        urt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      | j                  | j
                  j                  k7  rt        d      t        | j                         t        | j
                  j                         k7  rt        d	      t#        | j$                  t&              r$| j$                  rt)        | j$                        d
kD  rt        d      t        | j*                        t,        us| j*                  dk  rt        d      t#        | j                  t.              r:t1        j2                  | j                        j5                         | j                  k7  rt        d      | j6                  | j                  | j                  | j                  fD ]  }t9        |      rt        d       t#        | j                   t:              r| j                   st        d      | j                   j=                         D ]-  \  }}t#        |t&              r|rt9        |      r$t        d	       y )Nzdiagnostic candidate is invalidr  r  r  r  r  r  r   r     z diagnostic dedupe key is invalidr   z*diagnostic candidate generation is invalidzdiagnostic body digest mismatchz&diagnostic candidate digest is invalidz&diagnostic candidate pins are required)rf   r  r   r  r  r   r   rI   r7  rJ   r  r*   r&   r   r-   r2  r  r6  r  rg   rh   r   r   r   rZ   r[   r\   r  rj   r   r&  )r	  rW   r(  s      r6   r  z/DiagnosticDeliveryAuthority._validate_candidate  s   	?"==*+LMM##+NN*+STT	##$,GG*+WXX  I$7$7$C$CC*+XYY9#6#6#D#DD*+QRR  I$7$7$L$LL*+XYY''9+>+>+Q+QQ*+_``--1D1D1h1hh*+TUU	4	(;(;(@(@#AA*+RSS)..4I<P<PTWXaXlXlTmpsTs*+MNN	$$%S0I4H4H14L*+WXX)..6NN9//0::<	@U@UU*+LMM$$!!((..	
E e$./WXX
 )..'2)..*+STT#....0JCc3's*U:K./VWW 1r8   c                    | j                   | j                  | j                  | j                  | j                  t        | j                        f}|d   |d   |d   |d   |d   |d   f}||k7  rt        d      y )Nr  r&   r  r   r   r  zdiagnostic dedupe conflict)r  r&   r  r   r   r2  r  r   )r	  r'  r.  r6  s       r6   r  z9DiagnosticDeliveryAuthority._ensure_candidate_matches_rowG  s     !!(($$  .. 
 $% !*+K
 x/0LMM  r8   )r   r   r   rg   r%  r
   r   r   r  r  r:   r;   )
r   r   r   rg   r%  r
   r   r   r:   r8  r9  )r:   r   r  )r:   r  )r:   z DiagnosticIsolationSpecV1 | None)r:   r   )r  r9   r:   zIterator[object]r3   )r!  r;  r:   Iterator[None])r!  r;  r:   r   )r   r   r:   r   )r   r   r:   r;   )r  rg   r:   ztuple[Mapping[str, Any], ...])r   r   r	  r  r!  r;  r:   rj  )r	  r  r!  r;  r:   DiagnosticReservationDecision)r	  r  r   r   r   rg   r  r9   r!  r;  r:   r   )r  r  r  r  r!  r;  r   r   r  r  r:   r  )
r  r  r#  zMapping[str, Any] | Noner$  r   r!  r;  r:   zMapping[str, Any])r(  rg   r:   r   )r   r   r   rg   r:   r   )r!  r;  r  r   r:   r;   r   )ri  list[dict[str, object]]r  "dict[str, list[dict[str, object]]]r:   r;   )r'  r<  r:   r   )r  rR  r:   r  r'  r<  r:   r  )ri  rR  r  rg   r   zDiagnosticSession | Noner	  z"DiagnosticDeliveryCandidate | Noner  r  r
  r  r  zMapping[str, object] | Noner  r  r  r  r:   r  )r	  r  r:   r;   )r	  r  r'  r<  r:   r;   )+r<   r=   r>   r  r7   r  r  r  r  r  r   r%  r  r  r  r   r   r   r  r*  r  r  r  ri  r  r
  r  r  r&  r)  r9  r)  r  r  r  rA  r  r=  r"  r!  r  r  r  r@   r8   r6   r  r  i  s   ZMG"MG 	MG
 MG (MG 5MG 
MG\ %
"%
 	%

 %
 (%
 
'%
 %
N " "     " " B B" " ! !  ) )- - 2 2(
B[A.A /	A
 "A 
)AN %)	I.I "	I
 
'IV2.2 /2
 2 "2 "2 
%2hR/R "	R
 "R /R =R 
'Rt %)D./D. *	D.
 D. "D. 
D.L*k
b !&	V!V 	V
 
V0/Qb'&% 3 
	*
 Y Y   -18<%))-.2%)!R%R 	R
 *R 6R #R 'R ,R #R R 
Rh 'X 'XR N.N!N 
N Nr8   r  )rW   r9   r:   r   )rW   r9   r:   rg   )rW   r9   r:   r   )rW   r9   rp   rg   rl   r   r:   r;   )rW   r9   rp   rg   r:   rg   )rW   r9   rp   rg   r:   r   )r   r
   r:   rg   )r   r9   r:   r;   )r   r9   r:   r;   )r   rg   rW   r9   r:   rg   rT  )r	  r  r  rg   r:   rg   )r   r
   r:   r;   )rD  r   r   r
   r.  r   r:   ztuple[int, int])r   r
   r:   rP  )r   r
   r:   rR  )r   r
   r:   z	list[int])r%  r
   r  r
   r:   zIterator[int])r%  r
   r   r
   r:   z%Iterator[tuple[int, tuple[int, int]]])r   r
   r%  r  r:   z)tuple[dict[str, object], tuple[int, int]])r   r
   r'  r<  r:   r;   )ri  rR  r   rg   r:   rS  )r'  r<  r:   r;   )r  rR  r'  r<  r:   r;   )y
__future__r   rW  rZ   rS   r  r6  r4  r  r  
contextlibr   dataclassesr   r   r   r   enumr	   pathlibr
   typingr   r   r   r  r  r  r  r  r  r   r9   r  r  r  r  rl  rn  	frozensetrC  rs  rm  r/   r   r   r   r   r   r   rs   
_PIN_NAMESr   r  r3  rX   r]   rj   rq   ru   r   r   RuntimeErrorr   r   r   rg   r   r   r   r   r   r   r   r  rA  rD  rG  rI  rN  rS  rY  r_  rd  rj  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  rQ  r  r  r  _TERMINAL_STATUSESr)  r+  r;  rG  rP  r[  rk  rv  r  r  r+  r  r  r  r  r  r  r@   r8   r6   <module>r_     sm   "     	    % ( '   ) ) u C 4= 8 4 &,h ##)8  (. %-3X *7 #  YZ ! 8 *# # @ 8 @  3 : "J
#;<   
  "; % 29 GL GA	| 		7 		$< 	
	,S$ 	, $
 
 
8 $=@ =@ =@@ JB $&I &I &IRL $d#_3 _3 $_3@~_ ~_B	 $d#2 2 $2 $d#5 5 $5( $d#T T $T0 $d#3 3 $36 $d#3 3 $3 $d#5 5 $5 $d#4M 4M $4MrN8 N8b
 ; 
(
#> 
(
,G 
(
#> 
(
!< 
(
#> 
(r rjWU WUt $A
 A
 A
F $   $% % % $% % % $% % % ""#     0 "  TU MZ($  &&N2 4!4!4! 4! 4!l T!T!
T! +T! T!t !%4
4 4 /	4n,1hYN>\DtN tNr8   