diff options
Diffstat (limited to 'toys/brhute')
-rw-r--r-- | toys/brhute/brhute.py | 104 | ||||
-rw-r--r-- | toys/brhute/brhute_multitprocessing_broken.py | 121 | ||||
-rw-r--r-- | toys/brhute/brhute_threaded.py | 75 | ||||
-rw-r--r-- | toys/brhute/brhute_twisted.py | 75 | ||||
-rw-r--r-- | toys/brhute/contrib/httplib_pipelining_orig.py | 99 | ||||
-rw-r--r-- | toys/brhute/grbrute.py | 90 | ||||
-rw-r--r-- | toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt | 1023 | ||||
-rw-r--r-- | toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt | 1023 | ||||
-rw-r--r-- | toys/brhute/grequests.py | 182 | ||||
-rw-r--r-- | toys/brhute/httplib_pipelining.py | 96 | ||||
-rw-r--r-- | toys/brhute/pphidden.py | 29 | ||||
-rw-r--r-- | toys/brhute/pphidden_async.py | 83 | ||||
-rw-r--r-- | toys/brhute/threaded_resolver.py | 302 | ||||
-rw-r--r-- | toys/brhute/twisted_http.py | 26 | ||||
-rw-r--r-- | toys/brhute/twisted_http_persistent.py | 39 | ||||
-rw-r--r-- | toys/brhute/twisted_http_simultaneous.py | 39 |
16 files changed, 3406 insertions, 0 deletions
diff --git a/toys/brhute/brhute.py b/toys/brhute/brhute.py new file mode 100644 index 0000000..851d742 --- /dev/null +++ b/toys/brhute/brhute.py @@ -0,0 +1,104 @@ +from collections import deque +import time +import asyncore +from asynhttp import http_evented # in brhute repository +import asyncdns # sudo pip install asyncdns +import warnings + +# grbrute - asynchronous URL fetcher based on asyhttp +# Uses multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis <laurent@p1sec.com> + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection: + def __init__(self, url_iter, ip, port, req_per_connection, cb_response, + interval=0, verbose=False): + self.url_iter = url_iter + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + self.ongoing = 0 + self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) + + def get(self, host, url): + if self.verbose: + print "XXX Brhute_connection.get" + headers = {'Host': host} + body = None + self.hev.make_HTTP_request("GET", url, body, headers, + self._cb_response) + self.ongoing += 1 + + def _connected(self): + self._send() + + def _send(self): + while self.ongoing < self.req_per_connection: + # get an URL to send + try: + (host, url) = next(self.url_iter) + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # send the url + self.get(host, url) + + def _cb_response(self, response): + self.ongoing -= 1 + if self.cb_response_user: + self.cb_response_user(response) + self._send() + time.sleep(self.interval) + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + self.conns = deque() + for i in range(nb_connections): + self.conns.append(Brhute_connection(url_iter, ip, port, + req_per_connection, cb_response, interval, + verbose)) + if block: + asyncore.loop() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_multitprocessing_broken.py b/toys/brhute/brhute_multitprocessing_broken.py new file mode 100644 index 0000000..fb7f19d --- /dev/null +++ b/toys/brhute/brhute_multitprocessing_broken.py @@ -0,0 +1,121 @@ +from collections import deque +import time +import threading +import Queue +import asyncore +from asynhttp import http_evented # in brhute repository +import asyncdns # sudo pip install asyncdns +import warnings + +# grbrute - asynchronous URL fetcher based on asyhttp +# Uses multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis <laurent@p1sec.com> + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(): + def __init__(self, queue, ip, port, req_per_connection, cb_response, + interval=0, verbose=False): + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + self.ongoing = 0 + self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) + asyncore.loop() + + def get(self, host, url): + if self.verbose: + print "XXX Brhute_connection.get" + headers = {'Host': host} + body = None + self.hev.make_HTTP_request("GET", url, body, headers, + self._cb_response) + self.ongoing += 1 + + def _connected(self): + self._send() + + def _send(self): + if self.ongoing == self.req_per_connection: + return + # get an URL to send + try: + print "XXX queue get" + try: + host, url = self.queue.get(False) + except Queue.Empty: + return + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # send the url + self.get(host, url) + self.queue.task_done() + + def _cb_response(self, response): + self.ongoing -= 1 + if self.cb_response_user: + self.cb_response_user(response) + self._send() + time.sleep(self.interval) + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + queue = multiprocessing.JoinableQueue() + + self.conns = deque() + for i in range(nb_connections): + p = multiprocessing.Process(target=self._proc, + args=(queue, ip, port, + req_per_connection, cb_response, + interval, verbose)) + p.start() + self.conns.append(p) + for host, url in url_iter: + queue.put((host, url)) + time.sleep(60) # XXX + + def _proc(self, queue, ip, port, req_per_connection, cb_response, interval, verbose): + Brhute_connection(queue, ip, port, req_per_connection, cb_response, interval, verbose) + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_threaded.py b/toys/brhute/brhute_threaded.py new file mode 100644 index 0000000..22ab2bb --- /dev/null +++ b/toys/brhute/brhute_threaded.py @@ -0,0 +1,75 @@ +from collections import deque +import time +import httplib_pipelining +import threading +import threaded_resolver +import Queue +import warnings + +# grbrute - asynchronous URL fetcher using threads and HTTP pipelining +# Makes multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis <laurent@p1sec.com> + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(threading.Thread): + def __init__(self, ip, port, queue, req_per_connection, cb_response, + interval=0, verbose=False): + threading.Thread.__init__(self) + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + + def run(self): + conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) + conn.run() + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + queue = Queue.Queue() + + for i in range(nb_connections): + c = Brhute_connection(ip, port, queue, + req_per_connection, cb_response, + interval, verbose) + c.setDaemon(True) + c.start() + + for host, url in url_iter: + queue.put(url) + queue.join() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_twisted.py b/toys/brhute/brhute_twisted.py new file mode 100644 index 0000000..22ab2bb --- /dev/null +++ b/toys/brhute/brhute_twisted.py @@ -0,0 +1,75 @@ +from collections import deque +import time +import httplib_pipelining +import threading +import threaded_resolver +import Queue +import warnings + +# grbrute - asynchronous URL fetcher using threads and HTTP pipelining +# Makes multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis <laurent@p1sec.com> + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(threading.Thread): + def __init__(self, ip, port, queue, req_per_connection, cb_response, + interval=0, verbose=False): + threading.Thread.__init__(self) + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + + def run(self): + conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) + conn.run() + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + queue = Queue.Queue() + + for i in range(nb_connections): + c = Brhute_connection(ip, port, queue, + req_per_connection, cb_response, + interval, verbose) + c.setDaemon(True) + c.start() + + for host, url in url_iter: + queue.put(url) + queue.join() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/contrib/httplib_pipelining_orig.py b/toys/brhute/contrib/httplib_pipelining_orig.py new file mode 100644 index 0000000..75e9aad --- /dev/null +++ b/toys/brhute/contrib/httplib_pipelining_orig.py @@ -0,0 +1,99 @@ +## {{{ http://code.activestate.com/recipes/576673/ (r5) +from httplib import HTTPConnection, _CS_IDLE +import urlparse + +def pipeline(domain,pages,max_out_bound=4,debuglevel=0): + pagecount = len(pages) + conn = HTTPConnection(domain) + conn.set_debuglevel(debuglevel) + respobjs = [None]*pagecount + finished = [False]*pagecount + data = [None]*pagecount + headers = {'Host':domain,'Content-Length':0,'Connection':'Keep-Alive'} + + while not all(finished): + # Send + out_bound = 0 + for i,page in enumerate(pages): + if out_bound >= max_out_bound: + break + elif page and not finished[i] and respobjs[i] is None: + if debuglevel > 0: + print 'Sending request for %r...' % (page,) + conn._HTTPConnection__state = _CS_IDLE # FU private variable! + conn.request("GET", page, None, headers) + respobjs[i] = conn.response_class(conn.sock, strict=conn.strict, method=conn._method) + out_bound += 1 + # Try to read a response + for i,resp in enumerate(respobjs): + if resp is None: + continue + if debuglevel > 0: + print 'Retrieving %r...' % (pages[i],) + out_bound -= 1 + skip_read = False + resp.begin() + if debuglevel > 0: + print ' %d %s' % (resp.status, resp.reason) + if 200 <= resp.status < 300: + # Ok + data[i] = resp.read() + cookie = resp.getheader('Set-Cookie') + if cookie is not None: + headers['Cookie'] = cookie + skip_read = True + finished[i] = True + respobjs[i] = None + elif 300 <= resp.status < 400: + # Redirect + loc = resp.getheader('Location') + respobjs[i] = None + parsed = loc and urlparse.urlparse(loc) + if not parsed: + # Missing or empty location header + data[i] = (resp.status, resp.reason) + finished[i] = True + elif parsed.netloc != '' and parsed.netloc != host: + # Redirect to another host + data[i] = (resp.status, resp.reason, loc) + finished[i] = True + else: + path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment='')) + if debuglevel > 0: + print ' Updated %r to %r' % (pages[i],path) + pages[i] = path + elif resp.status >= 400: + # Failed + data[i] = (resp.status, resp.reason) + finished[i] = True + respobjs[i] = None + if resp.will_close: + # Connection (will be) closed, need to resend + conn.close() + if debuglevel > 0: + print ' Connection closed' + for j,f in enumerate(finished): + if not f and respobj[j] is not None: + if debuglevel > 0: + print ' Discarding out-bound request for %r' % (pages[j],) + respobj[j] = None + break + elif not skip_read: + resp.read() # read any data + if any(not f and respobjs[j] is None for j,f in enumerate(finished)): + # Send another pending request + break + else: + break # All respobjs are None? + return data + +if __name__ == '__main__': + domain = 'en.wikipedia.org' + pages = ('/wiki/HTTP_pipelining', '/wiki/HTTP', '/wiki/HTTP_persistent_connection') + data = pipeline(domain,pages,max_out_bound=2,debuglevel=1) + for i,page in enumerate(data): + print + print '==== Page %r ====' % (pages[i],) + print page[:512] +## end of http://code.activestate.com/recipes/576673/ }}} + diff --git a/toys/brhute/grbrute.py b/toys/brhute/grbrute.py new file mode 100644 index 0000000..fbdc8bc --- /dev/null +++ b/toys/brhute/grbrute.py @@ -0,0 +1,90 @@ +import requests +import grequests +import gevent +from collections import deque +import time +import warnings + +# grbrute - asynchronous URL fetcher based on grequests +# Uses multiple simultaneous connections and reuses them (HTTP/1.1) +# 2013, Laurent Ghigonis <laurent@p1sec.com> + +# XXX urllib3 and therefore requests do not support pipelining ... + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +class SessionQueue: + def __init__(self, pool, cb_response): + self.pool = pool + self.cb_response = cb_response + self.session = requests.Session() + self.ongoing = 0 + + def add(self, url): + req = grequests.get(url, session=self.session, + hooks = {'response' : self._cb_response_session}) + grequests.send(req, self.pool, exception_handler=self._cb_exception) + self.ongoing += 1 + + def _cb_response_session(self, res, verify=None, cert=None, proxies=None, timeout=None, stream=None): + self.ongoing -= 1 + if self.cb_response(res) is False: + self.pool.kill() + + def _cb_exception(self, req, e): + print "ERROR: sending of %s failed, retrying :\n%s" % (req.url, e) + grequests.send(req, self.pool, exception_handler=self._cb_exception) + +class Grbrute: + """ url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, cb_response=None, + nb_sessions=3, req_per_session=10, sleep=0, + verbose=False, block=True): + self.url_iter = url_iter + self.cb_response_user = cb_response + self.nb_sessions = nb_sessions + self.req_per_session = req_per_session + self.sleep = sleep + self.verbose = verbose + self.pool = grequests.Pool() + self.sessions = deque() + self.ongoing_total = 0 + for i in range(nb_sessions): + self.sessions.append(SessionQueue(self.pool, self._cb_response)) + self._send() + if block: + self.pool.join() + + def _send(self): + while self.ongoing_total < self.nb_sessions * self.req_per_session: + # get an URL to send + try: + url = next(self.url_iter) + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # select a session that has room to send + while self.sessions[0].ongoing == self.req_per_session: + self.sessions.rotate(1) + # send URL using selected sessions + self.sessions[0].add(url) + self.ongoing_total += 1 + self.sessions.rotate(1) + + def _cb_response(self, res): + self.ongoing_total -= 1 + cont = True + if self.cb_response_user: + cont = self.cb_response_user(res) + self._send() + time.sleep(self.sleep) + return cont diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt new file mode 100644 index 0000000..cf85bda --- /dev/null +++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt @@ -0,0 +1,1023 @@ + ncalls tottime percall cumtime percall filename:lineno(function) + 2/1 0.001 0.000 3.165 3.165 <string>:1(<module>) + 1 0.000 0.000 0.000 0.000 <string>:1(ParseResult) + 1 0.000 0.000 0.000 0.000 <string>:1(SplitResult) + 1 0.000 0.000 0.000 0.000 <string>:1(Url) + 612 0.003 0.000 0.004 0.000 <string>:1(fileno) + 2210 0.008 0.000 0.013 0.000 <string>:8(__new__) + 1 0.001 0.001 0.017 0.017 Cookie.py:206(<module>) + 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) + 257 0.001 0.000 0.001 0.000 Cookie.py:308(<genexpr>) + 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) + 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) + 1 0.001 0.001 0.002 0.002 Queue.py:1(<module>) + 320 0.007 0.000 0.016 0.000 Queue.py:107(put) + 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) + 320 0.005 0.000 0.015 0.000 Queue.py:150(get) + 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) + 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) + 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) + 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) + 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) + 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) + 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) + 1 0.000 0.000 0.000 0.000 StringIO.py:30(<module>) + 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) + 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) + 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) + 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12(<module>) + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1(<module>) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) + 1 0.000 0.000 0.000 0.000 __future__.py:48(<module>) + 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) + 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) + 3 0.001 0.000 0.166 0.055 __init__.py:1(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) + 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) + 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) + 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) + 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) + 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) + 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) + 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) + 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) + 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) + 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) + 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) + 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) + 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) + 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) + 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) + 1 0.000 0.000 0.000 0.000 __init__.py:18(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) + 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) + 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) + 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) + 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) + 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) + 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) + 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) + 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) + 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) + 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) + 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) + 1 0.003 0.003 0.005 0.005 __init__.py:24(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) + 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) + 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) + 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) + 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) + 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) + 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) + 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) + 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) + 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) + 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) + 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) + 1 0.004 0.004 0.006 0.006 __init__.py:4(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) + 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) + 1 0.001 0.001 0.371 0.371 __init__.py:42(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) + 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) + 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) + 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) + 1 0.006 0.006 0.009 0.009 __init__.py:5(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) + 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) + 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) + 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) + 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) + 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) + 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) + 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) + 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) + 10 0.000 0.000 0.000 0.000 __init__.py:879(append) + 1 0.001 0.001 0.165 0.165 __init__.py:9(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) + 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) + 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) + 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) + 1 0.001 0.001 0.036 0.036 __init__.py:98(<module>) + 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) + 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) + 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) + 2 0.000 0.000 0.000 0.000 _abcoll.py:26(<genexpr>) + 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) + 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) + 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) + 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) + 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) + 1 0.000 0.000 0.001 0.001 _collections.py:7(<module>) + 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) + 1 0.000 0.000 0.000 0.000 _endian.py:4(<module>) + 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) + 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) + 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) + 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) + 16 0.000 0.000 0.001 0.000 abc.py:86(<genexpr>) + 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) + 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) + 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) + 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) + 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) + 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) + 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) + 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) + 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) + 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) + 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) + 1 0.000 0.000 0.000 0.000 adapters.py:9(<module>) + 1 0.000 0.000 0.003 0.003 api.py:12(<module>) + 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) + 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) + 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) + 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) + 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) + 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) + 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) + 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) + 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) + 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) + 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) + 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) + 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) + 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) + 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) + 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) + 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) + 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) + 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) + 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) + 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) + 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) + 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) + 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) + 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) + 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) + 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) + 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) + 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) + 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) + 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) + 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) + 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) + 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) + 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) + 1 0.003 0.003 0.006 0.006 argparse.py:76(<module>) + 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) + 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) + 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) + 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) + 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) + 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) + 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) + 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) + 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) + 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) + 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) + 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) + 1 0.000 0.000 0.000 0.000 ascii.py:8(<module>) + 1 0.000 0.000 0.000 0.000 atexit.py:37(register) + 1 0.000 0.000 0.000 0.000 atexit.py:6(<module>) + 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) + 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) + 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) + 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) + 1 0.000 0.000 0.001 0.001 auth.py:8(<module>) + 1 0.001 0.001 0.001 0.001 base64.py:3(<module>) + 1 0.000 0.000 0.000 0.000 bisect.py:1(<module>) + 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) + 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) + 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) + 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) + 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) + 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) + 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) + 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) + 1 0.002 0.002 0.002 0.002 calendar.py:6(<module>) + 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) + 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) + 1 0.000 0.000 0.000 0.000 certs.py:13(<module>) + 1 0.000 0.000 0.000 0.000 certs.py:18(where) + 1 0.012 0.012 0.044 0.044 cgi.py:16(<module>) + 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) + 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) + 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) + 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) + 1 0.001 0.001 0.001 0.001 collections.py:1(<module>) + 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) + 145 0.000 0.000 0.000 0.000 collections.py:43(<genexpr>) + 21 0.000 0.000 0.000 0.000 collections.py:60(<genexpr>) + 21 0.000 0.000 0.000 0.000 collections.py:61(<genexpr>) + 1 0.007 0.007 0.285 0.285 compat.py:5(<module>) + 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) + 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) + 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) + 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) + 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) + 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) + 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) + 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) + 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) + 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) + 1 0.007 0.007 0.162 0.162 connectionpool.py:7(<module>) + 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) + 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) + 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) + 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) + 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) + 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) + 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) + 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) + 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) + 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) + 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) + 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) + 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) + 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) + 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) + 1 0.003 0.003 0.053 0.053 cookielib.py:26(<module>) + 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) + 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) + 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) + 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) + 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) + 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) + 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) + 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) + 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) + 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) + 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) + 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) + 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) + 1 0.000 0.000 0.001 0.001 cookies.py:7(<module>) + 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) + 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) + 580 0.001 0.000 0.001 0.000 cookies.py:87(info) + 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) + 1 0.001 0.001 0.031 0.031 decoder.py:2(<module>) + 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) + 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) + 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) + 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) + 1 0.000 0.000 0.000 0.000 dns.py:7(<module>) + 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) + 1 0.000 0.000 0.004 0.004 encoder.py:2(<module>) + 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) + 1 0.001 0.001 0.001 0.001 exceptions.py:10(<module>) + 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) + 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) + 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) + 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) + 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) + 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) + 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) + 1 0.001 0.001 0.001 0.001 exceptions.py:9(<module>) + 1 0.005 0.005 0.133 0.133 filepost.py:7(<module>) + 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) + 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) + 3 0.000 0.000 0.002 0.001 gettext.py:421(find) + 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) + 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) + 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) + 1 0.001 0.001 0.401 0.401 grbrute.py:1(<module>) + 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) + 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) + 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) + 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) + 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) + 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) + 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) + 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) + 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) + 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) + 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) + 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) + 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) + 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) + 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) + 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) + 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) + 1 0.001 0.001 0.003 0.003 greenlet.py:3(<module>) + 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) + 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) + 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) + 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) + 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) + 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) + 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) + 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) + 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) + 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) + 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) + 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) + 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) + 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) + 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) + 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) + 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) + 320 0.004 0.000 0.050 0.000 grequests.py:112(send) + 1 0.004 0.004 0.029 0.029 grequests.py:14(<module>) + 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) + 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) + 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) + 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) + 1 0.000 0.000 0.000 0.000 gzip.py:4(<module>) + 10 0.000 0.000 0.000 0.000 hashlib.py:109(<lambda>) + 1 0.001 0.001 0.001 0.001 hashlib.py:55(<module>) + 1 0.001 0.001 0.001 0.001 heapq.py:31(<module>) + 1 0.000 0.000 0.000 0.000 hooks.py:14(<module>) + 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) + 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) + 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) + 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) + 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) + 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) + 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) + 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) + 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) + 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) + 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) + 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) + 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) + 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) + 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) + 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) + 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) + 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) + 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) + 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) + 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) + 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) + 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) + 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) + 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) + 580 0.005 0.000 0.010 0.000 httplib.py:497(close) + 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) + 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) + 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) + 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) + 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) + 1 0.002 0.002 0.002 0.002 httplib.py:67(<module>) + 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) + 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) + 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) + 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) + 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) + 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) + 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) + 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) + 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) + 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) + 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) + 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) + 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) + 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) + 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) + 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) + 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) + 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) + 105 0.002 0.000 0.004 0.000 hub.py:270(switch) + 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) + 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) + 1 0.000 0.000 0.001 0.001 hub.py:3(<module>) + 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) + 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) + 1 0.000 0.000 0.000 0.000 hub.py:95(signal) + 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) + 320 0.009 0.000 0.026 0.000 idna.py:147(encode) + 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) + 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) + 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) + 1 0.001 0.001 0.016 0.016 idna.py:3(<module>) + 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) + 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) + 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) + 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) + 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) + 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) + 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) + 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) + 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) + 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) + 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) + 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) + 1 0.003 0.003 0.005 0.005 io.py:35(<module>) + 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) + 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) + 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) + 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) + 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) + 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) + 1 0.000 0.000 0.000 0.000 keyword.py:11(<module>) + 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) + 1 0.004 0.004 0.009 0.009 mimetools.py:1(<module>) + 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) + 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) + 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) + 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) + 1 0.000 0.000 0.002 0.002 mimetypes.py:23(<module>) + 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) + 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) + 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) + 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) + 1 0.000 0.000 0.000 0.000 models.py:156(Request) + 320 0.006 0.000 0.007 0.000 models.py:179(__init__) + 320 0.012 0.000 0.364 0.001 models.py:214(prepare) + 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) + 595 0.003 0.000 0.005 0.000 models.py:252(__init__) + 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) + 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) + 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) + 1280 0.006 0.000 0.010 0.000 models.py:327(<genexpr>) + 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) + 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) + 320 0.004 0.000 0.008 0.000 models.py:37(path_url) + 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) + 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) + 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) + 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) + 1 0.000 0.000 0.000 0.000 models.py:442(Response) + 290 0.010 0.000 0.026 0.000 models.py:447(__init__) + 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) + 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) + 290/266 0.004 0.000 0.169 0.001 models.py:567(content) + 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) + 1 0.001 0.001 0.003 0.003 models.py:8(<module>) + 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) + 1 0.000 0.000 0.000 0.000 monkey.py:3(<module>) + 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) + 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) + 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) + 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) + 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) + 1 0.001 0.001 0.001 0.001 netrc.py:1(<module>) + 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) + 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) + 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) + 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) + 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) + 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) + 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) + 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) + 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) + 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:6(<module>) + 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) + 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) + 1 0.000 0.000 0.000 0.000 os.py:747(urandom) + 1 0.000 0.000 0.029 0.029 platform.py:10(<module>) + 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) + 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) + 4 0.000 0.000 0.005 0.001 platform.py:1288(system) + 3 0.000 0.000 0.000 0.000 platform.py:1307(release) + 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) + 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) + 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) + 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) + 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) + 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) + 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) + 320 0.002 0.000 0.020 0.000 pool.py:189(start) + 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) + 320 0.002 0.000 0.005 0.000 pool.py:201(discard) + 1 0.000 0.000 0.001 0.001 pool.py:208(kill) + 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) + 1 0.000 0.000 0.000 0.000 pool.py:3(<module>) + 320 0.003 0.000 0.014 0.000 pool.py:43(add) + 320 0.002 0.000 0.003 0.000 pool.py:47(discard) + 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) + 1 0.000 0.000 0.001 0.001 pool.py:88(kill) + 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) + 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) + 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) + 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) + 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) + 1 0.000 0.000 0.002 0.002 poolmanager.py:7(<module>) + 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) + 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) + 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) + 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) + 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) + 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) + 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1(<module>) + 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) + 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) + 1 0.000 0.000 0.000 0.000 pprint.py:35(<module>) + 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) + 293 0.002 0.000 0.007 0.000 queue.py:147(get) + 1 0.001 0.001 0.001 0.001 queue.py:16(<module>) + 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) + 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) + 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) + 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) + 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) + 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) + 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) + 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) + 7 0.000 0.000 0.000 0.000 queue.py:53(_init) + 293 0.001 0.000 0.001 0.000 queue.py:56(_get) + 293 0.001 0.000 0.001 0.000 queue.py:59(_put) + 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) + 293 0.002 0.000 0.004 0.000 queue.py:95(put) + 1 0.001 0.001 0.001 0.001 random.py:40(<module>) + 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) + 1 0.000 0.000 0.000 0.000 random.py:71(Random) + 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) + 1 0.000 0.000 0.000 0.000 random.py:90(__init__) + 1 0.000 0.000 0.000 0.000 random.py:99(seed) + 1 0.000 0.000 0.002 0.002 re.py:134(match) + 2 0.000 0.000 0.102 0.051 re.py:139(search) + 54 0.000 0.000 0.125 0.002 re.py:188(compile) + 2 0.000 0.000 0.000 0.000 re.py:206(escape) + 57 0.002 0.000 0.136 0.002 re.py:229(_compile) + 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) + 9 0.000 0.000 0.000 0.000 request.py:50(__init__) + 1 0.000 0.000 0.133 0.133 request.py:7(<module>) + 585/537 0.015 0.000 0.246 0.000 response.py:112(read) + 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) + 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) + 290 0.006 0.000 0.008 0.000 response.py:60(__init__) + 1 0.002 0.002 0.003 0.003 response.py:7(<module>) + 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) + 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) + 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) + 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) + 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) + 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) + 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) + 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) + 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) + 1 0.000 0.000 0.000 0.000 rfc822.py:71(<module>) + 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) + 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) + 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) + 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) + 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) + 1 0.000 0.000 0.000 0.000 scanner.py:3(<module>) + 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) + 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) + 1 0.001 0.001 0.002 0.002 sessions.py:10(<module>) + 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) + 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) + 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) + 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) + 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) + 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) + 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) + 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) + 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) + 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) + 1 0.000 0.000 0.000 0.000 shlex.py:2(<module>) + 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) + 1 0.001 0.001 0.002 0.002 six.py:1(<module>) + 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) + 9 0.000 0.000 0.000 0.000 six.py:108(__init__) + 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) + 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) + 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) + 1 0.000 0.000 0.000 0.000 six.py:317(exec_) + 1 0.000 0.000 0.000 0.000 six.py:53(X) + 1 0.000 0.000 0.000 0.000 six.py:54(__len__) + 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) + 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) + 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) + 40 0.000 0.000 0.000 0.000 six.py:80(__init__) + 1 0.000 0.000 0.000 0.000 six.py:83(__get__) + 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) + 31 0.000 0.000 0.000 0.000 six.py:93(__init__) + 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) + 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) + 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) + 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) + 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) + 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) + 1 0.001 0.001 0.001 0.001 socket.py:199(socket) + 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) + 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) + 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) + 610 0.004 0.000 0.005 0.000 socket.py:267(close) + 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) + 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) + 320 0.001 0.000 0.001 0.000 socket.py:283(flush) + 320 0.006 0.000 0.013 0.000 socket.py:315(dup) + 1 0.005 0.005 0.015 0.015 socket.py:32(<module>) + 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) + 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) + 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) + 320 0.002 0.000 0.021 0.000 socket.py:365(send) + 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) + 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) + 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) + 1 0.004 0.004 0.008 0.008 socket.py:44(<module>) + 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) + 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) + 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) + 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) + 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) + 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) + 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) + 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) + 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) + 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) + 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) + 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) + 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) + 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) + 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) + 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) + 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) + 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) + 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) + 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) + 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) + 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) + 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) + 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) + 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) + 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) + 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) + 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) + 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) + 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) + 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) + 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) + 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) + 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) + 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) + 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) + 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) + 1 0.000 0.000 0.001 0.001 ssl.py:13(<module>) + 1 0.001 0.001 0.002 0.002 ssl.py:56(<module>) + 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) + 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) + 1 0.001 0.001 0.001 0.001 status_codes.py:3(<module>) + 1 0.000 0.000 0.000 0.000 string.py:220(lower) + 1 0.000 0.000 0.000 0.000 string.py:248(strip) + 1 0.000 0.000 0.000 0.000 string.py:281(split) + 20 0.000 0.000 0.000 0.000 string.py:364(rfind) + 1 0.000 0.000 0.000 0.000 stringprep.py:6(<module>) + 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) + 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) + 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) + 3312 0.011 0.000 0.014 0.000 structures.py:45(<genexpr>) + 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) + 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) + 580 0.004 0.000 0.037 0.000 structures.py:68(get) + 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) + 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) + 1 0.000 0.000 0.000 0.000 structures.py:9(<module>) + 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) + 1 0.003 0.003 0.005 0.005 tempfile.py:18(<module>) + 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) + 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) + 1 0.001 0.001 0.002 0.002 threading.py:1(<module>) + 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) + 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) + 939 0.009 0.000 0.013 0.000 threading.py:136(release) + 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) + 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) + 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) + 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) + 641 0.005 0.000 0.011 0.000 threading.py:272(notify) + 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) + 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) + 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 threading.py:359(Event) + 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) + 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:376(set) + 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) + 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) + 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) + 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) + 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) + 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) + 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) + 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) + 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) + 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) + 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) + 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) + 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) + 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) + 1 0.000 0.000 0.000 0.000 timeout.py:14(<module>) + 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) + 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) + 30 0.000 0.000 0.000 0.000 timeout.py:90(start) + 1 0.000 0.000 0.000 0.000 traceback.py:1(<module>) + 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) + 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) + 485 0.002 0.000 0.002 0.000 urllib.py:1168(<genexpr>) + 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) + 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) + 1 0.004 0.004 0.024 0.024 urllib.py:23(<module>) + 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) + 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) + 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) + 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) + 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) + 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) + 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) + 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) + 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) + 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) + 1 0.001 0.001 0.007 0.007 urllib2.py:76(<module>) + 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) + 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) + 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) + 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) + 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) + 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) + 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) + 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) + 1 0.002 0.002 0.008 0.008 urlparse.py:26(<module>) + 485 0.002 0.000 0.002 0.000 urlparse.py:303(<genexpr>) + 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) + 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) + 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) + 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) + 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) + 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) + 1 0.000 0.000 0.000 0.000 util.py:2(<module>) + 2 0.000 0.000 0.112 0.056 util.py:206(find_library) + 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) + 1 0.000 0.000 0.000 0.000 util.py:37(Url) + 1 0.000 0.000 0.000 0.000 util.py:4(<module>) + 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) + 320 0.003 0.000 0.005 0.000 util.py:44(__new__) + 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) + 1 0.000 0.000 0.000 0.000 util.py:53(__init__) + 320 0.008 0.000 0.009 0.000 util.py:63(split_first) + 1 0.002 0.002 0.007 0.007 util.py:8(<module>) + 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) + 1 0.004 0.004 0.363 0.363 utils.py:10(<module>) + 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) + 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) + 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) + 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) + 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) + 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) + 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) + 1920 0.018 0.000 0.039 0.000 utils.py:438(<lambda>) + 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) + 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) + 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) + 960 0.006 0.000 0.028 0.000 utils.py:56(<genexpr>) + 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) + 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) + 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) + 1 0.001 0.001 0.120 0.120 uuid.py:45(<module>) + 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) + 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) + 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) + 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) + 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) + 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) + 11 0.002 0.000 0.017 0.002 {__import__} + 1 0.000 0.000 0.000 0.000 {_codecs.lookup} + 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} + 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} + 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} + 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} + 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} + 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} + 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} + 55 0.000 0.000 0.000 0.000 {_sre.compile} + 161 0.000 0.000 0.000 0.000 {_sre.getlower} + 20 0.000 0.000 0.000 0.000 {_struct.calcsize} + 341 0.001 0.000 0.001 0.000 {all} + 322 0.000 0.000 0.001 0.000 {any} + 1 0.000 0.000 0.000 0.000 {binascii.hexlify} + 323 0.001 0.000 0.001 0.000 {built-in method __enter__} + 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} + 2222 0.006 0.000 0.006 0.000 {built-in method acquire} + 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} + 2 0.000 0.000 0.000 0.000 {built-in method groups} + 2 0.000 0.000 0.000 0.000 {built-in method group} + 65 0.000 0.000 0.000 0.000 {built-in method match} + 290 0.002 0.000 0.002 0.000 {built-in method poll} + 290 0.003 0.000 0.005 0.000 {built-in method register} + 1581 0.002 0.000 0.002 0.000 {built-in method release} + 2 0.093 0.046 0.093 0.046 {built-in method search} + 320 0.005 0.000 0.005 0.000 {built-in method split} + 610 0.006 0.000 0.006 0.000 {built-in method utcnow} + 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} + 1253 0.001 0.000 0.001 0.000 {callable} + 1768 0.002 0.000 0.002 0.000 {chr} + 1 0.000 0.000 0.000 0.000 {delattr} + 2 0.000 0.000 0.000 0.000 {dir} + 2/1 0.001 0.001 3.163 3.163 {execfile} + 2 0.000 0.000 0.000 0.000 {filter} + 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} + 3602 0.011 0.000 0.011 0.000 {getattr} + 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} + 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} + 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} + 247 0.000 0.000 0.000 0.000 {globals} + 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} + 6832 0.024 0.000 0.024 0.000 {hasattr} + 320 0.000 0.000 0.000 0.000 {hash} +14669/14668 0.045 0.000 0.047 0.000 {isinstance} + 2 0.000 0.000 0.000 0.000 {issubclass} + 1 0.000 0.000 0.000 0.000 {iter} +23634/23408 0.025 0.000 0.026 0.000 {len} + 4 0.000 0.000 0.000 0.000 {locals} + 2383 0.022 0.000 0.022 0.000 {map} + 1 0.000 0.000 0.000 0.000 {math.exp} + 2 0.000 0.000 0.000 0.000 {math.log} + 1 0.000 0.000 0.000 0.000 {math.sqrt} + 360 0.001 0.000 0.001 0.000 {max} + 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} + 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} + 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} + 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} + 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} + 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} + 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} + 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} + 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} + 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} + 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} + 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} + 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} +2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} + 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} + 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} + 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} + 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} + 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} + 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} + 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} + 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} + 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} + 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} + 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} + 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} + 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} + 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} + 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} + 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} + 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} +5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} + 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} + 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} + 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} + 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} + 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} + 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} + 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} + 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} + 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} + 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} + 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} + 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} + 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} + 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} + 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} + 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} + 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} + 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} + 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} + 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} + 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} + 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} + 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} + 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} + 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} + 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} + 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} + 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} + 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} + 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} + 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} + 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} + 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} + 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} + 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} + 1837 0.004 0.000 0.004 0.000 {min} + 320 0.002 0.000 0.010 0.000 {next} + 743 0.001 0.000 0.001 0.000 {ord} + 1 0.000 0.000 0.000 0.000 {posix.close} + 1 0.000 0.000 0.000 0.000 {posix.open} + 3 0.003 0.001 0.003 0.001 {posix.popen} + 1 0.000 0.000 0.000 0.000 {posix.read} + 652 0.012 0.000 0.012 0.000 {posix.stat} + 3 0.000 0.000 0.000 0.000 {posix.uname} + 664 0.002 0.000 0.002 0.000 {range} + 3 0.000 0.000 0.000 0.000 {repr} + 290 0.000 0.000 0.000 0.000 {select.poll} + 274 0.001 0.000 0.001 0.000 {setattr} + 4 0.000 0.000 0.000 0.000 {sys._getframe} + 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} + 693 0.002 0.000 0.002 0.000 {sys.exc_info} + 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} + 1880 0.002 0.000 0.002 0.000 {thread.get_ident} + 931 0.002 0.000 0.002 0.000 {time.time} + 1 0.000 0.000 0.000 0.000 {zip} + + diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt new file mode 100644 index 0000000..414c74d --- /dev/null +++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt @@ -0,0 +1,1023 @@ + ncalls tottime percall cumtime percall filename:lineno(function) + 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) + 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) + 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) + 2/1 0.001 0.000 3.165 3.165 <string>:1(<module>) + 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1(<module>) + 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) + 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) + 2/1 0.001 0.001 3.163 3.163 {execfile} + 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) + 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) + 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) + 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) + 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) + 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) + 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) + 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) + 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) + 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) + 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) + 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) + 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) + 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) + 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) + 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) + 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) + 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) + 1 0.001 0.001 0.401 0.401 grbrute.py:1(<module>) + 1 0.001 0.001 0.371 0.371 __init__.py:42(<module>) + 320 0.012 0.000 0.364 0.001 models.py:214(prepare) + 1 0.004 0.004 0.363 0.363 utils.py:10(<module>) + 1 0.007 0.007 0.285 0.285 compat.py:5(<module>) + 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) + 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} + 585/537 0.015 0.000 0.246 0.000 response.py:112(read) + 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) + 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) + 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) + 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) + 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) +5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} + 290/266 0.004 0.000 0.169 0.001 models.py:567(content) + 3 0.001 0.000 0.166 0.055 __init__.py:1(<module>) + 1 0.001 0.001 0.165 0.165 __init__.py:9(<module>) + 1 0.007 0.007 0.162 0.162 connectionpool.py:7(<module>) + 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) + 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) + 57 0.002 0.000 0.136 0.002 re.py:229(_compile) + 1 0.000 0.000 0.133 0.133 request.py:7(<module>) + 1 0.005 0.005 0.133 0.133 filepost.py:7(<module>) + 54 0.000 0.000 0.125 0.002 re.py:188(compile) + 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) + 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) + 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) + 1 0.001 0.001 0.120 0.120 uuid.py:45(<module>) + 2 0.000 0.000 0.112 0.056 util.py:206(find_library) + 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) + 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) + 2 0.000 0.000 0.102 0.051 re.py:139(search) + 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} + 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) + 2 0.093 0.046 0.093 0.046 {built-in method search} + 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) + 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) + 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) + 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) + 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) + 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) + 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) + 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) + 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) + 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) + 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) + 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) + 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) + 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) + 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) + 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) + 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) + 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) + 1 0.003 0.003 0.053 0.053 cookielib.py:26(<module>) + 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) + 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) + 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) + 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) + 320 0.004 0.000 0.050 0.000 grequests.py:112(send) + 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) +2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} +14669/14668 0.045 0.000 0.047 0.000 {isinstance} + 1 0.012 0.012 0.044 0.044 cgi.py:16(<module>) + 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) + 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) + 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) + 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) + 1920 0.018 0.000 0.039 0.000 utils.py:438(<lambda>) + 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) + 580 0.004 0.000 0.037 0.000 structures.py:68(get) + 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) + 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) + 1 0.001 0.001 0.036 0.036 __init__.py:98(<module>) + 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) + 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) + 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) + 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) + 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) + 1 0.001 0.001 0.031 0.031 decoder.py:2(<module>) + 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) + 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) + 1 0.000 0.000 0.029 0.029 platform.py:10(<module>) + 1 0.004 0.004 0.029 0.029 grequests.py:14(<module>) + 960 0.006 0.000 0.028 0.000 utils.py:56(<genexpr>) + 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) + 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) + 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) + 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} + 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) + 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) + 290 0.010 0.000 0.026 0.000 models.py:447(__init__) +23634/23408 0.025 0.000 0.026 0.000 {len} + 320 0.009 0.000 0.026 0.000 idna.py:147(encode) + 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) + 1 0.004 0.004 0.024 0.024 urllib.py:23(<module>) + 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) + 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) + 6832 0.024 0.000 0.024 0.000 {hasattr} + 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) + 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) + 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) + 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) + 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) + 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) + 2383 0.022 0.000 0.022 0.000 {map} + 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) + 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) + 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) + 320 0.002 0.000 0.021 0.000 socket.py:365(send) + 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) + 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) + 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) + 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) + 320 0.002 0.000 0.020 0.000 pool.py:189(start) + 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) + 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) + 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) + 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) + 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) + 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) + 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) + 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) + 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} + 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} + 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) + 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) + 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) + 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} + 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) + 1 0.001 0.001 0.017 0.017 Cookie.py:206(<module>) + 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) + 11 0.002 0.000 0.017 0.002 {__import__} + 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) + 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) + 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) + 1 0.001 0.001 0.016 0.016 idna.py:3(<module>) + 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) + 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) + 320 0.007 0.000 0.016 0.000 Queue.py:107(put) + 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) + 1 0.005 0.005 0.015 0.015 socket.py:32(<module>) + 320 0.005 0.000 0.015 0.000 Queue.py:150(get) + 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) + 3312 0.011 0.000 0.014 0.000 structures.py:45(<genexpr>) + 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) + 320 0.003 0.000 0.014 0.000 pool.py:43(add) + 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) + 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) + 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) + 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) + 939 0.009 0.000 0.013 0.000 threading.py:136(release) + 2210 0.008 0.000 0.013 0.000 <string>:8(__new__) + 320 0.006 0.000 0.013 0.000 socket.py:315(dup) + 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) + 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) + 652 0.012 0.000 0.012 0.000 {posix.stat} + 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} + 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) + 641 0.005 0.000 0.011 0.000 threading.py:272(notify) + 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) + 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) + 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} + 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) + 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) + 3602 0.011 0.000 0.011 0.000 {getattr} + 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) + 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} + 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) + 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) + 320 0.002 0.000 0.010 0.000 {next} + 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) + 1280 0.006 0.000 0.010 0.000 models.py:327(<genexpr>) + 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} + 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} + 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) + 580 0.005 0.000 0.010 0.000 httplib.py:497(close) + 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) + 1 0.004 0.004 0.009 0.009 mimetools.py:1(<module>) + 1 0.006 0.006 0.009 0.009 __init__.py:5(<module>) + 320 0.008 0.000 0.009 0.000 util.py:63(split_first) + 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) + 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) + 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) + 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) + 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) + 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) + 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} + 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) + 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} + 1 0.002 0.002 0.008 0.008 urlparse.py:26(<module>) + 1 0.004 0.004 0.008 0.008 socket.py:44(<module>) + 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) + 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) + 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) + 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) + 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) + 290 0.006 0.000 0.008 0.000 response.py:60(__init__) + 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) + 320 0.004 0.000 0.008 0.000 models.py:37(path_url) + 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) + 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) + 1 0.002 0.002 0.007 0.007 util.py:8(<module>) + 1 0.001 0.001 0.007 0.007 urllib2.py:76(<module>) + 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) + 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) + 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) + 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) + 293 0.002 0.000 0.007 0.000 queue.py:147(get) + 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) + 320 0.006 0.000 0.007 0.000 models.py:179(__init__) + 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} + 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} + 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} + 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) + 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) + 1 0.004 0.004 0.006 0.006 __init__.py:4(<module>) + 1 0.003 0.003 0.006 0.006 argparse.py:76(<module>) + 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) + 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) + 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) + 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) + 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) + 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} + 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) + 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) + 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) + 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) + 610 0.006 0.000 0.006 0.000 {built-in method utcnow} + 2222 0.006 0.000 0.006 0.000 {built-in method acquire} + 1 0.003 0.003 0.005 0.005 tempfile.py:18(<module>) + 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) + 1 0.003 0.003 0.005 0.005 io.py:35(<module>) + 1 0.003 0.003 0.005 0.005 __init__.py:24(<module>) + 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) + 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) + 4 0.000 0.000 0.005 0.001 platform.py:1288(system) + 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) + 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) + 320 0.003 0.000 0.005 0.000 util.py:44(__new__) + 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) + 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) + 610 0.004 0.000 0.005 0.000 socket.py:267(close) + 320 0.002 0.000 0.005 0.000 pool.py:201(discard) + 595 0.003 0.000 0.005 0.000 models.py:252(__init__) + 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} + 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} + 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} + 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} + 320 0.005 0.000 0.005 0.000 {built-in method split} + 290 0.003 0.000 0.005 0.000 {built-in method register} + 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) + 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) + 1 0.000 0.000 0.004 0.004 encoder.py:2(<module>) + 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) + 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} + 612 0.003 0.000 0.004 0.000 <string>:1(fileno) + 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) + 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) + 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) + 293 0.002 0.000 0.004 0.000 queue.py:95(put) + 1837 0.004 0.000 0.004 0.000 {min} + 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} + 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} + 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} + 105 0.002 0.000 0.004 0.000 hub.py:270(switch) + 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) + 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} + 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) + 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} + 1 0.002 0.002 0.003 0.003 response.py:7(<module>) + 1 0.001 0.001 0.003 0.003 models.py:8(<module>) + 1 0.001 0.001 0.003 0.003 greenlet.py:3(<module>) + 1 0.000 0.000 0.003 0.003 api.py:12(<module>) + 3 0.003 0.001 0.003 0.001 {posix.popen} + 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) + 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) + 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) + 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) + 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) + 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) + 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) + 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) + 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) + 320 0.002 0.000 0.003 0.000 pool.py:47(discard) + 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) + 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} + 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} + 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} + 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} + 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) + 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) + 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) + 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) + 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) + 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) + 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) + 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) + 1 0.001 0.001 0.002 0.002 threading.py:1(<module>) + 1 0.001 0.001 0.002 0.002 ssl.py:56(<module>) + 1 0.001 0.001 0.002 0.002 six.py:1(<module>) + 1 0.001 0.001 0.002 0.002 sessions.py:10(<module>) + 1 0.000 0.000 0.002 0.002 re.py:134(match) + 1 0.001 0.001 0.002 0.002 Queue.py:1(<module>) + 1 0.000 0.000 0.002 0.002 poolmanager.py:7(<module>) + 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) + 1 0.000 0.000 0.002 0.002 mimetypes.py:23(<module>) + 1 0.002 0.002 0.002 0.002 httplib.py:67(<module>) + 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) + 1 0.002 0.002 0.002 0.002 calendar.py:6(<module>) + 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) + 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) + 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) + 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) + 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) + 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) + 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) + 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) + 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) + 3 0.000 0.000 0.002 0.001 gettext.py:421(find) + 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) + 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) + 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) + 485 0.002 0.000 0.002 0.000 urlparse.py:303(<genexpr>) + 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) + 485 0.002 0.000 0.002 0.000 urllib.py:1168(<genexpr>) + 931 0.002 0.000 0.002 0.000 {time.time} + 1880 0.002 0.000 0.002 0.000 {thread.get_ident} + 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} + 693 0.002 0.000 0.002 0.000 {sys.exc_info} + 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) + 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) + 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) + 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) + 664 0.002 0.000 0.002 0.000 {range} + 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) + 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) + 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) + 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} + 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} + 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} + 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) + 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) + 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) + 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) + 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) + 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} + 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) + 1768 0.002 0.000 0.002 0.000 {chr} + 1581 0.002 0.000 0.002 0.000 {built-in method release} + 290 0.002 0.000 0.002 0.000 {built-in method poll} + 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) + 1 0.001 0.001 0.001 0.001 status_codes.py:3(<module>) + 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) + 1 0.000 0.000 0.001 0.001 ssl.py:13(<module>) + 1 0.001 0.001 0.001 0.001 socket.py:199(socket) + 1 0.001 0.001 0.001 0.001 random.py:40(<module>) + 1 0.001 0.001 0.001 0.001 queue.py:16(<module>) + 1 0.000 0.000 0.001 0.001 pool.py:88(kill) + 1 0.000 0.000 0.001 0.001 pool.py:208(kill) + 1 0.001 0.001 0.001 0.001 netrc.py:1(<module>) + 1 0.000 0.000 0.001 0.001 hub.py:3(<module>) + 1 0.001 0.001 0.001 0.001 heapq.py:31(<module>) + 1 0.001 0.001 0.001 0.001 hashlib.py:55(<module>) + 1 0.001 0.001 0.001 0.001 exceptions.py:9(<module>) + 1 0.001 0.001 0.001 0.001 exceptions.py:10(<module>) + 1 0.000 0.000 0.001 0.001 cookies.py:7(<module>) + 1 0.000 0.000 0.001 0.001 _collections.py:7(<module>) + 1 0.001 0.001 0.001 0.001 collections.py:1(<module>) + 1 0.001 0.001 0.001 0.001 base64.py:3(<module>) + 1 0.000 0.000 0.001 0.001 auth.py:8(<module>) + 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) + 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) + 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) + 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) + 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) + 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) + 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) + 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) + 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) + 320 0.001 0.000 0.001 0.000 socket.py:283(flush) + 274 0.001 0.000 0.001 0.000 {setattr} + 293 0.001 0.000 0.001 0.000 queue.py:59(_put) + 293 0.001 0.000 0.001 0.000 queue.py:56(_get) + 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) + 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) + 743 0.001 0.000 0.001 0.000 {ord} + 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} + 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} + 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} + 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} + 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} + 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} + 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} + 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} + 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} + 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} + 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} + 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} + 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} + 360 0.001 0.000 0.001 0.000 {max} + 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) + 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) + 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) + 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) + 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) + 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} + 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) + 580 0.001 0.000 0.001 0.000 cookies.py:87(info) + 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) + 257 0.001 0.000 0.001 0.000 Cookie.py:308(<genexpr>) + 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) + 1253 0.001 0.000 0.001 0.000 {callable} + 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} + 323 0.001 0.000 0.001 0.000 {built-in method __enter__} + 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) + 322 0.000 0.000 0.001 0.000 {any} + 341 0.001 0.000 0.001 0.000 {all} + 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) + 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) + 16 0.000 0.000 0.001 0.000 abc.py:86(<genexpr>) + 1 0.000 0.000 0.000 0.000 {zip} + 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) + 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) + 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) + 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) + 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) + 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) + 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) + 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) + 1 0.000 0.000 0.000 0.000 util.py:53(__init__) + 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) + 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) + 1 0.000 0.000 0.000 0.000 util.py:4(<module>) + 1 0.000 0.000 0.000 0.000 util.py:37(Url) + 1 0.000 0.000 0.000 0.000 util.py:2(<module>) + 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) + 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) + 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) + 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) + 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) + 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) + 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) + 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) + 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) + 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) + 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) + 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) + 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) + 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) + 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) + 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 traceback.py:1(<module>) + 30 0.000 0.000 0.000 0.000 timeout.py:90(start) + 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) + 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) + 1 0.000 0.000 0.000 0.000 timeout.py:14(<module>) + 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) + 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) + 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) + 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) + 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) + 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) + 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) + 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) + 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) + 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) + 1 0.000 0.000 0.000 0.000 threading.py:376(set) + 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) + 1 0.000 0.000 0.000 0.000 threading.py:359(Event) + 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) + 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) + 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) + 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) + 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) + 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) + 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) + 4 0.000 0.000 0.000 0.000 {sys._getframe} + 1 0.000 0.000 0.000 0.000 structures.py:9(<module>) + 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) + 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) + 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) + 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) + 20 0.000 0.000 0.000 0.000 {_struct.calcsize} + 20 0.000 0.000 0.000 0.000 string.py:364(rfind) + 1 0.000 0.000 0.000 0.000 string.py:281(split) + 1 0.000 0.000 0.000 0.000 string.py:248(strip) + 1 0.000 0.000 0.000 0.000 string.py:220(lower) + 1 0.000 0.000 0.000 0.000 stringprep.py:6(<module>) + 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) + 1 0.000 0.000 0.000 0.000 StringIO.py:30(<module>) + 1 0.000 0.000 0.000 0.000 <string>:1(Url) + 1 0.000 0.000 0.000 0.000 <string>:1(SplitResult) + 1 0.000 0.000 0.000 0.000 <string>:1(ParseResult) + 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) + 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) + 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) + 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) + 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) + 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) + 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) + 161 0.000 0.000 0.000 0.000 {_sre.getlower} + 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) + 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) + 55 0.000 0.000 0.000 0.000 {_sre.compile} + 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) + 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) + 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) + 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) + 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) + 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) + 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) + 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) + 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} + 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} + 31 0.000 0.000 0.000 0.000 six.py:93(__init__) + 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) + 1 0.000 0.000 0.000 0.000 six.py:83(__get__) + 40 0.000 0.000 0.000 0.000 six.py:80(__init__) + 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) + 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) + 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) + 1 0.000 0.000 0.000 0.000 six.py:54(__len__) + 1 0.000 0.000 0.000 0.000 six.py:53(X) + 1 0.000 0.000 0.000 0.000 six.py:317(exec_) + 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) + 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) + 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) + 9 0.000 0.000 0.000 0.000 six.py:108(__init__) + 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) + 1 0.000 0.000 0.000 0.000 shlex.py:2(<module>) + 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) + 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) + 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) + 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) + 290 0.000 0.000 0.000 0.000 {select.poll} + 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) + 1 0.000 0.000 0.000 0.000 scanner.py:3(<module>) + 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) + 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) + 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) + 1 0.000 0.000 0.000 0.000 rfc822.py:71(<module>) + 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) + 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) + 9 0.000 0.000 0.000 0.000 request.py:50(__init__) + 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) + 2 0.000 0.000 0.000 0.000 re.py:206(escape) + 3 0.000 0.000 0.000 0.000 {repr} + 1 0.000 0.000 0.000 0.000 random.py:99(seed) + 1 0.000 0.000 0.000 0.000 random.py:90(__init__) + 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) + 1 0.000 0.000 0.000 0.000 random.py:71(Random) + 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) + 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) + 7 0.000 0.000 0.000 0.000 queue.py:53(_init) + 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) + 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) + 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) + 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) + 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) + 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) + 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) + 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) + 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) + 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) + 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) + 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) + 1 0.000 0.000 0.000 0.000 pprint.py:35(<module>) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) + 3 0.000 0.000 0.000 0.000 {posix.uname} + 1 0.000 0.000 0.000 0.000 {posix.read} + 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) + 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) + 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) + 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) + 1 0.000 0.000 0.000 0.000 {posix.open} + 1 0.000 0.000 0.000 0.000 {posix.close} + 1 0.000 0.000 0.000 0.000 pool.py:3(<module>) + 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) + 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) + 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) + 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) + 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) + 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) + 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) + 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) + 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) + 3 0.000 0.000 0.000 0.000 platform.py:1307(release) + 1 0.000 0.000 0.000 0.000 os.py:747(urandom) + 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:6(<module>) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) + 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) + 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1(<module>) + 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) + 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) + 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) + 1 0.000 0.000 0.000 0.000 monkey.py:3(<module>) + 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) + 1 0.000 0.000 0.000 0.000 models.py:442(Response) + 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) + 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) + 1 0.000 0.000 0.000 0.000 models.py:156(Request) + 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) + 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) + 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) + 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} + 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} + 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} + 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} + 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} + 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} + 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} + 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} + 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} + 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} + 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} + 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} + 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} + 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} + 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} + 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} + 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} + 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} + 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} + 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} + 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} + 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} + 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 {math.sqrt} + 2 0.000 0.000 0.000 0.000 {math.log} + 1 0.000 0.000 0.000 0.000 {math.exp} + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12(<module>) + 4 0.000 0.000 0.000 0.000 {locals} + 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) + 1 0.000 0.000 0.000 0.000 keyword.py:11(<module>) + 1 0.000 0.000 0.000 0.000 {iter} + 2 0.000 0.000 0.000 0.000 {issubclass} + 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) + 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) + 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) + 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) + 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) + 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) + 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) + 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) + 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) + 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) + 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) + 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) + 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) + 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) + 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) + 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) + 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) + 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) + 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) + 10 0.000 0.000 0.000 0.000 __init__.py:879(append) + 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) + 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) + 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) + 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) + 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) + 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) + 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) + 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) + 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) + 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) + 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) + 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) + 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) + 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) + 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) + 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) + 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) + 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) + 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) + 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) + 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) + 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) + 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) + 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) + 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) + 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) + 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) + 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) + 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) + 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) + 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) + 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) + 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) + 1 0.000 0.000 0.000 0.000 __init__.py:18(<module>) + 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) + 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) + 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) + 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) + 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) + 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) + 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) + 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) + 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) + 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) + 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) + 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) + 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) + 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) + 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) + 1 0.000 0.000 0.000 0.000 hub.py:95(signal) + 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) + 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) + 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) + 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) + 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) + 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) + 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) + 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) + 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) + 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) + 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) + 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) + 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) + 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) + 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) + 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) + 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) + 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) + 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) + 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) + 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) + 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) + 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) + 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) + 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) + 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) + 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) + 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) + 1 0.000 0.000 0.000 0.000 hooks.py:14(<module>) + 10 0.000 0.000 0.000 0.000 hashlib.py:109(<lambda>) + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} + 320 0.000 0.000 0.000 0.000 {hash} + 1 0.000 0.000 0.000 0.000 gzip.py:4(<module>) + 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) + 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) + 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) + 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) + 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) + 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) + 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) + 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) + 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) + 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) + 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) + 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) + 247 0.000 0.000 0.000 0.000 {globals} + 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} + 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) + 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) + 1 0.000 0.000 0.000 0.000 __future__.py:48(<module>) + 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} + 2 0.000 0.000 0.000 0.000 {filter} + 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) + 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) + 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) + 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) + 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) + 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) + 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) + 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) + 1 0.000 0.000 0.000 0.000 _endian.py:4(<module>) + 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) + 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) + 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) + 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) + 1 0.000 0.000 0.000 0.000 dns.py:7(<module>) + 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) + 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) + 2 0.000 0.000 0.000 0.000 {dir} + 1 0.000 0.000 0.000 0.000 {delattr} + 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) + 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} + 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} + 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} + 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} + 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) + 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) + 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) + 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) + 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) + 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) + 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) + 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) + 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) + 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) + 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) + 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) + 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) + 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) + 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) + 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) + 21 0.000 0.000 0.000 0.000 collections.py:61(<genexpr>) + 21 0.000 0.000 0.000 0.000 collections.py:60(<genexpr>) + 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) + 145 0.000 0.000 0.000 0.000 collections.py:43(<genexpr>) + 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) + 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) + 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) + 1 0.000 0.000 0.000 0.000 {_codecs.lookup} + 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) + 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) + 1 0.000 0.000 0.000 0.000 certs.py:18(where) + 1 0.000 0.000 0.000 0.000 certs.py:13(<module>) + 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) + 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) + 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) + 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) + 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) + 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) + 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) + 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) + 65 0.000 0.000 0.000 0.000 {built-in method match} + 2 0.000 0.000 0.000 0.000 {built-in method groups} + 2 0.000 0.000 0.000 0.000 {built-in method group} + 1 0.000 0.000 0.000 0.000 bisect.py:1(<module>) + 1 0.000 0.000 0.000 0.000 {binascii.hexlify} + 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) + 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) + 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) + 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) + 1 0.000 0.000 0.000 0.000 atexit.py:6(<module>) + 1 0.000 0.000 0.000 0.000 atexit.py:37(register) + 1 0.000 0.000 0.000 0.000 ascii.py:8(<module>) + 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) + 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) + 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) + 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) + 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) + 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) + 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) + 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) + 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) + 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) + 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) + 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) + 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) + 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) + 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) + 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) + 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) + 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) + 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) + 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) + 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) + 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) + 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) + 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) + 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) + 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) + 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) + 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) + 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) + 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) + 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) + 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) + 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) + 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) + 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) + 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) + 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) + 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) + 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) + 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) + 1 0.000 0.000 0.000 0.000 adapters.py:9(<module>) + 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) + 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) + 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) + 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) + 2 0.000 0.000 0.000 0.000 _abcoll.py:26(<genexpr>) + 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) + 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) + + diff --git a/toys/brhute/grequests.py b/toys/brhute/grequests.py new file mode 100644 index 0000000..b10f0d4 --- /dev/null +++ b/toys/brhute/grequests.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 -*- + +# Laurent's version of grequests.py : +# Merged https://github.com/kennethreitz/grequests/pull/22/files +# in recent grequest branch, to have working exception_handler + +""" +grequests +~~~~~~~~~ + +This module contains an asynchronous replica of ``requests.api``, powered +by gevent. All API methods return a ``Request`` instance (as opposed to +``Response``). A list of requests can be sent with ``map()``. +""" +from functools import partial + +try: + import gevent + from gevent import monkey as curious_george + from gevent.pool import Pool +except ImportError: + raise RuntimeError('Gevent is required for grequests.') + +# Monkey-patch. +curious_george.patch_all(thread=False, select=False) + +from requests import Session + +def _greenlet_report_error(self, exc_info): + import sys + import traceback + + exception = exc_info[1] + if isinstance(exception, gevent.greenlet.GreenletExit): + self._report_result(exception) + return + exc_handler = False + for lnk in self._links: + if isinstance(lnk, gevent.greenlet.FailureSpawnedLink): + exc_handler = True + break + if not exc_handler: + try: + traceback.print_exception(*exc_info) + except: + pass + self._exception = exception + if self._links and self._notifier is None: + self._notifier = gevent.greenlet.core.active_event(self._notify_links) + ## Only print errors + if not exc_handler: + info = str(self) + ' failed with ' + try: + info += self._exception.__class__.__name__ + except Exception: + info += str(self._exception) or repr(self._exception) + sys.stderr.write(info + '\n\n') + + +## Patch the greenlet error reporting +gevent.greenlet.Greenlet._report_error = _greenlet_report_error + +__all__ = ( + 'map', 'imap', + 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request' +) + + +class AsyncRequest(object): + """ Asynchronous request. + + Accept same parameters as ``Session.request`` and some additional: + + :param session: Session which will do request + :param callback: Callback called on response. + Same as passing ``hooks={'response': callback}`` + """ + def __init__(self, method, url, **kwargs): + #: Request method + self.method = method + #: URL to request + self.url = url + #: Associated ``Session`` + self.session = kwargs.pop('session', None) + if self.session is None: + self.session = Session() + + callback = kwargs.pop('callback', None) + if callback: + kwargs['hooks'] = {'response': callback} + + #: The rest arguments for ``Session.request`` + self.kwargs = kwargs + #: Resulting ``Response`` + self.response = None + + def send(self, **kwargs): + """ + Prepares request based on parameter passed to constructor and optional ``kwargs```. + Then sends request and saves response to :attr:`response` + + :returns: ``Response`` + """ + merged_kwargs = {} + merged_kwargs.update(self.kwargs) + merged_kwargs.update(kwargs) + self.response = self.session.request(self.method, + self.url, **merged_kwargs) + return self.response + + +def send(r, pool=None, stream=False, exception_handler=None): + """Sends the request object using the specified pool. If a pool isn't + specified this method blocks. Pools are useful because you can specify size + and can hence limit concurrency.""" + if pool != None: + p = pool.spawn + else: + p = gevent.spawn + + if exception_handler: + glet = p(r.send, stream=stream) + + def eh_wrapper(g): + return exception_handler(r,g.exception) + + glet.link_exception(eh_wrapper) + else: + glet = p(r.send, stream=stream) + + return glet + + +# Shortcuts for creating AsyncRequest with appropriate HTTP method +get = partial(AsyncRequest, 'GET') +options = partial(AsyncRequest, 'OPTIONS') +head = partial(AsyncRequest, 'HEAD') +post = partial(AsyncRequest, 'POST') +put = partial(AsyncRequest, 'PUT') +patch = partial(AsyncRequest, 'PATCH') +delete = partial(AsyncRequest, 'DELETE') + +# synonym +def request(method, url, **kwargs): + return AsyncRequest(method, url, **kwargs) + + +def map(requests, stream=False, size=None, exception_handler=None): + """Concurrently converts a list of Requests to Responses. + + :param requests: a collection of Request objects. + :param stream: If True, the content will not be downloaded immediately. + :param size: Specifies the number of requests to make at a time. If None, no throttling occurs. + """ + + requests = list(requests) + + pool = Pool(size) if size else None + jobs = [send(r, pool, stream=stream, exception_handler=exception_handler) for r in requests] + gevent.joinall(jobs) + + return [r.response for r in requests] + + +def imap(requests, stream=False, size=2, exception_handler=None): + """Concurrently converts a generator object of Requests to + a generator of Responses. + + :param requests: a generator of Request objects. + :param stream: If True, the content will not be downloaded immediately. + :param size: Specifies the number of requests to make at a time. default is 2 + """ + + pool = Pool(size) + + def send(r): + return r.send(stream=stream, exception_handler=exception_handler) + + for r in pool.imap_unordered(send, requests): + yield r + + pool.join() diff --git a/toys/brhute/httplib_pipelining.py b/toys/brhute/httplib_pipelining.py new file mode 100644 index 0000000..5f5ac4e --- /dev/null +++ b/toys/brhute/httplib_pipelining.py @@ -0,0 +1,96 @@ +# Based on "python-http-pipelining" by Markus J @ ActiveState Code / Recipes +# http://code.activestate.com/recipes/576673-python-http-pipelining/ +# Rewrote by: 2013 Laurent Ghigonis <laurent@p1sec.com> + +from httplib import HTTPConnection, _CS_IDLE +import urlparse + +class HTTP_pipeline(): + def __init__(self, domain, queue, cb_response, + max_out_bound=4, debuglevel=0): + print "XXX HTTP_pipeline.__init__" + self.queue = queue + self.cb_response = cb_response + self.max_out_bound = max_out_bound + self.debuglevel = debuglevel + self.conn = HTTPConnection(domain) + self.conn.set_debuglevel(debuglevel) + self.respobjs = list() + self.data = list() + self.headers = {'Host':domain, + 'Content-Length':0, + 'Connection':'Keep-Alive'} + + def run(self): + print "XXX HTTP_pipeline.run" + while True: + # Send + out_bound = 0 + while out_bound < self.max_out_bound: + page = self.queue.get() + if self.debuglevel > 0: + print 'Sending request for %r...' % (page,) + self.conn._HTTPConnection__state = _CS_IDLE # FU private variable! + self.conn.request("GET", page, None, self.headers) + res = self.conn.response_class(self.conn.sock, strict=self.conn.strict, method=self.conn._method) + self.respobjs.append(res) + self.data.append(None) + out_bound += 1 + # Try to read a response + for i,resp in enumerate(self.respobjs): + if resp is None: + continue + if self.debuglevel > 0: + print 'Retrieving %r...' % (resp) + out_bound -= 1 + skip_read = False + resp.begin() + if self.debuglevel > 0: + print ' %d %s' % (resp.status, resp.reason) + if 200 <= resp.status < 300: + # Ok + data = resp.read() + cookie = resp.getheader('Set-Cookie') + if cookie is not None: + self.headers['Cookie'] = cookie + skip_read = True + self.respobjs.remove(resp) + self.cb_response(resp, data) + elif 300 <= resp.status < 400: + # Redirect + loc = resp.getheader('Location') + parsed = loc and urlparse.urlparse(loc) + if not parsed: + # Missing or empty location header + data = (resp.status, resp.reason) + elif parsed.netloc != '' and parsed.netloc != host: + # Redirect to another host + data = (resp.status, resp.reason, loc) + else: + # Redirect URL + path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment='')) + #print ' Updated %r to %r' % (pages[i],path) + #pages[i] = path + data = (resp.status, resp.reason, path) + self.respobjs.remove(resp) + self.cb_response(resp, data) + elif resp.status >= 400: + # Failed + data = (resp.status, resp.reason) + self.respobjs.remove(resp) + self.cb_response(resp, data) + if resp.will_close: + # Connection (will be) closed, need to resend + self.conn.close() + if self.debuglevel > 0: + print ' Connection closed' + # XXX reconnect + # XXX resend + break + elif not skip_read: + resp.read() # read any data + if any(r is None for r in enumerate(self.respobjs)): + # Send another pending request + break + else: + break # All respobjs are None? diff --git a/toys/brhute/pphidden.py b/toys/brhute/pphidden.py new file mode 100644 index 0000000..cef18e2 --- /dev/null +++ b/toys/brhute/pphidden.py @@ -0,0 +1,29 @@ +import requests +import time +import sys + +# http://www.pointerpointer.com/gridPositions.json + +BASE_URL="http://www.pointerpointer.com/images" + +image = int(sys.argv[1]) +sx = int(sys.argv[2]) +sy = int(sys.argv[3]) + +print ">>> Looking for image %d <<<" % image +print ">>>> starting x=%d y=%d <<<<" % (sx, sy) + +s = requests.Session() + +for x in range(sx, 2000): + for y in range(sy, 2000): + url = "%s/N%04d_%d_%d.jpg" % (BASE_URL, image, x, y) + sys.stdout.write("[-] %s: " % url) + sys.stdout.flush() + r = s.get(url) + print r.status_code + if r.status_code != 404: + print "[*] found !" + sys.exit(0) + # time.sleep(0.2) +sys.exit(1) diff --git a/toys/brhute/pphidden_async.py b/toys/brhute/pphidden_async.py new file mode 100644 index 0000000..463364f --- /dev/null +++ b/toys/brhute/pphidden_async.py @@ -0,0 +1,83 @@ +import sys +import argparse +import grbrute +import brhute_threaded + +# http://www.pointerpointer.com/gridPositions.json + +class Pp_url: + def __init__(self, image, x, y, max_x=100, max_y=100): + self.host = "www.pointerpointer.com" + self.base_url = "/images" + self.image = image + self.x = x + self.y = y + self.max_x = max_x + self.max_y = max_y + print ">>> Looking for image %d <<<" % image + print ">>>> starting x=%d y=%d <<<<" % (x, y) + def __iter__(self): + return self + def next(self): + url = "%s/N%04d_%d_%d.jpg" % (self.base_url, self.image, self.x, self.y) + self.y += 1 + if self.y > self.max_y: + self.x += 1 + self.y = 0 + if self.x > self.max_x: + raise StopIteration + return (self.host, url) + +def cb_response_grbrute(res): + global found + if not found: + print "[-] %s : %d" % (res.url, res.status_code) + if res.status_code != 404: + found = res.url + return False + return True + +def cb_response_brhute(res): + global found + if not found: + print "res: %s" % res + #if res.status_code != 404: + # found = res.url + # return False + #return True + +parser = argparse.ArgumentParser(description='pphidden_async', + epilog="Example: %s 73 0 0" % sys.argv[0]) +parser.add_argument('image', action="store", type=int, + help="Image number") +parser.add_argument('start_x', action="store", type=int, + help="Start at coordinate X=") +parser.add_argument('start_y', action="store", type=int, + help="Start at coordinate Y=") +parser.add_argument('-b', action="store", dest="backend", default="gbrute", + help="Backend, can be gbrute (default) or brhute (work in progress)") +parser.add_argument('-v', action="store_true", dest="verbose", default=False, + help="verbose") +args = parser.parse_args() + +found = None + +if args.backend == "gbrute": + url_iter = Pp_url(args.image, args.start_x, args.start_y) + grbrute.Grbrute(url_iter, cb_response_grbrute, verbose=args.verbose) +elif args.backend == "brhute": + url_iter = Pp_url(args.image, args.start_x, args.start_y) + #brhute_threaded.Brhute_ip(url_iter, "207.171.163.203", # Amazon + # cb_response=cb_response_brhute, verbose=args.verbose) + #brhute.Brhute_ip(url_iter, "173.194.34.14", # Google + # cb_response=cb_response_brhute, verbose=args.verbose) + brhute_threaded.Brhute_ip(url_iter, "www.pointerpointer.com", # Amazon + cb_response=cb_response_brhute, verbose=args.verbose) +else: + print "Error: Unknown backend specified" + sys.exit(1) + +if found is False: + print "[*] not found" + sys.exit(1) +print "[*] found: %s" % found diff --git a/toys/brhute/threaded_resolver.py b/toys/brhute/threaded_resolver.py new file mode 100644 index 0000000..a2d347b --- /dev/null +++ b/toys/brhute/threaded_resolver.py @@ -0,0 +1,302 @@ +# From pyxmpp2 resolver.py +# Made standalone by laurent +# https://raw.github.com/Jajcus/pyxmpp2/master/pyxmpp2/resolver.py + +# (C) Copyright 2003-2011 Jacek Konieczny <jajcus@jajcus.net> +# (C) Copyright 2013 Laurent Ghigonis <laurent@p1sec.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License Version +# 2.1 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +"""DNS resolever with SRV record support. + +Normative reference: + - `RFC 1035 <http://www.ietf.org/rfc/rfc1035.txt>`__ + - `RFC 2782 <http://www.ietf.org/rfc/rfc2782.txt>`__ +""" + +import socket +import random +import logging +import threading +import Queue + +import dns.resolver +import dns.name +import dns.exception + +DEFAULT_SETTINGS = {"ipv4": True, "ipv6": False, "prefer_ipv6": False} + +def is_ipv6_available(): + """Check if IPv6 is available. + + :Return: `True` when an IPv6 socket can be created. + """ + try: + socket.socket(socket.AF_INET6).close() + except (socket.error, AttributeError): + return False + return True + +def is_ipv4_available(): + """Check if IPv4 is available. + + :Return: `True` when an IPv4 socket can be created. + """ + try: + socket.socket(socket.AF_INET).close() + except socket.error: + return False + return True + +def shuffle_srv(records): + """Randomly reorder SRV records using their weights. + + :Parameters: + - `records`: SRV records to shuffle. + :Types: + - `records`: sequence of :dns:`dns.rdtypes.IN.SRV` + + :return: reordered records. + :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" + if not records: + return [] + ret = [] + while len(records) > 1: + weight_sum = 0 + for rrecord in records: + weight_sum += rrecord.weight + 0.1 + thres = random.random() * weight_sum + weight_sum = 0 + for rrecord in records: + weight_sum += rrecord.weight + 0.1 + if thres < weight_sum: + records.remove(rrecord) + ret.append(rrecord) + break + ret.append(records[0]) + return ret + +def reorder_srv(records): + """Reorder SRV records using their priorities and weights. + + :Parameters: + - `records`: SRV records to shuffle. + :Types: + - `records`: `list` of :dns:`dns.rdtypes.IN.SRV` + + :return: reordered records. + :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" + records = list(records) + records.sort() + ret = [] + tmp = [] + for rrecord in records: + if not tmp or rrecord.priority == tmp[0].priority: + tmp.append(rrecord) + continue + ret += shuffle_srv(tmp) + tmp = [rrecord] + if tmp: + ret += shuffle_srv(tmp) + return ret + +class BlockingResolver(): + """Blocking resolver using the DNSPython package. + + Both `resolve_srv` and `resolve_address` will block until the + lookup completes or fail and then call the callback immediately. + """ + def __init__(self, settings = None): + if settings: + self.settings = settings + else: + self.settings = DEFAULT_SETTINGS + + def resolve_srv(self, domain, service, protocol, callback): + """Start looking up an SRV record for `service` at `domain`. + + `callback` will be called with a properly sorted list of (hostname, + port) pairs on success. The list will be empty on error and it will + contain only (".", 0) when the service is explicitely disabled. + + :Parameters: + - `domain`: domain name to look up + - `service`: service name e.g. 'xmpp-client' + - `protocol`: protocol name, e.g. 'tcp' + - `callback`: a function to be called with a list of received + addresses + :Types: + - `domain`: `unicode` + - `service`: `unicode` + - `protocol`: `unicode` + - `callback`: function accepting a single argument + """ + if isinstance(domain, unicode): + domain = domain.encode("idna").decode("us-ascii") + domain = "_{0}._{1}.{2}".format(service, protocol, domain) + try: + records = dns.resolver.query(domain, 'SRV') + except dns.exception.DNSException, err: + logger.warning("Could not resolve {0!r}: {1}" + .format(domain, err.__class__.__name__)) + callback([]) + return + if not records: + callback([]) + return + + result = [] + for record in reorder_srv(records): + hostname = record.target.to_text() + if hostname in (".", ""): + continue + result.append((hostname, record.port)) + + if not result: + callback([(".", 0)]) + else: + callback(result) + return + + def resolve_address(self, hostname, callback, allow_cname = True): + """Start looking up an A or AAAA record. + + `callback` will be called with a list of (family, address) tuples + (each holiding socket.AF_* and IPv4 or IPv6 address literal) on + success. The list will be empty on error. + + :Parameters: + - `hostname`: the host name to look up + - `callback`: a function to be called with a list of received + addresses + - `allow_cname`: `True` if CNAMEs should be followed + :Types: + - `hostname`: `unicode` + - `callback`: function accepting a single argument + - `allow_cname`: `bool` + """ + if isinstance(hostname, unicode): + hostname = hostname.encode("idna").decode("us-ascii") + rtypes = [] + if self.settings["ipv6"]: + rtypes.append(("AAAA", socket.AF_INET6)) + if self.settings["ipv4"]: + rtypes.append(("A", socket.AF_INET)) + if not self.settings["prefer_ipv6"]: + rtypes.reverse() + exception = None + result = [] + for rtype, rfamily in rtypes: + try: + try: + records = dns.resolver.query(hostname, rtype) + except dns.exception.DNSException: + records = dns.resolver.query(hostname + ".", rtype) + except dns.exception.DNSException, err: + exception = err + continue + if not allow_cname and records.rrset.name != dns.name.from_text( + hostname): + logger.warning("Unexpected CNAME record found for {0!r}" + .format(hostname)) + continue + if records: + for record in records: + result.append((rfamily, record.to_text())) + + if not result and exception: + logger.warning("Could not resolve {0!r}: {1}".format(hostname, + exception.__class__.__name__)) + callback(result) + +class ThreadedResolver(): + """Base class for threaded resolvers. + + Starts worker threads, each running a blocking resolver implementation + and communicates with them to provide non-blocking asynchronous API. + """ + def __init__(self, settings = None, max_threads = 1): + if settings: + self.settings = settings + else: + self.settings = DEFAULT_SETTINGS + self.threads = [] + self.queue = Queue.Queue() + self.lock = threading.RLock() + self.max_threads = max_threads + self.last_thread_n = 0 + +def _make_resolver(self): + """Threaded resolver implementation using the DNSPython + :dns:`dns.resolver` module. + """ + return BlockingResolver(self.settings) + + def stop(self): + """Stop the resolver threads. + """ + with self.lock: + for dummy in self.threads: + self.queue.put(None) + + def _start_thread(self): + """Start a new working thread unless the maximum number of threads + has been reached or the request queue is empty. + """ + with self.lock: + if self.threads and self.queue.empty(): + return + if len(self.threads) >= self.max_threads: + return + thread_n = self.last_thread_n + 1 + self.last_thread_n = thread_n + thread = threading.Thread(target = self._run, + name = "{0!r} #{1}".format(self, thread_n), + args = (thread_n,)) + self.threads.append(thread) + thread.daemon = True + thread.start() + + def resolve_address(self, hostname, callback, allow_cname = True): + request = ("resolve_address", (hostname, callback, allow_cname)) + self._start_thread() + self.queue.put(request) + + def resolve_srv(self, domain, service, protocol, callback): + request = ("resolve_srv", (domain, service, protocol, callback)) + self._start_thread() + self.queue.put(request) + + def _run(self, thread_n): + """The thread function.""" + try: + logger.debug("{0!r}: entering thread #{1}" + .format(self, thread_n)) + resolver = self._make_resolver() + while True: + request = self.queue.get() + if request is None: + break + method, args = request + logger.debug(" calling {0!r}.{1}{2!r}" + .format(resolver, method, args)) + getattr(resolver, method)(*args) # pylint: disable=W0142 + self.queue.task_done() + logger.debug("{0!r}: leaving thread #{1}" + .format(self, thread_n)) + finally: + self.threads.remove(threading.currentThread()) + +# vi: sts=4 et sw=4 diff --git a/toys/brhute/twisted_http.py b/toys/brhute/twisted_http.py new file mode 100644 index 0000000..805c78a --- /dev/null +++ b/toys/brhute/twisted_http.py @@ -0,0 +1,26 @@ +from twisted.web import client +from twisted.internet import reactor, defer + +urls = [ + 'http://www.python.org', + 'http://stackoverflow.com', + 'http://www.twistedmatrix.com', + 'http://www.google.com', + 'http://www.google.com/toto', + 'http://www.google.com/titi', + 'http://www.google.com/tata', + 'http://launchpad.net', + 'http://github.com', + 'http://bitbucket.org', +] + +def finish(results): + for result in results: + print 'GOT PAGE', len(result), 'bytes' + reactor.stop() + +factory = client.HTTPClientFactory() +waiting = [client.getPage(url, factory) for url in urls] +defer.gatherResults(waiting).addCallback(finish) + +reactor.run() diff --git a/toys/brhute/twisted_http_persistent.py b/toys/brhute/twisted_http_persistent.py new file mode 100644 index 0000000..333bcb3 --- /dev/null +++ b/toys/brhute/twisted_http_persistent.py @@ -0,0 +1,39 @@ +from twisted.internet import reactor +from twisted.internet.defer import Deferred, DeferredList +from twisted.internet.protocol import Protocol +from twisted.web.client import Agent, HTTPConnectionPool + +class IgnoreBody(Protocol): + def __init__(self, deferred): + self.deferred = deferred + + def dataReceived(self, bytes): + pass + + def connectionLost(self, reason): + self.deferred.callback(None) + + +def cbRequest(response): + print 'Response code:', response.code + finished = Deferred() + response.deliverBody(IgnoreBody(finished)) + return finished + +pool = HTTPConnectionPool(reactor) +agent = Agent(reactor, pool=pool) + +def requestGet(url): + d = agent.request('GET', url) + d.addCallback(cbRequest) + return d + +# Two requests to the same host: +d = requestGet('http://google.com/titi').addCallback( + lambda ign: requestGet("http://google.com/tata")) +def cbShutdown(ignored): + reactor.stop() +d.addCallback(cbShutdown) + +reactor.run() + diff --git a/toys/brhute/twisted_http_simultaneous.py b/toys/brhute/twisted_http_simultaneous.py new file mode 100644 index 0000000..b9de196 --- /dev/null +++ b/toys/brhute/twisted_http_simultaneous.py @@ -0,0 +1,39 @@ +from twisted.internet import reactor +from twisted.internet.defer import Deferred, DeferredList +from twisted.internet.protocol import Protocol +from twisted.web.client import Agent, HTTPConnectionPool + +class IgnoreBody(Protocol): + def __init__(self, deferred): + self.deferred = deferred + + def dataReceived(self, bytes): + pass + + def connectionLost(self, reason): + self.deferred.callback(None) + + +def cbRequest(response): + print 'Response code:', response.code + finished = Deferred() + response.deliverBody(IgnoreBody(finished)) + return finished + +pool = HTTPConnectionPool(reactor, persistent=True) +pool.maxPersistentPerHost = 1 +agent = Agent(reactor, pool=pool) + +def requestGet(url): + d = agent.request('GET', url) + d.addCallback(cbRequest) + return d + +# Two requests to the same host: +requestGet('http://google.com/titi') +requestGet("http://google.com/tata") +requestGet("http://google.com/toto") +requestGet("http://google.com/tralala") + +reactor.run() + |