From 6aad3116ee0ad5d2dcc42309fcb7b6153eb8bb6a Mon Sep 17 00:00:00 2001 From: Lev Gorodetskiy Date: Sat, 20 Mar 2021 16:32:12 +0300 Subject: [PATCH 1/7] Migrate to pytezos 3.0.4 --- Makefile | 3 + michelson_kernel/kernel.py | 213 ++++++++++++++++++++++----------- pytezos-3.0.4-py3-none-any.whl | Bin 0 -> 147337 bytes setup.py | 6 +- 4 files changed, 152 insertions(+), 70 deletions(-) create mode 100644 pytezos-3.0.4-py3-none-any.whl diff --git a/Makefile b/Makefile index f764bda..ebb6689 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +install: + bash -c "python -m venv .venv; source .venv/bin/activate; pip install wheel jupyter; pip install .; pip install -U pytezos-3.0.4-py3-none-any.whl" + debug: pip install . --force --no-deps --user diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py index 4af2e10..155c051 100644 --- a/michelson_kernel/kernel.py +++ b/michelson_kernel/kernel.py @@ -1,68 +1,126 @@ +from collections import Iterable +from traceback import format_exception +from typing import List, Dict, Any + +from pytezos.michelson.instructions.base import MichelsonInstruction +from pytezos.michelson.micheline import MichelineSequence, Micheline, MichelsonRuntimeError +from pytezos.michelson.parse import MichelsonParserError +from pytezos.michelson.stack import MichelsonStack from tabulate import tabulate from ipykernel.kernelbase import Kernel -from pytezos.repl.helpers import helpers_prim -from pytezos.michelson.macros import primitives -from pytezos.repl.interpreter import Interpreter - +from pytezos.michelson.repl import Interpreter, InterpreterResult +from pytezos.michelson.tags import prim_tags from michelson_kernel import __version__ from michelson_kernel.docs import docs static_macros = [ - 'CMPEQ', 'CMPNEQ', 'CMPLT', 'CMPGT', 'CMPLE', 'CMPGE', - 'IFEQ', 'IFNEQ', 'IFLT', 'IFGT', 'IFLE', 'IFGE', - 'IFCMPEQ', 'IFCMPNEQ', 'IFCMPLT', 'IFCMPGT', 'IFCMPLE', 'IFCMPGE', + 'CMPEQ', + 'CMPNEQ', + 'CMPLT', + 'CMPGT', + 'CMPLE', + 'CMPGE', + 'IFEQ', + 'IFNEQ', + 'IFLT', + 'IFGT', + 'IFLE', + 'IFGE', + 'IFCMPEQ', + 'IFCMPNEQ', + 'IFCMPLT', + 'IFCMPGT', + 'IFCMPLE', + 'IFCMPGE', 'FAIL', - 'ASSERT_EQ', 'ASSERT_NEQ', 'ASSERT_LT', 'ASSERT_GT', 'ASSERT_LE', 'ASSERT_GE', - 'ASSERT_CMPEQ', 'ASSERT_CMPNEQ', 'ASSERT_CMPLT', 'ASSERT_CMPGT', 'ASSERT_CMPLE', 'ASSERT_CMPGE', - 'ASSERT_NONE', 'ASSERT_SOME', 'ASSERT_LEFT', 'ASSERT_RIGHT', + 'ASSERT_EQ', + 'ASSERT_NEQ', + 'ASSERT_LT', + 'ASSERT_GT', + 'ASSERT_LE', + 'ASSERT_GE', + 'ASSERT_CMPEQ', + 'ASSERT_CMPNEQ', + 'ASSERT_CMPLT', + 'ASSERT_CMPGT', + 'ASSERT_CMPLE', + 'ASSERT_CMPGE', + 'ASSERT_NONE', + 'ASSERT_SOME', + 'ASSERT_LEFT', + 'ASSERT_RIGHT', 'UNPAIR', 'IF_SOME', - 'SET_CAR', 'SET_CDR', - 'MAP_CAR', 'MAP_CDR' + 'SET_CAR', + 'SET_CDR', + 'MAP_CAR', + 'MAP_CDR', ] def parse_token(line, cursor_pos): + begin_pos = next((i + 1 for i in range(cursor_pos - 1, 0, -1) if line[i] in ' ;({\n'), 0) end_pos = next((i for i in range(cursor_pos, len(line)) if line[i] in ' ;){\n'), len(line)) return line[begin_pos:end_pos], begin_pos, end_pos -def html_table(items): +def preformat_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]: + return [ + { + 'index': i, + 'type': item.prim, + 'value': item.to_python_object(), + } + for i, item in enumerate(items) + ] + + +def html_table(table: List[Dict[str, Any]]) -> str: def pre(s): return f'
{s}
' def pre_dict(d): return {k: pre(v) for k, v in d.items()} - res = tabulate(list(map(pre_dict, items)), tablefmt='html', headers="keys") + res = tabulate(list(map(pre_dict, table)), tablefmt='html', headers="keys") res = res.replace('<', '<').replace('>', '>') # tabulate escapes our
 tags
     return res
 
 
-def plain_table(items):
-    return tabulate(items, tablefmt='simple', headers="keys")
-
-
-def format_result(result, execution_count):
-    kind = result['kind']
-    if kind in ['message', 'code']:
-        plain, html = result['value'], result['value']
-    elif kind in ['stack', 'big_map_diff']:
-        plain = plain_table(result['value'])
-        html = html_table(result['value'])
-    elif kind == 'output':
-        ops, storage, bmd = result['value']
-        data = list(filter(lambda x: len(x) > 0, [storage, bmd, ops]))
-        plain = '\n'.join(map(plain_table, data))
-        html = '
'.join(map(html_table, data)) - else: - assert False, kind - return {'data': {'text/plain': plain, - 'text/html': html}, - 'metadata': {}, - 'execution_count': execution_count} +def plain_table(table: List[Dict[str, Any]]) -> str: + return tabulate(table, tablefmt='simple', headers='keys') + + +def format_result(operations: MichelineSequence, stack: MichelsonStack, execution_count: int): + for operation in operations.items[::-1]: + items = getattr(operation, 'items', None) + if isinstance(items, MichelineSequence): + return format_result(items, stack, execution_count) + if not isinstance(operation, MichelsonInstruction): + continue + if operation.stack_items_added: + modified_items = stack.items[-operation.stack_items_added:] + table = preformat_table(modified_items) + plain = plain_table(table) + html = html_table(table) + return { + 'data': { + 'text/plain': plain, + 'text/html': html + }, + 'metadata': {}, + 'execution_count': execution_count, + } + + return {} + + return { + 'data': {'text/plain': '', 'text/html': ''}, + 'metadata': {}, + 'execution_count': execution_count, + } class MichelsonKernel(Kernel): @@ -72,50 +130,73 @@ class MichelsonKernel(Kernel): 'name': 'Michelson', 'mimetype': 'text/x-michelson', 'file_extension': '.tz', - 'codemirror_mode': 'michelson' + 'codemirror_mode': 'michelson', } banner = 'Michelson (Tezos VM language)' help_links = [ 'https://michelson.nomadic-labs.com/', - 'https://tezos.gitlab.io/whitedoc/michelson.html' + 'https://tezos.gitlab.io/whitedoc/michelson.html', ] def __init__(self, **kwargs): super(MichelsonKernel, self).__init__(**kwargs) - self.interpreter = Interpreter(debug=False) + self.interpreter = Interpreter() - def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False): - int_res = self.interpreter.execute(code) - if not silent and int_res.get('stdout'): - self.send_response( - self.iopub_socket, 'stream', {'name': 'stdout', - 'text': int_res['stdout']}) + def do_execute( + self, code, silent, store_history=True, user_expressions=None, allow_stdin=False + ): - if int_res.get('success'): - res = {'status': 'ok'} - if not silent and int_res.get('result'): + result = self.interpreter.execute(code) + + if not silent and result.stdout: + self.send_response( + self.iopub_socket, + 'stream', + { + 'name': 'stdout', + 'text': '\n'.join(result.stdout), + } + ) + + if not result.error: + res = { + 'status': 'ok', + } + if not silent: self.send_response( - self.iopub_socket, 'execute_result', format_result(int_res['result'], self.execution_count)) + self.iopub_socket, + 'execute_result', + format_result(result.operations, result.stack, self.execution_count), + ) else: - res = {'status': 'error'} - if int_res.get('stderr'): - traceback = [f'{int_res["stderr"]["name"]}: {int_res["stderr"]["value"]}', - int_res["stderr"]["trace"]] - res = {'ename': int_res['stderr']['name'], - 'evalue': int_res['stderr']['value'], - 'traceback': traceback} - self.send_response( - self.iopub_socket, 'stream', {'name': 'stderr', - 'text': '\n'.join(traceback)}) + if isinstance(result.error, (MichelsonParserError, MichelsonRuntimeError)): + traceback = [result.error.format_stdout()] + else: + traceback = format_exception(result.error.__class__, result.error, None) + res = { + 'status': 'error', + 'ename': result.error.__class__.__name__, + 'evalue': str(result.error), + 'traceback': traceback, + } + self.send_response( + self.iopub_socket, + 'stream', + { + 'name': 'stderr', + 'text': '\n'.join(traceback), + } + ) res['execution_count'] = self.execution_count + return res def do_complete(self, code, cursor_pos): token, begin_pos, end_pos = parse_token(code, cursor_pos) suggests = [] - for word_set in [primitives, static_macros, helpers_prim]: + for word_set in [prim_tags, static_macros]: for word in word_set: if word.startswith(token): suggests.append(word) @@ -124,12 +205,10 @@ def do_complete(self, code, cursor_pos): res = { 'matches': suggests, 'cursor_start': begin_pos, - 'cursor_end': end_pos} + 'cursor_end': end_pos, + } else: - res = { - 'matches': [], - 'cursor_start': cursor_pos, - 'cursor_end': cursor_pos} + res = {'matches': [], 'cursor_start': cursor_pos, 'cursor_end': cursor_pos} res['status'] = 'ok' return res @@ -138,9 +217,7 @@ def do_inspect(self, code, cursor_pos, detail_level=0): token, _, _ = parse_token(code, cursor_pos) docstring = docs.get(token) if docstring: - res = { - 'found': True, - 'data': {'text/plain': docstring}} + res = {'found': True, 'data': {'text/plain': docstring}} else: res = {'found': False} diff --git a/pytezos-3.0.4-py3-none-any.whl b/pytezos-3.0.4-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..b3bd96b9d34c3dd453e52ac55a8f2ed08e644071 GIT binary patch literal 147337 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�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

ETnTP&rG)?URY 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�fZG*s*6! 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%0D;DeqQ6^#IBH|HiB%sKBY=FV|H;)- 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 VsX=EzMrH?oWr4I=#Y>2={{SH!P3r&v literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index 7564ad4..a233ea8 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ def run(self): with open(os.path.join(td, 'kernel.json'), 'w') as f: json.dump(kernel_json, f, sort_keys=True) - kernel_spec.install_kernel_spec(td, 'michelson', user=self.user) + kernel_spec.install_kernel_spec(td, 'michelson', user=self.user, prefix=sys.prefix) with open('README.md') as f: @@ -58,8 +58,10 @@ def run(self): 'michelson_kernel': ['kernel.js'], '': ['README.md'] }, + install_requires=[ - 'pytezos>=2.3.5', + # FIXME: wheel installed in `make install` + # './pytezos-3.0.4-py3-none-any.whl', 'tabulate>=0.7.5', 'jupyter-client', 'ipykernel' From 2a8a588134797c724da3e37b404add8c6cf40a53 Mon Sep 17 00:00:00 2001 From: Lev Gorodetskiy Date: Tue, 23 Mar 2021 14:55:13 +0300 Subject: [PATCH 2/7] Print lazy diff --- michelson_kernel/kernel.py | 165 +++++++++++++++++++-------------- pytezos-3.0.4-py3-none-any.whl | Bin 147337 -> 147457 bytes 2 files changed, 94 insertions(+), 71 deletions(-) diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py index 155c051..65199a8 100644 --- a/michelson_kernel/kernel.py +++ b/michelson_kernel/kernel.py @@ -1,7 +1,9 @@ from collections import Iterable from traceback import format_exception -from typing import List, Dict, Any +from typing import List, Dict, Any, Optional +from attr import dataclass +from pytezos.michelson.instructions import CommitInstruction from pytezos.michelson.instructions.base import MichelsonInstruction from pytezos.michelson.micheline import MichelineSequence, Micheline, MichelsonRuntimeError from pytezos.michelson.parse import MichelsonParserError @@ -66,7 +68,7 @@ def parse_token(line, cursor_pos): return line[begin_pos:end_pos], begin_pos, end_pos -def preformat_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]: +def preformat_stack_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]: return [ { 'index': i, @@ -93,34 +95,10 @@ def plain_table(table: List[Dict[str, Any]]) -> str: return tabulate(table, tablefmt='simple', headers='keys') -def format_result(operations: MichelineSequence, stack: MichelsonStack, execution_count: int): - for operation in operations.items[::-1]: - items = getattr(operation, 'items', None) - if isinstance(items, MichelineSequence): - return format_result(items, stack, execution_count) - if not isinstance(operation, MichelsonInstruction): - continue - if operation.stack_items_added: - modified_items = stack.items[-operation.stack_items_added:] - table = preformat_table(modified_items) - plain = plain_table(table) - html = html_table(table) - return { - 'data': { - 'text/plain': plain, - 'text/html': html - }, - 'metadata': {}, - 'execution_count': execution_count, - } - - return {} - - return { - 'data': {'text/plain': '', 'text/html': ''}, - 'metadata': {}, - 'execution_count': execution_count, - } +@dataclass(kw_only=True) +class CellResult: + lazy_diff = None + stack_items = None class MichelsonKernel(Kernel): @@ -142,55 +120,100 @@ def __init__(self, **kwargs): super(MichelsonKernel, self).__init__(**kwargs) self.interpreter = Interpreter() + def _stdout(self, text: str) -> None: + self.send_response( + self.iopub_socket, + 'stream', + { + 'name': 'stdout', + 'text': text, + } + ) + + def _find_stack_items(self, operations: MichelineSequence, stack: MichelsonStack) -> Optional[List[MichelsonInstruction]]: + for operation in operations.items[::-1]: + items = getattr(operation, 'items', None) + if isinstance(items, MichelineSequence): + stack_items = self._find_stack_items(operations, stack) + if stack_items: + return stack_items + if not isinstance(operation, MichelsonInstruction): + continue + if operation.stack_items_added: + return stack.items[-operation.stack_items_added:] + return None + + def _find_lazy_diff(self, operations: MichelineSequence) -> Optional[List[Dict[str, str]]]: + for operation in operations.items[::-1]: + if isinstance(operation, CommitInstruction) and operation.lazy_diff: + return operation.lazy_diff + + def _send_success_response(self, operations: MichelineSequence, stack: MichelsonStack) -> Dict[str, Any]: + plain, html = '', '' + + modified_items = self._find_stack_items(operations, stack) + if modified_items: + table = preformat_stack_table(modified_items) + plain += plain_table(table) + html += html_table(table) + + lazy_diff = self._find_lazy_diff(operations) + if lazy_diff: + plain += plain_table(lazy_diff) + html += html_table(lazy_diff) + + result = { + 'data': { + 'text/plain': plain, + 'text/html': html + }, + 'metadata': {}, + 'execution_count': self.execution_count, + } + + self.send_response( + self.iopub_socket, + 'execute_result', + result, + ) + return result + + def _send_fail_response(self, error: Exception) -> Dict[str, Any]: + if isinstance(error, (MichelsonParserError, MichelsonRuntimeError)): + traceback = [error.format_stdout()] + else: + traceback = format_exception(error.__class__, error, None) + result = { + 'status': 'error', + 'ename': error.__class__.__name__, + 'evalue': str(error), + 'traceback': traceback, + } + self.send_response( + self.iopub_socket, + 'stream', + { + 'name': 'stderr', + 'text': '\n'.join(traceback), + } + ) + return result + def do_execute( self, code, silent, store_history=True, user_expressions=None, allow_stdin=False ): - result = self.interpreter.execute(code) + interpreter_result = self.interpreter.execute(code) - if not silent and result.stdout: - self.send_response( - self.iopub_socket, - 'stream', - { - 'name': 'stdout', - 'text': '\n'.join(result.stdout), - } - ) + if not silent and interpreter_result.stdout: + self._stdout('\n'.join(interpreter_result.stdout)) - if not result.error: - res = { - 'status': 'ok', - } + if not interpreter_result.error: if not silent: - self.send_response( - self.iopub_socket, - 'execute_result', - format_result(result.operations, result.stack, self.execution_count), - ) + return self._send_success_response(interpreter_result.operations, interpreter_result.stack) else: - if isinstance(result.error, (MichelsonParserError, MichelsonRuntimeError)): - traceback = [result.error.format_stdout()] - else: - traceback = format_exception(result.error.__class__, result.error, None) - res = { - 'status': 'error', - 'ename': result.error.__class__.__name__, - 'evalue': str(result.error), - 'traceback': traceback, - } - self.send_response( - self.iopub_socket, - 'stream', - { - 'name': 'stderr', - 'text': '\n'.join(traceback), - } - ) - - res['execution_count'] = self.execution_count - - return res + return self._send_fail_response(interpreter_result.error) + return {} def do_complete(self, code, cursor_pos): token, begin_pos, end_pos = parse_token(code, cursor_pos) diff --git a/pytezos-3.0.4-py3-none-any.whl b/pytezos-3.0.4-py3-none-any.whl index b3bd96b9d34c3dd453e52ac55a8f2ed08e644071..ad3edf246f8949eee02a7febaf170f1c3d07427a 100644 GIT binary patch delta 13725 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 T#((SCi2!k6gegAC#DM<;R$KCg delta 13628 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 z%0D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 From f9c5285632a1b422b48808bad4b19aeb5f47e4ab Mon Sep 17 00:00:00 2001 From: Lev Gorodetskiy Date: Tue, 23 Mar 2021 15:13:42 +0300 Subject: [PATCH 3/7] Preformat lazy diff --- michelson_kernel/kernel.py | 118 +++++++++++++++++++++------------ pytezos-3.0.4-py3-none-any.whl | Bin 147457 -> 147591 bytes 2 files changed, 77 insertions(+), 41 deletions(-) diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py index 65199a8..fe5c34a 100644 --- a/michelson_kernel/kernel.py +++ b/michelson_kernel/kernel.py @@ -2,16 +2,16 @@ from traceback import format_exception from typing import List, Dict, Any, Optional -from attr import dataclass -from pytezos.michelson.instructions import CommitInstruction +from pytezos.michelson.instructions import CommitInstruction, BigMapInstruction, BigMapDiffInstruction from pytezos.michelson.instructions.base import MichelsonInstruction -from pytezos.michelson.micheline import MichelineSequence, Micheline, MichelsonRuntimeError +from pytezos.michelson.micheline import MichelineSequence, MichelsonRuntimeError from pytezos.michelson.parse import MichelsonParserError from pytezos.michelson.stack import MichelsonStack +from pytezos.michelson.types import PairType from tabulate import tabulate from ipykernel.kernelbase import Kernel -from pytezos.michelson.repl import Interpreter, InterpreterResult +from pytezos.michelson.repl import Interpreter from pytezos.michelson.tags import prim_tags from michelson_kernel import __version__ from michelson_kernel.docs import docs @@ -79,26 +79,48 @@ def preformat_stack_table(items: Iterable[MichelsonInstruction]) -> List[Dict[st ] -def html_table(table: List[Dict[str, Any]]) -> str: +def html_table(table: List[Dict[str, Any]], header: str) -> str: def pre(s): return f'

{s}
' def pre_dict(d): return {k: pre(v) for k, v in d.items()} - res = tabulate(list(map(pre_dict, table)), tablefmt='html', headers="keys") - res = res.replace('<', '<').replace('>', '>') # tabulate escapes our
 tags
-    return res
-
-
-def plain_table(table: List[Dict[str, Any]]) -> str:
-    return tabulate(table, tablefmt='simple', headers='keys')
-
-
-@dataclass(kw_only=True)
-class CellResult:
-    lazy_diff = None
-    stack_items = None
+    result = f'

{header}

' + result += tabulate(list(map(pre_dict, table)), tablefmt='html', headers="keys") + result = result.replace('<', '<').replace('>', '>') # tabulate escapes our
 tags
+    return result
+
+
+def plain_table(table: List[Dict[str, Any]], header: str) -> str:
+    result = f'{header}\n'
+    return result + tabulate(table, tablefmt='simple', headers='keys')
+
+
+def preformat_lazy_diff_table(lazy_diff: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
+    table = []
+    for diff in lazy_diff:
+        _id = diff['id']
+        diff = diff['diff']
+        if diff['action'] == 'alloc':
+            table.append(
+                {
+                    'id': _id,
+                    'action': 'alloc',
+                    'key': '',
+                    'key_hash': '',
+                    'value': '',
+                }
+            )
+        for update in diff['updates']:
+            table.append(
+                {
+                    'id': _id,
+                    'action': 'update',
+                    **update,
+                }
+            )
+    return table
 
 
 class MichelsonKernel(Kernel):
@@ -127,45 +149,57 @@ def _stdout(self, text: str) -> None:
             {
                 'name': 'stdout',
                 'text': text,
-            }
+            },
         )
 
-    def _find_stack_items(self, operations: MichelineSequence, stack: MichelsonStack) -> Optional[List[MichelsonInstruction]]:
-        for operation in operations.items[::-1]:
+    def _find_stack_items(self, instructions: MichelineSequence, stack: MichelsonStack) -> Optional[List[MichelsonInstruction]]:
+        for operation in instructions.items[::-1]:
             items = getattr(operation, 'items', None)
             if isinstance(items, MichelineSequence):
-                stack_items = self._find_stack_items(operations, stack)
+                stack_items = self._find_stack_items(instructions, stack)
                 if stack_items:
                     return stack_items
             if not isinstance(operation, MichelsonInstruction):
                 continue
+            if isinstance(operation, CommitInstruction):
+                return operation.result
             if operation.stack_items_added:
                 return stack.items[-operation.stack_items_added:]
         return None
 
-    def _find_lazy_diff(self, operations: MichelineSequence) -> Optional[List[Dict[str, str]]]:
-        for operation in operations.items[::-1]:
-            if isinstance(operation, CommitInstruction) and operation.lazy_diff:
-                return operation.lazy_diff
+    def _find_lazy_diff(self, instructions: MichelineSequence) -> Optional[List[Dict[str, str]]]:
+        for instruction in instructions.items[::-1]:
+            if isinstance(instruction, CommitInstruction) and instruction.lazy_diff:
+                return instruction.lazy_diff
+            elif isinstance(instruction, BigMapDiffInstruction) and instruction.lazy_diff:
+                return instruction.lazy_diff
 
-    def _send_success_response(self, operations: MichelineSequence, stack: MichelsonStack) -> Dict[str, Any]:
+    def _find_result(self, instructions: MichelineSequence) -> Optional[PairType]:
+        for instruction in instructions.items[::-1]:
+            if isinstance(instruction, CommitInstruction):
+                return instruction.result
+
+    def _send_success_response(self, instructions: MichelineSequence, stack: MichelsonStack) -> Dict[str, Any]:
         plain, html = '', ''
 
-        modified_items = self._find_stack_items(operations, stack)
+        modified_items = self._find_stack_items(instructions, stack)
         if modified_items:
+            header = 'Result'
             table = preformat_stack_table(modified_items)
-            plain += plain_table(table)
-            html += html_table(table)
+            plain += plain_table(table, header)
+            html += html_table(table, header)
 
-        lazy_diff = self._find_lazy_diff(operations)
+        lazy_diff = self._find_lazy_diff(instructions)
         if lazy_diff:
-            plain += plain_table(lazy_diff)
-            html += html_table(lazy_diff)
+            header = 'BigMap diff'
+            lazy_diff_table = preformat_lazy_diff_table(lazy_diff)
+            plain += plain_table(lazy_diff_table, header)
+            html += html_table(lazy_diff_table, header)
 
         result = {
-                'data': {
+            'data': {
                 'text/plain': plain,
-                'text/html': html
+                'text/html': html,
             },
             'metadata': {},
             'execution_count': self.execution_count,
@@ -195,13 +229,11 @@ def _send_fail_response(self, error: Exception) -> Dict[str, Any]:
             {
                 'name': 'stderr',
                 'text': '\n'.join(traceback),
-            }
+            },
         )
         return result
 
-    def do_execute(
-        self, code, silent, store_history=True, user_expressions=None, allow_stdin=False
-    ):
+    def do_execute(self, code, silent, store_history=True, user_expressions=None, allow_stdin=False):
 
         interpreter_result = self.interpreter.execute(code)
 
@@ -210,7 +242,7 @@ def do_execute(
 
         if not interpreter_result.error:
             if not silent:
-                return self._send_success_response(interpreter_result.operations, interpreter_result.stack)
+                return self._send_success_response(interpreter_result.instructions, interpreter_result.stack)
         else:
             return self._send_fail_response(interpreter_result.error)
         return {}
@@ -231,7 +263,11 @@ def do_complete(self, code, cursor_pos):
                 'cursor_end': end_pos,
             }
         else:
-            res = {'matches': [], 'cursor_start': cursor_pos, 'cursor_end': cursor_pos}
+            res = {
+                'matches': [],
+                'cursor_start': cursor_pos,
+                'cursor_end': cursor_pos,
+            }
 
         res['status'] = 'ok'
         return res
diff --git a/pytezos-3.0.4-py3-none-any.whl b/pytezos-3.0.4-py3-none-any.whl
index ad3edf246f8949eee02a7febaf170f1c3d07427a..df08945a1ec6fe6419d8a063265c18f99048000b 100644
GIT binary patch
delta 7233
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
BB|rcG


From 4e65876918e723a77fb74d753167cc45dd41af2e Mon Sep 17 00:00:00 2001
From: Lev Gorodetskiy 
Date: Tue, 23 Mar 2021 17:06:43 +0300
Subject: [PATCH 4/7] Review, reformat output

---
 michelson_kernel/kernel.py | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)

diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py
index fe5c34a..c08e2d4 100644
--- a/michelson_kernel/kernel.py
+++ b/michelson_kernel/kernel.py
@@ -2,10 +2,11 @@
 from traceback import format_exception
 from typing import List, Dict, Any, Optional
 
+from pytezos import micheline_to_michelson
 from pytezos.michelson.instructions import CommitInstruction, BigMapInstruction, BigMapDiffInstruction
 from pytezos.michelson.instructions.base import MichelsonInstruction
 from pytezos.michelson.micheline import MichelineSequence, MichelsonRuntimeError
-from pytezos.michelson.parse import MichelsonParserError
+from pytezos.michelson.parse import MichelsonParserError, michelson_to_micheline
 from pytezos.michelson.stack import MichelsonStack
 from pytezos.michelson.types import PairType
 from tabulate import tabulate
@@ -68,6 +69,15 @@ def parse_token(line, cursor_pos):
     return line[begin_pos:end_pos], begin_pos, end_pos
 
 
+def preformat_contract_result_table(item) -> List[Dict[str, Any]]:
+    return [
+        {
+            'type': item.prim,
+            'value': item.to_python_object(item),
+        },
+    ]
+
+
 def preformat_stack_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]:
     return [
         {
@@ -108,7 +118,6 @@ def preformat_lazy_diff_table(lazy_diff: List[Dict[str, Any]]) -> List[Dict[str,
                     'id': _id,
                     'action': 'alloc',
                     'key': '',
-                    'key_hash': '',
                     'value': '',
                 }
             )
@@ -117,7 +126,8 @@ def preformat_lazy_diff_table(lazy_diff: List[Dict[str, Any]]) -> List[Dict[str,
                 {
                     'id': _id,
                     'action': 'update',
-                    **update,
+                    'key': micheline_to_michelson(update['key']),
+                    'value': micheline_to_michelson(update['value']),
                 }
             )
     return table
@@ -161,8 +171,6 @@ def _find_stack_items(self, instructions: MichelineSequence, stack: MichelsonSta
                     return stack_items
             if not isinstance(operation, MichelsonInstruction):
                 continue
-            if isinstance(operation, CommitInstruction):
-                return operation.result
             if operation.stack_items_added:
                 return stack.items[-operation.stack_items_added:]
         return None
@@ -174,7 +182,7 @@ def _find_lazy_diff(self, instructions: MichelineSequence) -> Optional[List[Dict
             elif isinstance(instruction, BigMapDiffInstruction) and instruction.lazy_diff:
                 return instruction.lazy_diff
 
-    def _find_result(self, instructions: MichelineSequence) -> Optional[PairType]:
+    def _find_contract_result(self, instructions: MichelineSequence) -> Optional[PairType]:
         for instruction in instructions.items[::-1]:
             if isinstance(instruction, CommitInstruction):
                 return instruction.result
@@ -182,9 +190,21 @@ def _find_result(self, instructions: MichelineSequence) -> Optional[PairType]:
     def _send_success_response(self, instructions: MichelineSequence, stack: MichelsonStack) -> Dict[str, Any]:
         plain, html = '', ''
 
+        contract_result = self._find_contract_result(instructions)
+        if contract_result:
+            header = 'Operations'
+            table = preformat_contract_result_table(contract_result.items[0])
+            plain += plain_table(table, header)
+            html += html_table(table, header)
+
+            header = 'Storage'
+            table = preformat_contract_result_table(contract_result.items[1])
+            plain += plain_table(table, header)
+            html += html_table(table, header)
+
         modified_items = self._find_stack_items(instructions, stack)
-        if modified_items:
-            header = 'Result'
+        if modified_items and not contract_result:
+            header = 'Stack updates'
             table = preformat_stack_table(modified_items)
             plain += plain_table(table, header)
             html += html_table(table, header)

From 45bd57e4871bb33973e62d3934eabde91e318388 Mon Sep 17 00:00:00 2001
From: Lev Gorodetskiy 
Date: Tue, 23 Mar 2021 19:40:20 +0300
Subject: [PATCH 5/7] Fix operations format

---
 michelson_kernel/kernel.py | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py
index c08e2d4..a8b9fa6 100644
--- a/michelson_kernel/kernel.py
+++ b/michelson_kernel/kernel.py
@@ -69,14 +69,22 @@ def parse_token(line, cursor_pos):
     return line[begin_pos:end_pos], begin_pos, end_pos
 
 
-def preformat_contract_result_table(item) -> List[Dict[str, Any]]:
+def preformat_operations_table(items) -> List[Dict[str, Any]]:
     return [
         {
             'type': item.prim,
-            'value': item.to_python_object(item),
-        },
+            'value': item.to_python_object(),
+        }
+        for item in items
     ]
 
+def preformat_storage_table(item) -> List[Dict[str, Any]]:
+    return [
+        {
+            'type': item.prim,
+            'value': item.to_python_object(),
+        }
+    ]
 
 def preformat_stack_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]:
     return [
@@ -193,12 +201,12 @@ def _send_success_response(self, instructions: MichelineSequence, stack: Michels
         contract_result = self._find_contract_result(instructions)
         if contract_result:
             header = 'Operations'
-            table = preformat_contract_result_table(contract_result.items[0])
+            table = preformat_operations_table(contract_result.items[0])
             plain += plain_table(table, header)
             html += html_table(table, header)
 
             header = 'Storage'
-            table = preformat_contract_result_table(contract_result.items[1])
+            table = preformat_storage_table(contract_result.items[1])
             plain += plain_table(table, header)
             html += html_table(table, header)
 

From 9d9c944df196c6c4233b439230fda540750ff6d1 Mon Sep 17 00:00:00 2001
From: Lev Gorodetskiy 
Date: Tue, 23 Mar 2021 20:26:08 +0300
Subject: [PATCH 6/7] Review, cleaup

---
 Makefile                   | 11 +++++++++++
 michelson_kernel/kernel.py | 40 ++++++++++++++++++++++----------------
 2 files changed, 34 insertions(+), 17 deletions(-)

diff --git a/Makefile b/Makefile
index ebb6689..6893ef1 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,17 @@ install:
 debug:
 	pip install . --force --no-deps --user
 
+isort:
+	bash -c "python -m venv .venv; source .venv/bin/activate; pip install isort; isort michelson_kernel/kernel.py"
+
+black:
+	bash -c "python -m venv .venv; source .venv/bin/activate; pip install black; black -S -l 140 michelson_kernel/kernel.py"
+
+mypy:
+	bash -c "python -m venv .venv; source .venv/bin/activate; pip install mypy; mypy michelson_kernel/kernel.py"
+
+lint: isort black mypy
+
 publish:
 	python setup.py sdist
 	twine upload dist/*
diff --git a/michelson_kernel/kernel.py b/michelson_kernel/kernel.py
index a8b9fa6..e9d5a78 100644
--- a/michelson_kernel/kernel.py
+++ b/michelson_kernel/kernel.py
@@ -1,19 +1,19 @@
 from collections import Iterable
 from traceback import format_exception
-from typing import List, Dict, Any, Optional
+from typing import Any, Dict, List, Optional, Tuple, cast
 
-from pytezos import micheline_to_michelson
-from pytezos.michelson.instructions import CommitInstruction, BigMapInstruction, BigMapDiffInstruction
+from ipykernel.kernelbase import Kernel  # type: ignore
+from pytezos import MichelsonType, micheline_to_michelson
+from pytezos.michelson.instructions import BigMapDiffInstruction, CommitInstruction
 from pytezos.michelson.instructions.base import MichelsonInstruction
 from pytezos.michelson.micheline import MichelineSequence, MichelsonRuntimeError
-from pytezos.michelson.parse import MichelsonParserError, michelson_to_micheline
+from pytezos.michelson.parse import MichelsonParserError
+from pytezos.michelson.repl import Interpreter
 from pytezos.michelson.stack import MichelsonStack
-from pytezos.michelson.types import PairType
+from pytezos.michelson.tags import prim_tags
+from pytezos.michelson.types import OperationType, PairType
 from tabulate import tabulate
-from ipykernel.kernelbase import Kernel
 
-from pytezos.michelson.repl import Interpreter
-from pytezos.michelson.tags import prim_tags
 from michelson_kernel import __version__
 from michelson_kernel.docs import docs
 
@@ -62,22 +62,23 @@
 ]
 
 
-def parse_token(line, cursor_pos):
+def parse_token(line: str, cursor_pos: int) -> Tuple[str, int, int]:
 
     begin_pos = next((i + 1 for i in range(cursor_pos - 1, 0, -1) if line[i] in ' ;({\n'), 0)
     end_pos = next((i for i in range(cursor_pos, len(line)) if line[i] in ' ;){\n'), len(line))
     return line[begin_pos:end_pos], begin_pos, end_pos
 
 
-def preformat_operations_table(items) -> List[Dict[str, Any]]:
+def preformat_operations_table(items: List[OperationType]) -> List[Dict[str, Any]]:
     return [
         {
             'type': item.prim,
-            'value': item.to_python_object(),
+            **item.content,
         }
         for item in items
     ]
 
+
 def preformat_storage_table(item) -> List[Dict[str, Any]]:
     return [
         {
@@ -86,12 +87,14 @@ def preformat_storage_table(item) -> List[Dict[str, Any]]:
         }
     ]
 
-def preformat_stack_table(items: Iterable[MichelsonInstruction]) -> List[Dict[str, Any]]:
+
+def preformat_stack_table(items: List[MichelsonInstruction]) -> List[Dict[str, Any]]:
     return [
         {
             'index': i,
             'type': item.prim,
-            'value': item.to_python_object(),
+            # FIXME:
+            'value': item.to_python_object(),  # type: ignore
         }
         for i, item in enumerate(items)
     ]
@@ -106,7 +109,8 @@ def pre_dict(d):
 
     result = f'

{header}

' result += tabulate(list(map(pre_dict, table)), tablefmt='html', headers="keys") - result = result.replace('<', '<').replace('>', '>') # tabulate escapes our
 tags
+    # NOTE: Tabulate escapes our 
 tags
+    result = result.replace('<', '<').replace('>', '>')
     return result
 
 
@@ -180,7 +184,7 @@ def _find_stack_items(self, instructions: MichelineSequence, stack: MichelsonSta
             if not isinstance(operation, MichelsonInstruction):
                 continue
             if operation.stack_items_added:
-                return stack.items[-operation.stack_items_added:]
+                return cast(List[MichelsonInstruction], stack.items[-operation.stack_items_added :])
         return None
 
     def _find_lazy_diff(self, instructions: MichelineSequence) -> Optional[List[Dict[str, str]]]:
@@ -189,11 +193,13 @@ def _find_lazy_diff(self, instructions: MichelineSequence) -> Optional[List[Dict
                 return instruction.lazy_diff
             elif isinstance(instruction, BigMapDiffInstruction) and instruction.lazy_diff:
                 return instruction.lazy_diff
+        return None
 
     def _find_contract_result(self, instructions: MichelineSequence) -> Optional[PairType]:
         for instruction in instructions.items[::-1]:
             if isinstance(instruction, CommitInstruction):
                 return instruction.result
+        return None
 
     def _send_success_response(self, instructions: MichelineSequence, stack: MichelsonStack) -> Dict[str, Any]:
         plain, html = '', ''
@@ -201,7 +207,7 @@ def _send_success_response(self, instructions: MichelineSequence, stack: Michels
         contract_result = self._find_contract_result(instructions)
         if contract_result:
             header = 'Operations'
-            table = preformat_operations_table(contract_result.items[0])
+            table = preformat_operations_table(cast(List[OperationType], contract_result.items[0]))
             plain += plain_table(table, header)
             html += html_table(table, header)
 
@@ -211,7 +217,7 @@ def _send_success_response(self, instructions: MichelineSequence, stack: Michels
             html += html_table(table, header)
 
         modified_items = self._find_stack_items(instructions, stack)
-        if modified_items and not contract_result:
+        if modified_items is not None and not contract_result:
             header = 'Stack updates'
             table = preformat_stack_table(modified_items)
             plain += plain_table(table, header)

From 76cc5d22912d3170f37a1aecfc9e6e5f79c721cc Mon Sep 17 00:00:00 2001
From: Lev Gorodetskiy 
Date: Wed, 24 Mar 2021 17:10:26 +0300
Subject: [PATCH 7/7] Lint, CI

---
 .dockerignore                                 |   11 +
 .gitignore                                    |    1 +
 Dockerfile                                    |   20 +-
 Makefile                                      |   23 +-
 docker-compose.yml                            |    6 +
 poetry.lock                                   | 2106 +++++++++++++++++
 post-install.py                               |   27 +
 pyproject.toml                                |   36 +
 pytezos-3.0.4-py3-none-any.whl                |  Bin 147591 -> 148088 bytes
 setup.py                                      |   75 -
 .../michelson_kernel}/__init__.py             |    0
 .../michelson_kernel}/__main__.py             |    3 +-
 .../michelson_kernel}/docs.py                 |    0
 .../michelson_kernel}/kernel.js               |    0
 .../michelson_kernel}/kernel.py               |    7 +-
 15 files changed, 2224 insertions(+), 91 deletions(-)
 create mode 100644 .dockerignore
 create mode 100644 docker-compose.yml
 create mode 100644 poetry.lock
 create mode 100644 post-install.py
 create mode 100644 pyproject.toml
 delete mode 100644 setup.py
 rename {michelson_kernel => src/michelson_kernel}/__init__.py (100%)
 rename {michelson_kernel => src/michelson_kernel}/__main__.py (64%)
 rename {michelson_kernel => src/michelson_kernel}/docs.py (100%)
 rename {michelson_kernel => src/michelson_kernel}/kernel.js (100%)
 rename {michelson_kernel => src/michelson_kernel}/kernel.py (97%)

diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..a7602ef
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,11 @@
+__pycache__
+*.pyc
+*.pyo
+*.pyd
+.venv
+.dockerignore
+.gitignore
+Dockerfile
+LICENSE
+README.md
+.git
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 41c1104..2205c08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -129,4 +129,5 @@ dmypy.json
 .pyre/
 
 .idea/
+.vscode
 *.ipynb
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 2c95deb..15d4820 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,15 +1,25 @@
 FROM python:3.7-slim-buster
 
 RUN apt update && \
-    apt install -y build-essential pkg-config libsodium-dev libsecp256k1-dev libgmp-dev && \
+    apt install -y build-essential pkg-config libsodium-dev libsecp256k1-dev libgmp-dev make curl && \
     rm -rf /var/lib/apt/lists/*
-RUN pip install notebook jupyter-client
+
+RUN pip install poetry
 
 RUN useradd -ms /bin/bash jupyter
+
+RUN mkdir /home/jupyter/michelson-kernel
+RUN mkdir /home/jupyter/notebooks
+COPY . /home/jupyter/michelson-kernel/
+RUN chown -R jupyter /home/jupyter/
+
 USER jupyter
-WORKDIR /home/jupyter
+WORKDIR /home/jupyter/michelson-kernel
+RUN poetry config virtualenvs.in-project true
+RUN make install
+RUN make post-install
 
-RUN pip install --user pytezos>=2.5.3 michelson-kernel>=0.1.6
+WORKDIR /home/jupyter/notebooks
 
 EXPOSE 8888
-ENTRYPOINT [ "jupyter",  "notebook", "--port=8888", "--ip=0.0.0.0", "--no-browser", "--no-mathjax"]
+ENTRYPOINT [ "/home/jupyter/michelson-kernel/.venv/bin/jupyter",  "notebook", "--port=8888", "--ip=0.0.0.0", "--no-browser", "--no-mathjax"]
diff --git a/Makefile b/Makefile
index 6893ef1..fb2122a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,19 +1,28 @@
 install:
-	bash -c "python -m venv .venv; source .venv/bin/activate; pip install wheel jupyter; pip install .; pip install -U pytezos-3.0.4-py3-none-any.whl"
+	poetry install
+
+post-install:
+	poetry run python post-install.py
 
 debug:
-	pip install . --force --no-deps --user
+	pip install . --force --no-deps
 
 isort:
-	bash -c "python -m venv .venv; source .venv/bin/activate; pip install isort; isort michelson_kernel/kernel.py"
+	poetry run isort src
 
-black:
-	bash -c "python -m venv .venv; source .venv/bin/activate; pip install black; black -S -l 140 michelson_kernel/kernel.py"
+pylint:
+	poetry run pylint src || poetry run pylint-exit $$?
 
 mypy:
-	bash -c "python -m venv .venv; source .venv/bin/activate; pip install mypy; mypy michelson_kernel/kernel.py"
+	poetry run mypy src
+
+lint: isort pylint mypy
+
+build:
+	poetry build
 
-lint: isort black mypy
+image:
+	docker build . -t michelson-kernel
 
 publish:
 	python setup.py sdist
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..5600b6d
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,6 @@
+version: "3.8"
+services:
+  notebook:
+    build: .
+    ports:
+      - 8888:8888
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..74c83e7
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,2106 @@
+[[package]]
+name = "appdirs"
+version = "1.4.4"
+description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "appnope"
+version = "0.1.2"
+description = "Disable App Nap on macOS >= 10.9"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "argon2-cffi"
+version = "20.1.0"
+description = "The secure Argon2 password hashing algorithm."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cffi = ">=1.0.0"
+six = "*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "wheel", "pre-commit"]
+docs = ["sphinx"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"]
+
+[[package]]
+name = "astroid"
+version = "2.5.1"
+description = "An abstract syntax tree for Python with inference support."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+lazy-object-proxy = ">=1.4.0"
+typed-ast = {version = ">=1.4.0,<1.5", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""}
+wrapt = ">=1.11,<1.13"
+
+[[package]]
+name = "async-generator"
+version = "1.10"
+description = "Async generators and context managers for Python 3.5+"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "attrs"
+version = "20.3.0"
+description = "Classes Without Boilerplate"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.extras]
+dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
+docs = ["furo", "sphinx", "zope.interface"]
+tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
+tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
+
+[[package]]
+name = "backcall"
+version = "0.2.0"
+description = "Specifications for callback functions passed in to an API"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "base58"
+version = "1.0.3"
+description = "Base58 and Base58Check implementation"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "black"
+version = "20.8b1"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+appdirs = "*"
+click = ">=7.1.2"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.6,<1"
+regex = ">=2020.1.8"
+toml = ">=0.10.1"
+typed-ast = ">=1.4.0"
+typing-extensions = ">=3.7.4"
+
+[package.extras]
+colorama = ["colorama (>=0.4.3)"]
+d = ["aiohttp (>=3.3.2)", "aiohttp-cors"]
+
+[[package]]
+name = "bleach"
+version = "3.3.0"
+description = "An easy safelist-based HTML-sanitizing tool."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+packaging = "*"
+six = ">=1.9.0"
+webencodings = "*"
+
+[[package]]
+name = "bson"
+version = "0.5.10"
+description = "BSON codec for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+python-dateutil = ">=2.4.0"
+six = ">=1.9.0"
+
+[[package]]
+name = "cached-property"
+version = "1.5.2"
+description = "A decorator for caching properties in classes."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "certifi"
+version = "2020.12.5"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "cffi"
+version = "1.14.5"
+description = "Foreign Function Interface for Python calling C code."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "chardet"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "click"
+version = "7.1.2"
+description = "Composable command line interface toolkit"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "colorama"
+version = "0.4.4"
+description = "Cross-platform colored terminal text."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "cytoolz"
+version = "0.11.0"
+description = "Cython implementation of Toolz: High performance functional utilities"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+toolz = ">=0.8.0"
+
+[package.extras]
+cython = ["cython"]
+
+[[package]]
+name = "decorator"
+version = "4.4.2"
+description = "Decorators for Humans"
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*"
+
+[[package]]
+name = "defusedxml"
+version = "0.7.1"
+description = "XML bomb protection for Python stdlib modules"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "deprecation"
+version = "2.1.0"
+description = "A library to handle automated deprecations"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+packaging = "*"
+
+[[package]]
+name = "docker"
+version = "4.4.4"
+description = "A Python library for the Docker Engine API."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+pywin32 = {version = "227", markers = "sys_platform == \"win32\""}
+requests = ">=2.14.2,<2.18.0 || >2.18.0"
+six = ">=1.4.0"
+websocket-client = ">=0.32.0"
+
+[package.extras]
+ssh = ["paramiko (>=2.4.2)"]
+tls = ["pyOpenSSL (>=17.5.0)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"]
+
+[[package]]
+name = "entrypoints"
+version = "0.3"
+description = "Discover and load entry points from installed packages."
+category = "main"
+optional = false
+python-versions = ">=2.7"
+
+[[package]]
+name = "eth-hash"
+version = "0.3.1"
+description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.dependencies]
+eth-utils = ">=1,<2"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<1)", "towncrier (>=19.2.0,<20)"]
+lint = ["flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.770)", "pydocstyle (>=5.0.0,<6)"]
+pycryptodome = ["pycryptodome (>=3.6.6,<4)"]
+pysha3 = ["pysha3 (>=1.0.0,<2.0.0)"]
+test = ["pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"]
+
+[[package]]
+name = "eth-typing"
+version = "2.2.2"
+description = "eth-typing: Common type annotations for ethereum python packages"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel", "twine", "ipython", "pytest (>=4.4,<4.5)", "pytest-xdist", "tox (>=2.9.1,<3)", "flake8 (==3.8.3)", "isort (>=4.2.15,<5)", "mypy (==0.782)", "pydocstyle (>=3.0.0,<4)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"]
+lint = ["flake8 (==3.8.3)", "isort (>=4.2.15,<5)", "mypy (==0.782)", "pydocstyle (>=3.0.0,<4)"]
+test = ["pytest (>=4.4,<4.5)", "pytest-xdist", "tox (>=2.9.1,<3)"]
+
+[[package]]
+name = "eth-utils"
+version = "1.10.0"
+description = "eth-utils: Common utility functions for python code that interacts with Ethereum"
+category = "main"
+optional = false
+python-versions = ">=3.5,!=3.5.2,<4"
+
+[package.dependencies]
+cytoolz = {version = ">=0.10.1,<1.0.0", markers = "implementation_name == \"cpython\""}
+eth-hash = ">=0.3.1,<0.4.0"
+eth-typing = ">=2.2.1,<3.0.0"
+toolz = {version = ">0.8.2,<1", markers = "implementation_name == \"pypy\""}
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "pytest-watch (>=4.1.0,<5)", "wheel (>=0.30.0,<1.0.0)", "twine (>=1.13,<2)", "ipython", "hypothesis (>=4.43.0,<5.0.0)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)", "black (>=18.6b4,<19)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.720)", "pydocstyle (>=5.0.0,<6)", "pytest (>=3.4.1,<4.0.0)", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<2)", "towncrier (>=19.2.0,<20)"]
+doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9,<2)", "towncrier (>=19.2.0,<20)"]
+lint = ["black (>=18.6b4,<19)", "flake8 (==3.7.9)", "isort (>=4.2.15,<5)", "mypy (==0.720)", "pydocstyle (>=5.0.0,<6)", "pytest (>=3.4.1,<4.0.0)"]
+test = ["hypothesis (>=4.43.0,<5.0.0)", "pytest (==5.4.1)", "pytest-xdist", "tox (==3.14.6)"]
+
+[[package]]
+name = "fastecdsa"
+version = "1.7.5"
+description = "Fast elliptic curve digital signatures"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "idna"
+version = "2.10"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "importlib-metadata"
+version = "3.7.3"
+description = "Read metadata from Python packages"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
+zipp = ">=0.5"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=3.5,!=3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+
+[[package]]
+name = "ipykernel"
+version = "5.5.0"
+description = "IPython Kernel for Jupyter"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+appnope = {version = "*", markers = "platform_system == \"Darwin\""}
+ipython = ">=5.0.0"
+jupyter-client = "*"
+tornado = ">=4.2"
+traitlets = ">=4.1.0"
+
+[package.extras]
+test = ["pytest (!=5.3.4)", "pytest-cov", "flaky", "nose", "jedi (<=0.17.2)"]
+
+[[package]]
+name = "ipython"
+version = "7.21.0"
+description = "IPython: Productive Interactive Computing"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+appnope = {version = "*", markers = "sys_platform == \"darwin\""}
+backcall = "*"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+decorator = "*"
+jedi = ">=0.16"
+pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
+pickleshare = "*"
+prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0"
+pygments = "*"
+traitlets = ">=4.2"
+
+[package.extras]
+all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.14)", "pygments", "qtconsole", "requests", "testpath"]
+doc = ["Sphinx (>=1.3)"]
+kernel = ["ipykernel"]
+nbconvert = ["nbconvert"]
+nbformat = ["nbformat"]
+notebook = ["notebook", "ipywidgets"]
+parallel = ["ipyparallel"]
+qtconsole = ["qtconsole"]
+test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.14)"]
+
+[[package]]
+name = "ipython-genutils"
+version = "0.2.0"
+description = "Vestigial utilities from IPython"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "isort"
+version = "5.8.0"
+description = "A Python utility / library to sort Python imports."
+category = "dev"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.extras]
+pipfile_deprecated_finder = ["pipreqs", "requirementslib"]
+requirements_deprecated_finder = ["pipreqs", "pip-api"]
+colors = ["colorama (>=0.4.3,<0.5.0)"]
+
+[[package]]
+name = "jedi"
+version = "0.18.0"
+description = "An autocompletion tool for Python that can be used for text editors."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+parso = ">=0.8.0,<0.9.0"
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "jinja2"
+version = "2.11.3"
+description = "A very fast and expressive template engine."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+MarkupSafe = ">=0.23"
+
+[package.extras]
+i18n = ["Babel (>=0.8)"]
+
+[[package]]
+name = "jsonschema"
+version = "3.2.0"
+description = "An implementation of JSON Schema validation for Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+attrs = ">=17.4.0"
+importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
+pyrsistent = ">=0.14.0"
+six = ">=1.11.0"
+
+[package.extras]
+format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"]
+format_nongpl = ["idna", "jsonpointer (>1.13)", "webcolors", "rfc3986-validator (>0.1.0)", "rfc3339-validator"]
+
+[[package]]
+name = "jupyter-client"
+version = "6.1.12"
+description = "Jupyter protocol implementation and client libraries"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+jupyter-core = ">=4.6.0"
+python-dateutil = ">=2.1"
+pyzmq = ">=13"
+tornado = ">=4.1"
+traitlets = "*"
+
+[package.extras]
+doc = ["sphinx (>=1.3.6)", "sphinx-rtd-theme", "sphinxcontrib-github-alt"]
+test = ["async-generator", "ipykernel", "ipython", "mock", "pytest-asyncio", "pytest-timeout", "pytest", "jedi (<0.18)"]
+
+[[package]]
+name = "jupyter-core"
+version = "4.7.1"
+description = "Jupyter core package. A base package on which Jupyter projects rely."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\""}
+traitlets = "*"
+
+[[package]]
+name = "jupyterlab-pygments"
+version = "0.1.2"
+description = "Pygments theme using JupyterLab CSS variables"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+pygments = ">=2.4.1,<3"
+
+[[package]]
+name = "lazy-object-proxy"
+version = "1.6.0"
+description = "A fast and thorough lazy object proxy."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[[package]]
+name = "loguru"
+version = "0.5.3"
+description = "Python logging made (stupidly) simple"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""}
+win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""}
+
+[package.extras]
+dev = ["codecov (>=2.0.15)", "colorama (>=0.3.4)", "flake8 (>=3.7.7)", "tox (>=3.9.0)", "tox-travis (>=0.12)", "pytest (>=4.6.2)", "pytest-cov (>=2.7.1)", "Sphinx (>=2.2.1)", "sphinx-autobuild (>=0.7.1)", "sphinx-rtd-theme (>=0.4.3)", "black (>=19.10b0)", "isort (>=5.1.1)"]
+
+[[package]]
+name = "markupsafe"
+version = "1.1.1"
+description = "Safely add untrusted strings to HTML/XML markup."
+category = "main"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+
+[[package]]
+name = "mccabe"
+version = "0.6.1"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mistune"
+version = "0.8.4"
+description = "The fastest markdown parser in pure Python"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mnemonic"
+version = "0.19"
+description = "Implementation of Bitcoin BIP-0039"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "mypy"
+version = "0.812"
+description = "Optional static typing for Python"
+category = "dev"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+mypy-extensions = ">=0.4.3,<0.5.0"
+typed-ast = ">=1.4.0,<1.5.0"
+typing-extensions = ">=3.7.4"
+
+[package.extras]
+dmypy = ["psutil (>=4.0)"]
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with the mypy typechecker."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "nbclient"
+version = "0.5.3"
+description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor."
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+async-generator = "*"
+jupyter-client = ">=6.1.5"
+nbformat = ">=5.0"
+nest-asyncio = "*"
+traitlets = ">=4.2"
+
+[package.extras]
+dev = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"]
+sphinx = ["Sphinx (>=1.7)", "sphinx-book-theme", "mock", "moto", "myst-parser"]
+test = ["codecov", "coverage", "ipython", "ipykernel", "ipywidgets", "pytest (>=4.1)", "pytest-cov (>=2.6.1)", "check-manifest", "flake8", "mypy", "tox", "bumpversion", "xmltodict", "pip (>=18.1)", "wheel (>=0.31.0)", "setuptools (>=38.6.0)", "twine (>=1.11.0)", "black"]
+
+[[package]]
+name = "nbconvert"
+version = "6.0.7"
+description = "Converting Jupyter Notebooks"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+bleach = "*"
+defusedxml = "*"
+entrypoints = ">=0.2.2"
+jinja2 = ">=2.4"
+jupyter-core = "*"
+jupyterlab-pygments = "*"
+mistune = ">=0.8.1,<2"
+nbclient = ">=0.5.0,<0.6.0"
+nbformat = ">=4.4"
+pandocfilters = ">=1.4.1"
+pygments = ">=2.4.1"
+testpath = "*"
+traitlets = ">=4.2"
+
+[package.extras]
+all = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)", "tornado (>=4.0)", "sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"]
+docs = ["sphinx (>=1.5.1)", "sphinx-rtd-theme", "nbsphinx (>=0.2.12)", "ipython"]
+serve = ["tornado (>=4.0)"]
+test = ["pytest", "pytest-cov", "pytest-dependency", "ipykernel", "ipywidgets (>=7)", "pyppeteer (==0.2.2)"]
+webpdf = ["pyppeteer (==0.2.2)"]
+
+[[package]]
+name = "nbformat"
+version = "5.1.2"
+description = "The Jupyter Notebook format"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+ipython-genutils = "*"
+jsonschema = ">=2.4,<2.5.0 || >2.5.0"
+jupyter-core = "*"
+traitlets = ">=4.1"
+
+[package.extras]
+fast = ["fastjsonschema"]
+test = ["check-manifest", "fastjsonschema", "testpath", "pytest", "pytest-cov"]
+
+[[package]]
+name = "nest-asyncio"
+version = "1.5.1"
+description = "Patch asyncio to allow nested event loops"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "netstruct"
+version = "1.1.2"
+description = "Packed binary data for networking."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "notebook"
+version = "6.3.0"
+description = "A web-based notebook environment for interactive computing"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+argon2-cffi = "*"
+ipykernel = "*"
+ipython-genutils = "*"
+jinja2 = "*"
+jupyter-client = ">=5.3.4"
+jupyter-core = ">=4.6.1"
+nbconvert = "*"
+nbformat = "*"
+prometheus-client = "*"
+pyzmq = ">=17"
+Send2Trash = ">=1.5.0"
+terminado = ">=0.8.3"
+tornado = ">=6.1"
+traitlets = ">=4.2.1"
+
+[package.extras]
+docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme"]
+json-logging = ["json-logging"]
+test = ["pytest", "coverage", "requests", "nbval", "selenium", "pytest-cov", "requests-unixsocket"]
+
+[[package]]
+name = "packaging"
+version = "20.9"
+description = "Core utilities for Python packages"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+pyparsing = ">=2.0.2"
+
+[[package]]
+name = "pandocfilters"
+version = "1.4.3"
+description = "Utilities for writing pandoc filters in python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "parso"
+version = "0.8.1"
+description = "A Python Parser"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
+testing = ["docopt", "pytest (<6.0.0)"]
+
+[[package]]
+name = "pathspec"
+version = "0.8.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+category = "dev"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[[package]]
+name = "pendulum"
+version = "2.1.2"
+description = "Python datetimes made easy"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+python-dateutil = ">=2.6,<3.0"
+pytzdata = ">=2020.1"
+
+[[package]]
+name = "pexpect"
+version = "4.8.0"
+description = "Pexpect allows easy control of interactive console applications."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+ptyprocess = ">=0.5"
+
+[[package]]
+name = "pickleshare"
+version = "0.7.5"
+description = "Tiny 'shelve'-like database with concurrency support"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "ply"
+version = "3.11"
+description = "Python Lex & Yacc"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "prometheus-client"
+version = "0.9.0"
+description = "Python client for the Prometheus monitoring system."
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+twisted = ["twisted"]
+
+[[package]]
+name = "prompt-toolkit"
+version = "3.0.18"
+description = "Library for building powerful interactive command lines in Python"
+category = "main"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+wcwidth = "*"
+
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+description = "Run a subprocess in a pseudo terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "py"
+version = "1.10.0"
+description = "library with cross-python path, ini-parsing, io, code, log facilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "py-ecc"
+version = "5.2.0"
+description = "Elliptic curve crypto in python including secp256k1 and alt_bn128"
+category = "main"
+optional = false
+python-versions = ">=3.5, <4"
+
+[package.dependencies]
+cached-property = ">=1.5.1,<2"
+eth-typing = ">=2.1.0,<3.0.0"
+eth-utils = ">=1.3.0,<2"
+mypy-extensions = ">=0.4.1"
+
+[package.extras]
+dev = ["bumpversion (>=0.5.3,<1)", "twine", "pytest (==3.10.1)", "pytest-xdist (==1.26.0)", "flake8 (==3.5.0)", "mypy (==0.641)", "mypy-extensions (>=0.4.1)"]
+lint = ["flake8 (==3.5.0)", "mypy (==0.641)", "mypy-extensions (>=0.4.1)"]
+test = ["pytest (==3.10.1)", "pytest-xdist (==1.26.0)"]
+
+[[package]]
+name = "pyblake2"
+version = "1.1.2"
+description = "BLAKE2 hash function extension module"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pycparser"
+version = "2.20"
+description = "C parser in Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pygments"
+version = "2.8.1"
+description = "Pygments is a syntax highlighting package written in Python."
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "pylint"
+version = "2.7.2"
+description = "python code static checker"
+category = "dev"
+optional = false
+python-versions = "~=3.6"
+
+[package.dependencies]
+astroid = ">=2.5.1,<2.6"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+isort = ">=4.2.5,<6"
+mccabe = ">=0.6,<0.7"
+toml = ">=0.7.1"
+
+[package.extras]
+docs = ["sphinx (==3.5.1)", "python-docs-theme (==2020.12)"]
+
+[[package]]
+name = "pylint-exit"
+version = "1.2.0"
+description = "Exit code handler for pylint command line utility."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyparsing"
+version = "2.4.7"
+description = "Python parsing module"
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "pyrsistent"
+version = "0.17.3"
+description = "Persistent/Functional/Immutable data structures"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "pysha3"
+version = "1.0.2"
+description = "SHA-3 (Keccak) for Python 2.7 - 3.5"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pysodium"
+version = "0.7.7"
+description = "python libsodium wrapper"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pytezos"
+version = "3.0.4"
+description = "Python toolkit for Tezos"
+category = "main"
+optional = false
+python-versions = ">=3.6,<4.0"
+
+[package.dependencies]
+base58 = ">=1.0.3,<2.0.0"
+bson = ">=0.5.10,<0.6.0"
+click = ">=7.1.2,<8.0.0"
+deprecation = "*"
+fastecdsa = "1.7.5"
+loguru = "*"
+mnemonic = "*"
+netstruct = "*"
+pendulum = "*"
+ply = "*"
+py_ecc = "*"
+pyblake2 = ">=1.1.2,<2.0.0"
+pysha3 = "1.0.2"
+pysodium = "0.7.7"
+pyyaml = "*"
+requests = ">=2.21.0,<3.0.0"
+secp256k1 = "0.13.2"
+simplejson = "*"
+strict_rfc3339 = "0.7"
+testcontainers = ">=3.2.0,<4.0.0"
+tqdm = "*"
+typing-extensions = ">=3.7.4,<4.0.0"
+
+[package.source]
+type = "file"
+url = "pytezos-3.0.4-py3-none-any.whl"
+
+[[package]]
+name = "python-dateutil"
+version = "2.8.1"
+description = "Extensions to the standard Python datetime module"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pytzdata"
+version = "2020.1"
+description = "The Olson timezone database for Python."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[[package]]
+name = "pywin32"
+version = "227"
+description = "Python for Window Extensions"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pywinpty"
+version = "0.5.7"
+description = "Python bindings for the winpty library"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "pyyaml"
+version = "5.4.1"
+description = "YAML parser and emitter for Python"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
+
+[[package]]
+name = "pyzmq"
+version = "22.0.3"
+description = "Python bindings for 0MQ"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+cffi = {version = "*", markers = "implementation_name == \"pypy\""}
+py = {version = "*", markers = "implementation_name == \"pypy\""}
+
+[[package]]
+name = "regex"
+version = "2021.3.17"
+description = "Alternative regular expression module, to replace re."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "requests"
+version = "2.25.1"
+description = "Python HTTP for Humans."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+chardet = ">=3.0.2,<5"
+idna = ">=2.5,<3"
+urllib3 = ">=1.21.1,<1.27"
+
+[package.extras]
+security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
+
+[[package]]
+name = "secp256k1"
+version = "0.13.2"
+description = "FFI bindings to libsecp256k1"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+cffi = ">=1.3.0"
+
+[[package]]
+name = "send2trash"
+version = "1.5.0"
+description = "Send file to trash natively under Mac OS X, Windows and Linux."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "simplejson"
+version = "3.17.2"
+description = "Simple, fast, extensible JSON encoder/decoder for Python"
+category = "main"
+optional = false
+python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "six"
+version = "1.15.0"
+description = "Python 2 and 3 compatibility utilities"
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "strict-rfc3339"
+version = "0.7"
+description = "Strict, simple, lightweight RFC3339 functions"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "tabulate"
+version = "0.7.7"
+description = "Pretty-print tabular data"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+widechars = ["wcwidth"]
+
+[[package]]
+name = "terminado"
+version = "0.9.3"
+description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+ptyprocess = {version = "*", markers = "os_name != \"nt\""}
+pywinpty = {version = ">=0.5", markers = "os_name == \"nt\""}
+tornado = ">=4"
+
+[[package]]
+name = "testcontainers"
+version = "3.3.0"
+description = "Library provides lightweight, throwaway instances of common databases, Selenium web browsers, or anything else that can run in a Docker container"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+deprecation = "*"
+docker = "*"
+wrapt = "*"
+
+[package.extras]
+docker-compose = ["docker-compose"]
+google-cloud-pubsub = ["google-cloud-pubsub"]
+mongo = ["pymongo"]
+mssqlserver = ["pyodbc"]
+mysql = ["sqlalchemy", "pymysql"]
+neo4j = ["neo4j"]
+oracle = ["sqlalchemy", "cx-oracle"]
+postgresql = ["sqlalchemy", "psycopg2-binary"]
+redis = ["redis"]
+selenium = ["selenium"]
+
+[[package]]
+name = "testpath"
+version = "0.4.4"
+description = "Test utilities for code working with files and commands"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.extras]
+test = ["pathlib2"]
+
+[[package]]
+name = "toml"
+version = "0.10.2"
+description = "Python Library for Tom's Obvious, Minimal Language"
+category = "dev"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+
+[[package]]
+name = "toolz"
+version = "0.11.1"
+description = "List processing tools and functional utilities"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
+name = "tornado"
+version = "6.1"
+description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed."
+category = "main"
+optional = false
+python-versions = ">= 3.5"
+
+[[package]]
+name = "tqdm"
+version = "4.59.0"
+description = "Fast, Extensible Progress Meter"
+category = "main"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
+
+[package.extras]
+dev = ["py-make (>=0.1.0)", "twine", "wheel"]
+notebook = ["ipywidgets (>=6)"]
+telegram = ["requests"]
+
+[[package]]
+name = "traitlets"
+version = "5.0.5"
+description = "Traitlets Python configuration system"
+category = "main"
+optional = false
+python-versions = ">=3.7"
+
+[package.dependencies]
+ipython-genutils = "*"
+
+[package.extras]
+test = ["pytest"]
+
+[[package]]
+name = "typed-ast"
+version = "1.4.2"
+description = "a fork of Python 2 and 3 ast modules with type comment support"
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "typing-extensions"
+version = "3.7.4.3"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "urllib3"
+version = "1.26.4"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+category = "main"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+
+[package.extras]
+secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
+brotli = ["brotlipy (>=0.6.0)"]
+
+[[package]]
+name = "wcwidth"
+version = "0.2.5"
+description = "Measures the displayed width of unicode strings in a terminal"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "websocket-client"
+version = "0.58.0"
+description = "WebSocket client for Python with low level API options"
+category = "main"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+
+[package.dependencies]
+six = "*"
+
+[[package]]
+name = "win32-setctime"
+version = "1.0.3"
+description = "A small Python utility to set file creation time on Windows"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+dev = ["pytest (>=4.6.2)", "black (>=19.3b0)"]
+
+[[package]]
+name = "wrapt"
+version = "1.12.1"
+description = "Module for decorators, wrappers and monkey patching."
+category = "main"
+optional = false
+python-versions = "*"
+
+[[package]]
+name = "zipp"
+version = "3.4.1"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.extras]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+
+[metadata]
+lock-version = "1.1"
+python-versions = "^3.7"
+content-hash = "7ab6dc826e220bed98339994e1d7138fcccc0bb1f6b010371ebfadc83d482433"
+
+[metadata.files]
+appdirs = [
+    {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"},
+    {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"},
+]
+appnope = [
+    {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"},
+    {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"},
+]
+argon2-cffi = [
+    {file = "argon2-cffi-20.1.0.tar.gz", hash = "sha256:d8029b2d3e4b4cea770e9e5a0104dd8fa185c1724a0f01528ae4826a6d25f97d"},
+    {file = "argon2_cffi-20.1.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:6ea92c980586931a816d61e4faf6c192b4abce89aa767ff6581e6ddc985ed003"},
+    {file = "argon2_cffi-20.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:05a8ac07c7026542377e38389638a8a1e9b78f1cd8439cd7493b39f08dd75fbf"},
+    {file = "argon2_cffi-20.1.0-cp27-cp27m-win32.whl", hash = "sha256:0bf066bc049332489bb2d75f69216416329d9dc65deee127152caeb16e5ce7d5"},
+    {file = "argon2_cffi-20.1.0-cp27-cp27m-win_amd64.whl", hash = "sha256:57358570592c46c420300ec94f2ff3b32cbccd10d38bdc12dc6979c4a8484fbc"},
+    {file = "argon2_cffi-20.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7d455c802727710e9dfa69b74ccaab04568386ca17b0ad36350b622cd34606fe"},
+    {file = "argon2_cffi-20.1.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:b160416adc0f012fb1f12588a5e6954889510f82f698e23ed4f4fa57f12a0647"},
+    {file = "argon2_cffi-20.1.0-cp35-cp35m-win32.whl", hash = "sha256:9bee3212ba4f560af397b6d7146848c32a800652301843df06b9e8f68f0f7361"},
+    {file = "argon2_cffi-20.1.0-cp35-cp35m-win_amd64.whl", hash = "sha256:392c3c2ef91d12da510cfb6f9bae52512a4552573a9e27600bdb800e05905d2b"},
+    {file = "argon2_cffi-20.1.0-cp36-cp36m-win32.whl", hash = "sha256:ba7209b608945b889457f949cc04c8e762bed4fe3fec88ae9a6b7765ae82e496"},
+    {file = "argon2_cffi-20.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:da7f0445b71db6d3a72462e04f36544b0de871289b0bc8a7cc87c0f5ec7079fa"},
+    {file = "argon2_cffi-20.1.0-cp37-abi3-macosx_10_6_intel.whl", hash = "sha256:cc0e028b209a5483b6846053d5fd7165f460a1f14774d79e632e75e7ae64b82b"},
+    {file = "argon2_cffi-20.1.0-cp37-cp37m-win32.whl", hash = "sha256:18dee20e25e4be86680b178b35ccfc5d495ebd5792cd00781548d50880fee5c5"},
+    {file = "argon2_cffi-20.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6678bb047373f52bcff02db8afab0d2a77d83bde61cfecea7c5c62e2335cb203"},
+    {file = "argon2_cffi-20.1.0-cp38-cp38-win32.whl", hash = "sha256:77e909cc756ef81d6abb60524d259d959bab384832f0c651ed7dcb6e5ccdbb78"},
+    {file = "argon2_cffi-20.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:9dfd5197852530294ecb5795c97a823839258dfd5eb9420233c7cfedec2058f2"},
+    {file = "argon2_cffi-20.1.0-cp39-cp39-win32.whl", hash = "sha256:e2db6e85c057c16d0bd3b4d2b04f270a7467c147381e8fd73cbbe5bc719832be"},
+    {file = "argon2_cffi-20.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a84934bd818e14a17943de8099d41160da4a336bcc699bb4c394bbb9b94bd32"},
+]
+astroid = [
+    {file = "astroid-2.5.1-py3-none-any.whl", hash = "sha256:21d735aab248253531bb0f1e1e6d068f0ee23533e18ae8a6171ff892b98297cf"},
+    {file = "astroid-2.5.1.tar.gz", hash = "sha256:cfc35498ee64017be059ceffab0a25bedf7548ab76f2bea691c5565896e7128d"},
+]
+async-generator = [
+    {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"},
+    {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"},
+]
+attrs = [
+    {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"},
+    {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"},
+]
+backcall = [
+    {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"},
+    {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"},
+]
+base58 = [
+    {file = "base58-1.0.3-py2-none-any.whl", hash = "sha256:1e42993c0628ed4f898c03b522b26af78fb05115732549b21a028bc4633d19ab"},
+    {file = "base58-1.0.3-py3-none-any.whl", hash = "sha256:6aa0553e477478993588303c54659d15e3c17ae062508c854a8b752d07c716bd"},
+    {file = "base58-1.0.3.tar.gz", hash = "sha256:9a793c599979c497800eb414c852b80866f28daaed5494703fc129592cc83e60"},
+]
+black = [
+    {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"},
+]
+bleach = [
+    {file = "bleach-3.3.0-py2.py3-none-any.whl", hash = "sha256:6123ddc1052673e52bab52cdc955bcb57a015264a1c57d37bea2f6b817af0125"},
+    {file = "bleach-3.3.0.tar.gz", hash = "sha256:98b3170739e5e83dd9dc19633f074727ad848cbedb6026708c8ac2d3b697a433"},
+]
+bson = [
+    {file = "bson-0.5.10.tar.gz", hash = "sha256:d6511b2ab051139a9123c184de1a04227262173ad593429d21e443d6462d6590"},
+]
+cached-property = [
+    {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"},
+    {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"},
+]
+certifi = [
+    {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
+    {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"},
+]
+cffi = [
+    {file = "cffi-1.14.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:bb89f306e5da99f4d922728ddcd6f7fcebb3241fc40edebcb7284d7514741991"},
+    {file = "cffi-1.14.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:34eff4b97f3d982fb93e2831e6750127d1355a923ebaeeb565407b3d2f8d41a1"},
+    {file = "cffi-1.14.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99cd03ae7988a93dd00bcd9d0b75e1f6c426063d6f03d2f90b89e29b25b82dfa"},
+    {file = "cffi-1.14.5-cp27-cp27m-win32.whl", hash = "sha256:65fa59693c62cf06e45ddbb822165394a288edce9e276647f0046e1ec26920f3"},
+    {file = "cffi-1.14.5-cp27-cp27m-win_amd64.whl", hash = "sha256:51182f8927c5af975fece87b1b369f722c570fe169f9880764b1ee3bca8347b5"},
+    {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:43e0b9d9e2c9e5d152946b9c5fe062c151614b262fda2e7b201204de0b99e482"},
+    {file = "cffi-1.14.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:cbde590d4faaa07c72bf979734738f328d239913ba3e043b1e98fe9a39f8b2b6"},
+    {file = "cffi-1.14.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:5de7970188bb46b7bf9858eb6890aad302577a5f6f75091fd7cdd3ef13ef3045"},
+    {file = "cffi-1.14.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:a465da611f6fa124963b91bf432d960a555563efe4ed1cc403ba5077b15370aa"},
+    {file = "cffi-1.14.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:d42b11d692e11b6634f7613ad8df5d6d5f8875f5d48939520d351007b3c13406"},
+    {file = "cffi-1.14.5-cp35-cp35m-win32.whl", hash = "sha256:72d8d3ef52c208ee1c7b2e341f7d71c6fd3157138abf1a95166e6165dd5d4369"},
+    {file = "cffi-1.14.5-cp35-cp35m-win_amd64.whl", hash = "sha256:29314480e958fd8aab22e4a58b355b629c59bf5f2ac2492b61e3dc06d8c7a315"},
+    {file = "cffi-1.14.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3d3dd4c9e559eb172ecf00a2a7517e97d1e96de2a5e610bd9b68cea3925b4892"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:48e1c69bbacfc3d932221851b39d49e81567a4d4aac3b21258d9c24578280058"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:69e395c24fc60aad6bb4fa7e583698ea6cc684648e1ffb7fe85e3c1ca131a7d5"},
+    {file = "cffi-1.14.5-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:9e93e79c2551ff263400e1e4be085a1210e12073a31c2011dbbda14bda0c6132"},
+    {file = "cffi-1.14.5-cp36-cp36m-win32.whl", hash = "sha256:58e3f59d583d413809d60779492342801d6e82fefb89c86a38e040c16883be53"},
+    {file = "cffi-1.14.5-cp36-cp36m-win_amd64.whl", hash = "sha256:005a36f41773e148deac64b08f233873a4d0c18b053d37da83f6af4d9087b813"},
+    {file = "cffi-1.14.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2894f2df484ff56d717bead0a5c2abb6b9d2bf26d6960c4604d5c48bbc30ee73"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:0857f0ae312d855239a55c81ef453ee8fd24136eaba8e87a2eceba644c0d4c06"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:cd2868886d547469123fadc46eac7ea5253ea7fcb139f12e1dfc2bbd406427d1"},
+    {file = "cffi-1.14.5-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:35f27e6eb43380fa080dccf676dece30bef72e4a67617ffda586641cd4508d49"},
+    {file = "cffi-1.14.5-cp37-cp37m-win32.whl", hash = "sha256:9ff227395193126d82e60319a673a037d5de84633f11279e336f9c0f189ecc62"},
+    {file = "cffi-1.14.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9cf8022fb8d07a97c178b02327b284521c7708d7c71a9c9c355c178ac4bbd3d4"},
+    {file = "cffi-1.14.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b198cec6c72df5289c05b05b8b0969819783f9418e0409865dac47288d2a053"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:ad17025d226ee5beec591b52800c11680fca3df50b8b29fe51d882576e039ee0"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:6c97d7350133666fbb5cf4abdc1178c812cb205dc6f41d174a7b0f18fb93337e"},
+    {file = "cffi-1.14.5-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8ae6299f6c68de06f136f1f9e69458eae58f1dacf10af5c17353eae03aa0d827"},
+    {file = "cffi-1.14.5-cp38-cp38-win32.whl", hash = "sha256:b85eb46a81787c50650f2392b9b4ef23e1f126313b9e0e9013b35c15e4288e2e"},
+    {file = "cffi-1.14.5-cp38-cp38-win_amd64.whl", hash = "sha256:1f436816fc868b098b0d63b8920de7d208c90a67212546d02f84fe78a9c26396"},
+    {file = "cffi-1.14.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1071534bbbf8cbb31b498d5d9db0f274f2f7a865adca4ae429e147ba40f73dea"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9de2e279153a443c656f2defd67769e6d1e4163952b3c622dcea5b08a6405322"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6e4714cc64f474e4d6e37cfff31a814b509a35cb17de4fb1999907575684479c"},
+    {file = "cffi-1.14.5-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:158d0d15119b4b7ff6b926536763dc0714313aa59e320ddf787502c70c4d4bee"},
+    {file = "cffi-1.14.5-cp39-cp39-win32.whl", hash = "sha256:afb29c1ba2e5a3736f1c301d9d0abe3ec8b86957d04ddfa9d7a6a42b9367e396"},
+    {file = "cffi-1.14.5-cp39-cp39-win_amd64.whl", hash = "sha256:f2d45f97ab6bb54753eab54fffe75aaf3de4ff2341c9daee1987ee1837636f1d"},
+    {file = "cffi-1.14.5.tar.gz", hash = "sha256:fd78e5fee591709f32ef6edb9a015b4aa1a5022598e36227500c8f4e02328d9c"},
+]
+chardet = [
+    {file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
+    {file = "chardet-4.0.0.tar.gz", hash = "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa"},
+]
+click = [
+    {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
+    {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+]
+colorama = [
+    {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
+    {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
+]
+cytoolz = [
+    {file = "cytoolz-0.11.0.tar.gz", hash = "sha256:c64f3590c3eb40e1548f0d3c6b2ccde70493d0b8dc6cc7f9f3fec0bb3dcd4222"},
+]
+decorator = [
+    {file = "decorator-4.4.2-py2.py3-none-any.whl", hash = "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760"},
+    {file = "decorator-4.4.2.tar.gz", hash = "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7"},
+]
+defusedxml = [
+    {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
+    {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
+]
+deprecation = [
+    {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"},
+    {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"},
+]
+docker = [
+    {file = "docker-4.4.4-py2.py3-none-any.whl", hash = "sha256:f3607d5695be025fa405a12aca2e5df702a57db63790c73b927eb6a94aac60af"},
+    {file = "docker-4.4.4.tar.gz", hash = "sha256:d3393c878f575d3a9ca3b94471a3c89a6d960b35feb92f033c0de36cc9d934db"},
+]
+entrypoints = [
+    {file = "entrypoints-0.3-py2.py3-none-any.whl", hash = "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19"},
+    {file = "entrypoints-0.3.tar.gz", hash = "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"},
+]
+eth-hash = [
+    {file = "eth-hash-0.3.1.tar.gz", hash = "sha256:aee46d9c43b98ac6d4ddf957cf75d4d0a5174ee814cc6b53dd6134dcedb459bf"},
+    {file = "eth_hash-0.3.1-py3-none-any.whl", hash = "sha256:a3bc7f1c12eb086525999de7f83b9e7ad39740b31f0f4eccb17377ed70de24dd"},
+]
+eth-typing = [
+    {file = "eth-typing-2.2.2.tar.gz", hash = "sha256:97ba0f83da7cf1d3668f6ed54983f21168076c552762bf5e06d4a20921877f3f"},
+    {file = "eth_typing-2.2.2-py3-none-any.whl", hash = "sha256:1140c7592321dbf10d6663c46f7e43eb0e6410b011b03f14b3df3eb1f76aa9bb"},
+]
+eth-utils = [
+    {file = "eth-utils-1.10.0.tar.gz", hash = "sha256:bf82762a46978714190b0370265a7148c954d3f0adaa31c6f085ea375e4c61af"},
+    {file = "eth_utils-1.10.0-py3-none-any.whl", hash = "sha256:74240a8c6f652d085ed3c85f5f1654203d2f10ff9062f83b3bad0a12ff321c7a"},
+]
+fastecdsa = [
+    {file = "fastecdsa-1.7.5-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:0ac46a3a5a116eea4847d1560234057ecac812d5deb12ff76d98dd15ad6dab12"},
+    {file = "fastecdsa-1.7.5-cp37-cp37m-macosx_10_13_x86_64.whl", hash = "sha256:4fed79ab9b15f47419c697f97d976a9ffaf648294605dd0ea4a038dbf23c88b4"},
+    {file = "fastecdsa-1.7.5.tar.gz", hash = "sha256:bd3b7808cc2bea1e8b3c4dd5928ecfc14072403ab2a47580a7a8350800e6fedd"},
+]
+idna = [
+    {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
+    {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
+]
+importlib-metadata = [
+    {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"},
+    {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"},
+]
+ipykernel = [
+    {file = "ipykernel-5.5.0-py3-none-any.whl", hash = "sha256:efd07253b54d84d26e0878d268c8c3a41582a18750da633c2febfd2ece0d467d"},
+    {file = "ipykernel-5.5.0.tar.gz", hash = "sha256:98321abefdf0505fb3dc7601f60fc4087364d394bd8fad53107eb1adee9ff475"},
+]
+ipython = [
+    {file = "ipython-7.21.0-py3-none-any.whl", hash = "sha256:34207ffb2f653bced2bc8e3756c1db86e7d93e44ed049daae9814fed66d408ec"},
+    {file = "ipython-7.21.0.tar.gz", hash = "sha256:04323f72d5b85b606330b6d7e2dc8d2683ad46c3905e955aa96ecc7a99388e70"},
+]
+ipython-genutils = [
+    {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"},
+    {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"},
+]
+isort = [
+    {file = "isort-5.8.0-py3-none-any.whl", hash = "sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"},
+    {file = "isort-5.8.0.tar.gz", hash = "sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6"},
+]
+jedi = [
+    {file = "jedi-0.18.0-py2.py3-none-any.whl", hash = "sha256:18456d83f65f400ab0c2d3319e48520420ef43b23a086fdc05dff34132f0fb93"},
+    {file = "jedi-0.18.0.tar.gz", hash = "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707"},
+]
+jinja2 = [
+    {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
+    {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
+]
+jsonschema = [
+    {file = "jsonschema-3.2.0-py2.py3-none-any.whl", hash = "sha256:4e5b3cf8216f577bee9ce139cbe72eca3ea4f292ec60928ff24758ce626cd163"},
+    {file = "jsonschema-3.2.0.tar.gz", hash = "sha256:c8a85b28d377cc7737e46e2d9f2b4f44ee3c0e1deac6bf46ddefc7187d30797a"},
+]
+jupyter-client = [
+    {file = "jupyter_client-6.1.12-py3-none-any.whl", hash = "sha256:e053a2c44b6fa597feebe2b3ecb5eea3e03d1d91cc94351a52931ee1426aecfc"},
+    {file = "jupyter_client-6.1.12.tar.gz", hash = "sha256:c4bca1d0846186ca8be97f4d2fa6d2bae889cce4892a167ffa1ba6bd1f73e782"},
+]
+jupyter-core = [
+    {file = "jupyter_core-4.7.1-py3-none-any.whl", hash = "sha256:8c6c0cac5c1b563622ad49321d5ec47017bd18b94facb381c6973a0486395f8e"},
+    {file = "jupyter_core-4.7.1.tar.gz", hash = "sha256:79025cb3225efcd36847d0840f3fc672c0abd7afd0de83ba8a1d3837619122b4"},
+]
+jupyterlab-pygments = [
+    {file = "jupyterlab_pygments-0.1.2-py2.py3-none-any.whl", hash = "sha256:abfb880fd1561987efaefcb2d2ac75145d2a5d0139b1876d5be806e32f630008"},
+    {file = "jupyterlab_pygments-0.1.2.tar.gz", hash = "sha256:cfcda0873626150932f438eccf0f8bf22bfa92345b814890ab360d666b254146"},
+]
+lazy-object-proxy = [
+    {file = "lazy-object-proxy-1.6.0.tar.gz", hash = "sha256:489000d368377571c6f982fba6497f2aa13c6d1facc40660963da62f5c379726"},
+    {file = "lazy_object_proxy-1.6.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:c6938967f8528b3668622a9ed3b31d145fab161a32f5891ea7b84f6b790be05b"},
+    {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win32.whl", hash = "sha256:ebfd274dcd5133e0afae738e6d9da4323c3eb021b3e13052d8cbd0e457b1256e"},
+    {file = "lazy_object_proxy-1.6.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ed361bb83436f117f9917d282a456f9e5009ea12fd6de8742d1a4752c3017e93"},
+    {file = "lazy_object_proxy-1.6.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d900d949b707778696fdf01036f58c9876a0d8bfe116e8d220cfd4b15f14e741"},
+    {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:5743a5ab42ae40caa8421b320ebf3a998f89c85cdc8376d6b2e00bd12bd1b587"},
+    {file = "lazy_object_proxy-1.6.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:bf34e368e8dd976423396555078def5cfc3039ebc6fc06d1ae2c5a65eebbcde4"},
+    {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win32.whl", hash = "sha256:b579f8acbf2bdd9ea200b1d5dea36abd93cabf56cf626ab9c744a432e15c815f"},
+    {file = "lazy_object_proxy-1.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:4f60460e9f1eb632584c9685bccea152f4ac2130e299784dbaf9fae9f49891b3"},
+    {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d7124f52f3bd259f510651450e18e0fd081ed82f3c08541dffc7b94b883aa981"},
+    {file = "lazy_object_proxy-1.6.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:22ddd618cefe54305df49e4c069fa65715be4ad0e78e8d252a33debf00f6ede2"},
+    {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win32.whl", hash = "sha256:9d397bf41caad3f489e10774667310d73cb9c4258e9aed94b9ec734b34b495fd"},
+    {file = "lazy_object_proxy-1.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:24a5045889cc2729033b3e604d496c2b6f588c754f7a62027ad4437a7ecc4837"},
+    {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:17e0967ba374fc24141738c69736da90e94419338fd4c7c7bef01ee26b339653"},
+    {file = "lazy_object_proxy-1.6.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:410283732af311b51b837894fa2f24f2c0039aa7f220135192b38fcc42bd43d3"},
+    {file = "lazy_object_proxy-1.6.0-cp38-cp38-win32.whl", hash = "sha256:85fb7608121fd5621cc4377a8961d0b32ccf84a7285b4f1d21988b2eae2868e8"},
+    {file = "lazy_object_proxy-1.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1c2676e3d840852a2de7c7d5d76407c772927addff8d742b9808fe0afccebdf"},
+    {file = "lazy_object_proxy-1.6.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b865b01a2e7f96db0c5d12cfea590f98d8c5ba64ad222300d93ce6ff9138bcad"},
+    {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:4732c765372bd78a2d6b2150a6e99d00a78ec963375f236979c0626b97ed8e43"},
+    {file = "lazy_object_proxy-1.6.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9698110e36e2df951c7c36b6729e96429c9c32b3331989ef19976592c5f3c77a"},
+    {file = "lazy_object_proxy-1.6.0-cp39-cp39-win32.whl", hash = "sha256:1fee665d2638491f4d6e55bd483e15ef21f6c8c2095f235fef72601021e64f61"},
+    {file = "lazy_object_proxy-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:f5144c75445ae3ca2057faac03fda5a902eff196702b0a24daf1d6ce0650514b"},
+]
+loguru = [
+    {file = "loguru-0.5.3-py3-none-any.whl", hash = "sha256:f8087ac396b5ee5f67c963b495d615ebbceac2796379599820e324419d53667c"},
+    {file = "loguru-0.5.3.tar.gz", hash = "sha256:b28e72ac7a98be3d28ad28570299a393dfcd32e5e3f6a353dec94675767b6319"},
+]
+markupsafe = [
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"},
+    {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"},
+    {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"},
+    {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"},
+    {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"},
+    {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
+    {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"},
+    {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"},
+    {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
+]
+mccabe = [
+    {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"},
+    {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"},
+]
+mistune = [
+    {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"},
+    {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"},
+]
+mnemonic = [
+    {file = "mnemonic-0.19-py2.py3-none-any.whl", hash = "sha256:a8d78c5100acfa7df9bab6b9db7390831b0e54490934b718ff9efd68f0d731a6"},
+    {file = "mnemonic-0.19.tar.gz", hash = "sha256:4e37eb02b2cbd56a0079cabe58a6da93e60e3e4d6e757a586d9f23d96abea931"},
+]
+mypy = [
+    {file = "mypy-0.812-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49"},
+    {file = "mypy-0.812-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c"},
+    {file = "mypy-0.812-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521"},
+    {file = "mypy-0.812-cp35-cp35m-win_amd64.whl", hash = "sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"},
+    {file = "mypy-0.812-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a"},
+    {file = "mypy-0.812-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c"},
+    {file = "mypy-0.812-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6"},
+    {file = "mypy-0.812-cp36-cp36m-win_amd64.whl", hash = "sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064"},
+    {file = "mypy-0.812-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56"},
+    {file = "mypy-0.812-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8"},
+    {file = "mypy-0.812-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7"},
+    {file = "mypy-0.812-cp37-cp37m-win_amd64.whl", hash = "sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564"},
+    {file = "mypy-0.812-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506"},
+    {file = "mypy-0.812-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5"},
+    {file = "mypy-0.812-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66"},
+    {file = "mypy-0.812-cp38-cp38-win_amd64.whl", hash = "sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e"},
+    {file = "mypy-0.812-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a"},
+    {file = "mypy-0.812-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a"},
+    {file = "mypy-0.812-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97"},
+    {file = "mypy-0.812-cp39-cp39-win_amd64.whl", hash = "sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df"},
+    {file = "mypy-0.812-py3-none-any.whl", hash = "sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4"},
+    {file = "mypy-0.812.tar.gz", hash = "sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119"},
+]
+mypy-extensions = [
+    {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+    {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
+nbclient = [
+    {file = "nbclient-0.5.3-py3-none-any.whl", hash = "sha256:e79437364a2376892b3f46bedbf9b444e5396cfb1bc366a472c37b48e9551500"},
+    {file = "nbclient-0.5.3.tar.gz", hash = "sha256:db17271330c68c8c88d46d72349e24c147bb6f34ec82d8481a8f025c4d26589c"},
+]
+nbconvert = [
+    {file = "nbconvert-6.0.7-py3-none-any.whl", hash = "sha256:39e9f977920b203baea0be67eea59f7b37a761caa542abe80f5897ce3cf6311d"},
+    {file = "nbconvert-6.0.7.tar.gz", hash = "sha256:cbbc13a86dfbd4d1b5dee106539de0795b4db156c894c2c5dc382062bbc29002"},
+]
+nbformat = [
+    {file = "nbformat-5.1.2-py3-none-any.whl", hash = "sha256:3949fdc8f5fa0b1afca16fb307546e78494fa7a7bceff880df8168eafda0e7ac"},
+    {file = "nbformat-5.1.2.tar.gz", hash = "sha256:1d223e64a18bfa7cdf2db2e9ba8a818312fc2a0701d2e910b58df66809385a56"},
+]
+nest-asyncio = [
+    {file = "nest_asyncio-1.5.1-py3-none-any.whl", hash = "sha256:76d6e972265063fe92a90b9cc4fb82616e07d586b346ed9d2c89a4187acea39c"},
+    {file = "nest_asyncio-1.5.1.tar.gz", hash = "sha256:afc5a1c515210a23c461932765691ad39e8eba6551c055ac8d5546e69250d0aa"},
+]
+netstruct = [
+    {file = "netstruct-1.1.2.zip", hash = "sha256:70b6a5c73f5bbc7ab57b019369642adfb34dd8af41b948c400ce95f952b7df9a"},
+]
+notebook = [
+    {file = "notebook-6.3.0-py3-none-any.whl", hash = "sha256:cb271af1e8134e3d6fc6d458bdc79c40cbfc84c1eb036a493f216d58f0880e92"},
+    {file = "notebook-6.3.0.tar.gz", hash = "sha256:cbc9398d6c81473e9cdb891d2cae9c0d3718fca289dda6d26df5cb660fcadc7d"},
+]
+packaging = [
+    {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"},
+    {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"},
+]
+pandocfilters = [
+    {file = "pandocfilters-1.4.3.tar.gz", hash = "sha256:bc63fbb50534b4b1f8ebe1860889289e8af94a23bff7445259592df25a3906eb"},
+]
+parso = [
+    {file = "parso-0.8.1-py2.py3-none-any.whl", hash = "sha256:15b00182f472319383252c18d5913b69269590616c947747bc50bf4ac768f410"},
+    {file = "parso-0.8.1.tar.gz", hash = "sha256:8519430ad07087d4c997fda3a7918f7cfa27cb58972a8c89c2a0295a1c940e9e"},
+]
+pathspec = [
+    {file = "pathspec-0.8.1-py2.py3-none-any.whl", hash = "sha256:aa0cb481c4041bf52ffa7b0d8fa6cd3e88a2ca4879c533c9153882ee2556790d"},
+    {file = "pathspec-0.8.1.tar.gz", hash = "sha256:86379d6b86d75816baba717e64b1a3a3469deb93bb76d613c9ce79edc5cb68fd"},
+]
+pendulum = [
+    {file = "pendulum-2.1.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:b6c352f4bd32dff1ea7066bd31ad0f71f8d8100b9ff709fb343f3b86cee43efe"},
+    {file = "pendulum-2.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:318f72f62e8e23cd6660dbafe1e346950281a9aed144b5c596b2ddabc1d19739"},
+    {file = "pendulum-2.1.2-cp35-cp35m-macosx_10_15_x86_64.whl", hash = "sha256:0731f0c661a3cb779d398803655494893c9f581f6488048b3fb629c2342b5394"},
+    {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:3481fad1dc3f6f6738bd575a951d3c15d4b4ce7c82dce37cf8ac1483fde6e8b0"},
+    {file = "pendulum-2.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9702069c694306297ed362ce7e3c1ef8404ac8ede39f9b28b7c1a7ad8c3959e3"},
+    {file = "pendulum-2.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:fb53ffa0085002ddd43b6ca61a7b34f2d4d7c3ed66f931fe599e1a531b42af9b"},
+    {file = "pendulum-2.1.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:c501749fdd3d6f9e726086bf0cd4437281ed47e7bca132ddb522f86a1645d360"},
+    {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:c807a578a532eeb226150d5006f156632df2cc8c5693d778324b43ff8c515dd0"},
+    {file = "pendulum-2.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2d1619a721df661e506eff8db8614016f0720ac171fe80dda1333ee44e684087"},
+    {file = "pendulum-2.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f888f2d2909a414680a29ae74d0592758f2b9fcdee3549887779cd4055e975db"},
+    {file = "pendulum-2.1.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e95d329384717c7bf627bf27e204bc3b15c8238fa8d9d9781d93712776c14002"},
+    {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:4c9c689747f39d0d02a9f94fcee737b34a5773803a64a5fdb046ee9cac7442c5"},
+    {file = "pendulum-2.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:1245cd0075a3c6d889f581f6325dd8404aca5884dea7223a5566c38aab94642b"},
+    {file = "pendulum-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:db0a40d8bcd27b4fb46676e8eb3c732c67a5a5e6bfab8927028224fbced0b40b"},
+    {file = "pendulum-2.1.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f5e236e7730cab1644e1b87aca3d2ff3e375a608542e90fe25685dae46310116"},
+    {file = "pendulum-2.1.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:de42ea3e2943171a9e95141f2eecf972480636e8e484ccffaf1e833929e9e052"},
+    {file = "pendulum-2.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7c5ec650cb4bec4c63a89a0242cc8c3cebcec92fcfe937c417ba18277d8560be"},
+    {file = "pendulum-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:33fb61601083f3eb1d15edeb45274f73c63b3c44a8524703dc143f4212bf3269"},
+    {file = "pendulum-2.1.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:29c40a6f2942376185728c9a0347d7c0f07905638c83007e1d262781f1e6953a"},
+    {file = "pendulum-2.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:94b1fc947bfe38579b28e1cccb36f7e28a15e841f30384b5ad6c5e31055c85d7"},
+    {file = "pendulum-2.1.2.tar.gz", hash = "sha256:b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207"},
+]
+pexpect = [
+    {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"},
+    {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"},
+]
+pickleshare = [
+    {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"},
+    {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"},
+]
+ply = [
+    {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"},
+    {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"},
+]
+prometheus-client = [
+    {file = "prometheus_client-0.9.0-py2.py3-none-any.whl", hash = "sha256:b08c34c328e1bf5961f0b4352668e6c8f145b4a087e09b7296ef62cbe4693d35"},
+    {file = "prometheus_client-0.9.0.tar.gz", hash = "sha256:9da7b32f02439d8c04f7777021c304ed51d9ec180604700c1ba72a4d44dceb03"},
+]
+prompt-toolkit = [
+    {file = "prompt_toolkit-3.0.18-py3-none-any.whl", hash = "sha256:bf00f22079f5fadc949f42ae8ff7f05702826a97059ffcc6281036ad40ac6f04"},
+    {file = "prompt_toolkit-3.0.18.tar.gz", hash = "sha256:e1b4f11b9336a28fa11810bc623c357420f69dfdb6d2dac41ca2c21a55c033bc"},
+]
+ptyprocess = [
+    {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
+    {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
+]
+py = [
+    {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
+    {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
+]
+py-ecc = [
+    {file = "py_ecc-5.2.0-py3-none-any.whl", hash = "sha256:525b95aae5bbc185baff7dbfdb9bbd14d2c9454a797457f3edc85fd14c2ad7a6"},
+    {file = "py_ecc-5.2.0.tar.gz", hash = "sha256:f0aabdc82813ecb2e75e0531e3850295ff1a96bedfba42f15b5bc7f39ced64ba"},
+]
+pyblake2 = [
+    {file = "pyblake2-1.1.2-cp27-cp27m-win32.whl", hash = "sha256:3757f7ad709b0e1b2a6b3919fa79fe3261f166fc375cd521f2be480f8319dde9"},
+    {file = "pyblake2-1.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:8043267fbc0b2f3748c6920591cd0b8b5609dcce60c504c32858aa36206386f2"},
+    {file = "pyblake2-1.1.2-cp34-cp34m-win32.whl", hash = "sha256:4d47b4a2c1d292b1e460bde1dda4d13aa792ed2ed70fcc263b6bc24632c8e902"},
+    {file = "pyblake2-1.1.2-cp34-cp34m-win_amd64.whl", hash = "sha256:982295a87907d50f4723db6bc724660da76b6547826d52160171d54f95b919ac"},
+    {file = "pyblake2-1.1.2-cp35-cp35m-win32.whl", hash = "sha256:baa2190bfe549e36163aa44664d4ee3a9080b236fc5d42f50dc6fd36bbdc749e"},
+    {file = "pyblake2-1.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:407e02c7f8f36fcec1b7aa114ddca0c1060c598142ea6f6759d03710b946a7e3"},
+    {file = "pyblake2-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:fbc9fcde75713930bc2a91b149e97be2401f7c9c56d735b46a109210f58d7358"},
+    {file = "pyblake2-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:c53417ee0bbe77db852d5fd1036749f03696ebc2265de359fe17418d800196c4"},
+    {file = "pyblake2-1.1.2.tar.gz", hash = "sha256:5ccc7eb02edb82fafb8adbb90746af71460fbc29aa0f822526fc976dff83e93f"},
+]
+pycparser = [
+    {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"},
+    {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"},
+]
+pygments = [
+    {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"},
+    {file = "Pygments-2.8.1.tar.gz", hash = "sha256:2656e1a6edcdabf4275f9a3640db59fd5de107d88e8663c5d4e9a0fa62f77f94"},
+]
+pylint = [
+    {file = "pylint-2.7.2-py3-none-any.whl", hash = "sha256:d09b0b07ba06bcdff463958f53f23df25e740ecd81895f7d2699ec04bbd8dc3b"},
+    {file = "pylint-2.7.2.tar.gz", hash = "sha256:0e21d3b80b96740909d77206d741aa3ce0b06b41be375d92e1f3244a274c1f8a"},
+]
+pylint-exit = [
+    {file = "pylint-exit-1.2.0.zip", hash = "sha256:b6ad02884c01c5560a5275079fe5a6c792afff90ecccf0c02513e1547ee280b0"},
+    {file = "pylint_exit-1.2.0-py2.py3-none-any.whl", hash = "sha256:65c9e7856e9058705a92d7c45628d604b2a4b8ee2b3c18a7303be77f9ed87cbe"},
+]
+pyparsing = [
+    {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
+    {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+]
+pyrsistent = [
+    {file = "pyrsistent-0.17.3.tar.gz", hash = "sha256:2e636185d9eb976a18a8a8e96efce62f2905fea90041958d8cc2a189756ebf3e"},
+]
+pysha3 = [
+    {file = "pysha3-1.0.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:6e6a84efb7856f5d760ee55cd2b446972cb7b835676065f6c4f694913ea8f8d9"},
+    {file = "pysha3-1.0.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f9046d59b3e72aa84f6dae83a040bd1184ebd7fef4e822d38186a8158c89e3cf"},
+    {file = "pysha3-1.0.2-cp27-cp27m-win32.whl", hash = "sha256:9fdd28884c5d0b4edfed269b12badfa07f1c89dbc5c9c66dd279833894a9896b"},
+    {file = "pysha3-1.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:41be70b06c8775a9e4d4eeb52f2f6a3f356f17539a54eac61f43a29e42fd453d"},
+    {file = "pysha3-1.0.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:68c3a60a39f9179b263d29e221c1bd6e01353178b14323c39cc70593c30f21c5"},
+    {file = "pysha3-1.0.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:59111c08b8f34495575d12e5f2ce3bafb98bea470bc81e70c8b6df99aef0dd2f"},
+    {file = "pysha3-1.0.2-cp33-cp33m-win32.whl", hash = "sha256:571a246308a7b63f15f5aa9651f99cf30f2a6acba18eddf28f1510935968b603"},
+    {file = "pysha3-1.0.2-cp33-cp33m-win_amd64.whl", hash = "sha256:93abd775dac570cb9951c4e423bcb2bc6303a9d1dc0dc2b7afa2dd401d195b24"},
+    {file = "pysha3-1.0.2-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:11a2ba7a2e1d9669d0052fc8fb30f5661caed5512586ecbeeaf6bf9478ab5c48"},
+    {file = "pysha3-1.0.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:5ec8da7c5c70a53b5fa99094af3ba8d343955b212bc346a0d25f6ff75853999f"},
+    {file = "pysha3-1.0.2-cp34-cp34m-win32.whl", hash = "sha256:9c778fa8b161dc9348dc5cc361e94d54aa5ff18413788f4641f6600d4893a608"},
+    {file = "pysha3-1.0.2-cp34-cp34m-win_amd64.whl", hash = "sha256:fd7e66999060d079e9c0e8893e78d8017dad4f59721f6fe0be6307cd32127a07"},
+    {file = "pysha3-1.0.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:827b308dc025efe9b6b7bae36c2e09ed0118a81f792d888548188e97b9bf9a3d"},
+    {file = "pysha3-1.0.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:4416f16b0f1605c25f627966f76873e432971824778b369bd9ce1bb63d6566d9"},
+    {file = "pysha3-1.0.2-cp35-cp35m-win32.whl", hash = "sha256:c93a2676e6588abcfaecb73eb14485c81c63b94fca2000a811a7b4fb5937b8e8"},
+    {file = "pysha3-1.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:684cb01d87ed6ff466c135f1c83e7e4042d0fc668fa20619f581e6add1d38d77"},
+    {file = "pysha3-1.0.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:386998ee83e313b6911327174e088021f9f2061cbfa1651b97629b761e9ef5c4"},
+    {file = "pysha3-1.0.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:c7c2adcc43836223680ebdf91f1d3373543dc32747c182c8ca2e02d1b69ce030"},
+    {file = "pysha3-1.0.2-cp36-cp36m-win32.whl", hash = "sha256:cd5c961b603bd2e6c2b5ef9976f3238a561c58569945d4165efb9b9383b050ef"},
+    {file = "pysha3-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:0060a66be16665d90c432f55a0ba1f6480590cfb7d2ad389e688a399183474f0"},
+    {file = "pysha3-1.0.2.tar.gz", hash = "sha256:fe988e73f2ce6d947220624f04d467faf05f1bbdbc64b0a201296bb3af92739e"},
+]
+pysodium = [
+    {file = "pysodium-0.7.7.tar.gz", hash = "sha256:a3946c5c313d3e11c2651d46b1902b1d3a5d4e7d2017f36593620a2bbbc57eaa"},
+]
+pytezos = [
+    {file = "pytezos-3.0.4-py3-none-any.whl", hash = "sha256:51f4c90a22e4f9a3246c052f66a28691eb0014c4eb1c4b468a67db1f70b0b9e3"},
+]
+python-dateutil = [
+    {file = "python-dateutil-2.8.1.tar.gz", hash = "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c"},
+    {file = "python_dateutil-2.8.1-py2.py3-none-any.whl", hash = "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"},
+]
+pytzdata = [
+    {file = "pytzdata-2020.1-py2.py3-none-any.whl", hash = "sha256:e1e14750bcf95016381e4d472bad004eef710f2d6417240904070b3d6654485f"},
+    {file = "pytzdata-2020.1.tar.gz", hash = "sha256:3efa13b335a00a8de1d345ae41ec78dd11c9f8807f522d39850f2dd828681540"},
+]
+pywin32 = [
+    {file = "pywin32-227-cp27-cp27m-win32.whl", hash = "sha256:371fcc39416d736401f0274dd64c2302728c9e034808e37381b5e1b22be4a6b0"},
+    {file = "pywin32-227-cp27-cp27m-win_amd64.whl", hash = "sha256:4cdad3e84191194ea6d0dd1b1b9bdda574ff563177d2adf2b4efec2a244fa116"},
+    {file = "pywin32-227-cp35-cp35m-win32.whl", hash = "sha256:f4c5be1a293bae0076d93c88f37ee8da68136744588bc5e2be2f299a34ceb7aa"},
+    {file = "pywin32-227-cp35-cp35m-win_amd64.whl", hash = "sha256:a929a4af626e530383a579431b70e512e736e9588106715215bf685a3ea508d4"},
+    {file = "pywin32-227-cp36-cp36m-win32.whl", hash = "sha256:300a2db938e98c3e7e2093e4491439e62287d0d493fe07cce110db070b54c0be"},
+    {file = "pywin32-227-cp36-cp36m-win_amd64.whl", hash = "sha256:9b31e009564fb95db160f154e2aa195ed66bcc4c058ed72850d047141b36f3a2"},
+    {file = "pywin32-227-cp37-cp37m-win32.whl", hash = "sha256:47a3c7551376a865dd8d095a98deba954a98f326c6fe3c72d8726ca6e6b15507"},
+    {file = "pywin32-227-cp37-cp37m-win_amd64.whl", hash = "sha256:31f88a89139cb2adc40f8f0e65ee56a8c585f629974f9e07622ba80199057511"},
+    {file = "pywin32-227-cp38-cp38-win32.whl", hash = "sha256:7f18199fbf29ca99dff10e1f09451582ae9e372a892ff03a28528a24d55875bc"},
+    {file = "pywin32-227-cp38-cp38-win_amd64.whl", hash = "sha256:7c1ae32c489dc012930787f06244426f8356e129184a02c25aef163917ce158e"},
+    {file = "pywin32-227-cp39-cp39-win32.whl", hash = "sha256:c054c52ba46e7eb6b7d7dfae4dbd987a1bb48ee86debe3f245a2884ece46e295"},
+    {file = "pywin32-227-cp39-cp39-win_amd64.whl", hash = "sha256:f27cec5e7f588c3d1051651830ecc00294f90728d19c3bf6916e6dba93ea357c"},
+]
+pywinpty = [
+    {file = "pywinpty-0.5.7-cp27-cp27m-win32.whl", hash = "sha256:b358cb552c0f6baf790de375fab96524a0498c9df83489b8c23f7f08795e966b"},
+    {file = "pywinpty-0.5.7-cp27-cp27m-win_amd64.whl", hash = "sha256:1e525a4de05e72016a7af27836d512db67d06a015aeaf2fa0180f8e6a039b3c2"},
+    {file = "pywinpty-0.5.7-cp35-cp35m-win32.whl", hash = "sha256:2740eeeb59297593a0d3f762269b01d0285c1b829d6827445fcd348fb47f7e70"},
+    {file = "pywinpty-0.5.7-cp35-cp35m-win_amd64.whl", hash = "sha256:33df97f79843b2b8b8bc5c7aaf54adec08cc1bae94ee99dfb1a93c7a67704d95"},
+    {file = "pywinpty-0.5.7-cp36-cp36m-win32.whl", hash = "sha256:e854211df55d107f0edfda8a80b39dfc87015bef52a8fe6594eb379240d81df2"},
+    {file = "pywinpty-0.5.7-cp36-cp36m-win_amd64.whl", hash = "sha256:dbd838de92de1d4ebf0dce9d4d5e4fc38d0b7b1de837947a18b57a882f219139"},
+    {file = "pywinpty-0.5.7-cp37-cp37m-win32.whl", hash = "sha256:5fb2c6c6819491b216f78acc2c521b9df21e0f53b9a399d58a5c151a3c4e2a2d"},
+    {file = "pywinpty-0.5.7-cp37-cp37m-win_amd64.whl", hash = "sha256:dd22c8efacf600730abe4a46c1388355ce0d4ab75dc79b15d23a7bd87bf05b48"},
+    {file = "pywinpty-0.5.7-cp38-cp38-win_amd64.whl", hash = "sha256:8fc5019ff3efb4f13708bd3b5ad327589c1a554cb516d792527361525a7cb78c"},
+    {file = "pywinpty-0.5.7.tar.gz", hash = "sha256:2d7e9c881638a72ffdca3f5417dd1563b60f603e1b43e5895674c2a1b01f95a0"},
+]
+pyyaml = [
+    {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
+    {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
+    {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
+    {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
+    {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
+    {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
+    {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
+    {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
+    {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
+    {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
+    {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
+    {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
+    {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
+    {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
+    {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
+    {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
+    {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
+    {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
+    {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
+]
+pyzmq = [
+    {file = "pyzmq-22.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c0cde362075ee8f3d2b0353b283e203c2200243b5a15d5c5c03b78112a17e7d4"},
+    {file = "pyzmq-22.0.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:ff1ea14075bbddd6f29bf6beb8a46d0db779bcec6b9820909584081ec119f8fd"},
+    {file = "pyzmq-22.0.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:26380487eae4034d6c2a3fb8d0f2dff6dd0d9dd711894e8d25aa2d1938950a33"},
+    {file = "pyzmq-22.0.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:3e29f9cf85a40d521d048b55c63f59d6c772ac1c4bf51cdfc23b62a62e377c33"},
+    {file = "pyzmq-22.0.3-cp36-cp36m-win32.whl", hash = "sha256:4f34a173f813b38b83f058e267e30465ed64b22cd0cf6bad21148d3fa718f9bb"},
+    {file = "pyzmq-22.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:30df70f81fe210506aa354d7fd486a39b87d9f7f24c3d3f4f698ec5d96b8c084"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7026f0353977431fc884abd4ac28268894bd1a780ba84bb266d470b0ec26d2ed"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6d4163704201fff0f3ab0cd5d7a0ea1514ecfffd3926d62ec7e740a04d2012c7"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:763c175294d861869f18eb42901d500eda7d3fa4565f160b3b2fd2678ea0ebab"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:61e4bb6cd60caf1abcd796c3f48395e22c5b486eeca6f3a8797975c57d94b03e"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-win32.whl", hash = "sha256:b25e5d339550a850f7e919fe8cb4c8eabe4c917613db48dab3df19bfb9a28969"},
+    {file = "pyzmq-22.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:3ef50d74469b03725d781a2a03c57537d86847ccde587130fe35caafea8f75c6"},
+    {file = "pyzmq-22.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:60e63577b85055e4cc43892fecd877b86695ee3ef12d5d10a3c5d6e77a7cc1a3"},
+    {file = "pyzmq-22.0.3-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:f5831eff6b125992ec65d973f5151c48003b6754030094723ac4c6e80a97c8c4"},
+    {file = "pyzmq-22.0.3-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:9221783dacb419604d5345d0e097bddef4459a9a95322de6c306bf1d9896559f"},
+    {file = "pyzmq-22.0.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:b62ea18c0458a65ccd5be90f276f7a5a3f26a6dea0066d948ce2fa896051420f"},
+    {file = "pyzmq-22.0.3-cp38-cp38-win32.whl", hash = "sha256:81e7df0da456206201e226491aa1fc449da85328bf33bbeec2c03bb3a9f18324"},
+    {file = "pyzmq-22.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:f52070871a0fd90a99130babf21f8af192304ec1e995bec2a9533efc21ea4452"},
+    {file = "pyzmq-22.0.3-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:c5e29fe4678f97ce429f076a2a049a3d0b2660ada8f2c621e5dc9939426056dd"},
+    {file = "pyzmq-22.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d18ddc6741b51f3985978f2fda57ddcdae359662d7a6b395bc8ff2292fca14bd"},
+    {file = "pyzmq-22.0.3-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4231943514812dfb74f44eadcf85e8dd8cf302b4d0bce450ce1357cac88dbfdc"},
+    {file = "pyzmq-22.0.3-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:23a74de4b43c05c3044aeba0d1f3970def8f916151a712a3ac1e5cd9c0bc2902"},
+    {file = "pyzmq-22.0.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:532af3e6dddea62d9c49062ece5add998c9823c2419da943cf95589f56737de0"},
+    {file = "pyzmq-22.0.3-cp39-cp39-win32.whl", hash = "sha256:33acd2b9790818b9d00526135acf12790649d8d34b2b04d64558b469c9d86820"},
+    {file = "pyzmq-22.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:a558c5bc89d56d7253187dccc4e81b5bb0eac5ae9511eb4951910a1245d04622"},
+    {file = "pyzmq-22.0.3-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:581787c62eaa0e0db6c5413cedc393ebbadac6ddfd22e1cf9a60da23c4f1a4b2"},
+    {file = "pyzmq-22.0.3-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:38e3dca75d81bec4f2defa14b0a65b74545812bb519a8e89c8df96bbf4639356"},
+    {file = "pyzmq-22.0.3-pp36-pypy36_pp73-win32.whl", hash = "sha256:2f971431aaebe0a8b54ac018e041c2f0b949a43745444e4dadcc80d0f0ef8457"},
+    {file = "pyzmq-22.0.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da7d4d4c778c86b60949d17531e60c54ed3726878de8a7f8a6d6e7f8cc8c3205"},
+    {file = "pyzmq-22.0.3-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:13465c1ff969cab328bc92f7015ce3843f6e35f8871ad79d236e4fbc85dbe4cb"},
+    {file = "pyzmq-22.0.3-pp37-pypy37_pp73-win32.whl", hash = "sha256:279cc9b51db48bec2db146f38e336049ac5a59e5f12fb3a8ad864e238c1c62e3"},
+    {file = "pyzmq-22.0.3.tar.gz", hash = "sha256:f7f63ce127980d40f3e6a5fdb87abf17ce1a7c2bd8bf2c7560e1bbce8ab1f92d"},
+]
+regex = [
+    {file = "regex-2021.3.17-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b97ec5d299c10d96617cc851b2e0f81ba5d9d6248413cd374ef7f3a8871ee4a6"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:cb4ee827857a5ad9b8ae34d3c8cc51151cb4a3fe082c12ec20ec73e63cc7c6f0"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:633497504e2a485a70a3268d4fc403fe3063a50a50eed1039083e9471ad0101c"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:a59a2ee329b3de764b21495d78c92ab00b4ea79acef0f7ae8c1067f773570afa"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:f85d6f41e34f6a2d1607e312820971872944f1661a73d33e1e82d35ea3305e14"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4651f839dbde0816798e698626af6a2469eee6d9964824bb5386091255a1694f"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:39c44532d0e4f1639a89e52355b949573e1e2c5116106a395642cbbae0ff9bcd"},
+    {file = "regex-2021.3.17-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:3d9a7e215e02bd7646a91fb8bcba30bc55fd42a719d6b35cf80e5bae31d9134e"},
+    {file = "regex-2021.3.17-cp36-cp36m-win32.whl", hash = "sha256:159fac1a4731409c830d32913f13f68346d6b8e39650ed5d704a9ce2f9ef9cb3"},
+    {file = "regex-2021.3.17-cp36-cp36m-win_amd64.whl", hash = "sha256:13f50969028e81765ed2a1c5fcfdc246c245cf8d47986d5172e82ab1a0c42ee5"},
+    {file = "regex-2021.3.17-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9d8d286c53fe0cbc6d20bf3d583cabcd1499d89034524e3b94c93a5ab85ca90"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:201e2619a77b21a7780580ab7b5ce43835e242d3e20fef50f66a8df0542e437f"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d47d359545b0ccad29d572ecd52c9da945de7cd6cf9c0cfcb0269f76d3555689"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:ea2f41445852c660ba7c3ebf7d70b3779b20d9ca8ba54485a17740db49f46932"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:486a5f8e11e1f5bbfcad87f7c7745eb14796642323e7e1829a331f87a713daaa"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:18e25e0afe1cf0f62781a150c1454b2113785401ba285c745acf10c8ca8917df"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:a2ee026f4156789df8644d23ef423e6194fad0bc53575534101bb1de5d67e8ce"},
+    {file = "regex-2021.3.17-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:4c0788010a93ace8a174d73e7c6c9d3e6e3b7ad99a453c8ee8c975ddd9965643"},
+    {file = "regex-2021.3.17-cp37-cp37m-win32.whl", hash = "sha256:575a832e09d237ae5fedb825a7a5bc6a116090dd57d6417d4f3b75121c73e3be"},
+    {file = "regex-2021.3.17-cp37-cp37m-win_amd64.whl", hash = "sha256:8e65e3e4c6feadf6770e2ad89ad3deb524bcb03d8dc679f381d0568c024e0deb"},
+    {file = "regex-2021.3.17-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a0df9a0ad2aad49ea3c7f65edd2ffb3d5c59589b85992a6006354f6fb109bb18"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b98bc9db003f1079caf07b610377ed1ac2e2c11acc2bea4892e28cc5b509d8d5"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:808404898e9a765e4058bf3d7607d0629000e0a14a6782ccbb089296b76fa8fe"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:5770a51180d85ea468234bc7987f5597803a4c3d7463e7323322fe4a1b181578"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:976a54d44fd043d958a69b18705a910a8376196c6b6ee5f2596ffc11bff4420d"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:63f3ca8451e5ff7133ffbec9eda641aeab2001be1a01878990f6c87e3c44b9d5"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bcd945175c29a672f13fce13a11893556cd440e37c1b643d6eeab1988c8b209c"},
+    {file = "regex-2021.3.17-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:3d9356add82cff75413bec360c1eca3e58db4a9f5dafa1f19650958a81e3249d"},
+    {file = "regex-2021.3.17-cp38-cp38-win32.whl", hash = "sha256:f5d0c921c99297354cecc5a416ee4280bd3f20fd81b9fb671ca6be71499c3fdf"},
+    {file = "regex-2021.3.17-cp38-cp38-win_amd64.whl", hash = "sha256:14de88eda0976020528efc92d0a1f8830e2fb0de2ae6005a6fc4e062553031fa"},
+    {file = "regex-2021.3.17-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4c2e364491406b7888c2ad4428245fc56c327e34a5dfe58fd40df272b3c3dab3"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux1_i686.whl", hash = "sha256:8bd4f91f3fb1c9b1380d6894bd5b4a519409135bec14c0c80151e58394a4e88a"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:882f53afe31ef0425b405a3f601c0009b44206ea7f55ee1c606aad3cc213a52c"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:07ef35301b4484bce843831e7039a84e19d8d33b3f8b2f9aab86c376813d0139"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:360a01b5fa2ad35b3113ae0c07fb544ad180603fa3b1f074f52d98c1096fa15e"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:709f65bb2fa9825f09892617d01246002097f8f9b6dde8d1bb4083cf554701ba"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:c66221e947d7207457f8b6f42b12f613b09efa9669f65a587a2a71f6a0e4d106"},
+    {file = "regex-2021.3.17-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:c782da0e45aff131f0bed6e66fbcfa589ff2862fc719b83a88640daa01a5aff7"},
+    {file = "regex-2021.3.17-cp39-cp39-win32.whl", hash = "sha256:dc9963aacb7da5177e40874585d7407c0f93fb9d7518ec58b86e562f633f36cd"},
+    {file = "regex-2021.3.17-cp39-cp39-win_amd64.whl", hash = "sha256:a0d04128e005142260de3733591ddf476e4902c0c23c1af237d9acf3c96e1b38"},
+    {file = "regex-2021.3.17.tar.gz", hash = "sha256:4b8a1fb724904139149a43e172850f35aa6ea97fb0545244dc0b805e0154ed68"},
+]
+requests = [
+    {file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
+    {file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
+]
+secp256k1 = [
+    {file = "secp256k1-0.13.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:a755c85947b70c69cf318412bfd12889863e70ddf76b588701835a4da5322d55"},
+    {file = "secp256k1-0.13.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a598f2223ed3bf55bb7e317c5ebd1a316b3b4d65db26de32554bb84adf026eae"},
+    {file = "secp256k1-0.13.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:2ad20bb8553425be795ecaf6641a510470701fa6a7aa9c54395d3989c070ab4c"},
+    {file = "secp256k1-0.13.2-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:e9842fdc3b24c3174f49794d93b10b2013aa7b5d7029d12989458482c95ee56a"},
+    {file = "secp256k1-0.13.2-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:5cded8e5d241dd92f6e55fd7462ff74e4edcbe97850b7bf4378cc56e48e446d7"},
+    {file = "secp256k1-0.13.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:e86eab58d0c2e93c08483c8a8546fe54ade8150ff4a1f320417d647635cb133b"},
+    {file = "secp256k1-0.13.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:29521dda0f3ad51afc26141d9a564b40bb39e84d27046164c502774b22ea2f9c"},
+    {file = "secp256k1-0.13.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:df29091e6ac74bb0683a44d57411bd59c6c99d04d79ef4e396e4a67d91f6bd65"},
+    {file = "secp256k1-0.13.2.tar.gz", hash = "sha256:a3b43e02d321c09eafa769a6fc2c156f555cab3a7db62175ef2fd21e16cdf20c"},
+]
+send2trash = [
+    {file = "Send2Trash-1.5.0-py3-none-any.whl", hash = "sha256:f1691922577b6fa12821234aeb57599d887c4900b9ca537948d2dac34aea888b"},
+    {file = "Send2Trash-1.5.0.tar.gz", hash = "sha256:60001cc07d707fe247c94f74ca6ac0d3255aabcb930529690897ca2a39db28b2"},
+]
+simplejson = [
+    {file = "simplejson-3.17.2-cp27-cp27m-macosx_10_13_x86_64.whl", hash = "sha256:2d3eab2c3fe52007d703a26f71cf649a8c771fcdd949a3ae73041ba6797cfcf8"},
+    {file = "simplejson-3.17.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:813846738277729d7db71b82176204abc7fdae2f566e2d9fcf874f9b6472e3e6"},
+    {file = "simplejson-3.17.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:292c2e3f53be314cc59853bd20a35bf1f965f3bc121e007ab6fd526ed412a85d"},
+    {file = "simplejson-3.17.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0dd9d9c738cb008bfc0862c9b8fa6743495c03a0ed543884bf92fb7d30f8d043"},
+    {file = "simplejson-3.17.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:42b8b8dd0799f78e067e2aaae97e60d58a8f63582939af60abce4c48631a0aa4"},
+    {file = "simplejson-3.17.2-cp27-cp27m-win32.whl", hash = "sha256:8042040af86a494a23c189b5aa0ea9433769cc029707833f261a79c98e3375f9"},
+    {file = "simplejson-3.17.2-cp27-cp27m-win_amd64.whl", hash = "sha256:034550078a11664d77bc1a8364c90bb7eef0e44c2dbb1fd0a4d92e3997088667"},
+    {file = "simplejson-3.17.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:fed0f22bf1313ff79c7fc318f7199d6c2f96d4de3234b2f12a1eab350e597c06"},
+    {file = "simplejson-3.17.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:2e7b57c2c146f8e4dadf84977a83f7ee50da17c8861fd7faf694d55e3274784f"},
+    {file = "simplejson-3.17.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:da3c55cdc66cfc3fffb607db49a42448785ea2732f055ac1549b69dcb392663b"},
+    {file = "simplejson-3.17.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:c1cb29b1fced01f97e6d5631c3edc2dadb424d1f4421dad079cb13fc97acb42f"},
+    {file = "simplejson-3.17.2-cp33-cp33m-win32.whl", hash = "sha256:8f713ea65958ef40049b6c45c40c206ab363db9591ff5a49d89b448933fa5746"},
+    {file = "simplejson-3.17.2-cp33-cp33m-win_amd64.whl", hash = "sha256:344e2d920a7f27b4023c087ab539877a1e39ce8e3e90b867e0bfa97829824748"},
+    {file = "simplejson-3.17.2-cp34-cp34m-win32.whl", hash = "sha256:05b43d568300c1cd43f95ff4bfcff984bc658aa001be91efb3bb21df9d6288d3"},
+    {file = "simplejson-3.17.2-cp34-cp34m-win_amd64.whl", hash = "sha256:cff6453e25204d3369c47b97dd34783ca820611bd334779d22192da23784194b"},
+    {file = "simplejson-3.17.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8acf76443cfb5c949b6e781c154278c059b09ac717d2757a830c869ba000cf8d"},
+    {file = "simplejson-3.17.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:869a183c8e44bc03be1b2bbcc9ec4338e37fa8557fc506bf6115887c1d3bb956"},
+    {file = "simplejson-3.17.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:5c659a0efc80aaaba57fcd878855c8534ecb655a28ac8508885c50648e6e659d"},
+    {file = "simplejson-3.17.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:72d8a3ffca19a901002d6b068cf746be85747571c6a7ba12cbcf427bfb4ed971"},
+    {file = "simplejson-3.17.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:4b3442249d5e3893b90cb9f72c7d6ce4d2ea144d2c0d9f75b9ae1e5460f3121a"},
+    {file = "simplejson-3.17.2-cp35-cp35m-win32.whl", hash = "sha256:e058c7656c44fb494a11443191e381355388443d543f6fc1a245d5d238544396"},
+    {file = "simplejson-3.17.2-cp35-cp35m-win_amd64.whl", hash = "sha256:934115642c8ba9659b402c8bdbdedb48651fb94b576e3b3efd1ccb079609b04a"},
+    {file = "simplejson-3.17.2-cp36-cp36m-macosx_10_13_x86_64.whl", hash = "sha256:ffd4e4877a78c84d693e491b223385e0271278f5f4e1476a4962dca6824ecfeb"},
+    {file = "simplejson-3.17.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:10fc250c3edea4abc15d930d77274ddb8df4803453dde7ad50c2f5565a18a4bb"},
+    {file = "simplejson-3.17.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:76ac9605bf2f6d9b56abf6f9da9047a8782574ad3531c82eae774947ae99cc3f"},
+    {file = "simplejson-3.17.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:7f10f8ba9c1b1430addc7dd385fc322e221559d3ae49b812aebf57470ce8de45"},
+    {file = "simplejson-3.17.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bc00d1210567a4cdd215ac6e17dc00cb9893ee521cee701adfd0fa43f7c73139"},
+    {file = "simplejson-3.17.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:af4868da7dd53296cd7630687161d53a7ebe2e63814234631445697bd7c29f46"},
+    {file = "simplejson-3.17.2-cp36-cp36m-win32.whl", hash = "sha256:7d276f69bfc8c7ba6c717ba8deaf28f9d3c8450ff0aa8713f5a3280e232be16b"},
+    {file = "simplejson-3.17.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a55c76254d7cf8d4494bc508e7abb993a82a192d0db4552421e5139235604625"},
+    {file = "simplejson-3.17.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:9a2b7543559f8a1c9ed72724b549d8cc3515da7daf3e79813a15bdc4a769de25"},
+    {file = "simplejson-3.17.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:311f5dc2af07361725033b13cc3d0351de3da8bede3397d45650784c3f21fbcf"},
+    {file = "simplejson-3.17.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:2862beabfb9097a745a961426fe7daf66e1714151da8bb9a0c430dde3d59c7c0"},
+    {file = "simplejson-3.17.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:afebfc3dd3520d37056f641969ce320b071bc7a0800639c71877b90d053e087f"},
+    {file = "simplejson-3.17.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d4813b30cb62d3b63ccc60dd12f2121780c7a3068db692daeb90f989877aaf04"},
+    {file = "simplejson-3.17.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fabde09af43e0cbdee407555383063f8b45bfb52c361bc5da83fcffdb4fd278"},
+    {file = "simplejson-3.17.2-cp37-cp37m-win32.whl", hash = "sha256:ceaa28a5bce8a46a130cd223e895080e258a88d51bf6e8de2fc54a6ef7e38c34"},
+    {file = "simplejson-3.17.2-cp37-cp37m-win_amd64.whl", hash = "sha256:9551f23e09300a9a528f7af20e35c9f79686d46d646152a0c8fc41d2d074d9b0"},
+    {file = "simplejson-3.17.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c94dc64b1a389a416fc4218cd4799aa3756f25940cae33530a4f7f2f54f166da"},
+    {file = "simplejson-3.17.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b59aa298137ca74a744c1e6e22cfc0bf9dca3a2f41f51bc92eb05695155d905a"},
+    {file = "simplejson-3.17.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ad8f41c2357b73bc9e8606d2fa226233bf4d55d85a8982ecdfd55823a6959995"},
+    {file = "simplejson-3.17.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:845a14f6deb124a3bcb98a62def067a67462a000e0508f256f9c18eff5847efc"},
+    {file = "simplejson-3.17.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d0b64409df09edb4c365d95004775c988259efe9be39697d7315c42b7a5e7e94"},
+    {file = "simplejson-3.17.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:55d65f9cc1b733d85ef95ab11f559cce55c7649a2160da2ac7a078534da676c8"},
+    {file = "simplejson-3.17.2.tar.gz", hash = "sha256:75ecc79f26d99222a084fbdd1ce5aad3ac3a8bd535cd9059528452da38b68841"},
+]
+six = [
+    {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
+    {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
+]
+strict-rfc3339 = [
+    {file = "strict-rfc3339-0.7.tar.gz", hash = "sha256:5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277"},
+]
+tabulate = [
+    {file = "tabulate-0.7.7-py2.py3-none-any.whl", hash = "sha256:1f07f6252b20cdc4ed744b598b5fa8362638988b50a62f3e2ad76c97fc02eef2"},
+    {file = "tabulate-0.7.7.tar.gz", hash = "sha256:83a0b8e17c09f012090a50e1e97ae897300a72b35e0c86c0b53d3bd2ae86d8c6"},
+]
+terminado = [
+    {file = "terminado-0.9.3-py3-none-any.whl", hash = "sha256:430e876ec9d4d93a4fd8a49e82dcfae0c25f846540d0c5ca774b397533e237e8"},
+    {file = "terminado-0.9.3.tar.gz", hash = "sha256:261c0b7825fecf629666e1820b484a5380f7e54d6b8bd889fa482e99dcf9bde4"},
+]
+testcontainers = [
+    {file = "testcontainers-3.3.0-py2.py3-none-any.whl", hash = "sha256:aaf1db92e21da51332d4128a17d092fbd868ea749b9e575783015136d6b3fa7d"},
+]
+testpath = [
+    {file = "testpath-0.4.4-py2.py3-none-any.whl", hash = "sha256:bfcf9411ef4bf3db7579063e0546938b1edda3d69f4e1fb8756991f5951f85d4"},
+    {file = "testpath-0.4.4.tar.gz", hash = "sha256:60e0a3261c149755f4399a1fff7d37523179a70fdc3abdf78de9fc2604aeec7e"},
+]
+toml = [
+    {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
+    {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
+]
+toolz = [
+    {file = "toolz-0.11.1-py3-none-any.whl", hash = "sha256:1bc473acbf1a1db4e72a1ce587be347450e8f08324908b8a266b486f408f04d5"},
+    {file = "toolz-0.11.1.tar.gz", hash = "sha256:c7a47921f07822fe534fb1c01c9931ab335a4390c782bd28c6bcc7c2f71f3fbf"},
+]
+tornado = [
+    {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"},
+    {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"},
+    {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"},
+    {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"},
+    {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"},
+    {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"},
+    {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"},
+    {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"},
+    {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"},
+    {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"},
+    {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"},
+    {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"},
+    {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"},
+    {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"},
+    {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"},
+    {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"},
+    {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"},
+    {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"},
+    {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"},
+    {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"},
+    {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"},
+    {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"},
+    {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"},
+    {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"},
+    {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"},
+    {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"},
+    {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"},
+    {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"},
+    {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"},
+    {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"},
+    {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"},
+    {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"},
+    {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"},
+    {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"},
+    {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"},
+    {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"},
+    {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"},
+    {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"},
+    {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"},
+    {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"},
+    {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"},
+]
+tqdm = [
+    {file = "tqdm-4.59.0-py2.py3-none-any.whl", hash = "sha256:9fdf349068d047d4cfbe24862c425883af1db29bcddf4b0eeb2524f6fbdb23c7"},
+    {file = "tqdm-4.59.0.tar.gz", hash = "sha256:d666ae29164da3e517fcf125e41d4fe96e5bb375cd87ff9763f6b38b5592fe33"},
+]
+traitlets = [
+    {file = "traitlets-5.0.5-py3-none-any.whl", hash = "sha256:69ff3f9d5351f31a7ad80443c2674b7099df13cc41fc5fa6e2f6d3b0330b0426"},
+    {file = "traitlets-5.0.5.tar.gz", hash = "sha256:178f4ce988f69189f7e523337a3e11d91c786ded9360174a3d9ca83e79bc5396"},
+]
+typed-ast = [
+    {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70"},
+    {file = "typed_ast-1.4.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487"},
+    {file = "typed_ast-1.4.2-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412"},
+    {file = "typed_ast-1.4.2-cp35-cp35m-win32.whl", hash = "sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400"},
+    {file = "typed_ast-1.4.2-cp35-cp35m-win_amd64.whl", hash = "sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-win32.whl", hash = "sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151"},
+    {file = "typed_ast-1.4.2-cp36-cp36m-win_amd64.whl", hash = "sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-win32.whl", hash = "sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd"},
+    {file = "typed_ast-1.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496"},
+    {file = "typed_ast-1.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc"},
+    {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10"},
+    {file = "typed_ast-1.4.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea"},
+    {file = "typed_ast-1.4.2-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787"},
+    {file = "typed_ast-1.4.2-cp38-cp38-win32.whl", hash = "sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2"},
+    {file = "typed_ast-1.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937"},
+    {file = "typed_ast-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1"},
+    {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6"},
+    {file = "typed_ast-1.4.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166"},
+    {file = "typed_ast-1.4.2-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d"},
+    {file = "typed_ast-1.4.2-cp39-cp39-win32.whl", hash = "sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b"},
+    {file = "typed_ast-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440"},
+    {file = "typed_ast-1.4.2.tar.gz", hash = "sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a"},
+]
+typing-extensions = [
+    {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"},
+    {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
+    {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"},
+]
+urllib3 = [
+    {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"},
+    {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"},
+]
+wcwidth = [
+    {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
+    {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+]
+webencodings = [
+    {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+    {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+websocket-client = [
+    {file = "websocket_client-0.58.0-py2.py3-none-any.whl", hash = "sha256:44b5df8f08c74c3d82d28100fdc81f4536809ce98a17f0757557813275fbb663"},
+    {file = "websocket_client-0.58.0.tar.gz", hash = "sha256:63509b41d158ae5b7f67eb4ad20fecbb4eee99434e73e140354dc3ff8e09716f"},
+]
+win32-setctime = [
+    {file = "win32_setctime-1.0.3-py3-none-any.whl", hash = "sha256:dc925662de0a6eb987f0b01f599c01a8236cb8c62831c22d9cada09ad958243e"},
+    {file = "win32_setctime-1.0.3.tar.gz", hash = "sha256:4e88556c32fdf47f64165a2180ba4552f8bb32c1103a2fafd05723a0bd42bd4b"},
+]
+wrapt = [
+    {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"},
+]
+zipp = [
+    {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"},
+    {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"},
+]
diff --git a/post-install.py b/post-install.py
new file mode 100644
index 0000000..79d28c8
--- /dev/null
+++ b/post-install.py
@@ -0,0 +1,27 @@
+import json
+import os
+import shutil
+import sys
+from os.path import join, dirname
+
+from jupyter_client.kernelspec import KernelSpecManager
+from tempfile import TemporaryDirectory
+
+kernel_json = {
+    "argv": [sys.executable, "-m", "michelson_kernel", "-f", "{connection_file}"],
+    "display_name": "Michelson",
+    "language": "michelson",
+    "codemirror_mode": "michelson"
+}
+kernel_js_path = join(dirname(__file__), 'src', 'michelson_kernel', 'kernel.js')
+
+kernel_spec = KernelSpecManager()
+
+with TemporaryDirectory() as td:
+    # NOTE: Starts off as 700, not user readable
+    os.chmod(td, 0o755)
+    shutil.copy(kernel_js_path, join(td, 'kernel.js'))
+    with open(os.path.join(td, 'kernel.json'), 'w') as f:
+        json.dump(kernel_json, f, sort_keys=True)
+
+    kernel_spec.install_kernel_spec(td, 'michelson', prefix=sys.prefix)
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..53df525
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,36 @@
+[tool]
+[tool.poetry]
+name = "michelson-kernel"
+version = "0.1.6"
+description = "Jupyter kernel for the Michelson language"
+license = "MIT"
+keywords = ["Tezos", "Michelson", "Jupyter"]
+classifiers = [
+    "Intended Audience :: Developers",
+    "Topic :: System :: Shells",
+    "Framework :: IPython",
+    "License :: OSI Approved :: MIT License",
+    "Programming Language :: Python :: 3"
+]
+homepage = "https://github.com/baking-bad/michelson-kernel"
+authors = ["Michael Zaikin (Baking Bad) "]
+readme = "README.md"
+packages = [
+    { include = "michelson_kernel", from = "src" },
+]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+tabulate = "^0.7.5"
+ipykernel = "^5.5.0"
+jupyter-client = "^6.1.12"
+pytezos = {path = "pytezos-3.0.4-py3-none-any.whl"}
+attrs = "^20.3.0"
+notebook = "^6.3.0"
+
+[tool.poetry.dev-dependencies]
+isort = "^5.8.0"
+black = "^20.8b1"
+mypy = "^0.812"
+pylint = "^2.7.2"
+pylint-exit = "^1.2.0"
diff --git a/pytezos-3.0.4-py3-none-any.whl b/pytezos-3.0.4-py3-none-any.whl
index df08945a1ec6fe6419d8a063265c18f99048000b..ab6ff74a98de488d8f3ece9fa561b8c073ec0538 100644
GIT binary patch
delta 26919
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tOkLIG
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%0AWg=`
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
GVEzxRstYv$

delta 26542
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

diff --git a/setup.py b/setup.py
deleted file mode 100644
index a233ea8..0000000
--- a/setup.py
+++ /dev/null
@@ -1,75 +0,0 @@
-from setuptools import setup
-from setuptools.command.install import install
-from os.path import join, dirname
-import shutil
-import json
-import os
-import sys
-
-from michelson_kernel import __version__
-
-kernel_json = {
-    "argv": [sys.executable, "-m", "michelson_kernel", "-f", "{connection_file}"],
-    "display_name": "Michelson",
-    "language": "michelson",
-    "codemirror_mode": "michelson"
-}
-kernel_js_path = join(dirname(__file__), 'michelson_kernel', 'kernel.js')
-
-
-class install_with_kernelspec(install):
-    def run(self):
-        install.run(self)
-
-        from jupyter_client.kernelspec import KernelSpecManager
-        from tempfile import TemporaryDirectory
-        kernel_spec = KernelSpecManager()
-        with TemporaryDirectory() as td:
-            os.chmod(td, 0o755)  # Starts off as 700, not user readable
-            shutil.copy(kernel_js_path, join(td, 'kernel.js'))
-            with open(os.path.join(td, 'kernel.json'), 'w') as f:
-                json.dump(kernel_json, f, sort_keys=True)
-
-            kernel_spec.install_kernel_spec(td, 'michelson', user=self.user, prefix=sys.prefix)
-
-
-with open('README.md') as f:
-    readme = f.read()
-
-svem_flag = '--single-version-externally-managed'
-if svem_flag in sys.argv:
-    # Die, setuptools, die.
-    sys.argv.remove(svem_flag)
-
-
-setup(name='michelson-kernel',
-      version=__version__,
-      license='MIT',
-      description='Jupyter kernel for the Michelson language',
-      long_description=readme,
-      long_description_content_type='text/markdown',
-      author='Michael Zaikin (Baking Bad)',
-      author_email='mz@baking-bad.org',
-      url='https://github.com/baking-bad/michelson-kernel',
-      packages=['michelson_kernel'],
-      cmdclass={'install': install_with_kernelspec},
-      keywords=['Tezos', 'Michelson', 'Jupyter'],
-      package_data={
-          'michelson_kernel': ['kernel.js'],
-          '': ['README.md']
-      },
-
-      install_requires=[
-          # FIXME: wheel installed in `make install`
-          # './pytezos-3.0.4-py3-none-any.whl',
-          'tabulate>=0.7.5',
-          'jupyter-client',
-          'ipykernel'
-      ],
-      classifiers=[
-          'Intended Audience :: Developers',
-          'Topic :: System :: Shells',
-          'Framework :: IPython',
-          'License :: OSI Approved :: MIT License',
-          'Programming Language :: Python :: 3'
-      ])
diff --git a/michelson_kernel/__init__.py b/src/michelson_kernel/__init__.py
similarity index 100%
rename from michelson_kernel/__init__.py
rename to src/michelson_kernel/__init__.py
diff --git a/michelson_kernel/__main__.py b/src/michelson_kernel/__main__.py
similarity index 64%
rename from michelson_kernel/__main__.py
rename to src/michelson_kernel/__main__.py
index 0246653..816b2fc 100644
--- a/michelson_kernel/__main__.py
+++ b/src/michelson_kernel/__main__.py
@@ -1,4 +1,5 @@
-from ipykernel.kernelapp import IPKernelApp
+from ipykernel.kernelapp import IPKernelApp  # type: ignore
+
 from michelson_kernel.kernel import MichelsonKernel
 
 IPKernelApp.launch_instance(kernel_class=MichelsonKernel)
diff --git a/michelson_kernel/docs.py b/src/michelson_kernel/docs.py
similarity index 100%
rename from michelson_kernel/docs.py
rename to src/michelson_kernel/docs.py
diff --git a/michelson_kernel/kernel.js b/src/michelson_kernel/kernel.js
similarity index 100%
rename from michelson_kernel/kernel.js
rename to src/michelson_kernel/kernel.js
diff --git a/michelson_kernel/kernel.py b/src/michelson_kernel/kernel.py
similarity index 97%
rename from michelson_kernel/kernel.py
rename to src/michelson_kernel/kernel.py
index e9d5a78..fba4057 100644
--- a/michelson_kernel/kernel.py
+++ b/src/michelson_kernel/kernel.py
@@ -1,12 +1,13 @@
-from collections import Iterable
 from traceback import format_exception
 from typing import Any, Dict, List, Optional, Tuple, cast
 
 from ipykernel.kernelbase import Kernel  # type: ignore
 from pytezos import MichelsonType, micheline_to_michelson
-from pytezos.michelson.instructions import BigMapDiffInstruction, CommitInstruction
+from pytezos.michelson.instructions import (BigMapDiffInstruction,
+                                            CommitInstruction)
 from pytezos.michelson.instructions.base import MichelsonInstruction
-from pytezos.michelson.micheline import MichelineSequence, MichelsonRuntimeError
+from pytezos.michelson.micheline import (MichelineSequence,
+                                         MichelsonRuntimeError)
 from pytezos.michelson.parse import MichelsonParserError
 from pytezos.michelson.repl import Interpreter
 from pytezos.michelson.stack import MichelsonStack