grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î ¤ f(ã @sƒdZddlZddlZdd„ZdZdZdZd dd dd dd ddd dd dg Z d gZ dZ x/e dd…D]Z e j e ƒe e 7Z q‹W[ [ d d „Zd d„Zdd„Zdd„Zdd„ZedƒZedƒZedƒZdd„Zdddddddd d!d"d#d$d%g Zdd&d'd(d)d*d+d,gZd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#GdCdD„dDƒZ$e$dE ƒe$_%e$dFdEdGdHdIdJdKdJdLdMƒe$_&e$dLdƒe$_'GdNdO„dOƒZ(e(Z)e(dddƒe(_%e(ddPdƒe(_&e$dFdƒe(_'GdQdR„dRƒZ*e*Z+GdSdT„dTƒZeZ,edddƒe_%edHdJdJdMƒe_&e$dLdƒe_'GdUdV„dVe(ƒZ-e-dddƒe-_%e-ddPddHdJdJdMƒe-_&e$dLdƒe-_'dWdX„Z.GdYdZ„dZe*ƒZ/e/j0e$dƒƒe/_1e/j0e/j2ƒe/_%e/j0e/j3ƒe/_&e-d[dddRe/j1ƒZ4ydd\l5TWne6k rYnnX[[ [ [[[[[[[[[ [![[[["[)[[[[[[.[[[[,[+[[dd]l5mZdS)^z†Concrete date/time and related types. See http://www.iana.org/time-zones/repository/tz-link.html for time zone and DST data sources. éNcCs$||krdS||kr dSdS)Nrééÿÿÿÿ©)ÚxÚyrrú-/opt/alt/python34/lib64/python3.4/datetime.pyÚ_cmp srri'iÛ¹7ééécCs.|ddko-|ddkp-|ddkS)zyear -> 1 if leap year, else 0.érédi�r)ÚyearrrrÚ_is_leap$srcCs*|d}|d|d|d|dS)z2year -> number of days before January 1st of year.rimr r i�r)rrrrrÚ_days_before_year(s rcCs$|dkrt|ƒrdSt|S)z9year, month -> number of days in that month in that year.éé)rÚ_DAYS_IN_MONTH)rÚmonthrrrÚ_days_in_month-srcCst||dkot|ƒS)zCyear, month -> number of days in year preceding first day of month.r)Ú_DAYS_BEFORE_MONTHr)rrrrrÚ_days_before_month4srcCs*t||ƒ}t|ƒt||ƒ|S)z>year, month, day -> ordinal, considering 01-Jan-0001 as day 1.)rrr)rrÚdayÚdimrrrÚ_ymd2ord9sri‘éeéc CsM|d8}t|tƒ\}}|dd}t|tƒ\}}t|tƒ\}}t|dƒ\}}||d|d|7}|dksž|dkr¯|dddfS|dkoÐ|d kpÐ|dk}|d d ?}t||d ko÷|}||kr2|d8}|t||d ko*|8}n||8}|||dfS) z@ordinal -> (year, month, day), considering 01-Jan-0001 as day 1.ri�imr r é r ééé2rr)ÚdivmodÚ_DI400YÚ_DI100YÚ_DI4Yrr) ÚnZn400rZn100Zn4Zn1ZleapyearrZ precedingrrrÚ_ord2ymdRs" $  ! r&ZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDecZMonZTueZWedZThuZFriZSatZSunc CsUt|||ƒdd}t||ƒ|}tj|||||||||f ƒS)Néé)rrÚ_timeZ struct_time) rÚmÚdÚhhÚmmÚssZdstflagZwdayZdnumrrrÚ_build_struct_time–sr/cCs.d|||f}|r*|d|7}n|S)Nz%02d:%02d:%02dz.%06dr)r,r-r.ÚusÚresultrrrÚ _format_time›sr2cCsLd}d}d}g}|j}dt|ƒ}} xö|| kr,||} |d7}| dkr|| kr||} |d7}| dkrÄ|dkr´dt|ddƒ}n|j|ƒq| dkr‹|dkr{d}t|d ƒr{|jƒ} | dk rxd } | jdkr.| } d } nt| td dƒƒ\} }|td dƒ}d| | |f}qxq{n|j|ƒq| dkrû|dkrëd}t|dƒrë|jƒ}|dk rè|j ddƒ}qèqën|j|ƒq|dƒ|| ƒq)|dƒq7|| ƒq7Wdj |ƒ}t j ||ƒS)Nrrú%Úfz%06dÚ microsecondÚzÚÚ utcoffsetú+ú-ÚhoursÚminutesz %c%02d%02dÚZÚtznamez%%) ÚappendÚlenÚgetattrÚhasattrr8Údaysr!Ú timedeltar>ÚreplaceÚjoinr)Ústrftime)ÚobjectÚformatÚ timetupleZfreplaceZzreplaceZZreplaceZ newformatÚpushÚir%ZchÚoffsetÚsignÚhr*ÚsrrrÚ_wrap_strftime£s\                      rQcCs#|dkrdSt||ƒ|ƒS)N)rA)ÚtzinfoZmethnameZ tzinfoargrrrÚ_call_tzinfo_methodÜs rScCs9|dk r5t|tƒ r5tdt|ƒƒ‚ndS)Nz4tzinfo.tzname() must return None or string, not '%s')Ú isinstanceÚstrÚ TypeErrorÚtype)ÚnamerrrÚ _check_tznameâsrYcCs¹|dkrdSt|tƒs>td|t|ƒfƒ‚n|tddƒsZ|jrstd||fƒ‚ntdƒ |ko—tdƒknsµtd||fƒ‚ndS)Nz3tzinfo.%s() must return None or timedelta, not '%s'r<rz9tzinfo.%s() must return a whole number of minutes, got %szV%s()=%s, must be must be strictly between -timedelta(hours=24) and timedelta(hours=24))rTrDrVrWÚ microsecondsÚ ValueError)rXrMrrrÚ_check_utc_offsetís )r\cCsÉt|tƒstdƒ‚nt|ko5tknsVtdttf|ƒ‚nd|komdkns„td|ƒ‚nt||ƒ}d|koª|knsÅtd||ƒ‚ndS)Nz int expectedzyear must be in %d..%drrzmonth must be in 1..12zday must be in 1..%d)rTÚintrVÚMINYEARÚMAXYEARr[r)rrrrrrrÚ_check_date_fieldsüsr`cCsÚt|tƒstdƒ‚nd|ko5dknsLtd|ƒ‚nd|kocdknsztd|ƒ‚nd|ko‘dkns¨td|ƒ‚nd|ko¿dknsÖtd |ƒ‚ndS) Nz int expectedrézhour must be in 0..23é;zminute must be in 0..59zsecond must be in 0..59i?Bz microsecond must be in 0..999999)rTr]rVr[)ÚhourÚminuteÚsecondr5rrrÚ_check_time_fieldssrfcCs/|dk r+t|tƒ r+tdƒ‚ndS)Nz4tzinfo argument must be None or of a tzinfo subclass)rTrRrV)ÚtzrrrÚ_check_tzinfo_argsrhcCs,tdt|ƒjt|ƒjfƒ‚dS)Nzcan't compare '%s' to '%s')rVrWÚ__name__)rrrrrÚ _cmperrorsrjcCsvt||ƒ\}}|d9}|dkr7||kn ||k}|se||krr|ddkrr|d7}n|S)zšdivide a by b and round result to the nearest integer When the ratio is exactly half-way between two integers, the even integer is returned. rrr)r!)ÚaÚbÚqÚrZgreater_than_halfrrrÚ_divide_and_rounds  $" roc @s·eZdZdZdCZddddddddd„Zdd „Zd d „Zd d „Ze dd„ƒZ e dd„ƒZ e dd„ƒZ dd„Z e Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„ZeZd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„Zd6d7„Z d8d9„Z!d:d;„Z"d<d=„Z#d>d?„Z$d@dA„Z%dBS)DrDaÕRepresent the difference between two datetime objects. Supported operators: - add, subtract timedelta - unary plus, minus, abs - compare to timedelta - multiply, divide by int In addition, datetime supports subtraction of two datetime objects returning a timedelta, and addition or subtraction of a datetime and a timedelta giving a datetime. Representation: (days, seconds, microseconds). Why? Because I felt like it. Ú_daysÚ_secondsÚ _microsecondsrcCs›d}} } ||d7}||d|d7}||d7}t|tƒr˜tj|ƒ\} }tj| dƒ\} } t| ƒ} t|ƒ}n d} |}t|tƒrátj|ƒ\}}t|ƒ}|| 7}n| }t|dƒ\}}||7}| t|ƒ7} |d }t|tƒr•||7}t|dƒ}t|d ƒ\}}t|dƒ\}}|t|ƒ7}| t|ƒ7} nit|d ƒ\}}t|dƒ\}}||7}| t|ƒ7} t|ƒ}||7}t|dƒ}t|ƒ} t| d ƒ\}} | |7} t| dƒ\}} ||7}tj|ƒ}||_ | |_ | |_ t |ƒd kr—t d |ƒ‚n|S)Nrr(é<iièg8@g ¬@grg€„.Ai@BiÿÉš;z$timedelta # of days is too large: %dgõ@i€Qgõ@i€Qi€Q)rTÚfloatÚ_mathÚmodfr]r!ÚroundrHÚ__new__rprqrrÚabsÚ OverflowError)ÚclsrCÚsecondsrZZ millisecondsr<r;Zweeksr+rPr0ZdayfracZdaysecondsfracZdaysecondswholeZ secondsfracZusdoubleÚselfrrrrxAs`               ztimedelta.__new__cCsu|jr0dd|jj|j|j|jfS|jrZdd|jj|j|jfSdd|jj|jfS)Nz%s(%d, %d, %d)z datetime.z %s(%d, %d)z%s(%d))rrÚ __class__rirprq)r}rrrÚ__repr__²s    ztimedelta.__repr__cCs�t|jdƒ\}}t|dƒ\}}d|||f}|jrodd„}d||jƒ|}n|jrŒ|d|j}n|S)Nrsz %d:%02d:%02dcSs"|t|ƒdkrdpdfS)NrrPr7)ry)r%rrrÚpluralÃsz!timedelta.__str__..pluralz %d day%s, z.%06d)r!rqrprr)r}r-r.r,rPr€rrrÚ__str__¾s   ztimedelta.__str__cCs!|jd|jd|jdS)zTotal seconds in the duration.i€Qé r'i@Bi@B)rCr|rZ)r}rrrÚ total_secondsÊsztimedelta.total_secondscCs|jS)rC)rp)r}rrrrCÐsztimedelta.dayscCs|jS)r|)rq)r}rrrr|Õsztimedelta.secondscCs|jS)rZ)rr)r}rrrrZÚsztimedelta.microsecondscCsAt|tƒr=t|j|j|j|j|j|jƒStS)N)rTrDrprqrrÚNotImplemented)r}ÚotherrrrÚ__add__ßs  ztimedelta.__add__cCsAt|tƒr=t|j|j|j|j|j|jƒStS)N)rTrDrprqrrr„)r}r…rrrÚ__sub__ês  ztimedelta.__sub__cCst|tƒr| |StS)N)rTrDr„)r}r…rrrÚ__rsub__ós ztimedelta.__rsub__cCst|j |j |j ƒS)N)rDrprqrr)r}rrrÚ__neg__øs ztimedelta.__neg__cCs|S)Nr)r}rrrÚ__pos__ÿsztimedelta.__pos__cCs|jdkr| S|SdS)Nr)rp)r}rrrÚ__abs__sztimedelta.__abs__cCs‚t|tƒr4t|j||j||j|ƒSt|tƒr~|jƒ}|jƒ\}}tddt |||ƒƒSt S)Nr) rTr]rDrprqrrrtÚ_to_microsecondsÚas_integer_ratioror„)r}r…ÚusecrkrlrrrÚ__mul__s   ztimedelta.__mul__cCs|jd|jd|jS)Nrii@Bi€Q)rprqrr)r}rrrrŒsztimedelta._to_microsecondscCsit|ttfƒstS|jƒ}t|tƒrB||jƒSt|tƒretdd||ƒSdS)Nr)rTr]rDr„rŒ)r}r…rŽrrrÚ __floordiv__s ztimedelta.__floordiv__cCs¯t|tttfƒstS|jƒ}t|tƒrE||jƒSt|tƒrmtddt||ƒƒSt|tƒr«|jƒ\}}tddt|||ƒƒSdS)Nr)rTr]rtrDr„rŒror�)r}r…rŽrkrlrrrÚ __truediv__$s ztimedelta.__truediv__cCs9t|tƒr5|jƒ|jƒ}tdd|ƒStS)Nr)rTrDrŒr„)r}r…rnrrrÚ__mod__0sztimedelta.__mod__cCsJt|tƒrFt|jƒ|jƒƒ\}}|tdd|ƒfStS)Nr)rTrDr!rŒr„)r}r…rmrnrrrÚ __divmod__6s  ztimedelta.__divmod__cCs*t|tƒr"|j|ƒdkSdSdS)NrF)rTrDr)r}r…rrrÚ__eq__?sztimedelta.__eq__cCs*t|tƒr"|j|ƒdkSdSdS)NrT)rTrDr)r}r…rrrÚ__ne__Esztimedelta.__ne__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTrDrrj)r}r…rrrÚ__le__Ksztimedelta.__le__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTrDrrj)r}r…rrrÚ__lt__Qsztimedelta.__lt__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTrDrrj)r}r…rrrÚ__ge__Wsztimedelta.__ge__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTrDrrj)r}r…rrrÚ__gt__]sztimedelta.__gt__cCst|jƒ|jƒƒS)N)rÚ _getstate)r}r…rrrrcsztimedelta._cmpcCst|jƒƒS)N)Úhashrš)r}rrrÚ__hash__gsztimedelta.__hash__cCs+|jdkp*|jdkp*|jdkS)Nr)rprqrr)r}rrrÚ__bool__jsztimedelta.__bool__cCs|j|j|jfS)N)rprqrr)r}rrrršqsztimedelta._getstatecCs|j|jƒfS)N)r~rš)r}rrrÚ __reduce__tsztimedelta.__reduce__N)z_daysz_secondsz _microseconds)&riÚ __module__Ú __qualname__Ú__doc__Ú __slots__rxrr�rƒÚpropertyrCr|rZr†Ú__radd__r‡rˆr‰rŠr‹r�Ú__rmul__rŒr�r‘r’r“r”r•r–r—r˜r™rrœr�ršržrrrrrD.sF  p                   rDiÿÉš;rCr;rar<rbr|rZi?Bc@sÏeZdZdZdDZdddd„Zedd „ƒZed d „ƒZed d „ƒZ dd„Z dd„Z dd„Z dd„Z dd„ZeZedd„ƒZedd„ƒZedd„ƒZdd„Zd d!„Zdddd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2d3„Zd4d5„ZeZ d6d7„Z!d8d9„Z"d:d;„Z#d<d=„Z$d>d?„Z%d@dA„Z&dBdC„Z'dS)EÚdateaÀConcrete date type. Constructors: __new__() fromtimestamp() today() fromordinal() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ __add__, __radd__, __sub__ (add/radd only with timedelta arg) Methods: timetuple() toordinal() weekday() isoweekday(), isocalendar(), isoformat() ctime() strftime() Properties (readonly): year, month, day Ú_yearÚ_monthÚ_dayNcCs«t|tƒrmt|ƒdkrmd|dko<dknrm|dkrmtj|ƒ}|j|ƒ|St|||ƒtj|ƒ}||_||_||_ |S)zVConstructor. Arguments: year, month, day (required, base 1) r rrrN) rTÚbytesr@rHrxÚ_date__setstater`r§r¨r©)r{rrrr}rrrrxšs!,    z date.__new__c Cs:tj|ƒ\ }}}}}}}} } ||||ƒS)z;Construct a date from a POSIX timestamp (like time.time()).)r)Ú localtime) r{Útrr*r+r,r-r.ÚweekdayÚjdayÚdstrrrÚ fromtimestamp°s*zdate.fromtimestampcCstjƒ}|j|ƒS)z"Construct a date from time.time().)r)Útimer±)r{r­rrrÚtoday¶s z date.todaycCs%t|ƒ\}}}||||ƒS)z¥Contruct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. )r&)r{r%rr*r+rrrÚ fromordinal¼szdate.fromordinalcCs'dd|jj|j|j|jfS)a5Convert to formal string, for repr(). >>> dt = datetime(2010, 1, 1) >>> repr(dt) 'datetime.datetime(2010, 1, 1, 0, 0)' >>> dt = datetime(2010, 1, 1, tzinfo=timezone.utc) >>> repr(dt) 'datetime.datetime(2010, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)' z%s(%d, %d, %d)z datetime.)r~rir§r¨r©)r}rrrrÈs z date.__repr__cCs;|jƒdpd}dt|t|j|j|jfS)zReturn ctime() style string.r(z%s %s %2d 00:00:00 %04d)Ú toordinalÚ _DAYNAMESÚ _MONTHNAMESr¨r©r§)r}r®rrrÚctimeÝs  z date.ctimecCst|||jƒƒS)zFormat using strftime().)rQrJ)r}ÚfmtrrrrGåsz date.strftimecCs)t|ƒdkr|j|ƒSt|ƒS)Nr)r@rGrU)r}r¹rrrÚ __format__és zdate.__format__cCsd|j|j|jfS)zÌReturn the date formatted according to ISO. This is 'YYYY-MM-DD'. References: - http://www.w3.org/TR/NOTE-datetime - http://www.cl.cam.ac.uk/~mgk25/iso-time.html z%04d-%02d-%02d)r§r¨r©)r}rrrÚ isoformatîs zdate.isoformatcCs|jS)z year (1-9999))r§)r}rrrrüsz date.yearcCs|jS)z month (1-12))r¨)r}rrrrsz date.monthcCs|jS)z day (1-31))r©)r}rrrrszdate.daycCs%t|j|j|jddddƒS)z9Return local time tuple compatible with time.localtime().rrr)r/r§r¨r©)r}rrrrJszdate.timetuplecCst|j|j|jƒS)z¶Return proleptic Gregorian ordinal for the year, month and day. January 1 of year 1 is day 1. Only the year, month and day values contribute to the result. )rr§r¨r©)r}rrrrµszdate.toordinalcCsh|dkr|j}n|dkr0|j}n|dkrH|j}nt|||ƒt|||ƒS)z;Return a new date with new values for the specified fields.N)r§r¨r©r`r¦)r}rrrrrrrEs      z date.replacecCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr”(sz date.__eq__cCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr•-sz date.__ne__cCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr–2sz date.__le__cCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr—7sz date.__lt__cCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr˜<sz date.__ge__cCs&t|tƒr"|j|ƒdkStS)Nr)rTr¦rr„)r}r…rrrr™Asz date.__gt__cCsY|j|j|j}}}|j|j|j}}}t|||f|||fƒS)N)r§r¨r©r)r}r…rr*r+Zy2Zm2Zd2rrrrFsz date._cmpcCst|jƒƒS)zHash.)r›rš)r}rrrrœLsz date.__hash__cCs^t|tƒrZ|jƒ|j}d|ko9tknrKtj|ƒStdƒ‚ntS)zAdd a date to a timedelta.rzresult out of range) rTrDrµrCÚ _MAXORDINALr¦r´rzr„)r}r…Úorrrr†Rs  z date.__add__cCsZt|tƒr!|t|j ƒSt|tƒrV|jƒ}|jƒ}t||ƒStS)z.Subtract two dates, or a date and a timedelta.)rTrDrCr¦rµr„)r}r…Údays1Údays2rrrr‡]s  z date.__sub__cCs|jƒddS)z:Return day of the week, where Monday == 0 ... Sunday == 6.r'r()rµ)r}rrrr®gsz date.weekdaycCs|jƒdpdS)z:Return day of the week, where Monday == 1 ... Sunday == 7.r()rµ)r}rrrÚ isoweekdaymszdate.isoweekdaycCsÔ|j}t|ƒ}t|j|j|jƒ}t||dƒ\}}|dkr‡|d8}t|ƒ}t||dƒ\}}n8|dkr¿|t|dƒkr¿|d7}d}q¿n||d|dfS)aƒReturn a 3-tuple containing ISO year, week number, and weekday. The first ISO week of the year is the (Mon-Sun) week containing the year's first Thursday; everything else derives from that. The first week is 1; Monday is 1 ... Sunday is 7. ISO calendar algorithm taken from http://www.phys.uu.nl/~vgent/calendar/isocalendar.htm r(rré4)r§Ú_isoweek1mondayrr¨r©r!)r}rÚ week1mondayr³ZweekrrrrÚ isocalendarrs        zdate.isocalendarcCs7t|jdƒ\}}t|||j|jgƒfS)Né)r!r§rªr¨r©)r}ÚyhiÚylorrrrš�szdate._getstatecCsot|ƒdks3d|dko-dkn rBtdƒ‚n|\}}|_|_|d||_dS)Nr rrrznot enough argumentsrÅ)r@rVr¨r©r§)r}ÚstringrÆrÇrrrÚ __setstate“s3zdate.__setstatecCs|j|jƒfS)N)r~rš)r}rrrrž™szdate.__reduce__)z_yearz_monthz_day)(rirŸr r¡r¢rxÚ classmethodr±r³r´rr¸rGrºr»r�r£rrrrJrµrEr”r•r–r—r˜r™rrœr†r¤r‡r®rÀrÄršr«ržrrrrr¦|sF                      r¦rc@sXeZdZdZfZdd„Zdd„Zdd„Zdd „Zd d „Z d S) rRz}Abstract base class for time zone info classes. Subclasses must override the name(), utcoffset() and dst() methods. cCstdƒ‚dS)z%datetime -> string name of time zone.z&tzinfo subclass must override tzname()N)ÚNotImplementedError)r}Údtrrrr>¨sz tzinfo.tznamecCstdƒ‚dS)z:datetime -> minutes east of UTC (negative for west of UTC)z)tzinfo subclass must override utcoffset()N)rË)r}rÌrrrr8¬sztzinfo.utcoffsetcCstdƒ‚dS)z‘datetime -> DST offset in minutes east of UTC. Return 0 if DST not in effect. utcoffset() must include the DST offset. z#tzinfo subclass must override dst()N)rË)r}rÌrrrr°°sz tzinfo.dstcCsÖt|tƒstdƒ‚n|j|k r<tdƒ‚n|jƒ}|dkrctdƒ‚n|jƒ}|dkrŠtdƒ‚n||}|rÎ||7}|jƒ}|dkrÎtdƒ‚qÎn||S)z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfNz0fromutc() requires a non-None utcoffset() resultz*fromutc() requires a non-None dst() resultz;fromutc(): dt.dst gave inconsistent results; cannot convert)rTÚdatetimerVrRr[r8r°)r}rÌZdtoffZdtdstÚdeltarrrÚfromutc¸s"        ztzinfo.fromutccCs“t|ddƒ}|r$|ƒ}nf}t|ddƒ}|rN|ƒ}nt|ddƒpcd}|dkr|j|fS|j||fSdS)NÚ__getinitargs__Ú __getstate__Ú__dict__)rAr~)r}Z getinitargsÚargsÚgetstateÚstaterrrržÕs    ztzinfo.__reduce__N) rirŸr r¡r¢r>r8r°rÏržrrrrrR¢s     rRc@s¢eZdZdZddddddd„Zedd„ƒZedd „ƒZed d „ƒZed d „ƒZ edd„ƒZ dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zddd„Zdd „Zd!d"d#„Zd$d%„Zd&d'„ZeZd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zddddd2d3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z dS)=r²a6Time with time zone. Constructors: __new__() Operators: __repr__, __str__ __eq__, __le__, __lt__, __ge__, __gt__, __hash__ Methods: strftime() isoformat() utcoffset() tzname() dst() Properties (readonly): hour, minute, second, microsecond, tzinfo rNcCs˜tj|ƒ}t|tƒrJt|ƒdkrJ|j||pBdƒ|St|ƒt||||ƒ||_||_ ||_ ||_ ||_ |S)z™Constructor. Arguments: hour, minute (required) second, microsecond (default to zero) tzinfo (default to None) r'N) rHrxrTrªr@Ú_time__setstaterhrfÚ_hourÚ_minuteÚ_secondÚ _microsecondÚ_tzinfo)r{rcrdrer5rRr}rrrrxÿs !      z time.__new__cCs|jS)z hour (0-23))r×)r}rrrrcsz time.hourcCs|jS)z minute (0-59))rØ)r}rrrrdsz time.minutecCs|jS)z second (0-59))rÙ)r}rrrre!sz time.secondcCs|jS)zmicrosecond (0-999999))rÚ)r}rrrr5&sztime.microsecondcCs|jS)ztimezone info object)rÛ)r}rrrrR+sz time.tzinfocCs0t|tƒr(|j|ddƒdkSdSdS)NÚ allow_mixedTrF)rTr²r)r}r…rrrr”4sz time.__eq__cCs0t|tƒr(|j|ddƒdkSdSdS)NrÜTr)rTr²r)r}r…rrrr•:sz time.__ne__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTr²rrj)r}r…rrrr–@sz time.__le__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTr²rrj)r}r…rrrr—Fsz time.__lt__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTr²rrj)r}r…rrrr˜Lsz time.__ge__cCs3t|tƒr"|j|ƒdkSt||ƒdS)Nr)rTr²rrj)r}r…rrrr™Rsz time.__gt__Fc Cs>|j}|j}d}}||kr1d}n$|jƒ}|jƒ}||k}|r˜t|j|j|j|jf|j|j|j|jfƒS|dks°|dkrÉ|rºdStdƒ‚n|jd|j|tddƒ}|jd|j|tddƒ} t||j|jf| |j|jfƒS)NTrz$cannot compare naive and aware timesrsr<r) rÛr8rr×rØrÙrÚrVrD) r}r…rÜÚmytzÚottzÚmyoffÚotoffÚ base_compareZmyhhmmZothhmmrrrrXs*          %%z time._cmpcCsÇ|jƒ}|s&t|jƒdƒSttd|jd|jƒ|tddƒƒ\}}|tddƒ}d|ko‡dknr«tt|||j|j ƒƒSt|||j|j fƒS)zHash.rr;r<rr) r8r›ršr!rDrcrdr²rer5)r}ÚtzoffrOr*rrrrœts z time.__hash__ú:cCs‹|jƒ}|dk r‡|jdkr7d}| }nd}t|tddƒƒ\}}|tddƒ}d||||f}n|S) z2Return formatted timezone offset (+xx:xx) or None.Nrr:r9r;rr<z %s%02d%s%02d)r8rCr!rD)r}ÚsepÚoffrNr,r-rrrÚ_tzstrƒs   z time._tzstrcCs¨|jdkr(d|j|jf}n%|jdkrGd|j}nd}dd|jj|j|j|f}|jdk r¤|dd …d |jd }n|S) z%Convert to formal string, for repr().rz, %d, %dz, %dr7z %s(%d, %d%s)z datetime.Nrz , tzinfo=%rú)r)rÚrÙr~rir×rØrÛ)r}rPrrrr“s"z time.__repr__cCsDt|j|j|j|jƒ}|jƒ}|r@||7}n|S)z”Return the time formatted according to ISO. This is 'HH:MM:SS.mmmmmm+zz:zz', or 'HH:MM:SS+zz:zz' if self.microsecond == 0. )r2r×rØrÙrÚræ)r}rPrgrrrr»¢s    ztime.isoformatc Cs:ddd|j|j|jdddf }t|||ƒS)z{Format using strftime(). The date part of the timestamp passed to underlying strftime should not be used. ilrrr)r×rØrÙrQ)r}r¹rJrrrrG±s z time.strftimecCs)t|ƒdkr|j|ƒSt|ƒS)Nr)r@rGrU)r}r¹rrrrº¼s ztime.__format__cCs6|jdkrdS|jjdƒ}td|ƒ|S)zQReturn the timezone offset in minutes east of UTC (negative west of UTC).Nr8)rÛr8r\)r}rMrrrr8Ãs  ztime.utcoffsetcCs3|jdkrdS|jjdƒ}t|ƒ|S)aReturn the timezone name. Note that the name is 100% informational -- there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. N)rÛr>rY)r}rXrrrr>Ìs  z time.tznamecCs6|jdkrdS|jjdƒ}td|ƒ|S)afReturn 0 if DST is not in effect, or the DST offset (in minutes eastward) if DST is in effect. This is purely informational; the DST offset has already been added to the UTC offset returned by utcoffset() if applicable, so there's no need to consult dst() unless you're interested in displaying the DST info. Nr°)rÛr°r\)r}rMrrrr°Ùs  ztime.dstTcCs«|dkr|j}n|dkr0|j}n|dkrH|j}n|dkr`|j}n|dkrx|j}nt||||ƒt|ƒt|||||ƒS)z;Return a new time with new values for the specified fields.NT)rcrdrer5rRrfrhr²)r}rcrdrer5rRrrrrEès           z time.replacecCsM|js|jrdS|jƒp+tdƒ}td|jd|jƒ|kS)NTrr;r<)rer5r8rDrcrd)r}rMrrrr�ùsz time.__bool__cCs{t|jdƒ\}}t|dƒ\}}t|j|j|j|||gƒ}|jdkrj|fS||jfSdS)NrÅ)r!rÚrªr×rØrÙrÛ)r}Úus2Úus3Úus1Ú basestaterrrršsztime._getstatecCs¦t|ƒdks"|ddkr1tdƒ‚n|\|_|_|_}}}|d>|Bd>|B|_|dks†t|tƒr’||_ntd|ƒ‚dS)Nr'rrzan integer is requiredézbad tzinfo state arg %r) r@rVr×rØrÙrÚrTÚ _tzinfo_classrÛ)r}rÈrRrêrèrérrrrÉ s"! ztime.__setstatecCst|jƒfS)N)r²rš)r}rrrržsztime.__reduce__)!rirŸr r¡rxr£rcrdrer5rRr”r•r–r—r˜r™rrœrærr»r�rGrºr8r>r°rEr�ršrÖržrrrrr²çs<               r²c @s™eZdZdZejd^Zdddddddd d „Zed d „ƒZed d„ƒZ edd„ƒZ edd„ƒZ edd„ƒZ e dd„ƒZe ddd„ƒZe dd„ƒZe ddd„ƒZe dd„ƒZe dd „ƒZd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zdddddddd-d.d/„Zdd0d1„Zd2d3„Zd4d5d6„Zd7d8„Zd9d:„Ze d;d<„ƒZd=d>„Z d?d@„Z!dAdB„Z"dCdD„Z#dEdF„Z$dGdH„Z%dIdJ„Z&dKdL„Z'dMdN„Z(dOdPdQ„Z)dRdS„Z*e*Z+dTdU„Z,dVdW„Z-dXdY„Z.dZd[„Z/d\d]„Z0dS)_rÍzêdatetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) The year, month and day arguments are required. tzinfo may be None, or an instance of a tzinfo subclass. The remaining arguments may be ints. r×rØrÙrÚrÛNrc Cs·t|tƒrQt|ƒdkrQtj||dd…ƒ} | j||ƒ| St|ƒt||||ƒtj||||ƒ} || _|| _ || _ || _ || _ | S)Nr‚r ) rTrªr@r¦rxÚ_datetime__setstaterhrfr×rØrÙrÚrÛ) r{rrrrcrdrer5rRr}rrrrx)s!      zdatetime.__new__cCs|jS)z hour (0-23))r×)r}rrrrc;sz datetime.hourcCs|jS)z minute (0-59))rØ)r}rrrrd@szdatetime.minutecCs|jS)z second (0-59))rÙ)r}rrrreEszdatetime.secondcCs|jS)zmicrosecond (0-999999))rÚ)r}rrrr5Jszdatetime.microsecondcCs|jS)ztimezone info object)rÛ)r}rrrrROszdatetime.tzinfoc CsØtj|ƒ\}}t|dƒ}|dkrH|d7}|d8}n#|dkrk|d8}|d7}n|rztjntj}||ƒ\ }}} } } } } }}t| dƒ} |||| | | | ||ƒS)z‚Construct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. g€„.Ai@Brrrb)rurvrwr)Úgmtimer¬Úmin)r{r­ÚutcrgZfracr0Z converterrr*r+r,r-r.r®r¯r°rrrÚ_fromtimestampTs      'zdatetime._fromtimestampcCsGt|ƒ|j||dk |ƒ}|dk rC|j|ƒ}n|S)z‚Construct a datetime from a POSIX timestamp (like time.time()). A timezone info object may be passed in as well. N)rhròrÏ)r{r­rgr1rrrr±hs   zdatetime.fromtimestampcCs|j|ddƒS)z6Construct a naive UTC datetime from a POSIX timestamp.TN)rò)r{r­rrrÚutcfromtimestampuszdatetime.utcfromtimestampcCstjƒ}|j||ƒS)zBConstruct a datetime from time.time() and optional time zone info.)r)r²r±)r{rgr­rrrÚnows z datetime.nowcCstjƒ}|j|ƒS)z*Construct a UTC datetime from time.time().)r)r²ró)r{r­rrrÚutcnow…s zdatetime.utcnowc Csst|tƒstdƒ‚nt|tƒs<tdƒ‚n||j|j|j|j|j|j |j |j ƒS)z8Construct a datetime from a given date and a given time.z%date argument must be a date instancez%time argument must be a time instance) rTÚ _date_classrVÚ _time_classrrrrcrdrer5rR)r{r¦r²rrrÚcombine‹szdatetime.combinecCsd|jƒ}|dkr!d}n|r0d}nd}t|j|j|j|j|j|j|ƒS)z9Return local time tuple compatible with time.localtime().Nrrr)r°r/rrrrcrdre)r}r°rrrrJ–s    zdatetime.timetuplec Csf|jdkrTtj|j|j|j|j|j|jdddf ƒ|j dS|t j ƒSdS)zReturn POSIX timestamp as floatNrg€„.Arrr) rÛr)Zmktimerrrrcrdrer5Ú_EPOCHrƒ)r}rrrÚ timestamp£s zdatetime.timestampcCsu|jƒ}|r||8}n|j|j|j}}}|j|j|j}}}t||||||dƒS)z4Return UTC time tuple compatible with time.gmtime().r)r8rrrrcrdrer/)r}rMrr*r+r,r-r.rrrÚ utctimetuple¬s   zdatetime.utctimetuplecCst|j|j|jƒS)zReturn the date part.)r¦r§r¨r©)r}rrrr¦µsz datetime.datecCst|j|j|j|jƒS)z'Return the time part, with tzinfo None.)r²rcrdrer5)r}rrrr²¹sz datetime.timecCs%t|j|j|j|j|jƒS)z'Return the time part, with same tzinfo.)r²rcrdrer5rÛ)r}rrrÚtimetz½szdatetime.timetzTc Cs |dkr|j}n|dkr0|j}n|dkrH|j}n|dkr`|j}n|dkrx|j}n|dkr�|j}n|dkr¨|j}n|dkrÀ|j}nt|||ƒt ||||ƒt |ƒt ||||||||ƒS)z?Return a new datetime with new values for the specified fields.NT) rrrrcrdrer5rRr`rfrhrÍ) r}rrrrcrdrer5rRrrrrEÂs*                 zdatetime.replacec CsÖ|dkr:|jdkr*tdƒ‚n|ttddƒ}tj|ƒ}t|dd…Œ}y|j}|j}Wn t k r|ttj |ƒdd…Œ}tj oÄ|j dk}|rÖtj ntj }|td|ƒkrt|tj|ƒ}n t|ƒ}YqXXttd|ƒ|ƒ}nt|tƒsXtdƒ‚n|j} | dkr|tdƒ‚n|| krŒ|S|jƒ} | dkr³tdƒ‚n|| jd|ƒ} |j| ƒS)Nz'astimezone() requires an aware datetimer|rr'rz)tz argument must be an instance of tzinforR)rRr[rùrDr)r¬rÍZ tm_gmtoffZtm_zoneÚAttributeErrorrïZdaylightZtm_isdstZaltzoneÚtimezoner>rTrVr8rErÏ) r}rgZtsZlocaltmZlocalZgmtoffZzonerÎr°rÝZmyoffsetrñrrrÚ astimezoneÛs:    #     zdatetime.astimezonecCsM|jƒdpd}dt|t|j|j|j|j|j|jfS)zReturn ctime() style string.r(z%s %s %2d %02d:%02d:%02d %04d) rµr¶r·r¨r©r×rØrÙr§)r}r®rrrr¸ s zdatetime.ctimeÚTcCsÊd|j|j|j|ft|j|j|j|jƒ}|jƒ}|dk rÆ|j dkrud}| }nd}t |t ddƒƒ\}}|t ddƒ}|d |||f7}n|S) a™Return the time formatted according to ISO. This is 'YYYY-MM-DD HH:MM:SS.mmmmmm', or 'YYYY-MM-DD HH:MM:SS' if self.microsecond == 0. If self.tzinfo is not None, the UTC offset is also attached, giving 'YYYY-MM-DD HH:MM:SS.mmmmmm+HH:MM' or 'YYYY-MM-DD HH:MM:SS+HH:MM'. Optional argument sep specifies the separator between date and time, default 'T'. z%04d-%02d-%02d%cNrr:r9r;rr<z %s%02d:%02d) r§r¨r©r2r×rØrÙrÚr8rCr!rD)r}rärPrårNr,r-rrrr»s     zdatetime.isoformatcCsË|j|j|j|j|j|j|jg}|d dkrJ|d =n|d dkrd|d =ndjtt |ƒƒ}dd|j j |f}|j dk rÇ|dd …d|j d}n|S)z%Convert to formal string, for repr().rrz, z%s(%s)z datetime.Nz , tzinfo=%rrçrrrrr) r§r¨r©r×rØrÙrÚrFÚmaprUr~rirÛ)r}ÚLrPrrrr0s  "zdatetime.__repr__cCs|jddƒS)zConvert to string, for str().räú )r»)r}rrrr�?szdatetime.__str__cCsddl}|j|||ƒS)zKstring, format -> new datetime parsed from a string (like time.strptime()).rN)Ú _strptimeZ_strptime_datetime)r{Z date_stringrIrrrrÚstrptimeCs zdatetime.strptimecCs6|jdkrdS|jj|ƒ}td|ƒ|S)zQReturn the timezone offset in minutes east of UTC (negative west of UTC).Nr8)rÛr8r\)r}rMrrrr8Is  zdatetime.utcoffsetcCs#t|jd|ƒ}t|ƒ|S)aReturn the timezone name. Note that the name is 100% informational -- there's no requirement that it mean anything in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT", "US/Eastern", "America/New York" are all valid replies. r>)rSrÛrY)r}rXrrrr>Rs zdatetime.tznamecCs6|jdkrdS|jj|ƒ}td|ƒ|S)afReturn 0 if DST is not in effect, or the DST offset (in minutes eastward) if DST is in effect. This is purely informational; the DST offset has already been added to the UTC offset returned by utcoffset() if applicable, so there's no need to consult dst() unless you're interested in displaying the DST info. Nr°)rÛr°r\)r}rMrrrr°]s  z datetime.dstcCsCt|tƒr(|j|ddƒdkSt|tƒs;tSdSdS)NrÜTrF)rTrÍrr¦r„)r}r…rrrr”ns zdatetime.__eq__cCsCt|tƒr(|j|ddƒdkSt|tƒs;tSdSdS)NrÜTr)rTrÍrr¦r„)r}r…rrrr•vs zdatetime.__ne__cCsFt|tƒr"|j|ƒdkSt|tƒs5tSt||ƒdS)Nr)rTrÍrr¦r„rj)r}r…rrrr–~s zdatetime.__le__cCsFt|tƒr"|j|ƒdkSt|tƒs5tSt||ƒdS)Nr)rTrÍrr¦r„rj)r}r…rrrr—†s zdatetime.__lt__cCsFt|tƒr"|j|ƒdkSt|tƒs5tSt||ƒdS)Nr)rTrÍrr¦r„rj)r}r…rrrr˜Žs zdatetime.__ge__cCsFt|tƒr"|j|ƒdkSt|tƒs5tSt||ƒdS)Nr)rTrÍrr¦r„rj)r}r…rrrr™–s zdatetime.__gt__Fc Cs|j}|j}d}}||kr1d}n$|jƒ}|jƒ}||k}|r¼t|j|j|j|j|j|j|j f|j|j|j|j|j|j|j fƒS|dksÔ|dkrí|rÞdSt dƒ‚n||}|j dkr dS|rdpdS)NTrz(cannot compare naive and aware datetimesrrr) rÛr8rr§r¨r©r×rØrÙrÚrVrC) r}r…rÜrÝrÞrßràráZdiffrrrržs.           z datetime._cmpc Csæt|tƒstSt|jƒd|jd|jd|jd|jƒ}||7}t|j dƒ\}}t|dƒ\}}d|j košt knrÖt j tj|j ƒt||||jd|jƒƒStd ƒ‚d S) zAdd a datetime and a timedelta.r;r<r|rZirsrrRzresult out of rangeN)rTrDr„rµr×rØrÙrÚr!r|rCr¼rÍrør¦r´r²rZrÛrz)r}r…rÎrcZremrdrerrrr†½s         zdatetime.__add__c Cst|tƒs+t|tƒr'|| StS|jƒ}|jƒ}|j|jd|jd}|j|jd|jd}t|||||j|jƒ}|j |j kr»|S|j ƒ}|j ƒ}||krã|S|dksû|dkr t dƒ‚n|||S)z6Subtract two datetimes, or a datetime and a timedelta.rsiNz(cannot mix naive and timezone-aware time) rTrÍrDr„rµrÙrØr×rÚrÛr8rV) r}r…r¾r¿Zsecs1Zsecs2Úbaserßràrrrr‡Òs(       zdatetime.__sub__cCsƒ|jƒ}|dkr,t|jƒdƒSt|j|j|jƒ}|jd|jd|j }tt |||j ƒ|ƒS)Nrirs) r8r›ršrrrrrcrdrerDr5)r}rârCr|rrrrœês   zdatetime.__hash__c Cs¥t|jdƒ\}}t|jdƒ\}}t|dƒ\}}t|||j|j|j|j|j|||g ƒ}|j dkr”|fS||j fSdS)NrÅ) r!r§rÚrªr¨r©r×rØrÙrÛ)r}rÆrÇrèrérêrërrrršôszdatetime._getstatec Cs˜|\ }}|_|_|_|_|_}}}|d||_|d>|Bd>|B|_|dksxt|tƒr„||_ nt d|ƒ‚dS)NrÅrìzbad tzinfo state arg %r) r¨r©r×rØrÙr§rÚrTrírÛrV)r}rÈrRrÆrÇrêrèrérrrrÉs 3 zdatetime.__setstatecCs|j|jƒfS)N)r~rš)r}rrrrž szdatetime.__reduce__)z_hourz_minutez_secondz _microsecondz_tzinfo)1rirŸr r¡r¦r¢rxr£rcrdrer5rRrÊròr±rórôrõrørJrúrûr²rürErÿr¸r»rr�rr8r>r°r”r•r–r—r˜r™rr†r¤r‡rœršrîržrrrrrÍsd       .             rÍcCsMd}t|ddƒ}|dd}||}||krI|d7}n|S)Nrrr'r()r)rZTHURSDAYZfirstdayZ firstweekdayrÃrrrrÂs   rÂc@sÝeZdZd ZeƒZedd„Zeddd„ƒZdd „Z d d „Z d d „Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZeddddƒZe Zedd„ƒZdS)!rþÚ_offsetÚ_namecCsÓt|tƒstdƒ‚n||jkrC|s:|jSd}nt|tƒsatdƒ‚n|j|ko~|jkns’tdƒ‚n|j dks´|j ddkrÃtdƒ‚n|j ||ƒS)Nzoffset must be a timedeltazname must be a stringzYoffset must be a timedelta strictly between -timedelta(hours=24) and timedelta(hours=24).rrszAoffset must be a timedelta representing a whole number of minutes) rTrDrVÚ_OmittedrñrUÚ _minoffsetÚ _maxoffsetr[rZr|Ú_create)r{rMrXrrrrx#s "ztimezone.__new__NcCs%tj|ƒ}||_||_|S)N)rRrxrr)r{rMrXr}rrrr 6s  ztimezone._createcCs)|jdkr|jfS|j|jfS)zpickle supportN)rr)r}rrrrÐ=s ztimezone.__getinitargs__cCs&t|ƒtkrdS|j|jkS)NF)rWrþr)r}r…rrrr”Csztimezone.__eq__cCs t|jƒS)N)r›r)r}rrrrœHsztimezone.__hash__cCs^||jkrdS|jdkr=dd|jj|jfSdd|jj|j|jfS)aConvert to formal string, for repr(). >>> tz = timezone.utc >>> repr(tz) 'datetime.timezone.utc' >>> tz = timezone(timedelta(hours=-5), 'EST') >>> repr(tz) "datetime.timezone(datetime.timedelta(-1, 68400), 'EST')" zdatetime.timezone.utcNz%s(%r)z datetime.z %s(%r, %r))rñrr~rir)r}rrrrKs  ztimezone.__repr__cCs |jdƒS)N)r>)r}rrrr�]sztimezone.__str__cCs2t|tƒs|dkr"|jStdƒ‚dS)Nz8utcoffset() argument must be a datetime instance or None)rTrÍrrV)r}rÌrrrr8`sztimezone.utcoffsetcCsQt|tƒs|dkrA|jdkr:|j|jƒS|jStdƒ‚dS)Nz5tzname() argument must be a datetime instance or None)rTrÍrÚ_name_from_offsetrrV)r}rÌrrrr>fs ztimezone.tznamecCs/t|tƒs|dkrdStdƒ‚dS)Nz2dst() argument must be a datetime instance or None)rTrÍrV)r}rÌrrrr°nsz timezone.dstcCsHt|tƒr8|j|k r-tdƒ‚n||jStdƒ‚dS)Nzfromutc: dt.tzinfo is not selfz6fromutc() argument must be a datetime instance or None)rTrÍrRr[rrV)r}rÌrrrrÏts  ztimezone.fromutcr;rar<rbcCsl|tdƒkr"d}| }nd}t|tddƒƒ\}}|tddƒ}dj|||ƒS)Nrr:r9r;rr<zUTC{}{:02d}:{:02d})rDr!rI)rÎrNr;Úrestr<rrrr €s ztimezone._name_from_offset)z_offsetz_name)rirŸr r¢rHr rxrÊr rÐr”rœrr�r8r>r°rÏrDr r Ú staticmethodr rrrrrþs"           rþi²)Ú*)r¡)7r¡r²r)Zmathrurr^r_r¼rrZdbmrr?rrrrrr"r#r$r&r·r¶r/r2rQrSrYr\r`rfrhrjrorDrðÚmaxZ resolutionr¦rörRrír÷rÍrÂrþr rñr r rùZ _datetimeÚ ImportErrorrrrrÚs     .          ?   9     ÿJ ÿ!Cÿ3ÿð! mÆ