File: //proc/thread-self/root/lib/python3/dist-packages/twisted/python/__pycache__/util.cpython-38.pyc
U
��W[m � @ s� d dl mZmZmZ d dlZd dlZd dlZd dlZzd dlZd dl Z W n e
k
rd d ZZ Y nX zd dlmZmZ W n e
k
r� d ZZY nX d dl
mZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ eed d
dd �dd
d� eG dd� d��Zdd� ZdSdd�Zdd� Zdd� Zdd� Zdd� ZdTd d!�Z d"d#� Z!d$d%� Z"dUd)d*�Z#d+d,� Z$g g fd-d.�Z%eG d/d0� d0��Z&d1d2� Z'G d3d4� d4e(�Z)G d5d6� d6e(�Z*eG d7d8� d8��Z+eG d9d:� d:��Z,zd d;lm-Z. W n e
k
�r� dZ.Y nX e.dk�rd<d=� Z-nd>d=� Z-dVd@dA�Z/G dBdC� dCe(�Z0dDdE� Z1dFdG� Z2dHdI� Z3dJdK� Z4dLdM� Z5dNdO� Z6dPdQ� Z7dddddd!d#d*ddd,d.d0d2d4d8d:dAdCdGdIdKdMdOdEdQdRgZ8e�r�dCd*gZ9e8dd� D ]"Z:e:e9k�r�e8�;e:� e<� e:= �q�[:[9dS )W� )�division�absolute_import�print_functionN)� setgroups� getgroups)�_PY3�unicode)�Version)�deprecatedModuleAttribute)� _oldStyle�
_replaceIf)�OrderedDictZTwisted� � z$Use collections.OrderedDict instead.ztwisted.python.utilr
c @ s� e Zd ZdZd0dd�Zdd� Zdd � Zd
d� Zdd
� Zdd� Z e Z
dd� Zdd� Zdd� Z
dd� Zd1dd�Zdd� Zdd� Zdd� Zd d!� Zd"d#� Zd$d%� Zd&d'� Zd(d)� Zd*d+� Zd,d-� Zd.d/� ZdS )2�InsensitiveDicta
Dictionary, that has case-insensitive keys.
Normally keys are retained in their original form when queried with
.keys() or .items(). If initialized with preserveCase=0, keys are both
looked up in lowercase and returned in lowercase by .keys() and .items().
N� c C s i | _ || _|r| �|� dS )zD
Create an empty dictionary, or update from 'dict'.
N)�data�preserve�update)�self�dictr � r �5/usr/lib/python3/dist-packages/twisted/python/util.py�__init__0 s zInsensitiveDict.__init__c C s | � |�}| j|= d S �N��_lowerOrReturnr �r �key�kr r r �__delitem__: s
zInsensitiveDict.__delitem__c C s$ t |t�st |t�r|�� S |S d S r )�
isinstance�bytesr �lower�r r r r r r ? s zInsensitiveDict._lowerOrReturnc C s | � |�}| j| d S )zI
Retrieve the value associated with 'key' (in any case).
r r r r r r �__getitem__F s
zInsensitiveDict.__getitem__c C s | � |�}||f| j|<