ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ I]c@sJddlZddlZddlZddlZddlmZmZddlmZm Z m Z ddl m Z ddlmZddlmZddlmZmZddlmZmZd d gZeed oejpd Zd ejfd YZd efdYZdefdYZde fdYZ!dS(iN(tdatetimet timedelta(thmact hmac_sha1tsha1(tpickle(tcrypto(tclsmap(tBeakerExceptiontInvalidCryptoBackendError(t b64encodet b64decodet SignedCookietSessiontgetpidcCsdS(Nt((((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pytRcBs,eZdZddZdZdZRS(s7Extends python cookie to give digital signature supportcCs ||_tjj||dS(N(tsecrettCookiet BaseCookiet__init__(tselfRtinput((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyRs cCs|jd}tj|j|dtj}d}|d }t|t|krcd|fSx-t||D]\}}|||k7}qsW|rd|fS|d|fSdS(Nt"i(i( tstriptHMACtnewRtSHA1t hexdigesttlentNonetzip(Rtvaltsigt invalid_bitst input_sigtatb((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyt value_decodes"   cCs8tj|j|tj}t|d||ffS(Ns%s%s(RRRRRtstr(RR R!((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyt value_encode,sN(t__name__t __module__t__doc__RRR&R((((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyR s  c BseZdZdeeddddeddedd ZdZdZe eZdZ dZ e e e Z dZ dZe ee Zd Zd Zd Zd Zed ZdZdZdZRS(sSession object that uses container package for storage. ``key`` The name the cookie should be set to. ``timeout`` How long session data is considered valid. This is used regardless of the cookie being present or not to determine whether session data is still valid. ``cookie_domain`` Domain to use for the cookie. ``secure`` Whether or not the cookie should only be sent over SSL. sbeaker.session.idcKs|s$|rd|_q-d|_n ||_| p=t|j|_||_||_||_||_||_||_| |_ | |_ d|_ t |_ | |_| |_||_i|_|jrw|jdd}| r*yt| d||_Wq?tjk r&t| dd|_q?Xntjd||_|j rw|j|jkrw|j|jj|_qwn|jdk|_|jr|jtj|d<|dRGRI(R((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyRJs   cCs|j|jd|jdt|j|_tj}t|jd<|jj t}z|j y=|jd}|dkri|d6|d6}t|_ nWn4t tfk ri|d6|d6}t|_ nX|jdk r||d|jkrt}nT|j sd|kr'd|_n |d|_||d<|j||j|_Wd|jjX|r|jndS(s8Loads the data from this session from persistent storageR6tdigest_filenamesRWtsessionR1R0N(R3R@R6R=R4t namespaceRHR\R5tacquire_read_lockRlRRFtKeyErrort TypeErrorR8R]tupdatetcopyRAtrelease_read_lockRJ(Rtnowt timed_outt session_data((s?/opt/alt/python27/lib/python2.7/site-packages/beaker/session.pyRIsB               cCs|r|jrdSt|dsO|j|jd|jdt|j|_n|jj zd|r}t |j j }nt |j }| rd|jkr|jd=n ||jd|j|ds"     !