+
    }n j��  ã                   óˆ  € ^ RI t ^ RIt^ RIt^ RIHt ^ RIHtHtHtH	t	H
t
 ^ RIHu Ht ^ RIHtHtHtHtHtHtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIH t  ^ R	I!H"t"H#t# ^ R
I$H%t% ^ RI&H't' Rt(Rt)Rt*Rt+Rt,Rt-Rt.Rt/Rt0Rt1Rt2Rt3R^R^R^R^/t4]Pj                  ! 4       t6]Pn                  ! ]Pp                  ! ]94      4      t:]! RRR.4      t; ! R R]Px                  4      t= ! R R]%P|                  4      t?R R  lt@R5R! R" lltAR6R# R$ lltBR% R& ltCR7R' R( lltDR) R* ltER+ R, ltFR- R. ltGR8R/ R0 lltHR9R1 R2 lltIR3 R4 ltJR# ):é    N)Ú
namedtuple)ÚAnyÚDictÚListÚOptionalÚTuple)	Ú
data_typesÚevent_loggerÚ
exceptionsÚhttpÚmessagesÚsecret_managerÚsystemÚutilÚversion)Ú_enabled_services)Ú_is_attached©ÚUAConfig)ÚATTACH_FAIL_DATE_FORMAT)Úattachment_data_fileÚmachine_id_file)Úserviceclient)Úget_user_or_root_log_file_pathz/v1/context/machines/tokenz3/v1/contracts/{contract}/context/machines/{machine}z/v1/resourcesz3/v1/resources/{resource}/context/machines/{machine}z/v1/clouds/{cloud_type}/tokenz3/v1/contracts/{contract}/machine-activity/{machine}z/v1/contractz/v1/magic-attachz?/v1/contracts/{contract}/context/machines/{machine}/guest-tokenÚseries_overridesÚseriesÚcloudÚvariantÚEnableByDefaultServiceÚnamec                   ó‚  a € ] tR t^Ft o ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R	]P                  RR7      ]P
                  ! R
]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      ]P
                  ! R]P                  RR7      .tRV 3R lR lltRt	V t
R# )ÚCPUTypeDataÚcpuinfo_cpuF)ÚrequiredÚcpuinfo_cpu_architectureÚcpuinfo_cpu_familyÚcpuinfo_cpu_implementerÚcpuinfo_cpu_partÚcpuinfo_cpu_revisionÚcpuinfo_cpu_variantÚcpuinfo_modelÚcpuinfo_model_nameÚcpuinfo_steppingÚcpuinfo_vendor_idÚ"sys_firmware_devicetree_base_modelÚsysinfo_modelÚsysinfo_typeNc                óN  <€ V ^8„  d   QhRS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          R	S[ S[,          R
S[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          RS[ S[,          /# )é   r#   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   )r   Ústr)ÚformatÚ__classdict__s   "€Ú3/usr/lib/python3/dist-packages/uaclient/contract.pyÚ__annotate__ÚCPUTypeData.__annotate__z   sÏ   ø€ ÷  )ñ  )á™c•]ð )ñ #+©3¥-ð )ñ %¡S�Mð	 )ñ
 "*©#¥ð )ñ #¡3�-ð )ñ '¡s�mð )ñ &¡c�]ð )ñ  ¡•}ð )ñ %¡S�Mð )ñ #¡3�-ð )ñ $¡C�=ð )ñ -5±S­Mð )ñ  ¡•}ð )ñ ™s•mñ )ó    c                ó°   € Wn         W n        W0n        W@n        WPn        W`n        Wpn        W€n        W�n        W n	        W°n
        VV n        WÐn        Wàn        R # ©N©r#   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   )Úselfr#   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   s   &&&&&&&&&&&&&&&r7   Ú__init__ÚCPUTypeData.__init__z   s_   € ð" 'ÔØ(@Ô%Ø"4ÔØ'>Ô$Ø 0ÔØ$8Ô!Ø#6Ô Ø*ÔØ"4ÔØ 0ÔØ!2Ôà.ð 	Ô/ð +ÔØ(Ör:   r=   )NNNNNNNNNNNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r	   ÚFieldÚStringDataValueÚfieldsr?   Ú__static_attributes__Ú__classdictcell__)r6   s   @r7   r"   r"   F   s·  ø‡ € à×ÒØ˜:×5Ñ5Àô	
ð 	×ÒØ&Ø×&Ñ&Øô	
ð
 	×ÒØ  *×"<Ñ"<Àuô	
ð 	×ÒØ%Ø×&Ñ&Øô	
ð
 	×ÒØ 
× :Ñ :ÀUô	
ð 	×ÒØ" J×$>Ñ$>Èô	
ð 	×ÒØ! :×#=Ñ#=Èô	
ð 	×ÒØ˜Z×7Ñ7À%ô	
ð 	×ÒØ  *×"<Ñ"<Àuô	
ð 	×ÒØ 
× :Ñ :ÀUô	
ð 	×ÒØ ×!;Ñ!;Àeô	
ð 	×ÒØ0Ø×&Ñ&Øô	
ð
 	×ÒØ˜Z×7Ñ7À%ô	
ð 	×ÒØ˜J×6Ñ6Àô	
ð]1€F÷f )÷  )ð  )r:   r"   c                   ó¨  a a€ ] tR t^�t oRtRV3R lV 3R lllt]P                  ! ]P                  . ROR7      RR l4       t
V3R lR ltV3R lR	 lt]P                  ! ]P                  . ROR7      V3R
 lR l4       tRV3R lR lltR tV3R lR ltV3R lR ltV3R lR ltRV3R lR lltRV3R lR lltV3R lR ltR tRtVtV ;t# )ÚUAContractClientÚcontract_urlc                ó4   <€ V ^8„  d   QhRS[ S[,          RR/# )r3   ÚcfgÚreturnN)r   r   )r5   r6   s   "€r7   r8   ÚUAContractClient.__annotate__    s$   ø€ ÷ ?ñ ?á‘hÕð?ð 
ñ?r:   c                ó\   <€ \         SV `  VR 7       \        P                  ! 4       V n        R# )©rN   N)Úsuperr?   ÚmtfÚget_machine_token_fileÚmachine_token_file)r>   rN   Ú	__class__s   &&€r7   r?   ÚUAContractClient.__init__    s&   ø€ ô 	‰Ñ˜SÐÔ!Ü"%×"<Ò"<Ó">ˆÖr:   )Úretry_sleepsc                ó^  € V'       g!   \         P                  ! V P                  4      pV P                  4       pVP	                  RRP                  V4      /4       V P                  4       pVP                  4       VR&   RVRV/p\        V4      pV P                  \        WtR7      pVP                  R8X  d   \        P                  ! 4       hVP                  R8X  d   \        V4       VP                  ^È8w  d2   \        P                  ! \        VP                  VP                   R	7      hVP"                  p	\$        P&                  P)                  V	P+                  R
R4      4       V	P+                  R. 4       F2  p
\$        P&                  P)                  V
P+                  RR4      4       K4  	  V	# )aM  Requests machine attach to the provided machine_id.

@param contract_token: Token string providing authentication to
    ContractBearer service endpoint.
@param machine_id: Optional unique system machine id. When absent,
    contents of /etc/machine-id will be used.

@return: Dict of the JSON response containing the machine-token.
ÚAuthorizationú	Bearer {}ÚlastAttachmentÚ	machineIdÚactivityInfo)ÚdataÚheadersé‘  i“  ©ÚurlÚcodeÚbodyÚmachineTokenÚ ÚresourceTokensÚtoken)r   Úget_machine_idrN   ra   Úupdater5   Ú_get_activity_infoÚ	isoformatÚ_support_old_machine_infoÚrequest_urlÚAPI_V1_ADD_CONTRACT_MACHINEre   r   ÚAttachInvalidTokenErrorÚ_raise_attach_forbidden_messageÚContractAPIErrorrf   Ú	json_dictr   ÚsecretsÚ
add_secretÚget)r>   Úcontract_tokenÚattachment_dtÚ
machine_idra   Úactivity_infor`   Úbackcompat_dataÚresponseÚresponse_jsonrj   s   &&&&       r7   Úadd_contract_machineÚ%UAContractClient.add_contract_machine§   sg  € ÷ Ü×.Ò.¨t¯x©xÓ8ˆJà—,‘,“.ˆØ�‰˜¨×);Ñ);¸NÓ)KÐLÔMØ×/Ñ/Ó1ˆØ*7×*AÑ*AÓ*CˆÐ&Ñ'Ø˜Z¨¸ÐGˆÜ3°DÓ9ˆØ×#Ñ#Ü'¨oð $ó 
ˆð �=‰=˜CÔÜ×4Ò4Ó6Ð6Ø�]‰]˜cÔ!Ü+¨HÔ5Ø�=‰=˜CÔÜ×-Ò-Ü/Ø—]‘]Ø—]‘]ôð ð
 !×*Ñ*ˆÜ×Ñ×)Ñ)Ø×Ñ˜n¨bÓ1ô	
ð #×&Ñ&Ð'7¸Ö<ˆEÜ×"Ñ"×-Ñ-¨e¯i©i¸ÀÓ.DÖEñ =àÐr:   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# ©r3   rO   ©r   r4   r   )r5   r6   s   "€r7   r8   rP   Ò   s   ø€ ÷ "ñ "¡T©#©s¨(¥^ñ "r:   c                ó4  € V P                  4       pV P                  \        RVR,          RVR,          RVR,          RVR,          /R7      pVP                  ^È8w  d2   \        P
                  ! \        VP                  VP                  R7      hVP                  # )z=Requests list of entitlements available to this machine type.Úarchitecturer   ÚkernelÚvirt)Úquery_paramsrc   )rm   rp   ÚAPI_V1_AVAILABLE_RESOURCESre   r   rt   rf   ru   )r>   r|   r~   s   &  r7   Úavailable_resourcesÚ$UAContractClient.available_resourcesÒ   s•   € à×/Ñ/Ó1ˆØ×#Ñ#Ü&à ¨nÕ =Ø˜-¨Õ1Ø˜-¨Õ1Ø˜ fÕ-ð	ð $ó 
ˆð �=‰=˜CÔÜ×-Ò-Ü.Ø—]‘]Ø—]‘]ôð ð
 ×!Ñ!Ð!r:   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[3,          /# )r3   ry   rO   ©r4   r   r   )r5   r6   s   "€r7   r8   rP   æ   s#   ø€ ÷ "ñ "±sð "¹tÁCÉÀH½~ñ "r:   c                ó0  € V P                  4       pVP                  R RP                  V4      /4       V P                  \        VR7      pVP
                  ^È8w  d2   \        P                  ! \        VP
                  VP                  R7      hVP                  # )r[   r\   ©ra   rc   )
ra   rl   r5   rp   ÚAPI_V1_GET_CONTRACT_USING_TOKENre   r   rt   rf   ru   )r>   ry   ra   r~   s   &&  r7   Úget_contract_using_tokenÚ)UAContractClient.get_contract_using_tokenæ   sƒ   € Ø—,‘,“.ˆØ�‰˜¨×);Ñ);¸NÓ)KÐLÔMØ×#Ñ#Ü+°Wð $ó 
ˆð �=‰=˜CÔÜ×-Ò-Ü3Ø—]‘]Ø—]‘]ôð ð
 ×!Ñ!Ð!r:   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[3,          /# )r3   Ú
cloud_typer`   rŽ   )r5   r6   s   "€r7   r8   rP   õ   s%   ø€ ÷  ñ  Ù ð Ù(,©S±#¨X­ñ r:   c               ó  € ^ RI Hp V P                  \        P	                  V! V4      R7      VR7      pVP
                  ^È8w  d‚   VP                  P                  RR4      pV'       d-   \        P                  V4       \        P                  ! VR7      h\        P                  ! \        VP
                  VP                  R7      hVP                  p\        P                  P!                  VP                  RR4      4       V# )	z»Requests contract token for auto-attach images for Pro clouds.

@param instance: AutoAttachCloudInstance for the cloud.

@return: Dict of the JSON response containing the contract-token.
)Ú!cloud_type_to_contract_cloud_type)r•   )r`   Úmessagerh   )Ú	error_msgrc   ÚcontractToken)Úuaclient.clouds.identityr—   rp   Ú,API_V1_GET_CONTRACT_TOKEN_FOR_CLOUD_INSTANCEr5   re   ru   rx   ÚLOGÚdebugr   ÚInvalidProImagert   rf   r   rv   rw   )r>   r•   r`   r—   r~   Úmsgr   s   &$$    r7   Ú%get_contract_token_for_cloud_instanceÚ6UAContractClient.get_contract_token_for_cloud_instanceô   sà   € õ 	Oà×#Ñ#Ü8×?Ñ?Ù<¸ZÓHð @ó ð ð	 $ó 
ˆð �=‰=˜CÔØ×$Ñ$×(Ñ(¨°BÓ7ˆCßÜ—	‘	˜#”Ü ×0Ò0¸3Ô?Ð?Ü×-Ò-Ü@Ø—]‘]Ø—]‘]ôð ð !×*Ñ*ˆÜ×Ñ×)Ñ)Ø×Ñ˜o¨rÓ2ô	
ð Ðr:   c          
      óX   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          RS[S[ S[3,          /# )r3   Úmachine_tokenÚresourcer{   rO   ©r4   r   r   r   )r5   r6   s   "€r7   r8   rP     s?   ø€ ÷ $ñ $áð$ñ ð$ñ ™S•Mð	$ñ
 
‰c‘3ˆh�ñ$r:   c                ó¸  € V'       g!   \         P                  ! V P                  4      pV P                  4       pVP	                  RRP                  V4      /4       \        P                  W#R7      pV P                  WTR7      pVP                  ^È8w  d2   \        P                  ! \        VP                  VP                  R7      hVP                  P                  R4      '       d!   VP                  R,          VP                  R&   VP                  pVP                  R. 4       F2  p\        P                  P!                  VP                  RR	4      4       K4  	  V# )
av  Requests machine access context for a given resource

@param machine_token: The authentication token needed to talk to
    this contract service endpoint.
@param resource: Entitlement name.
@param machine_id: Optional unique system machine id. When absent,
    contents of /etc/machine-id will be used.

@return: Dict of the JSON response containing entitlement accessInfo.
r[   r\   )r¥   Úmachiner�   rc   Úexpiresri   rj   rh   )r   rk   rN   ra   rl   r5   Ú"API_V1_GET_RESOURCE_MACHINE_ACCESSrp   re   r   rt   rf   rx   ru   r   rv   rw   )	r>   r¤   r¥   r{   ra   rd   r~   r   rj   s	   &&&&     r7   Úget_resource_machine_accessÚ,UAContractClient.get_resource_machine_access  s  € ÷  Ü×.Ò.¨t¯x©xÓ8ˆJØ—,‘,“.ˆØ�‰˜¨×);Ñ);¸MÓ)JÐKÔLÜ0×7Ñ7Øð 8ó 
ˆð ×#Ñ# CÐ#Ó9ˆØ�=‰=˜CÔÜ×-Ò-Ü6Ø—]‘]Ø—]‘]ôð ð
 ×Ñ×Ñ 	×*Ò*Ø,4×,<Ñ,<¸YÕ,GˆH×Ñ˜yÑ)à ×*Ñ*ˆØ"×&Ñ&Ð'7¸Ö<ˆEÜ×"Ñ"×-Ñ-¨e¯i©i¸ÀÓ.DÖEñ =àÐr:   c                ó´  € V P                   P                  pV P                   P                  P                  R4      p\        P
                  ! V P                  4      pV P                  4       p\        P                  WR7      pV P                  4       pVP                  RRP                  V4      /4       V P                  WVVR7      pVP                  ^È8w  d-   \        P                  ! WWP                  VP                   R7      hVP"                  '       dC   V P                   P                  pVP"                  VR&   V P                   P%                  V4       R# R# )	z�Report current activity token and enabled services.

This will report to the contracts backend all the current
enabled services in the system.
rg   ©Úcontractr¨   r[   r\   )ra   r`   rc   r_   N)rV   Úcontract_idr¤   rx   r   rk   rN   rm   ÚAPI_V1_UPDATE_ACTIVITY_TOKENr5   ra   rl   rp   re   r   rt   rf   ru   Úwrite)r>   r°   r¤   r{   Úrequest_datard   ra   r~   s   &       r7   Úupdate_activity_tokenÚ&UAContractClient.update_activity_token=  s$  € ð ×-Ñ-×9Ñ9ˆØ×/Ñ/×=Ñ=×AÑAØó
ˆô ×*Ò*¨4¯8©8Ó4ˆ
à×.Ñ.Ó0ˆÜ*×1Ñ1Ø ð 2ó 
ˆð —,‘,“.ˆØ�‰˜¨×);Ñ);¸MÓ)JÐKÔLà×#Ñ# C¸|Ð#ÓLˆØ�=‰=˜CÔÜ×-Ò-ØŸm™m°(·-±-ôð ð ××ÐØ ×3Ñ3×AÑAˆMð -5×,>Ñ,>ˆM˜.Ñ)Ø×#Ñ#×)Ñ)¨-Ö8ñ r:   c                ó<   <€ V ^8„  d   QhRS[ RS[S[ S[3,          /# )r3   Úmagic_tokenrO   rŽ   )r5   r6   s   "€r7   r8   rP   e  s#   ø€ ÷ ñ ±sð ¹tÁCÉÀH½~ñ r:   c                óD  € V P                  4       pVP                  RRP                  V4      /4       V P                  \        VR7      pVP
                  R8X  d   \        P                  ! 4       hVP
                  R8X  d   \        P                  ! 4       hVP
                  ^È8w  d2   \        P                  ! \        VP
                  VP                  R7      hVP                  p. ROpV F2  p\        P                  P                  VP                  VR4      4       K4  	  V# )	z Request magic attach token info.

When the magic token is registered, it will contain new fields
that will allow us to know that the attach process can proceed
r[   r\   r�   rb   é÷  rc   rh   ©rj   ÚuserCoderš   )ra   rl   r5   rp   Ú"API_V1_GET_MAGIC_ATTACH_TOKEN_INFOre   r   ÚMagicAttachTokenErrorÚMagicAttachUnavailablert   rf   ru   r   rv   rw   rx   )r>   r·   ra   r~   r   Úsecret_fieldsÚfields   &&     r7   Úget_magic_attach_token_infoÚ,UAContractClient.get_magic_attach_token_infoe  sð   € ð —,‘,“.ˆØ�‰˜¨×);Ñ);¸KÓ)HÐIÔJØ×#Ñ#Ü.¸ð $ó 
ˆð �=‰=˜CÔÜ×2Ò2Ó4Ð4Ø�=‰=˜CÔÜ×3Ò3Ó5Ð5Ø�=‰=˜CÔÜ×-Ò-Ü6Ø—]‘]Ø—]‘]ôð ð
 !×*Ñ*ˆÚ>ˆÛ"ˆEÜ×"Ñ"×-Ñ-¨m×.?Ñ.?ÀÀrÓ.JÖKñ #àÐr:   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# rƒ   r„   )r5   r6   s   "€r7   r8   rP   �  s   ø€ ÷ ñ ©©S±#¨X­ñ r:   c                ó¶  € V P                  4       pV P                  \        VRR7      pVP                  R8X  d   \        P
                  ! 4       hVP                  ^È8w  d2   \        P                  ! \        VP                  VP                  R7      hVP                  p. ROpV F2  p\        P                  P                  VP                  VR4      4       K4  	  V# )z)Create a magic attach token for the user.ÚPOST©ra   Úmethodr¹   rc   rh   rº   )ra   rp   ÚAPI_V1_NEW_MAGIC_ATTACHre   r   r¾   rt   rf   ru   r   rv   rw   rx   )r>   ra   r~   r   r¿   rÀ   s   &     r7   Únew_magic_attach_tokenÚ'UAContractClient.new_magic_attach_token�  s»   € à—,‘,“.ˆØ×#Ñ#Ü#ØØð $ó 
ˆð �=‰=˜CÔÜ×3Ò3Ó5Ð5Ø�=‰=˜CÔÜ×-Ò-Ü+Ø—]‘]Ø—]‘]ôð ð
 !×*Ñ*ˆÚ>ˆÛ"ˆEÜ×"Ñ"×-Ñ-¨m×.?Ñ.?ÀÀrÓ.JÖKñ #àÐr:   c                ó    <€ V ^8„  d   QhRS[ /# )r3   r·   )r4   )r5   r6   s   "€r7   r8   rP   ˜  s   ø€ ÷ ñ ±Sñ r:   c                ó  € V P                  4       pVP                  RRP                  V4      /4       V P                  \        VRR7      pVP
                  R8X  d   \        P                  ! 4       hVP
                  R8X  d   \        P                  ! 4       hVP
                  R8X  d   \        P                  ! 4       hVP
                  ^È8w  d2   \        P                  ! \        VP
                  VP                  R7      hR	# )
z)Revoke a magic attach token for the user.r[   r\   ÚDELETErÆ   é�  rb   r¹   rc   N)ra   rl   r5   rp   ÚAPI_V1_REVOKE_MAGIC_ATTACHre   r   Ú MagicAttachTokenAlreadyActivatedr½   r¾   rt   rf   )r>   r·   ra   r~   s   &&  r7   Úrevoke_magic_attach_tokenÚ*UAContractClient.revoke_magic_attach_token˜  sÏ   € à—,‘,“.ˆØ�‰˜¨×);Ñ);¸KÓ)HÐIÔJØ×#Ñ#Ü&ØØð $ó 
ˆð �=‰=˜CÔÜ×=Ò=Ó?Ð?Ø�=‰=˜CÔÜ×2Ò2Ó4Ð4Ø�=‰=˜CÔÜ×3Ò3Ó5Ð5Ø�=‰=˜CÔÜ×-Ò-Ü.Ø—]‘]Ø—]‘]ôð ñ  r:   c          
      óX   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          RS[S[ S[3,          /# ©r3   r¤   r°   r{   rO   r¦   )r5   r6   s   "€r7   r8   rP   ¯  s?   ø€ ÷ )"ñ )"áð)"ñ ð)"ñ ™S•Mð	)"ñ
 
‰c‘3ˆh�ñ)"r:   c                óŠ  € V'       g!   \         P                  ! V P                  4      pV P                  4       pVP	                  RRP                  V4      /4       \        P                  VVR7      pV P                  4       pV P                  VRVRVR,          RVR,          RVR,          RVR,          /R	7      pVP                  ^È8w  d-   \        P                  ! WWP                  VP                  R
7      hVP                  P                  R4      '       d!   VP                  R,          VP                  R&   VP                  # )aL  Get the updated machine token from the contract server.

@param machine_token: The machine token needed to talk to
    this contract service endpoint.
@param contract_id: Unique contract id provided by contract service
@param machine_id: Optional unique system machine id. When absent,
    contents of /etc/machine-id will be used.
r[   r\   r®   ÚGETr†   r   r‡   rˆ   )rÇ   ra   r‰   rc   r©   )r   rk   rN   ra   rl   r5   ÚAPI_V1_GET_CONTRACT_MACHINErm   rp   re   r   rt   rf   rx   ru   )r>   r¤   r°   r{   ra   rd   r|   r~   s   &&&&    r7   Úget_contract_machineÚ%UAContractClient.get_contract_machine¯  s&  € ÷ Ü×.Ò.¨t¯x©xÓ8ˆJà—,‘,“.ˆØ�‰˜¨×);Ñ);¸MÓ)JÐKÔLÜ)×0Ñ0Ø Øð 1ó 
ˆð ×/Ñ/Ó1ˆØ×#Ñ#ØØØà ¨nÕ =Ø˜-¨Õ1Ø˜-¨Õ1Ø˜ fÕ-ð	ð	 $ó 

ˆð �=‰=˜CÔÜ×-Ò-ØŸm™m°(·-±-ôð ð ×Ñ×Ñ 	×*Ò*Ø,4×,<Ñ,<¸YÕ,GˆH×Ñ˜yÑ)Ø×!Ñ!Ð!r:   c                óB   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          RS[/# rÔ   )r4   r   r   )r5   r6   s   "€r7   r8   rP   Ú  s7   ø€ ÷ &"ñ &"áð&"ñ ð&"ñ ™S•Mð	&"ñ
 
ñ&"r:   c                ó\  € V'       g!   \         P                  ! V P                  4      pV P                  4       pVP	                  RRP                  V4      /4       RVRV P                  4       /p\        V4      p\        P                  W#R7      pV P                  WtRVR7      pVP                  ^È8w  d-   \        P                  ! WxP                  VP                  R7      hVP                  P                  R	4      '       d!   VP                  R	,          VP                  R	&   VP                  # )
a�  Request machine token refresh from contract server.

@param machine_token: The machine token needed to talk to
    this contract service endpoint.
@param contract_id: Unique contract id provided by contract service.
@param machine_id: Optional unique system machine id. When absent,
    contents of /etc/machine-id will be used.

@return: Dict of the JSON response containing refreshed machine-token
r[   r\   r^   r_   r®   rÅ   )ra   rÇ   r`   rc   r©   )r   rk   rN   ra   rl   r5   rm   ro   ÚAPI_V1_UPDATE_CONTRACT_MACHINErp   re   r   rt   rf   rx   ru   )	r>   r¤   r°   r{   ra   r`   r}   rd   r~   s	   &&&&     r7   Úupdate_contract_machineÚ(UAContractClient.update_contract_machineÚ  s  € ÷  Ü×.Ò.¨t¯x©xÓ8ˆJà—,‘,“.ˆØ�‰˜¨×);Ñ);¸MÓ)JÐKÔLà˜Ø˜D×3Ñ3Ó5ð
ˆô 4°DÓ9ˆÜ,×3Ñ3Ø ð 4ó 
ˆð ×#Ñ#Ø¨°oð $ó 
ˆð �=‰=˜CÔÜ×-Ò-ØŸm™m°(·-±-ôð ð ×Ñ×Ñ 	×*Ò*Ø,4×,<Ñ,<¸YÕ,GˆH×Ñ˜yÑ)Ø×!Ñ!Ð!r:   c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[/# rÔ   )r4   r   )r5   r6   s   "€r7   r8   rP     s3   ø€ ÷ !"ñ !"áð!"ñ ð!"ñ ð	!"ñ
 
ñ!"r:   c                óž  € V P                  4       pVP                  RRP                  V4      /4       \        P                  VVR7      pV P	                  WTRR7      pVP
                  R8X  d   \        P                  ! RR7      hVP
                  ^È8w  d.   \        P                  ! VVP
                  VP                  R	7      hVP                  # )
ay  Request guest token associated with this machine's contract
@param machine_token: The machine token needed to talk to
    this contract service endpoint.
@param contract_id: Unique contract id provided by contract service
@param machine_id: Unique machine id that was registered with the pro
    backend on attach.
@return: Dict of the JSON response containing the guest token
r[   r\   r®   rÖ   rÆ   rÎ   Úget_guest_token)Úfeature_namerc   )ra   rl   r5   ÚAPI_V1_GET_GUEST_TOKENrp   re   r   Ú FeatureNotSupportedOldTokenErrorrt   rf   ru   )r>   r¤   r°   r{   ra   rd   r~   s   &&&&   r7   rá   Ú UAContractClient.get_guest_token  sÁ   € ð —,‘,“.ˆØ�‰˜¨×);Ñ);¸MÓ)JÐKÔLÜ$×+Ñ+Ø Øð ,ó 
ˆð ×#Ñ# CÀÐ#ÓGˆØ�=‰=˜CÔô ×=Ò=Ø.ôð ð �]‰]˜cÔ!Ü×-Ò-ØØ—]‘]Ø—]‘]ôð ð
 ×!Ñ!Ð!r:   c                 óv  € \         P                  ! 4       pR\         P                  ! 4       P                  R\         P                  ! 4       P
                  R\         P                  ! 4       P                  R\         P                  ! 4       R\         P                  ! 4       R\         P                  ! 4       R\        P                  ! 4       R\        VP                  VP                  VP                  VP                   VP"                  VP$                  VP&                  VP(                  VP*                  VP,                  VP.                  VP0                  VP2                  VP4                  R	7      P7                  R
R7      /p\9        V P:                  4      P<                  '       Ed   \?        V P:                  4      P@                  p\B        PD                  ! 4       pRV PF                  PH                  ;'       g!    \         PJ                  ! V P:                  4      RV PF                  PL                  RV Uu. uF  qUPN                  NK  	  upRV Uu/ uF.  pVPP                  '       g   K  VPN                  VPR                  bK0  	  upRV'       d   VPT                  PW                  4       MR/pM/ p/ VCVC# u upi u upi )z9Return a dict of activity info data for contract requestsÚdistributionr‡   r   r†   Údesktoprˆ   ÚclientVersionÚcpu_typer=   F)Ú	keep_noneÚ
activityIDÚactivityTokenÚ	resourcesÚresourceVariantsr]   N),r   Úget_cpu_infoÚget_release_inforç   Úget_kernel_infoÚuname_releaser   Úget_dpkg_archÚ
is_desktopÚget_virt_typer   Úget_versionr"   r#   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   Úto_dictr   rN   Úis_attachedr   Úenabled_servicesr   ÚreadrV   Úactivity_idrk   Úactivity_tokenr    Úvariant_enabledÚvariant_nameÚattached_atrn   )r>   ÚcpuinfoÚmachine_inforú   Úattachment_dataÚservicer|   s   &      r7   rm   Ú#UAContractClient._get_activity_info%  s>  € ô ×%Ò%Ó'ˆàœF×3Ò3Ó5×BÑBØ”f×,Ò,Ó.×<Ñ<Ø”f×-Ò-Ó/×6Ñ6ØœF×0Ò0Ó2Ø”v×(Ò(Ó*Ø”F×(Ò(Ó*ØœW×0Ò0Ó2ØœØ#×/Ñ/Ø)0×)IÑ)IØ#*×#=Ñ#=Ø(/×(GÑ(GØ!(×!9Ñ!9Ø%,×%AÑ%AØ$+×$?Ñ$?Ø%×3Ñ3Ø#*×#=Ñ#=Ø!(×!9Ñ!9Ø")×";Ñ";Ø3:×3]Ñ3]Ø%×3Ñ3Ø$×1Ñ1ô÷ ‰g ˆgÓ&ð/
ˆô4 ˜Ÿ™Ó!×-×-Ñ-Ü0°·±Ó:×KÑKÐÜ2×7Ò7Ó9ˆOà˜d×5Ñ5×AÑA÷ 3ð 3Ü×(Ò(¨¯©Ó2Ø ×!8Ñ!8×!GÑ!GØÑ:JÓKÑ:J¨wŸlœlÑ:JÑKØ"á#3ó%á#3˜Ø×.Õ.ô 7�G—L‘L '×"6Ñ"6Ò6Ù#3ñ%ð
 !ç&ð $×/Ñ/×9Ñ9Ô;àð‰Mð" ˆMð
Øð
àð
ð 	
ùò Lùò%s   È1J1ÉJ6É%J6)rV   r<   )é   r3   r3   )rA   rB   rC   rD   Úcfg_url_base_attrr?   r   ÚretryÚsocketÚtimeoutr€   r‹   r’   r¡   r«   r´   rÁ   rÉ   rÑ   rØ   rÝ   rá   rm   rH   rI   Ú__classcell__)rW   r6   s   @@r7   rK   rK   �   sË   ù‡ € Ø&Ð÷?õ ?ð 
‡Z‚Z�—‘ªYÔ7ó(ó 8ð(÷T"ð "÷("ð "ð 
‡Z‚Z�—‘ªYÔ7÷ ó 8ð ÷D$ò $òL&9÷Pð ÷8ð ÷.ð ÷.)"ò )"÷V&"ò &"÷P!"ð !"÷F7
ò 7
r:   rK   c                ó$   € V ^8„  d   QhR\         /# )r3   Úrequest_body)Údict)r5   s   "r7   r8   r8   _  s   € ÷ ñ ¬Dñ r:   c                ó  € V P                  R/ 4      pRV P                  R4      RVRVP                  R4      RRVP                  R4      RVP                  R4      RVP                  R4      RR	R
\        P                  ! 4       P                  //# )a'  
Transforms a request_body that has the new activity_info into a body that
includes both old and new forms of machineInfo/activityInfo

This is necessary because there may be old ua-airgapped contract
servers deployed that we need to support.
This function is used for attach and refresh calls.
r_   r^   r†   Úosrç   r‡   r   ÚtypeÚLinuxÚrelease)rx   r   rñ   r  )r  r|   s   & r7   ro   ro   _  sš   € ð !×$Ñ$ ^°RÓ8€Mð 	�\×%Ñ% kÓ2Ø˜Ø˜×)Ñ)¨.Ó9ØØ˜M×-Ñ-¨nÓ=Ø�m×'Ñ'¨Ó1Ø�m×'Ñ'¨Ó1ð �GØ”v×.Ò.Ó0×8Ñ8ð
ð	ð r:   c                ó¨   € V ^8„  d   QhR\         R\        \        \        3,          R\        \        \        3,          R\        R\        R\        RR/# )	r3   rN   Úpast_entitlementsÚnew_entitlementsÚallow_enabler   ÚverboserO   N)r   r   r4   r   Úbool)r5   s   "r7   r8   r8   z  sg   € ÷ Z
ñ Z
Ü	ðZ
äœC¤˜H•~ðZ
ô œ3¤˜8•nðZ
ô ð	Z
ô
 ðZ
ô ðZ
ð 
ñZ
r:   c                óH  € ^ RI Hp Rp. p. p	V! V 4       F[  p
 W*,          p. p	 \        T TP	                  T
/ 4      TTTTR7      w  rÍT'       d"   T'       d   \
        P                  T
4       KY  K[  K]  	  \
        P                  V	4       \        V4      ^ 8”  dg   \        P                   ! \#        W˜4       U
Uu. uF9  w  r¯V
\$        P&                  P)                  \+        V4      \-        4       R7      3NK;  	  upp
R	7      hV'       d8   \        P.                  ! V	 U
u. uF  p
V
\$        P0                  3NK  	  up
R	7      hR#   \         d     EK:  i ; i  \        P                   dL   p\        P                  T4       RpT	P                  T
4       \        P                  RT
T4        Rp?EK™  Rp?i\         d[   p\        P                  T4       TP                  T4       T	P                  T
4       \        P                  RT
T4        Rp?EKü  Rp?ii ; iu upp
i u up
i )
a¯  Iterate over all entitlements in new_entitlement and apply any delta
found according to past_entitlements.

:param cfg: UAConfig instance
:param past_entitlements: dict containing the last valid information
    regarding service entitlements.
:param new_entitlements: dict containing the current information regarding
    service entitlements.
:param allow_enable: Boolean set True if allowed to perform the enable
    operation. When False, a message will be logged to inform the user
    about the recommended enabled service.
:param series_overrides: Boolean set True if series overrides should be
    applied to the new_access dict.
:param verbose: If True, display output to stdout
)Úentitlements_enable_orderF)rN   Úorig_accessÚ
new_accessr  r   r  Tz+Failed to process contract delta for %s: %rNz5Unexpected error processing contract delta for %s: %r)r™   Úlog_path)Úfailed_services)Úuaclient.entitlementsr  ÚKeyErrorÚprocess_entitlement_deltarx   ÚeventÚservice_processedr   ÚUbuntuProErrorr�   Ú	exceptionÚappendÚerrorÚ	ExceptionÚservices_failedÚlenÚAttachFailureUnknownErrorÚzipr   ÚUNEXPECTED_ERRORr5   r4   r   ÚAttachFailureDefaultServicesÚ!E_ATTACH_FAILURE_DEFAULT_SERVICES)rN   r  r  r  r   r  r  Údelta_errorÚunexpected_errorsr  r    Únew_entitlementÚdeltasÚservice_enabledÚer&  s   &&&&&&          r7   Úprocess_entitlements_deltar7  z  s  € õ. @à€KØÐð €OÙ)¨#Ö.ˆð	Ø.Õ4ˆOð ˆð	.Ü&?ØØ-×1Ñ1°$¸Ó;Ø*Ø)Ø!1Øô'Ñ#ˆF÷: §6Ü×'Ñ'¨Ö-ñ $*‰ñK /ôN 
×Ñ˜/Ô*Ü
ÐÓ Ô!Ü×2Ò2ô (+¨?Ô'Nô	ñ (O‘O�Dð Ü×-Ñ-×4Ñ4Ü"% i£.Ü!?Ó!Að 5ó óñ (Oò	ô
ð 	
÷ 
Ü×5Ò5ñ ,óá+�Dð ”x×AÑAÓBÙ+ñô
ð 	
ñ 
øôe ô 	Ûð	ûô ×(Ñ(ô 	Ü�M‰M˜!ÔØˆKØ×"Ñ" 4Ô(Ü�I‰IØ=ØØ÷ó ûô
 ô 	Ü�M‰M˜!ÔØ×$Ñ$ QÔ'Ø×"Ñ" 4Ô(Ü�M‰MØGØØ÷ó ûð		üó"	ùòsG   ™E ¤#EÂ7?H
ÄHÅ EÅEÅHÅ(?F.Æ.HÆ;HÆ<AHÈHc                óÒ   € V ^8„  d   QhR\         R\        \        \        3,          R\        \        \        3,          R\        R\        R\        R\
        \        \        3,          /# )r3   rN   r  r  r  r   r  rO   )r   r   r4   r   r  r   )r5   s   "r7   r8   r8   ×  sg   € ÷ >ñ >Ü	ð>ä”cœ3�h•ð>ô ”Sœ#�X•ð>ô ð	>ô
 ð>ô ð>ô Œ4”ˆ:Õñ>r:   c                óX  € ^ RI Hp V'       d   \        V4       \        P                  ! W4      pRpV'       d»   VP                  R/ 4      P                  R4      p	V	'       g"   VP                  R/ 4      P                  R4      p	V	'       g   \        P                  ! WR7      hVP                  R/ 4      P                  R/ 4      P                  RR	4      p
 V! V V	V
R
7      pTP                  YY5R7      pWx3#   \        P                   d   p\        P                  RT	4       ThRp?ii ; i)a&  Process a entitlement access dictionary deltas if they exist.

:param cfg: UAConfig instance
:param orig_access: Dict with original entitlement access details before
    contract refresh deltas
:param new_access: Dict with updated entitlement access details after
    contract refresh
:param allow_enable: Boolean set True if allowed to perform the enable
    operation. When False, a message will be logged to inform the user
    about the recommended enabled service.
:param series_overrides: Boolean set True if series overrides should be
    applied to the new_access dict.
:param verbose: If True, display output to stdout

:raise UbuntuProError: on failure to process deltas.
:return: A tuple containing a dict of processed deltas and a
         boolean indicating if the service was fully processed
©Úentitlement_factoryFÚentitlementr  )ÚorigÚnewÚentitlementsÚobligationsÚuse_selectorrh   ©rN   r    r   z3Skipping entitlement deltas for "%s". No such classN©r  r  )r   r;  Úapply_contract_overridesr   Úget_dict_deltasrx   r   Ú InvalidContractDeltasServiceTypeÚEntitlementNotFoundErrorr�   rž   Úprocess_contract_deltas)rN   r  r  r  r   r  r;  r4  Úretr    r   r<  Úexcs   &&&&&&       r7   r"  r"  ×  s  € õ4 :çÜ  Ô,ä×!Ò! +Ó:€FØ
€CßØ�‰˜}¨bÓ1×5Ñ5°fÓ=ˆßØ—:‘:˜m¨RÓ0×4Ñ4°VÓ<ˆDßÜ×=Ò=Ø ôð ð
 �N‰N˜>¨2Ó.ß‰S� Ó#ß‰S� Ó$ð 	ð

	Ù-ØØØôˆKð ×1Ñ1Ø¨lð 2ó 
ˆð ˆ;Ðøô ×2Ñ2ô 	Ü�I‰IØEÀtôð ˆIûð		ús   ÃC7 Ã7D)ÄD$Ä$D)c                óX   € V ^8„  d   QhR\         P                  R\        P                  /# )r3   r~   rO   )r   ÚHTTPResponser   ÚNamedMessage)r5   s   "r7   r8   r8     s(   € ÷ *ñ *Ü×Ñð*ä×Ññ*r:   c                 ó  € V P                   P                  R 4      pV'       dÕ   VR,          pVR,          pVR8X  dL   VR,          P                  \        4      p\        P
                  ! VVVR,          P                  R4      R7      hVR8X  dL   VR,          P                  \        4      p\        P                  ! VVVR,          P                  R4      R7      hVR	8X  d   \        P                  ! VR
7      h\        P                  ! 4       h)ÚinfoÚ
contractIdÚreasonzno-longer-effectiveÚtimez%m-%d-%Y)r°   ÚdateÚcontract_expiry_dateznot-effective-yet)r°   rS  Úcontract_effective_dateznever-effective)r°   )	ru   rx   Ústrftimer   r   ÚAttachForbiddenExpiredÚAttachForbiddenNotYetÚAttachForbiddenNeverÚAttachExpiredToken)r~   rO  r°   rQ  rS  s   &    r7   rs   rs     sï   € ð ×Ñ×!Ñ! &Ó)€DßØ˜<Õ(ˆØ�h•ˆØÐ*Ô*Ø˜•<×(Ñ(Ô)@ÓAˆDÜ×3Ò3Ø'Øà%)¨&¥\×%:Ñ%:¸:Ó%Fô	ð ð Ð*Ô*Ø˜•<×(Ñ(Ô)@ÓAˆDÜ×2Ò2Ø'Øà(,¨V­×(=Ñ(=¸jÓ(Iô	ð ð Ð(Ô(Ü×1Ò1¸kÔJÐJä
×
'Ò
'Ó
)Ð)r:   c                ó$   € V ^8„  d   QhR\         /# )r3   rN   r   )r5   s   "r7   r8   r8   5  s   € ÷ !ñ !”ñ !r:   c                ó  € \         P                  ! V 4      pVP                  4       pVP                  pVR,          pVR,          R,          R,          p\	        V R7      pVP                  WVR7      pVP                  V4       \        P                  P                  4        VP                  R/ 4      P                  R\        P                  ! V 4      4      p	\        P                  ! V	4       \        V VVP                  4       RVR	7       R
# )zþRequest contract refresh from ua-contracts service.

:param verbose: If True, display output to stdout

:raise UbuntuProError: on failure to update contract or error processing
    contract deltas
:raise ConnectivityError: On failure during a connection
rg   ÚmachineTokenInfoÚcontractInfoÚidrR   )r¤   r°   r^   FrC  N)rT   rU   r?  r¤   rK   rÝ   r²   r   rk   Úcache_clearrx   r   r7  )
rN   r  rV   Úorig_entitlementsÚ
orig_tokenr¤   r°   Úcontract_clientÚrespr{   s
   &&        r7   Úrefreshre  5  sî   € ô ×3Ò3°CÓ8ÐØ*×7Ñ7Ó9ÐØ#×1Ñ1€JØ˜~Õ.€MØÐ/Õ0°Õ@ÀÕF€Kä&¨3Ô/€OØ×2Ñ2Ø#ð 3ó €Dð ×Ñ˜TÔ"Ü
×Ñ×%Ñ%Ô'Ø—‘Ð,¨bÓ1×5Ñ5Ø”V×*Ò*¨3Ó/ó€Jô ×Ò˜*Ô%äØØØ×'Ñ'Ó)ØØ÷r:   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# )r3   rN   rO   )r   r   r   )r5   s   "r7   r8   r8   Y  s   € ÷ *ñ *¤ð *¬d´4­jñ *r:   c                ó\   € \        V 4      pVP                  4       pVP                  R. 4      # )zDQuery available resources from the contract server for this machine.rî   )rK   r‹   rx   )rN   Úclientrî   s   &  r7   Úget_available_resourcesri  Y  s+   € ä˜cÓ"€FØ×*Ñ*Ó,€IØ�=‰=˜ bÓ)Ð)r:   c                ó^   € V ^8„  d   QhR\         R\        R\        \        \        3,          /# )r3   rN   rj   rO   )r   r4   r   r   )r5   s   "r7   r8   r8   `  s)   € ÷ 2ñ 2¤(ð 2´3ð 2¼4ÄÄSÀ½>ñ 2r:   c                ó:   € \        V 4      pVP                  V4      # )z/Query contract information for a specific token)rK   r’   )rN   rj   rh  s   && r7   Úget_contract_informationrl  `  s   € ä˜cÓ"€FØ×*Ñ*¨5Ó1Ð1r:   c                ó–   € V ^8„  d   QhR\         \        \        3,          R\         \        \        \        ,          3,          R\        /# )r3   Úoverride_selectorÚselector_valuesrO   )r   r4   r   Úint)r5   s   "r7   r8   r8   f  s<   € ÷ 
ñ 
ÜœC¤˜H•~ð
äœ#œx¬�}Ð,Õ-ð
ô 	ñ
r:   c                 ó–   € ^ pV P                  4        F2  w  r4W43VP                  4       9  d    ^ # V\        V,          ,          pK4  	  V# )r   )ÚitemsÚOVERRIDE_SELECTOR_WEIGHTS)rn  ro  Úoverride_weightÚselectorÚvalues   &&   r7   Ú_get_override_weightrw  f  sM   € ð €OØ,×2Ñ2Ö4‰ˆØÐ O×$9Ñ$9Ó$;Ô;ÚØÔ4°XÕ>Õ>Šñ 5ð
 Ðr:   c                óæ   € V ^8„  d   QhR\         \        \        3,          R\        R\        \        ,          R\        \        ,          R\         \        \         \        \        3,          3,          /# )r3   r<  Úseries_namer•   r   rO   )r   r4   r   r   rp  )r5   s   "r7   r8   r8   s  s\   € ÷ ñ Ü”cœ3�h•ðäðô œ•ðô ”c�]ð	ô
 
Œ#Œt”Cœ�H�~Ð
Õñr:   c                 óR  € / pR VRV/pV'       d   W5R&   V P                  R / 4      P                  V/ 4      pV'       d   VV\        R,          &   \        P                  ! V P	                  R. 4      4      pV F,  p\        VP                  R4      V4      p	V	'       g   K(  W„V	&   K.  	  V# )r   r   r   r   Ú	overridesru  )Úpoprs  ÚcopyÚdeepcopyrx   rw  )
r<  ry  r•   r   r{  ro  r   Úgeneral_overridesÚoverrideÚweights
   &&&&      r7   Ú_select_overridesr‚  s  s¬   € ð €Ià ¨g°zÐB€OßØ%,˜	Ñ"à"—‘ x°Ó4×8Ñ8¸ÀbÓIÐßàð 	Ô+Ð,>Õ?Ñ@ô Ÿš k§o¡o°kÀ2Ó&FÓGÐÛ%ˆÜ%Ø�L‰L˜Ó$ oó
ˆ÷ ‰6Ø (�fÓñ &ð Ðr:   c                óŽ   € V ^8„  d   QhR\         \        \        3,          R\        \        ,          R\        \        ,          RR/# )r3   r  r   r   rO   N)r   r4   r   r   )r5   s   "r7   r8   r8   �  s@   € ÷ 38ñ 38Ü”cœ3�h•ð38ä”S�Mð38ô ”c�]ð38ð 
ñ	38r:   c                óH  € ^ RI HpHp \        \	        V \
        4      RV 9   .4      '       g   \        RP                  V 4      4      hVf    \        P                  ! 4       P                  MTpV! 4       w  rgV! V4      pV P                  R/ 4      p\        W…Wb4      p	\        V	P                  4       4       Fj  w  r«VP                  4        FQ  w  rÍV R,          P                  V4      p\	        V\
        4      '       d   VP                  V4       KF  WÐR,          V&   KS  	  Kl  	  R# )ao  Apply series-specific overrides to an entitlement dict.

This function mutates orig_access dict by applying any series-overrides to
the top-level keys under 'entitlement'. The series-overrides are sparse
and intended to supplement existing top-level dict values. So, sub-keys
under the top-level directives, obligations and affordance sub-key values
will be preserved if unspecified in series-overrides.

To more clearly indicate that orig_access in memory has already had
the overrides applied, the 'series' key is also removed from the
orig_access dict.

:param orig_access: Dict with original entitlement access details
)r—   Úget_cloud_typer<  z?Expected entitlement access dict. Missing "entitlement" key: {}N)r›   r—   r…  ÚallÚ
isinstancer  ÚRuntimeErrorr5   r   rñ   r   rx   r‚  Úsortedrr  rl   )r  r   r   r—   r…  ry  r•   Ú_Úorig_entitlementr{  Ú_weightÚoverrides_to_applyÚkeyrv  Úcurrents   &&&            r7   rD  rD  �  s  € ÷&ô
 ”
˜;¬Ó-¨}ÀÑ/KÐL×MÒMÜðß‘&˜Ó%ó
ð 	
ð -3ªNŒ×ÒÓ!×(Ò(Àð ñ #Ó$�M€Já2°:Ó>€JØ"—‘ }°bÓ9Ðä!Ø zó€Iô (.¨i¯o©oÓ.?Ö'@Ñ#ˆØ,×2Ñ2Ö4‰JˆCØ! -Õ0×4Ñ4°SÓ9ˆGÜ˜'¤4×(Ò(ð —‘˜uÖ%ð 38˜MÕ*¨3Ó/ó 5ó (Ar:   c                ót   € V ^8„  d   QhR\         R\        \        \        3,          R\        \
        ,          /# )r3   rN   r?  rO   )r   r   r4   r   r   r   )r5   s   "r7   r8   r8   Æ  s2   € ÷ &ñ &Ü	ð&Ü!%¤c¬3 h¥ð&ä	Ô
 Õ!ñ&r:   c                 óâ  € ^ RI Hp . pVP                  4        F¶  w  rEVP                  R/ 4      P                  RR4      p V! WVR7      pTP                  R/ 4      P                  R/ 4      pTP                  R4      p	TP                  Y‰4      '       g   K~  TP                  4       w  r«T
'       g   Kš  TP                  \        TTR7      4       K¸  	  V#   \        P
                   d     KÔ  i ; i)	r   r:  r@  rA  rh   rB  r<  ÚresourceToken)r    r   )
r   r;  rr  rx   r   rG  Ú_should_enable_by_defaultÚ
can_enabler'  r   )rN   r?  r;  Úenable_by_default_servicesÚent_nameÚ	ent_valuer   Úentr@  r’  r”  rŠ  s   &&          r7   Úget_enabled_by_default_servicesr™  Æ  sà   € õ :à!#Ðà+×1Ñ1Ö3ÑˆØ—-‘- ¨rÓ2×6Ñ6°~ÀrÓJˆð	Ù%¨#ÀgÔNˆCð  —m‘m M°2Ó6×:Ñ:¸=È"ÓMˆØ!Ÿ™ oÓ6ˆà×(Ñ(¨×DÔDØŸN™NÓ,‰MˆJß‰zØ*×1Ñ1Ü*Ø%Ø 'ôöñ  4ð* &Ð%øô! ×2Ñ2ô 	Úð	ús   Á
CÃC.Ã-C.)TT)FTT)Tr<   )NN)Kr}  Úloggingr	  Úcollectionsr   Útypingr   r   r   r   r   Úuaclient.files.machine_tokenÚfilesr¤   rT   Úuaclientr	   r
   r   r   r   r   r   r   r   Ú-uaclient.api.u.pro.status.enabled_services.v1r   Ú(uaclient.api.u.pro.status.is_attached.v1r   Úuaclient.configr   Úuaclient.defaultsr   Úuaclient.files.state_filesr   r   Úuaclient.httpr   Úuaclient.logr   rq   r×   rÜ   rŠ   rª   rœ   r±   r‘   r¼   rÈ   rÏ   rã   rs  Úget_event_loggerr#  Ú	getLoggerÚreplace_top_level_logger_namerA   r�   r   Ú
DataObjectr"   ÚUAServiceClientrK   ro   r7  r"  rs   re  ri  rl  rw  r‚  rD  r™  © r:   r7   Ú<module>r­     sj  ðÛ Û Û Ý "ß 3Õ 3ç *Ð *÷
÷ 
õ 
õ LÝ AÝ $Ý 5ß LÝ 'Ý 7ð ;Ð à9ð ð :ð ð -Ð à9ð #ð 0OÐ ,à9ð ð #1Ð à%7Ð "Ø,Ð Ø/Ð ð Fð ð
 ˜ØˆaØˆQØˆqð	Ð ð 	×%Ò%Ó'€Ø×Ò˜×:Ò:¸8ÓDÓE€ñ $Ø˜v yÐ1óÐ ô
T)�*×'Ñ'ô T)ôn
�}×4Ñ4ô 
õD÷6Z
÷z>õB*÷:!õH*õ2õ
÷÷:38÷l&r:   