ó
L]c           @   s®   d  Z  d d l Z d d l Z e j d d k Z d Z e g  e e ƒ D] \ Z Z	 e	 e f ^ qG ƒ Z
 g  e d ƒ D] Z d e ^ qu d d d … Z d „  Z d	 „  Z d S(
   sé   Python implementation of Z85 85-bit encoding

Z85 encoding is a plaintext encoding for a bytestring interpreted as 32bit integers.
Since the chunks are 32bit, a bytestring must be a multiple of 4 bytes.
See ZMQ RFC 32 for details.


iÿÿÿÿNi    i   sU   0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#i   iU   c         C   s±   t  |  ƒ d r) t d t  |  ƒ ƒ ‚ n  t  |  ƒ d } t j d | |  ƒ } g  } x8 | D]0 } x' t D] } | j t | | d ƒ qi Wq\ Wt r  t | ƒ Sd j	 | ƒ Sd S(   s   encode raw bytes into Z85i   s$   length must be multiple of 4, not %is   >%dIiU   t    N(
   t   lent
   ValueErrort   structt   unpackt   _85st   appendt   Z85CHARSt   PY3t   bytest   join(   t   rawbytest   nvaluest   valuest   encodedt   vt   offset(    (    s,   lib/python2.7/site-packages/zmq/utils/z85.pyt   encode   s    !
c         C   s  t  rK t |  t ƒ rK y |  j d ƒ }  WqK t k
 rG t d ƒ ‚ qK Xn  t |  ƒ d rt t d t |  ƒ ƒ ‚ n  t |  ƒ d } g  } xj t d t |  ƒ d ƒ D]P } d } x4 t t	 ƒ D]& \ } } | t
 |  | | | 7} q¼ W| j | ƒ q£ Wt j d | | Œ S(   s3   decode Z85 bytes to raw bytes, accepts ASCII stringt   asciis4   string argument should contain only ASCII charactersi   s(   Z85 length must be multiple of 5, not %ii    s   >%dI(   R   t
   isinstancet   strR   t   UnicodeEncodeErrorR   R   t   ranget	   enumerateR   t   Z85MAPR   R   t   pack(   t   z85bytesR   R   t   it   valuet   jR   (    (    s,   lib/python2.7/site-packages/zmq/utils/z85.pyt   decode,   s    (   t   __doc__t   sysR   t   version_infoR   R   t   dictR   t   idxt   cR   R   R   R   R   R   (    (    (    s,   lib/python2.7/site-packages/zmq/utils/z85.pyt   <module>   s   10	