Current Dir: /snap/core22/2437/usr/lib/python3.10/__pycache__/

[FILE] abc.cpython-310.pyc [ edit | delete | rename ]
[FILE] aifc.cpython-310.pyc [ edit | delete | rename ]
[FILE] antigravity.cpython-310.pyc [ edit | delete | rename ]
[FILE] argparse.cpython-310.pyc [ edit | delete | rename ]
[FILE] ast.cpython-310.pyc [ edit | delete | rename ]
[FILE] asynchat.cpython-310.pyc [ edit | delete | rename ]
[FILE] asyncore.cpython-310.pyc [ edit | delete | rename ]
[FILE] base64.cpython-310.pyc [ edit | delete | rename ]
[FILE] bdb.cpython-310.pyc [ edit | delete | rename ]
[FILE] binhex.cpython-310.pyc [ edit | delete | rename ]
[FILE] bisect.cpython-310.pyc [ edit | delete | rename ]
[FILE] bz2.cpython-310.pyc [ edit | delete | rename ]
[FILE] calendar.cpython-310.pyc [ edit | delete | rename ]
[FILE] cgi.cpython-310.pyc [ edit | delete | rename ]
[FILE] cgitb.cpython-310.pyc [ edit | delete | rename ]
[FILE] chunk.cpython-310.pyc [ edit | delete | rename ]
[FILE] cmd.cpython-310.pyc [ edit | delete | rename ]
[FILE] code.cpython-310.pyc [ edit | delete | rename ]
[FILE] codecs.cpython-310.pyc [ edit | delete | rename ]
[FILE] codeop.cpython-310.pyc [ edit | delete | rename ]
[FILE] colorsys.cpython-310.pyc [ edit | delete | rename ]
[FILE] compileall.cpython-310.pyc [ edit | delete | rename ]
[FILE] configparser.cpython-310.pyc [ edit | delete | rename ]
[FILE] contextlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] contextvars.cpython-310.pyc [ edit | delete | rename ]
[FILE] copy.cpython-310.pyc [ edit | delete | rename ]
[FILE] copyreg.cpython-310.pyc [ edit | delete | rename ]
[FILE] cProfile.cpython-310.pyc [ edit | delete | rename ]
[FILE] crypt.cpython-310.pyc [ edit | delete | rename ]
[FILE] csv.cpython-310.pyc [ edit | delete | rename ]
[FILE] dataclasses.cpython-310.pyc [ edit | delete | rename ]
[FILE] datetime.cpython-310.pyc [ edit | delete | rename ]
[FILE] decimal.cpython-310.pyc [ edit | delete | rename ]
[FILE] difflib.cpython-310.pyc [ edit | delete | rename ]
[FILE] dis.cpython-310.pyc [ edit | delete | rename ]
[FILE] doctest.cpython-310.pyc [ edit | delete | rename ]
[FILE] enum.cpython-310.pyc [ edit | delete | rename ]
[FILE] filecmp.cpython-310.pyc [ edit | delete | rename ]
[FILE] fileinput.cpython-310.pyc [ edit | delete | rename ]
[FILE] fnmatch.cpython-310.pyc [ edit | delete | rename ]
[FILE] fractions.cpython-310.pyc [ edit | delete | rename ]
[FILE] ftplib.cpython-310.pyc [ edit | delete | rename ]
[FILE] functools.cpython-310.pyc [ edit | delete | rename ]
[FILE] genericpath.cpython-310.pyc [ edit | delete | rename ]
[FILE] getopt.cpython-310.pyc [ edit | delete | rename ]
[FILE] getpass.cpython-310.pyc [ edit | delete | rename ]
[FILE] gettext.cpython-310.pyc [ edit | delete | rename ]
[FILE] glob.cpython-310.pyc [ edit | delete | rename ]
[FILE] graphlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] gzip.cpython-310.pyc [ edit | delete | rename ]
[FILE] hashlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] heapq.cpython-310.pyc [ edit | delete | rename ]
[FILE] hmac.cpython-310.pyc [ edit | delete | rename ]
[FILE] imaplib.cpython-310.pyc [ edit | delete | rename ]
[FILE] imghdr.cpython-310.pyc [ edit | delete | rename ]
[FILE] imp.cpython-310.pyc [ edit | delete | rename ]
[FILE] inspect.cpython-310.pyc [ edit | delete | rename ]
[FILE] io.cpython-310.pyc [ edit | delete | rename ]
[FILE] ipaddress.cpython-310.pyc [ edit | delete | rename ]
[FILE] keyword.cpython-310.pyc [ edit | delete | rename ]
[FILE] linecache.cpython-310.pyc [ edit | delete | rename ]
[FILE] locale.cpython-310.pyc [ edit | delete | rename ]
[FILE] lzma.cpython-310.pyc [ edit | delete | rename ]
[FILE] mailbox.cpython-310.pyc [ edit | delete | rename ]
[FILE] mailcap.cpython-310.pyc [ edit | delete | rename ]
[FILE] mimetypes.cpython-310.pyc [ edit | delete | rename ]
[FILE] modulefinder.cpython-310.pyc [ edit | delete | rename ]
[FILE] netrc.cpython-310.pyc [ edit | delete | rename ]
[FILE] nntplib.cpython-310.pyc [ edit | delete | rename ]
[FILE] ntpath.cpython-310.pyc [ edit | delete | rename ]
[FILE] nturl2path.cpython-310.pyc [ edit | delete | rename ]
[FILE] numbers.cpython-310.pyc [ edit | delete | rename ]
[FILE] opcode.cpython-310.pyc [ edit | delete | rename ]
[FILE] operator.cpython-310.pyc [ edit | delete | rename ]
[FILE] optparse.cpython-310.pyc [ edit | delete | rename ]
[FILE] os.cpython-310.pyc [ edit | delete | rename ]
[FILE] pathlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] pdb.cpython-310.pyc [ edit | delete | rename ]
[FILE] pickle.cpython-310.pyc [ edit | delete | rename ]
[FILE] pickletools.cpython-310.pyc [ edit | delete | rename ]
[FILE] pipes.cpython-310.pyc [ edit | delete | rename ]
[FILE] pkgutil.cpython-310.pyc [ edit | delete | rename ]
[FILE] platform.cpython-310.pyc [ edit | delete | rename ]
[FILE] plistlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] poplib.cpython-310.pyc [ edit | delete | rename ]
[FILE] posixpath.cpython-310.pyc [ edit | delete | rename ]
[FILE] pprint.cpython-310.pyc [ edit | delete | rename ]
[FILE] profile.cpython-310.pyc [ edit | delete | rename ]
[FILE] pstats.cpython-310.pyc [ edit | delete | rename ]
[FILE] pty.cpython-310.pyc [ edit | delete | rename ]
[FILE] pyclbr.cpython-310.pyc [ edit | delete | rename ]
[FILE] pydoc.cpython-310.pyc [ edit | delete | rename ]
[FILE] py_compile.cpython-310.pyc [ edit | delete | rename ]
[FILE] queue.cpython-310.pyc [ edit | delete | rename ]
[FILE] quopri.cpython-310.pyc [ edit | delete | rename ]
[FILE] random.cpython-310.pyc [ edit | delete | rename ]
[FILE] re.cpython-310.pyc [ edit | delete | rename ]
[FILE] reprlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] rlcompleter.cpython-310.pyc [ edit | delete | rename ]
[FILE] runpy.cpython-310.pyc [ edit | delete | rename ]
[FILE] sched.cpython-310.pyc [ edit | delete | rename ]
[FILE] secrets.cpython-310.pyc [ edit | delete | rename ]
[FILE] selectors.cpython-310.pyc [ edit | delete | rename ]
[FILE] shelve.cpython-310.pyc [ edit | delete | rename ]
[FILE] shlex.cpython-310.pyc [ edit | delete | rename ]
[FILE] shutil.cpython-310.pyc [ edit | delete | rename ]
[FILE] signal.cpython-310.pyc [ edit | delete | rename ]
[FILE] site.cpython-310.pyc [ edit | delete | rename ]
[FILE] sitecustomize.cpython-310.pyc [ edit | delete | rename ]
[FILE] smtpd.cpython-310.pyc [ edit | delete | rename ]
[FILE] smtplib.cpython-310.pyc [ edit | delete | rename ]
[FILE] sndhdr.cpython-310.pyc [ edit | delete | rename ]
[FILE] socket.cpython-310.pyc [ edit | delete | rename ]
[FILE] socketserver.cpython-310.pyc [ edit | delete | rename ]
[FILE] sre_compile.cpython-310.pyc [ edit | delete | rename ]
[FILE] sre_constants.cpython-310.pyc [ edit | delete | rename ]
[FILE] sre_parse.cpython-310.pyc [ edit | delete | rename ]
[FILE] ssl.cpython-310.pyc [ edit | delete | rename ]
[FILE] stat.cpython-310.pyc [ edit | delete | rename ]
[FILE] statistics.cpython-310.pyc [ edit | delete | rename ]
[FILE] string.cpython-310.pyc [ edit | delete | rename ]
[FILE] stringprep.cpython-310.pyc [ edit | delete | rename ]
[FILE] struct.cpython-310.pyc [ edit | delete | rename ]
[FILE] subprocess.cpython-310.pyc [ edit | delete | rename ]
[FILE] sunau.cpython-310.pyc [ edit | delete | rename ]
[FILE] symtable.cpython-310.pyc [ edit | delete | rename ]
[FILE] sysconfig.cpython-310.pyc [ edit | delete | rename ]
[FILE] tabnanny.cpython-310.pyc [ edit | delete | rename ]
[FILE] tarfile.cpython-310.pyc [ edit | delete | rename ]
[FILE] telnetlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] tempfile.cpython-310.pyc [ edit | delete | rename ]
[FILE] textwrap.cpython-310.pyc [ edit | delete | rename ]
[FILE] this.cpython-310.pyc [ edit | delete | rename ]
[FILE] threading.cpython-310.pyc [ edit | delete | rename ]
[FILE] timeit.cpython-310.pyc [ edit | delete | rename ]
[FILE] token.cpython-310.pyc [ edit | delete | rename ]
[FILE] tokenize.cpython-310.pyc [ edit | delete | rename ]
[FILE] trace.cpython-310.pyc [ edit | delete | rename ]
[FILE] traceback.cpython-310.pyc [ edit | delete | rename ]
[FILE] tracemalloc.cpython-310.pyc [ edit | delete | rename ]
[FILE] tty.cpython-310.pyc [ edit | delete | rename ]
[FILE] turtle.cpython-310.pyc [ edit | delete | rename ]
[FILE] types.cpython-310.pyc [ edit | delete | rename ]
[FILE] typing.cpython-310.pyc [ edit | delete | rename ]
[FILE] uu.cpython-310.pyc [ edit | delete | rename ]
[FILE] uuid.cpython-310.pyc [ edit | delete | rename ]
[FILE] warnings.cpython-310.pyc [ edit | delete | rename ]
[FILE] wave.cpython-310.pyc [ edit | delete | rename ]
[FILE] weakref.cpython-310.pyc [ edit | delete | rename ]
[FILE] webbrowser.cpython-310.pyc [ edit | delete | rename ]
[FILE] xdrlib.cpython-310.pyc [ edit | delete | rename ]
[FILE] zipapp.cpython-310.pyc [ edit | delete | rename ]
[FILE] zipfile.cpython-310.pyc [ edit | delete | rename ]
[FILE] zipimport.cpython-310.pyc [ edit | delete | rename ]
[FILE] _aix_support.cpython-310.pyc [ edit | delete | rename ]
[FILE] _bootsubprocess.cpython-310.pyc [ edit | delete | rename ]
[FILE] _collections_abc.cpython-310.pyc [ edit | delete | rename ]
[FILE] _compat_pickle.cpython-310.pyc [ edit | delete | rename ]
[FILE] _compression.cpython-310.pyc [ edit | delete | rename ]
[FILE] _distutils_system_mod.cpython-310.pyc [ edit | delete | rename ]
[FILE] _markupbase.cpython-310.pyc [ edit | delete | rename ]
[FILE] _osx_support.cpython-310.pyc [ edit | delete | rename ]
[FILE] _pydecimal.cpython-310.pyc [ edit | delete | rename ]
[FILE] _pyio.cpython-310.pyc [ edit | delete | rename ]
[FILE] _py_abc.cpython-310.pyc [ edit | delete | rename ]
[FILE] _sitebuiltins.cpython-310.pyc [ edit | delete | rename ]
[FILE] _strptime.cpython-310.pyc [ edit | delete | rename ]
[FILE] _sysconfigdata__linux_x86_64-linux-gnu.cpython-310.pyc [ edit | delete | rename ]
[FILE] _sysconfigdata__x86_64-linux-gnu.cpython-310.pyc [ edit | delete | rename ]
[FILE] _threading_local.cpython-310.pyc [ edit | delete | rename ]
[FILE] _weakrefset.cpython-310.pyc [ edit | delete | rename ]
[FILE] __future__.cpython-310.pyc [ edit | delete | rename ]
[FILE] __phello__.foo.cpython-310.pyc [ edit | delete | rename ]

Viewing: /snap/core22/2437/usr/lib/python3.10/__pycache__/plistlib.cpython-310.pyc

o

p̦i�o�@s�dZgd�ZddlZddlZddlZddlZddlmZddlZddl	Z	ddl
Z
ddlZddlm
Z
ejdded�Ze��ej�d	ZGd
d�d�ZdZe
�d
�Zd?dd�Zdd�Ze
�de
j�Zdd�Zdd�Zdd�ZGdd�d�Z Gdd�d�Z!Gdd�de!�Z"d d!�Z#Gd"d#�d#e$�Z%d$d%d&d'd(�Z&e'�Z(Gd)d*�d*�Z)d+d,�Z*e+e,e-eje.fZ/Gd-d.�d.e'�Z0d/d0�Z1e2e3e#e e"d1�e4e3e1e)e0d1�iZ5de3d2�d3d4�Z6de3d2�d5d6�Z7e2d7d8d9�d:d;�Z8e2d8d7d<�d=d>�Z9dS)@a>plistlib.py -- a tool to generate and parse MacOSX .plist files.

The property list (.plist) file format is a simple XML pickle supporting
basic object types, like dictionaries, lists, numbers and strings.
Usually the top level object is a dictionary.

To write out a plist file, use the dump(value, file)
function. 'value' is the top level object, 'file' is
a (writable) file object.

To parse a plist from a file, use the load(file) function,
with a (readable) file object as the only argument. It
returns the top level object (again, usually a dictionary).

To work with plist data in bytes objects, you can use loads()
and dumps().

Values can be strings, integers, floats, booleans, tuples, lists,
dictionaries (but only with string keys), Data, bytes, bytearray, or
datetime.datetime objects.

Generate Plist example:

    import datetime
    import plistlib

    pl = dict(
        aString = "Doodah",
        aList = ["A", "B", 12, 32.1, [1, 2, 3]],
        aFloat = 0.1,
        anInt = 728,
        aDict = dict(
            anotherString = "<hello & hi there!>",
            aThirdString = "M\xe4ssig, Ma\xdf",
            aTrueValue = True,
            aFalseValue = False,
        ),
        someData = b"<binary gunk>",
        someMoreData = b"<lots of binary gunk>" * 10,
        aDate = datetime.datetime.now()
    )
    print(plistlib.dumps(pl).decode())

Parse Plist example:

    import plistlib

    plist = b'''<plist version="1.0">
    <dict>
        <key>foo</key>
        <string>bar</string>
    </dict>
    </plist>'''
    pl = plistlib.loads(plist)
    print(pl["foo"])
)�InvalidFileException�FMT_XML�
FMT_BINARY�load�dump�loads�dumps�UID�N)�BytesIO)�ParserCreate�PlistFormatzFMT_XML FMT_BINARY)�moduleic@�<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)rcCs<t|t�s	td��|dkrtd��|dkrtd��||_dS)Nzdata must be an int�zUIDs cannot be >= 2**64r	�UIDs must be positive)�
isinstance�int�	TypeError�
ValueError�data��selfr�r�/usr/lib/python3.10/plistlib.py�__init__Qs

zUID.__init__cCs|jS�N)r�rrrr�	__index__Zsz
UID.__index__cCsd|jjt|j�fS)Nz%s(%s))�	__class__�__name__�reprrrrrr�__repr__]�zUID.__repr__cCs|j|jffSr)rrrrrr�
__reduce__`�zUID.__reduce__cCst|t�stS|j|jkSr)rr�NotImplementedr)r�otherrrr�__eq__cs
z
UID.__eq__cCs
t|j�Sr)�hashrrrrr�__hash__h�
zUID.__hash__N)	r�
__module__�__qualname__rrr!r#r'r)rrrrrPs	rs�<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]�LcCsP|dd}g}tdt|�|�D]}||||�}|�t�|��qd�|�S)N��r	�)�range�len�append�binascii�
b2a_base64�join)�s�
maxlinelength�
maxbinsize�pieces�i�chunkrrr�_encode_base64|s
r=cCs$t|t�r
t�|�d��St�|�S)N�utf-8)r�strr4�
a2b_base64�encode)r7rrr�_decode_base64�s

rBz{(?P<year>\d\d\d\d)(?:-(?P<month>\d\d)(?:-(?P<day>\d\d)(?:T(?P<hour>\d\d)(?::(?P<minute>\d\d)(?::(?P<second>\d\d))?)?)?)?)?ZcCsLd}t�|���}g}|D]}||}|durn|�t|��q
tj|�S)N��year�month�day�hour�minute�second)�_dateParser�match�	groupdictr3r�datetime)r7�order�gd�lst�key�valrrr�_date_from_string�s
rScCs d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZrC)�drrr�_date_to_string�s�rUcCsZt�|�}|dur
td��|�dd�}|�dd�}|�dd�}|�dd�}|�d	d
�}|S)Nz;strings can't contain control characters; use bytes insteadz
�
�
�&z&amp;�<z&lt;�>z&gt;)�_controlCharPat�searchr�replace)�text�mrrr�_escape�s
r`c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)S)*�_PlistParsercCsg|_d|_d|_||_dSr)�stack�current_key�root�
_dict_type�r�	dict_typerrrr��
z_PlistParser.__init__cCsBt�|_|j|j_|j|j_|j|j_|j|j_	|j�
|�|jSr)r�parser�handle_begin_element�StartElementHandler�handle_end_element�EndElementHandler�handle_data�CharacterDataHandler�handle_entity_decl�EntityDeclHandler�	ParseFilerd)r�fileobjrrr�parse�s



z_PlistParser.parsecCstd��)Nz8XML entity declarations are not supported in plist files)r)r�entity_name�is_parameter_entity�value�base�	system_id�	public_id�
notation_namerrrrp�sz_PlistParser.handle_entity_declcCs.g|_t|d|d�}|dur||�dSdS)N�begin_)r�getattr)r�element�attrs�handlerrrrrj�s
�z!_PlistParser.handle_begin_elementcCs&t|d|d�}|dur|�dSdS)N�end_)r})rr~r�rrrrl�s
�z_PlistParser.handle_end_elementcCs|j�|�dSr)rr3rrrrrn��z_PlistParser.handle_datacCs�|jdur$t|jdti��std|jj��||jd|j<d|_dS|js,||_dSt|jdtg��s>td|jj��|jd�|�dS)N���zunexpected element at line %d)	rcrrb�typerri�CurrentLineNumberrdr3�rrwrrr�
add_object�s
�

�z_PlistParser.add_objectcCsd�|j�}g|_|S)N�)r6rrrrr�get_data�sz_PlistParser.get_datacCs"|��}|�|�|j�|�dSr)rer�rbr3)rrrTrrr�
begin_dict�s
z_PlistParser.begin_dictcCs*|jrtd|j|jjf��|j��dS)Nz%missing value for key '%s' at line %d)rcrrir�rb�poprrrr�end_dict�s
�z_PlistParser.end_dictcCs8|js
t|jdti��std|jj��|��|_dS)Nr�zunexpected key at line %d)rcrrbr�rrir�r�rrrr�end_key�s
�z_PlistParser.end_keycCsg}|�|�|j�|�dSr)r�rbr3)rr�arrr�begin_array�s
z_PlistParser.begin_arraycCs|j��dSr)rbr�rrrr�	end_arrayr$z_PlistParser.end_arraycC�|�d�dS)NT�r�rrrr�end_truer$z_PlistParser.end_truecCr�)NFr�rrrr�	end_falser$z_PlistParser.end_falsecCsB|��}|�d�s|�d�r|�t|d��dS|�t|��dS)N�0x�0X�)r��
startswithr�r)r�rawrrr�end_integer
sz_PlistParser.end_integercC�|�t|����dSr)r��floatr�rrrr�end_realr"z_PlistParser.end_realcCs|�|���dSr)r�r�rrrr�
end_stringsz_PlistParser.end_stringcCr�r)r�rBr�rrrr�end_datar"z_PlistParser.end_datacCr�r)r�rSr�rrrr�end_dater"z_PlistParser.end_dateN)rr+r,rrtrprjrlrnr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrra�s*	rac@s8eZdZddd�Zdd�Zdd�Zdd
d�Zdd
�Zd	S)�_DumbXMLWriterr	�	cCs||_g|_||_||_dSr)�filerb�
_indent_level�indent)rr��indent_levelr�rrrrrhz_DumbXMLWriter.__init__cCs,|j�|�|�d|�|jd7_dS)Nz<%s>�)rbr3�writelnr��rr~rrr�
begin_element%sz_DumbXMLWriter.begin_elementcCs@|jdksJ�|j��|ksJ�|jd8_|�d|�dS)Nr	r�z</%s>)r�rbr�r�r�rrr�end_element*sz_DumbXMLWriter.end_elementNcCs:|durt|�}|�d|||f�dS|�d|�dS)Nz<%s>%s</%s>z<%s/>)r`r�)rr~rwrrr�simple_element0sz_DumbXMLWriter.simple_elementcCsH|rt|t�r|�d�}|j�|j|j�|j�|�|j�d�dS)Nr>�
)rr?rAr��writer�r�)r�linerrrr�8s

z_DumbXMLWriter.writeln)r	r�r)rr+r,rr�r�r�r�rrrrr�s

r�c@sBeZdZ		ddd�Zdd	�Zd
d�Zdd
�Zdd�Zdd�ZdS)�_PlistWriterr	�	r�TFcCs.|r|�t�t�||||�||_||_dSr)r��PLISTHEADERr�r�
_sort_keys�	_skipkeys)rr�r�r��writeHeader�	sort_keys�skipkeysrrrrEs


z_PlistWriter.__init__cCs"|�d�|�|�|�d�dS)Nz<plist version="1.0">z</plist>)r��write_valuer�rrrr�Os

z_PlistWriter.writecCs(t|t�r
|�d|�dS|dur|�d�dS|dur#|�d�dSt|t�rEd|kr2dkrAnt|��|�dd	|�dSt|��t|t�rT|�d
t|��dSt|t�r`|�|�dSt|t	t
f�rn|�|�dSt|tj�r~|�dt
|��dSt|ttf�r�|�|�dStdt|���)
N�stringT�trueF�falsel����r�integerz%d�real�datezunsupported type: %s)rr?r�r�
OverflowErrorr�r �dict�
write_dict�bytes�	bytearray�write_bytesrMrU�tuple�list�write_arrayrr�r�rrrr�Ts,

�

z_PlistWriter.write_valuecCsz|�d�|jd8_tddt|j�dd�|j��}t||��d�D]	}|r.|�|�q%|jd7_|�	d�dS)Nrr�r�r-r�s        r�)
r�r��maxr2r�r]r=�splitr�r�)rrr8r�rrrr�vs
�
�z_PlistWriter.write_bytescCs�|r;|�d�|jrt|���}n|��}|D]\}}t|t�s(|jr$qtd��|�d|�|�	|�q|�
d�dS|�d�dS)Nr��keys must be stringsrQ)r�r��sorted�itemsrr?r�rr�r�r�)rrTr�rQrwrrrr��s

z_PlistWriter.write_dictcCs>|r|�d�|D]}|�|�q	|�d�dS|�d�dS)N�array)r�r�r�r�)rr�rwrrrr��s
z_PlistWriter.write_arrayN)r	r�r�TF)	rr+r,rr�r�r�r�r�rrrrr�Ds
�
"
r�cCs�d}|D]
}|�|�rdSqtjdftjdftjdffD]'\}}|�|�s'q|D]}||�d��|�}|dt|��|krCdSq)qdS)N)s<?xmls<plistTr>z	utf-16-bez	utf-16-le�asciiF)r��codecs�BOM_UTF8�BOM_UTF16_BE�BOM_UTF16_LE�decoderAr2)�header�prefixes�pfx�bom�encoding�start�prefixrrr�_is_fmt_xml�s$
��
��r�c@seZdZddd�ZdS)r�Invalid filecCst�||�dSr)rr)r�messagerrrr�r�zInvalidFileException.__init__N)r�)rr+r,rrrrrr�sr�B�H�L�Q)r��r.�c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�_BinaryPlistParsera
    Read or write a binary plist file, following the description of the binary
    format.  Raise InvalidFileException in case of error, otherwise return the
    root object.

    see also: http://opensource.apple.com/source/CF/CF-744.18/CFBinaryPList.c
    cCs
||_dSr)rerfrrrr�r*z_BinaryPlistParser.__init__cCs�z?||_|j�dtj�|j�d�}t|�dkrt��t�d|�\}|_	}}}|j�|�|�
||�|_tg||_
|�|�WStttjttfyOt��w)Ni��� z>6xBBQQQ)�_fp�seek�os�SEEK_END�readr2r�struct�unpack�	_ref_size�
_read_ints�_object_offsets�
_undefined�_objects�_read_object�OSError�
IndexError�errorr�r)r�fp�trailer�offset_size�num_objects�
top_object�offset_table_offsetrrrrt�s&
�

��z_BinaryPlistParser.parsecCsL|dkr$|j�d�dd@}d|>}dt|}t�||j�|��dS|S)z$ return the size of the next object.�r�r	r/rZ)r�r��_BINARY_FORMATr�r�)r�tokenLr_r7�frrr�	_get_size�sz_BinaryPlistParser._get_sizecCs\t|t�}|j�|�}	t|�|krt�||kr|St|||�}||j�|�7}||7}qr)�min�_MIN_READ_BUF_SIZEr�r�r2r)r�size�cursizer�deltarrr�_read�s
�z_BinaryPlistParser._readcs^|��|���tvrt�d|�t�����S�st��t��fdd�td�|��D��S)NrZc3s(�|]}t��||��d�VqdS)�bigN)r�
from_bytes)�.0r;�rrrr�	<genexpr>s� �z0_BinaryPlistParser._read_ints.<locals>.<genexpr>r	)rr�r�r�rr�r1)r�nrrr
rr�s�z_BinaryPlistParser._read_intscCs|�||j�Sr)r�r�)rrrrr�
_read_refsr$z_BinaryPlistParser._read_refscs��j|}|tur|S�j|}�j�|��j�d�d}|d@|d@}}|dkr/d}�n|dkr7d}�n|dkr?d	}�n|dkrGd
}�n|dkr\tj�j�d|>�d|d
kd�}n�|dkrmt�	d�j�d��d}n�|dkr~t�	d�j�d��d}n�|dkr�t�	d�j�d��d}t
�
ddd�t
j|d�}n�|dkr���|�}��
|�}n�|dkr���|�}��
|�}	|	�d�}n�|dkrՈ�|�d}��
|�}	|	�d�}ny|dkr�tt��j�d|�d��}nf|dk�r��|�}��|�}
g}|�j|<|��fdd �|
D��nC|d!k�rK��|�}��|�}��|�}
���}|�j|<zt||
�D]\}}
��|
�|��|�<�q.Wnt�yJt��wt��|�j|<|S)"zx
        read the object by reference.

        May recursively read sub-objects (content of an array/dict/set)
        r�r	��r�Nr�F�	Tr0r�rr/��signed�"z>fr.�#z>d�3��)�seconds�@�Pr��`r��utf-16be��c3s�|]}��|�VqdSr)r�)r	�xrrrrXs�z2_BinaryPlistParser._read_object.<locals>.<genexpr>��)r�r�r�r�r�r�rrr�r�rM�	timedeltarrr�rr
�extendre�zipr�rr)r�ref�result�offset�token�tokenHr�r�r7r�obj_refs�key_refs�k�orrrr�s~

�
�












��
z_BinaryPlistParser._read_objectN)rr+r,�__doc__rrtrrr�r
r�rrrrr��s

r�cCs(|dkrdS|dkrdS|dkrdSdS)N�r��r��r.r�r)�countrrr�_count_to_sizeqsr0c@r)�_BinaryPlistWritercCs||_||_||_dSr)r�r�r�)rr�r�r�rrrr�s
z_BinaryPlistWriter.__init__c
Cs�g|_i|_i|_|�|�t|j�}dg||_t|�|_t|j|_	|j
�d�|jD]}|�|�q-|�
|�}|j
��}t|�}dt||}|j
�tj|g|j�R��d}|||j|||f}	|j
�tjdg|	�R��dS)Nr	�bplist00rZz	>5xBBBQQQ)�_objlist�	_objtable�_objidtable�_flattenr2r�r0r�r��_ref_formatr�r��
_write_object�
_getrefnum�tellr��pack)
rrwr��objr�r�r��
offset_format�sort_versionr�rrrr��s*






�z_BinaryPlistWriter.writec	Cs$t|t�rt|�|f|jvrdSn	t|�|jvrdSt|j�}|j�|�t|t�r4||jt|�|f<n||jt|�<t|t	�r}g}g}|�
�}|jrOt|�}|D]\}}t|t
�sb|jr^qQtd��|�|�|�|�qQt�||�D]}|�|�qsdSt|ttf�r�|D]	}|�|�q�dSdS)Nr�)r�_scalarsr�r4�idr5r2r3r3r�r�r�r�r?r�r�	itertools�chainr6r�r�)	rrw�refnum�keys�valuesr�r)�vr*rrrr6�s@
�




��z_BinaryPlistWriter._flattencCs*t|t�r|jt|�|fS|jt|�Sr)rr?r4r�r5r@r�rrrr9�s
z_BinaryPlistWriter._getrefnumcCs�|dkr|j�t�d||B��dS|dkr&|j�t�d|dBd|��dS|dkr:|j�t�d|dBd|��dS|d	krN|j�t�d
|dBd|��dS|j�t�d|dBd
|��dS)Nr�z>Br,z>BBBr�r-z>BBH�r.z>BBL�z>BBQ�)r�r�r�r;)rr%rrrr�_write_size�s    z_BinaryPlistWriter._write_sizecsj��|�}�j���j|<|dur�j�d�dS|dur%�j�d�dS|dur1�j�d�dSt|t�r�|dkrVz�j�t�dd|��WdStj	yUt
|�d�w|d	krg�j�t�d
d|��dS|dkrx�j�t�d
d|��dS|dkr��j�t�dd|��dS|dkr��j�t�dd|��dS|dkr��j�d|jdddd��dSt
|��t|t�rĈj�t�dd|��dSt|t
j
�r�|t
�
ddd���}�j�t�dd|��dSt|ttf�r���dt|���j�|�dSt|t��r0z|�d�}��dt|��Wnt�y'|�d �}��d!t|�d"�Ynw�j�|�dSt|t��r�|jdk�r@td#��|jd	k�rS�j�t�d
d$|��dS|jdk�rf�j�t�d
d%|��dS|jdk�ry�j�t�dd&|��dS|jdk�r��j�t�dd'|��dSt
|��t|ttf��r��fd(d)�|D�}t|�}��d*|��j�tjd+�j|g|�R��dSt|t��r1gg}}�j�r�t|���}	n|��}	|	D]%\}
}t|
t��s�j �r�q�t!d,��|�"��|
��|�"��|���q�t|�}��d-|��j�tjd+�j|g|�R���j�tjd+�j|g|�R��dSt!|��).N�F�Tr�r	z>BqrIr,z>BBr�r-z>BHrGr.z>BLrHlz>BQr�rrz>Bdrrr�rrr�rrrr�rr���csg|]}��|��qSr)r9)r	r*rrr�
<listcomp>6sz4_BinaryPlistWriter._write_object.<locals>.<listcomp>rrZr�r)#r9r�r:r�r�rrr�r;r�r��to_bytesr�rM�
total_secondsr�r�rJr2r?rA�UnicodeEncodeErrorrrrr�r�r7r�r�r�r�r�rr3)rrwr"r��t�refsr7�keyRefs�valRefs�	rootItemsr)rFrrrr8�s�


� 


�(
$(z _BinaryPlistWriter._write_objectN)	rr+r,rr�r6r9rJr8rrrrr1�s-*r1cCs|dd�dkS)Nr�r2r)r�rrr�_is_fmt_binaryTr�rZ)�detectri�writer��fmtrgcCsj|dur%|�d�}|�d�t��D]}|d|�r |d}nqt��nt|d}||d�}|�|�S)z�Read a .plist file. 'fp' should be a readable and binary file object.
    Return the unpacked root object (which usually is a dictionary).
    Nr�r	r[ri)rg)r�r��_FORMATSrErrt)r�r^rgr��info�P�prrrrjs

��

rcCst|�}t|||d�S)zqRead a .plist file from a bytes object.
    Return the unpacked root object (which usually is a dictionary).
    r])r
r)rwr^rgr�rrrr�srTF)r^r�r�cCs:|tvrtd|f��t|d|||d�}|�|�dS)zWWrite 'value' to a .plist file. 'fp' should be a writable,
    binary file object.
    zUnsupported format: %rr\)r�r�N)r_rr�)rwr�r^r�r�r\rrrr�sr�r^r�r�cCs t�}t|||||d�|��S)z?Return a bytes object with the contents for a .plist file.
    rc)r
r�getvalue)rwr^r�r�r�rrrr�sr)r-):r+�__all__r4r�rM�enum�ior
rAr��rer��xml.parsers.expatr�Enumrr�globals�update�__members__rrr��compiler[r=rB�ASCIIrJrSrUr`rar�r�r�rrr��objectr�r�r0r?rr�r�r?r1rZrr�rr_rrrrrrrr�<module>sn8!�
	
n&^!'
U	���
Upload File: