+
    üÐjñ6  ã                   óÌ   € R 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IHt  ! R R	]	4      t ! R
 R]P                   4      t ! R R]P                   4      tR# )z>
Test cases for L{twisted.protocols.haproxy.HAProxyProtocol}.
)ÚOptional)Úmock)Úaddress)ÚFactoryÚProtocol)Ú StringTransportWithDisconnection)Úunittest)ÚHAProxyWrappingFactoryc                   óH   a € ] tR t^t o RtV 3R lR ltV 3R lR ltRtV tR# )ÚStaticProtocolz.
Protocol stand-in that maintains test state.
c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€ÚM/usr/lib/python3/dist-packages/twisted/protocols/haproxy/test/test_wrapper.pyÚ__annotate__ÚStaticProtocol.__annotate__   s   ø€ ÷ "ñ "˜$ñ "ó    c                ó>   € R V n         R V n        RV n        RV n        R # )Nr   F)ÚsourceÚdestinationÚdataÚdisconnected)Úselfs   &r   Ú__init__ÚStaticProtocol.__init__   s    € Ø26ˆŒØ7;ˆÔØˆŒ	Ø!ˆÖr   c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   r   r   N)Úbytes)r   r   s   "€r   r   r      s   ø€ ÷ ñ ¡ð ¨4ñ r   c                óÜ   € V P                   '       g   Q hV P                   P                  4       V n        V P                   P                  4       V n        V ;P
                  V,          un        R # )N)Ú	transportÚgetPeerr   ÚgetHostr   r   )r   r   s   &&r   ÚdataReceivedÚStaticProtocol.dataReceived   sG   € Ø�~�~ˆ~Ðˆ~Ø—n‘n×,Ñ,Ó.ˆŒØŸ>™>×1Ñ1Ó3ˆÔØ�	Š	�TÕ�	r   )r   r   r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r%   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s   ø‡ € ñ÷"ð "÷ö r   r   c                   ó´   a € ] tR t^#t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltRtV tR# )ÚHAProxyWrappingFactoryV1TestszQ
Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v1 PROXY
headers.
c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   Ú*HAProxyWrappingFactoryV1Tests.__annotate__)   ó   ø€ ÷ .ñ .¨tñ .r   c                ó4  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pW#n        VP                  V4       VP                  R4       V P                  VP                  4       R# )ú:
Test if invalid headers result in connectionLost events.
ÚTCPú	127.1.1.1é�  s   NOTPROXY anything can go here
N©r	   r   ÚforProtocolr   ÚbuildProtocolr   ÚIPv4Addressr   ÚprotocolÚmakeConnectionr%   ÚassertFalseÚ	connected©r   ÚfactoryÚprotor"   s   &   r   Útest_invalidHeaderDisconnectsÚ;HAProxyWrappingFactoryV1Tests.test_invalidHeaderDisconnects)   s|   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  {°DÓ9ó
ˆô 5Ó6ˆ	Ø"ÔØ×Ñ˜YÔ'Ø×ÑÐ?Ô@Ø×Ñ˜×,Ñ,Ö-r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   7   s   ø€ ÷ .ñ .°dñ .r   c                óV  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pW#n        VP                  V4       VP                  R4       VP                  R4       V P                  VP                  4       R# )r5   r6   r7   r8   s   PROXY TCP4 1.1.1.1
s   2.2.2.2 8080
Nr9   rA   s   &   r   Ú$test_invalidPartialHeaderDisconnectsÚBHAProxyWrappingFactoryV1Tests.test_invalidPartialHeaderDisconnects7   s‹   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  {°DÓ9ó
ˆô 5Ó6ˆ	Ø"ÔØ×Ñ˜YÔ'Ø×ÑÐ4Ô5Ø×ÑÐ.Ô/Ø×Ñ˜×,Ñ,Ö-r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   F   s   ø€ ÷ Fñ F°$ñ Fr   c                ó  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        \        P                  P                  \        P                  P                  R7      pVP                  V4       V P                  VP                  4       \        P                  P                  4       V P                  VP                  4       \        P                  P                  4       R# )zk
Before any data is received the HAProxy protocol will return the same peer
and host as the IP connection.
r6   ú	127.0.0.1r8   )ÚhostAddressÚpeerAddressN)r	   r   r:   r   r;   r   r<   r   r   ÚsentinelÚhost_addressÚpeer_addressr>   ÚassertEqualr$   r#   rA   s   &   r   Ú test_preDataReceived_getPeerHostÚ>HAProxyWrappingFactoryV1Tests.test_preDataReceived_getPeerHostF   s±   € ô
 )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  {°DÓ9ó
ˆô 5ÜŸ™×2Ñ2ÜŸ™×2Ñ2ô
ˆ	ð 	×Ñ˜YÔ'Ø×Ñ˜Ÿ™›¬$¯-©-×*DÑ*DÔEØ×Ñ˜Ÿ™›¬$¯-©-×*DÑ*DÖEr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   W   ó   ø€ ÷ 
ñ 
¸$ñ 
r   c                ó2  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  R4       V P                  VP                  4       P                  R4       V P                  VP                  4       P                  R4       V P                  VP                  P                  P                  4       P                  R4       V P                  VP                  P                  P                  4       P                  R4       V P                  VP!                  4       P                  R4       V P                  VP!                  4       P                  R4       V P                  VP                  P                  P!                  4       P                  R4       V P                  VP                  P                  P!                  4       P                  R4       R# )	ú@
Test if IPv4 headers result in the correct host and peer data.
r6   rL   r8   s&   PROXY TCP4 1.1.1.1 2.2.2.2 8080 8888
z1.1.1.1z2.2.2.2é¸"  N)r	   r   r:   r   r;   r   r<   r   r>   r%   rR   r#   ÚhostÚportÚwrappedProtocolr"   r$   rA   s   &   r   Ú(test_validIPv4HeaderResolves_getPeerHostÚFHAProxyWrappingFactoryV1Tests.test_validIPv4HeaderResolves_getPeerHostW   s”  € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  {°DÓ9ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×ÑÐFÔGØ×Ñ˜Ÿ™›×-Ñ-¨yÔ9Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×Ñ˜Ÿ™›×-Ñ-¨yÔ9Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   w   rV   r   c                ó2  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  R4       V P                  VP                  4       P                  R4       V P                  VP                  4       P                  R4       V P                  VP                  P                  P                  4       P                  R4       V P                  VP                  P                  P                  4       P                  R4       V P                  VP!                  4       P                  R4       V P                  VP!                  4       P                  R4       V P                  VP                  P                  P!                  4       P                  R4       V P                  VP                  P                  P!                  4       P                  R4       R# )ú@
Test if IPv6 headers result in the correct host and peer data.
r6   ú::1r8   s   PROXY TCP6 ::1 ::2 8080 8888
z::2rY   N)r	   r   r:   r   r;   r   ÚIPv6Addressr   r>   r%   rR   r#   rZ   r[   r\   r"   r$   rA   s   &   r   Ú(test_validIPv6HeaderResolves_getPeerHostÚFHAProxyWrappingFactoryV1Tests.test_validIPv6HeaderResolves_getPeerHostw   s”  € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×ÑÐ>Ô?Ø×Ñ˜Ÿ™›×-Ñ-¨uÔ5Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×Ñ˜Ÿ™›×-Ñ-¨uÔ5Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   —   ó   ø€ ÷ Hñ H¸ñ Hr   c                ó>  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  R4       V P                  VP                  P                  R4       R# )ú>
Test if non-header bytes are passed to the wrapped protocol.
r6   rb   r8   s,   PROXY TCP6 ::1 ::2 8080 8888
HTTP/1.1 / GETó   HTTP/1.1 / GETN©r	   r   r:   r   r;   r   rc   r   r>   r%   rR   r\   r   rA   s   &   r   Ú'test_overflowBytesSentToWrappedProtocolÚEHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocol—   s   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×ÑÐLÔMØ×Ñ˜×.Ñ.×3Ñ3Ð5FÖGr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   ¤   ó   ø€ ÷ Hñ H¸tñ Hr   c                ó`  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  R4       VP                  R4       V P                  VP                  P                  R4       R# )ú;
Test if header streaming passes extra data appropriately.
r6   rb   r8   ó   PROXY TCP6 ::1 ::2 ó   8080 8888
HTTP/1.1 / GETrj   Nrk   rA   s   &   r   Ú-test_overflowBytesSentToWrappedProtocolChunksÚKHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolChunks¤   sŽ   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×ÑÐ1Ô2Ø×ÑÐ9Ô:Ø×Ñ˜×.Ñ.×3Ñ3Ð5FÖGr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r2   ²   s   ø€ ÷ Pñ P¸dñ Pr   c                ó‚  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  R4       VP                  R4       VP                  R4       V P                  VP                  P                  R4       R# )	zD
Test if wrapper writes all data to wrapped protocol after parsing.
r6   rb   r8   rr   rs   s   

s   HTTP/1.1 / GET

Nrk   rA   s   &   r   Ú,test_overflowBytesSentToWrappedProtocolAfterÚJHAProxyWrappingFactoryV1Tests.test_overflowBytesSentToWrappedProtocolAfter²   sœ   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×ÑÐ1Ô2Ø×ÑÐ9Ô:Ø×Ñ˜;Ô'Ø×Ñ˜×.Ñ.×3Ñ3Ð5NÖOr   r   N)r'   r(   r)   r*   r+   rD   rH   rS   r]   rd   rl   rt   rx   r,   r-   r.   s   @r   r0   r0   #   sd   ø‡ € ñ÷
.ð .÷.ð .÷Fð F÷"
ð 
÷@
ð 
÷@Hð H÷Hð H÷Pö Pr   r0   c                   ó¼   a € ] tR t^Ât o RtRtRtRtR],           ],           tV 3R lR lt	V 3R lR lt
V 3R	 lR
 ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )ÚHAProxyWrappingFactoryV2TestszQ
Test L{twisted.protocols.haproxy.HAProxyWrappingFactory} with v2 PROXY
headers.
s   

 
QUIT
!     �"¸s4   

 
QUIT
!! $                              �"¸s   

 
QUIT
!1 Øc                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   Ú*HAProxyWrappingFactoryV2Tests.__annotate__ú   r3   r   c                ód  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pW#n        VP                  V4       VP                  RV P                  R,          ,           4       V P                  VP                  4       R# )r5   r6   rb   r8   ó    :é   NNN)r	   r   r:   r   r;   r   rc   r   r=   r>   r%   Ú
IPV4HEADERr?   r@   rA   s   &   r   rD   Ú;HAProxyWrappingFactoryV2Tests.test_invalidHeaderDisconnectsú   s‰   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø"ÔØ×Ñ˜YÔ'Ø×Ñ˜7 T§_¡_°RÕ%8Õ8Ô9Ø×Ñ˜×,Ñ,Ö-r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r}     rV   r   c                óF  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  V P                  4       V P                  VP                  4       P                  R4       V P                  VP                  4       P                  R4       V P                  VP                  P                   P                  4       P                  R4       V P                  VP                  P                   P                  4       P                  R4       V P                  VP#                  4       P                  R4       V P                  VP#                  4       P                  R4       V P                  VP                  P                   P#                  4       P                  R4       V P                  VP                  P                   P#                  4       P                  R4       R# )rX   r6   rL   r8   rY   N)r	   r   r:   r   r;   r   r<   r   r>   r%   r�   rR   r#   rZ   r[   r\   r"   r$   rA   s   &   r   r]   ÚFHAProxyWrappingFactoryV2Tests.test_validIPv4HeaderResolves_getPeerHost  s—  € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  {°DÓ9ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4Ÿ?™?Ô+Ø×Ñ˜Ÿ™›×-Ñ-¨{Ô;Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×Ñ˜Ÿ™›×-Ñ-¨{Ô;Ø×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r}   (  rV   r   c                óF  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  V P                  4       V P                  VP                  4       P                  R4       V P                  VP                  4       P                  R4       V P                  VP                  P                   P                  4       P                  R4       V P                  VP                  P                   P                  4       P                  R4       V P                  VP#                  4       P                  R4       V P                  VP#                  4       P                  R4       V P                  VP                  P                   P#                  4       P                  R4       V P                  VP                  P                   P#                  4       P                  R4       R# )ra   r6   rb   r8   z0:0:0:0:0:0:0:1rY   N)r	   r   r:   r   r;   r   r<   r   r>   r%   Ú
IPV6HEADERrR   r#   rZ   r[   r\   r"   r$   rA   s   &   r   rd   ÚFHAProxyWrappingFactoryV2Tests.test_validIPv6HeaderResolves_getPeerHost(  s™  € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4Ÿ?™?Ô+Ø×Ñ˜Ÿ™›×-Ñ-Ð/@ÔAØ×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×Ñ˜Ÿ™›×-Ñ-Ð/@ÔAØ×Ñ˜Ÿ™›×-Ñ-¨tÔ4Ø×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øô	
ð 	×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Øö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r}   H  s   ø€ ÷ 
ñ 
¸$ñ 
r   c                ó¢  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! R4      4      p\        4       pVP                  V4       VP                  V P                  4       V P                  VP                  4       P                  R4       V P                  VP                  P                  P                  4       P                  R4       V P                  VP!                  4       P                  R4       V P                  VP                  P                  P!                  4       P                  R4       R# )z@
Test if UNIX headers result in the correct host and peer data.
s   /home/test/sockets/server.socks   /home/tests/mysockets/sockN)r	   r   r:   r   r;   r   ÚUNIXAddressr   r>   r%   Ú
UNIXHEADERrR   r#   Únamer\   r"   r$   rA   s   &   r   Ú(test_validUNIXHeaderResolves_getPeerHostÚFHAProxyWrappingFactoryV2Tests.test_validUNIXHeaderResolves_getPeerHostH  sü   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×ÒÐ AÓBó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4Ÿ?™?Ô+Ø×Ñ˜Ÿ™›×-Ñ-Ð/LÔMØ×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Ø)ô	
ð 	×Ñ˜Ÿ™›×-Ñ-Ð/LÔMØ×ÑØ×!Ñ!×+Ñ+×3Ñ3Ó5×:Ñ:Ø)ö	
r   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r}   ^  rg   r   c                ó`  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  V P                  R,           4       V P                  VP                  P                  R4       R# )ri   r6   rb   r8   rj   N©r	   r   r:   r   r;   r   rc   r   r>   r%   rˆ   rR   r\   r   rA   s   &   r   rl   ÚEHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocol^  sˆ   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4Ÿ?™?Ð->Õ>Ô?Ø×Ñ˜×.Ñ.×3Ñ3Ð5FÖGr   c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r}   k  ro   r   c                ó²  € \        \        P                  ! \        4      4      pVP	                  \
        P                  ! RRR4      4      p\        4       pVP                  V4       VP                  V P                  R,          4       VP                  V P                  R,          R,           4       V P                  VP                  P                  R4       R# )rq   r6   rb   r8   :Né   N:r—   NNrj   Nr“   rA   s   &   r   rt   ÚKHAProxyWrappingFactoryV2Tests.test_overflowBytesSentToWrappedProtocolChunksk  s¤   € ô )¬×)<Ò)<¼^Ó)LÓMˆØ×%Ñ%Ü×Ò  u¨dÓ3ó
ˆô 5Ó6ˆ	Ø×Ñ˜YÔ'Ø×Ñ˜4Ÿ?™?¨3Õ/Ô0Ø×Ñ˜4Ÿ?™?¨3Õ/Ð2CÕCÔDØ×Ñ˜×.Ñ.×3Ñ3Ð5FÖGr   r   Nsl   /home/tests/mysockets/sock                                                                                  )r'   r(   r)   r*   r+   r�   rˆ   Ú
_SOCK_PATHr�   rD   r]   rd   r�   rl   rt   r,   r-   r.   s   @r   r{   r{   Â   s‰   ø‡ € ñð
	ð ð 	ð ð"	Eð ðð õ	ð õ	ð ÷ .ð .÷
ð 
÷@
ð 
÷@
ð 
÷,Hð H÷Hö Hr   r{   N)r+   Útypingr   r   r   Útwisted.internetr   Útwisted.internet.protocolr   r   Útwisted.internet.testingr   Útwisted.trialÚ_wrapperr	   r   ÚTestCaser0   r{   r   r   r   Ú<module>r¡      sZ   ðñõ Ý å $ß 7Ý EÝ "Ý -ô�Xô ô$\P H×$5Ñ$5ô \Pô~uH H×$5Ñ$5ö uHr   