Repository: deathbeds/wtypes

Issue:
Make non default Object annotations required objects.

Discussion:

Patch:
diff --git a/wtypes.ipynb b/wtypes.ipynb
index afe5a26..242ab26 100644
--- a/wtypes.ipynb
+++ b/wtypes.ipynb
@@ -25,7 +25,7 @@
     "       https://json-schema.org/\n",
     "    \"\"\"\n",
     "    __version__ = \"0.0.1\"\n",
-    "    import jsonschema, munch, typing, abc, inspect, dataclasses, copy, re\n",
+    "    import jsonschema, munch, typing, abc, inspect, dataclasses, copy, re, functools\n",
     "    simpleTypes = jsonschema.Draft7Validator.META_SCHEMA['definitions']['simpleTypes']['enum']\n",
     "    ValidationError = jsonschema.ValidationError"
    ]
@@ -148,7 +148,7 @@
     "    type\n",
     "        \n",
     "            \"\"\"\n",
-    "            return type(name, (cls,), {'_schema': copy.copy(cls._schema)}, **schema)\n",
+    "            return type(name, (cls,), {'_schema': copy.deepcopy(cls._schema)}, **schema)\n",
     "        \n",
     "        def __neg__(cls): \n",
     "            \"\"\"The Not version of a type.\"\"\"\n",
@@ -240,8 +240,9 @@
     "            elif object == list: object = List\n",
     "            elif object == dict: object = Dict\n",
     "            elif object == int: object = Integer\n",
+    "            elif object == tuple: object = Tuple\n",
     "            elif object == float: object = Float\n",
-    "            elif object == None: object = Null\n",
+    "            elif object == None: object = None\n",
     "            elif object == bool: object = Bool\n",
     "        return object\n",
     "\n",
@@ -249,7 +250,7 @@
     "        \"\"\"infer a schema from an object.\"\"\"\n",
     "        if isinstance(object, dict):\n",
     "            return {k: _get_schema_from_typeish(v) for k, v in object.items()}\n",
-    "        if isinstance(object, tuple):\n",
+    "        if isinstance(object, (list, tuple)):\n",
     "            return list(map(_get_schema_from_typeish, object))\n",
     "        object = _python_to_wtype(object)\n",
     "        if hasattr(object, '_schema'):\n",
@@ -261,6 +262,8 @@
     "    def _object_to_webtype(object):\n",
     "        if isinstance(object, typing.Mapping): return Dict\n",
     "        if isinstance(object, str): return String\n",
+    "        if isinstance(object, tuple): return Tuple\n",
+    "        \n",
     "        if isinstance(object, typing.Sequence): return List\n",
     "        if isinstance(object, bool): return Bool\n",
     "        if isinstance(object, (int, float)): return Float\n",
@@ -301,14 +304,27 @@
     "    object\n",
     "        Return an instance of the object and carry along the schema information.\n",
     "    \"\"\"\n",
+    "            args = cls._resolve_defaults(*args, **kwargs)\n",
     "            args and cls.validate(args[0])\n",
-    "            if isinstance(cls, _ContainerType):\n",
-    "                if args:\n",
-    "                    return _object_to_webtype(args[0])(args[0])\n",
-    "            return super().__new__(cls, *args, **kwargs)\n",
-    "#             except: return  if args else cls()\n",
-    "#             return self\n",
-    "    "
+    "            if dataclasses.is_dataclass(cls):\n",
+    "                self = super().__new__(cls, *args, **kwargs)                \n",
+    "                cls.validate(vars(self))\n",
+    "            elif isinstance(cls, _ConstType) or issubclass(cls, Tuple):\n",
+    "                if args: return _object_to_webtype(args[0])(args[0])\n",
+    "            else:\n",
+    "                self = super().__new__(cls, *args, **kwargs)\n",
+    "                self.__init__(*args, **kwargs)\n",
+    "            args or  cls.validate(self)\n",
+    "            return self\n",
+    "        \n",
+    "        @classmethod\n",
+    "        def _resolve_defaults(cls, *args, **kwargs):\n",
+    "            if not args and not kwargs:\n",
+    "                if 'default' in cls._schema:\n",
+    "                    return cls._schema.default,\n",
+    "                elif 'properties' in cls._schema:\n",
+    "                    return {k: v['default'] for k, v in cls._schema['properties'] if 'default' in v},                \n",
+    "            return args"
    ]
   },
   {
@@ -331,6 +347,9 @@
     "        \"\"\"\n",
     "    class Examples(_NoInit, Trait, metaclass=_ConstType): \n",
     "        \"\"\"\"\"\"\n",
+    "    \n",
+    "    class Default(_NoInit, Trait, metaclass=_ConstType): \n",
+    "        \"\"\"\"\"\"\n",
     "        \n",
     "    class Title(_NoInit, Trait, _NoTitle, metaclass=_ConstType): \n",
     "        \"\"\"An empty type with a title\n",
@@ -381,6 +400,7 @@
     "    \n",
     "        >>> Bool(), Bool(True), Bool(False)\n",
     "        (False, True, False)\n",
+    "        >>> assert (Bool + Default[True])()\n",
     "        \n",
     "    Note\n",
     "    ----\n",
@@ -390,6 +410,7 @@
     "        _schema = dict(type='boolean')\n",
     "\n",
     "        def __new__(cls, *args):            \n",
+    "            args = cls._resolve_defaults(*args)\n",
     "            args = args or (bool(),)\n",
     "            args and cls.validate(args[0])\n",
     "            return args[0]\n",
@@ -401,6 +422,7 @@
     "    --------\n",
     "    \n",
     "        >>> Null(None)\n",
+    "        >>> assert (Null + Default[None])() is None\n",
     "        \n",
     "    .. Null Type:\n",
     "        https://json-schema.org/understanding-json-schema/reference/null.html\n",
@@ -409,6 +431,7 @@
     "        _schema = dict(type='null')\n",
     "        \n",
     "        def __new__(cls, *args):\n",
+    "            args = cls._resolve_defaults(*args)\n",
     "            args and cls.validate(args[0])    "
    ]
   },
@@ -451,24 +474,22 @@
     "        \"\"\"integer type\n",
     "        \n",
     "        \n",
-    "    >>> assert isinstance(10, Float)\n",
-    "    \n",
-    "    Symbollic conditions.\n",
+    "    Examples\n",
+    "    --------\n",
     "    \n",
-    "        >>> bounded = (10< Float)< 100\n",
+    "        >>> assert isinstance(10, Integer)\n",
+    "        >>> assert not isinstance(10.1, Integer)\n",
+    "        >>> (Integer+Default[9])(9)\n",
+    "        9\n",
+    "\n",
+    "\n",
+    "        >>> bounded = (10< Integer)< 100\n",
     "        >>> bounded._schema.toDict()\n",
-    "        {'type': 'number', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}\n",
+    "        {'type': 'integer', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}\n",
     "\n",
     "        >>> assert isinstance(12, bounded)\n",
     "        >>> assert not isinstance(0, bounded)\n",
-    "\n",
-    "    Multiples\n",
-    "    \n",
-    "        >>> assert (Integer+MultipleOf[3])(9) == 9\n",
-    "    \n",
-    "    \n",
-    "    .. Numeric Types:\n",
-    "        https://json-schema.org/understanding-json-schema/reference/numeric.html\n",
+    "        >>> assert (Integer/3)(9) == 9\n",
     "        \n",
     "        \"\"\"\n",
     "        _schema = dict(type='integer')\n",
@@ -478,16 +499,25 @@
     "        \"\"\"float type\n",
     "        \n",
     "        \n",
-    "        >>> assert isinstance(10, Integer)\n",
-    "        >>> assert not isinstance(10.1, Integer)\n",
-    "\n",
+    "        >>> assert isinstance(10, Float)\n",
+    "        >>> assert isinstance(10.1, Float)\n",
+    "    \n",
+    "    Symbollic conditions.\n",
+    "    \n",
     "        >>> bounded = (10< Float)< 100\n",
     "        >>> bounded._schema.toDict()\n",
     "        {'type': 'number', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}\n",
     "\n",
-    "        >>> assert isinstance(12, bounded)\n",
-    "        >>> assert not isinstance(0, bounded)\n",
-    "        >>> assert (Integer/3)(9) == 9\n",
+    "        >>> assert isinstance(12.1, bounded)\n",
+    "        >>> assert not isinstance(0.1, bounded)\n",
+    "\n",
+    "    Multiples\n",
+    "    \n",
+    "        >>> assert (Float+MultipleOf[3])(9) == 9\n",
+    "    \n",
+    "    \n",
+    "    .. Numeric Types:\n",
+    "        https://json-schema.org/understanding-json-schema/reference/numeric.html\n",
     "        \n",
     "        \"\"\"\n",
     "        _schema = dict(type='number')\n",
@@ -513,7 +543,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 41,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -535,21 +565,33 @@
     "        \"\"\"Base class for validating object types.\"\"\"\n",
     "        _schema = dict(type='object')\n",
     "        def __init_subclass__(cls, **kwargs): \n",
-    "            cls._schema = copy.copy(cls._schema)\n",
+    "            cls._schema = copy.deepcopy(cls._schema)\n",
     "            cls._schema.update(kwargs)\n",
     "            cls._schema.update(Properties[cls.__annotations__]._schema)\n",
+    "            required = []\n",
+    "            for key in cls.__annotations__:\n",
+    "                if hasattr(cls, key):\n",
+    "                    ...#cls._schema.properties[key]['default'] = getattr(cls, key)\n",
+    "                else: required.append(key)\n",
+    "            if required:\n",
+    "                cls._schema['required'] = required\n",
     "            \n",
-    "        def load(self, *object):\n",
-    "            self.update(__import__('anyconfig').load(object))\n",
-    "            type(self).validate(self)\n",
-    "            return self\n",
+    "        @classmethod\n",
+    "        def from_config_file(cls, *object):\n",
+    "            args = __import__('anyconfig').load(object)\n",
+    "            return cls(args)\n",
     "    \n",
-    "    class Dict(Trait, dict, _Object): \n",
+    "    class Dict(Trait, dict, _Object):\n",
     "        \"\"\"dict type\n",
     "        \n",
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert istype(Dict, __import__('collections').abc.MutableMapping)\n",
+    "        >>> assert (Dict + Default[{'b': 'foo'}])() == {'b': 'foo'}\n",
+    "        >>> assert (Dict + Default[{'b': 'foo'}])({'a': 'bar'}) == {'a': 'bar'}\n",
+    "\n",
+    "    \n",
     "        >>> assert isinstance({}, Dict)\n",
     "        >>> assert not isinstance([], Dict)\n",
     "        \n",
@@ -568,11 +610,41 @@
     "        \n",
     "    .. Object Type\n",
     "        https://json-schema.org/understanding-json-schema/reference/object.html\n",
-    "        \"\"\"\n",
-    "        def __init__(self, *args, **kwargs):\n",
-    "            super().__init__(*args, **kwargs)\n",
-    "            type(self).validate(self)\n",
+    "        \"\"\" \n",
+    "        def __new__(cls, *args, **kwargs):\n",
+    "            if not (args or kwargs):\n",
+    "                args = cls._resolve_defaults()\n",
+    "            else:\n",
+    "                args = dict(*args, **kwargs),\n",
+    "            return super().__new__(cls, *args)\n",
     "\n",
+    "        def _validate(self):\n",
+    "            type(self).validate(self)\n",
+    "        \n",
+    "        def __setitem__(self, key, object):\n",
+    "            \"\"\"Only test the key being set to avoid invalid state.\"\"\"\n",
+    "            properties = self._schema.get('properties', None)\n",
+    "            if key in properties:\n",
+    "                jsonschema.validate(object, self._schema.get('properties', {}).get(key, {}), format_checker=jsonschema.draft7_format_checker)\n",
+    "            else:\n",
+    "                jsonschema.validate({key: object}, {**self._schema, 'required': []}, format_checker=jsonschema.draft7_format_checker)\n",
+    "            super().__setitem__(key, object)\n",
+    "            \n",
+    "        def update(self, *args, **kwargs):\n",
+    "            jsonschema.validate(\n",
+    "                dict(*args, **kwargs), {**self._schema, 'required': []}, \n",
+    "                format_checker=jsonschema.draft7_format_checker)\n",
+    "            super().update(*args, **kwargs)\n",
+    "        \n",
+    "        "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "    class Bunch(Dict, munch.Munch): \n",
     "        \"\"\"Bunch type\n",
     "        \n",
@@ -597,23 +669,36 @@
     "    \n",
     "        >>> class q(DataClass): a: int\n",
     "        >>> q._schema.toDict()\n",
-    "        {'type': 'object', 'properties': {'a': {'type': 'integer'}}}\n",
+    "        {'type': 'object', 'properties': {'a': {'type': 'integer'}}, 'required': ['a']}\n",
     "\n",
     "        >>> q(a=10)\n",
     "        q(a=10)\n",
     "        \n",
+    "        >>> assert not isinstance({}, q)\n",
+    "        \n",
     "        \"\"\"\n",
     "        def __new__(cls, *args, **kwargs):\n",
     "            self = super(Trait, cls).__new__(cls)\n",
+    "            # dataclass instantiates the defaults for us.\n",
     "            self.__init__(*args, **kwargs)\n",
     "            return self\n",
     "\n",
     "        def __init_subclass__(cls, **kwargs): \n",
-    "            cls._schema.update(Properties[cls.__annotations__]._schema)\n",
+    "            super().__init_subclass__()\n",
     "            dataclasses.dataclass(cls)\n",
-    "        def __post_init__(self):\n",
-    "            type(self).validate(vars(self))\n",
     "            \n",
+    "        def __setattr__(self, key, object):\n",
+    "            \"\"\"Only test the attribute being set to avoid invalid state.\"\"\"\n",
+    "            if isinstance(object, dict): object = object.get(key)\n",
+    "            properties = self._schema.get('properties', None)\n",
+    "            (\n",
+    "                jsonschema.validate(object, self._schema.get('properties', {}).get(key, {}), format_checker=jsonschema.draft7_format_checker)\n",
+    "                if key in properties else \n",
+    "                jsonschema.validate({key: object}, {**self._schema, 'required': []}, format_checker=jsonschema.draft7_format_checker)\n",
+    "            )    \n",
+    "            super().__setattr__(key, object)\n",
+    "            # trigger change here.\n",
+    "\n",
     "            \n",
     "    class AdditionalProperties(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): \n",
     "        \"\"\"Additional object properties.\"\"\"\n",
@@ -640,13 +725,12 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [],
    "source": [
     "    class _StringSchema(_SchemaMeta):\n",
     "        \"\"\"Meta operations for strings types.\n",
-    "        \n",
     "        \"\"\"\n",
     "        def __mod__(cls, object):\n",
     "            \"\"\"A pattern string type.\"\"\"\n",
@@ -669,6 +753,7 @@
     "    --------\n",
     "    \n",
     "        >>> assert isinstance('abc', String)\n",
+    "        >>> assert (String+Default['abc'])() == 'abc'\n",
     "        \n",
     "    String patterns\n",
     "    \n",
@@ -682,6 +767,7 @@
     "        >>> assert not isinstance('a'*100, (2<String)<10)\n",
     "        \"\"\"\n",
     "        _schema = dict(type='string')\n",
+    "        \n",
     "    class MinLength(Trait, _NoInit, _NoTitle, metaclass=_ConstType): \n",
     "        \"\"\"Minimum length of a string type.\"\"\"\n",
     "    class MaxLength(Trait, _NoInit, _NoTitle, metaclass=_ConstType): \n",
@@ -708,9 +794,23 @@
     "    class _ListSchema(_SchemaMeta):\n",
     "        \"\"\"Meta operations for list types.\"\"\"\n",
     "        def __getitem__(cls, object): \n",
-    "            if isinstance(object, tuple):\n",
+    "            if istype(cls, Tuple) and isinstance(object, (tuple, list)):\n",
+    "                return cls + Items[list(object)]\n",
+    "            elif isinstance(object, tuple):\n",
     "                return cls + Items[AnyOf[object]]\n",
     "            return cls + Items[object]\n",
+    "        \n",
+    "        def __gt__(cls, object): \n",
+    "            \"\"\"Minumum array length\"\"\"\n",
+    "            return cls + MinItems[object]\n",
+    "        def __lt__(cls, object): \n",
+    "            \"\"\"Maximum array length\"\"\"\n",
+    "            return cls + MaxItems[object]\n",
+    "        __rgt__ = __rge__ = __le__ = __lt__\n",
+    "        __rlt__ = __rle__ = __ge__ = __gt__\n",
+    "\n",
+    "        \n",
+    "\n",
     "\n",
     "    class List(Trait, list, metaclass=_ListSchema): \n",
     "        \"\"\"List type\n",
@@ -726,15 +826,67 @@
     "        \n",
     "    Typed list\n",
     "    \n",
+    "        >>> assert List[Integer]([1, 2, 3])\n",
     "        >>> assert isinstance([1], List[Integer])\n",
     "        >>> assert not isinstance([1.1], List[Integer])\n",
     "        \n",
+    "        >>> List[Integer, String]._schema.toDict()\n",
+    "        {'type': 'array', 'items': {'anyOf': [{'type': 'integer'}, {'type': 'string'}]}}\n",
+    "\n",
+    "        \n",
     "    Tuple        \n",
     "        \n",
+    "        >>> assert List[Integer, String]([1, 'abc', 2])\n",
     "        >>> assert isinstance([1, '1'], List[Integer, String])\n",
     "        >>> assert not isinstance([1, {}], List[Integer, String])\n",
     "        \"\"\"\n",
     "        _schema = dict(type='array')\n",
+    "        def __new__(cls, *args, **kwargs):\n",
+    "            args = cls._resolve_defaults(*args)\n",
+    "            if args and isinstance(args[0], tuple):\n",
+    "                args = list(args[0]) + list(args[1:]),\n",
+    "            return super().__new__(cls, *args, **kwargs)\n",
+    "\n",
+    "        def _verify_item(self, object, id=None):\n",
+    "            items = self._schema.get('items', None)\n",
+    "            if items:\n",
+    "                if isinstance(items, dict):\n",
+    "                    if isinstance(id, slice):\n",
+    "                        List[items].validate(object)\n",
+    "                    else: \n",
+    "                        jsonschema.validate(object, items, format_checker=jsonschema.draft7_format_checker)\n",
+    "                elif isinstance(items, list):\n",
+    "                    if isinstance(id, slice):\n",
+    "                        # condition for negative slices\n",
+    "                        Tuple[tuple(items[id])].validate(object)\n",
+    "                    elif isinstance(id, int):\n",
+    "                        # condition for negative integers\n",
+    "                        jsonschema.validate(object, items[id], format_checker=jsonschema.draft7_format_checker)\n",
+    "                        \n",
+    "                        \n",
+    "            \n",
+    "        def __setitem__(self, id, object): \n",
+    "            self._verify_item(object, id)\n",
+    "            super().__setitem__(id, object)\n",
+    "        \n",
+    "        def append(self, object): \n",
+    "            self._verify_item(object, len(self)+1)\n",
+    "            super().append(object)\n",
+    "        \n",
+    "        def insert(self, id, object): \n",
+    "            self._verify_item(object, id)\n",
+    "            super().insert(id, object)\n",
+    "        \n",
+    "        def extend(self, object): \n",
+    "            id = slice(len(self), len(self)+3)\n",
+    "            self._verify_item(object, id)\n",
+    "            super().extend(object)\n",
+    "            \n",
+    "        def pop(self, index=-1, default=None):\n",
+    "            value = super().pop(index, default)\n",
+    "            try: type(self).validate(self)\n",
+    "            except ValidationError: \n",
+    "                self.insert(index, value)\n",
     "\n",
     "    class Unique(List, uniqueItems=True):\n",
     "        \"\"\"Unique list type\n",
@@ -743,19 +895,13 @@
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert Unique(list('abc'))\n",
     "        >>> assert isinstance([1,2], Unique)\n",
     "        >>> assert not isinstance([1,1], Unique)\n",
     "        \n",
     "        \"\"\"\n",
     "        \n",
-    "    class _TupleSchema(_SchemaMeta):\n",
-    "        \"\"\"Meta operations for list types.\"\"\"\n",
-    "        def __getitem__(cls, object): \n",
-    "            if not isinstance(object, tuple):\n",
-    "                object = object,\n",
-    "            return cls + Items[object]\n",
-    "    \n",
-    "    class Tuple(Trait, metaclass=_TupleSchema): \n",
+    "    class Tuple(List): \n",
     "        \"\"\"tuple type\n",
     "        \n",
     "    Note\n",
@@ -769,12 +915,14 @@
     "    --------\n",
     "    \n",
     "        >>> assert isinstance([1,2], Tuple)\n",
-    "        >>> assert isinstance([1,'1'], Tuple[Integer, String])\n",
-    "        >>> assert not isinstance([1,1], Tuple[Integer, String])\n",
-    "        \n",
-    "        \"\"\"\n",
-    "        _schema = dict(type='array')\n",
+    "        >>> assert Tuple[Integer, String]([1, 'abc'])\n",
+    "        >>> Tuple[Integer, String]._schema.toDict()\n",
+    "        {'type': 'array', 'items': [{'type': 'integer'}, {'type': 'string'}]}\n",
+    "\n",
+    "        >>> assert isinstance([1,'1'], Tuple[[Integer, String]])\n",
+    "        >>> assert not isinstance([1,1], Tuple[[Integer, String]])\n",
     "        \n",
+    "        \"\"\"        \n",
     "        \n",
     "    class UniqueItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType): \n",
     "        \"\"\"Schema for unique items in a list.\"\"\"\n",
@@ -782,7 +930,10 @@
     "    class Items(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): ...\n",
     "    class AdditionalItems(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): ...\n",
     "    \n",
-    "    "
+    "    class MinItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType): \n",
+    "        \"\"\"Minimum length of an array.\"\"\"\n",
+    "    class MaxItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType): \n",
+    "        \"\"\"Maximum length of an array.\"\"\"\n"
    ]
   },
   {
@@ -821,6 +972,7 @@
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert AnyOf[Integer, String]('abc')\n",
     "        >>> assert isinstance(10, AnyOf[Integer, String])\n",
     "        >>> assert not isinstance([], AnyOf[Integer, String])\n",
     "        \n",
@@ -833,6 +985,7 @@
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert AllOf[Float>0, Integer/3](9)\n",
     "        >>> assert isinstance(9, AllOf[Float>0, Integer/3])\n",
     "        >>> assert not isinstance(-9, AllOf[Float>0, Integer/3])\n",
     "        \n",
@@ -846,6 +999,7 @@
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert OneOf[Float>0, Integer/3](-9)\n",
     "        >>> assert isinstance(-9, OneOf[Float>0, Integer/3])\n",
     "        >>> assert not isinstance(9, OneOf[Float>0, Integer/3])\n",
     "\n",
@@ -854,13 +1008,14 @@
     "        https://json-schema.org/understanding-json-schema/reference/combining.html#oneof\n",
     "    \"\"\"\n",
     "\n",
-    "    class Enum(Trait, _NoInit, metaclass=_ConstType): \n",
+    "    class Enum(Trait, metaclass=_ConstType): \n",
     "        \"\"\"An enumerate type that is restricted to its inputs.\n",
     "        \n",
     "        \n",
     "    Examples\n",
     "    --------\n",
     "    \n",
+    "        >>> assert Enum['cat', 'dog']('cat')\n",
     "        >>> assert isinstance('cat', Enum['cat', 'dog'])\n",
     "        >>> assert not isinstance('🐢', Enum['cat', 'dog'])\n",
     "    \n",
@@ -911,9 +1066,16 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "    class If(Trait, metaclass=_ContainerType): ...\n",
-    "    class Then(Trait, metaclass=_ContainerType): ...\n",
-    "    class Else(Trait, metaclass=_ContainerType): ..."
+    "    class If(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): \n",
+    "        \"\"\"if condition type\n",
+    "        \n",
+    "    .. Conditions:\n",
+    "        https://json-schema.org/understanding-json-schema/reference/conditionals.html\n",
+    "        \"\"\"\n",
+    "    class Then(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): \n",
+    "        \"\"\"then condition type\"\"\"\n",
+    "    class Else(Trait, _NoInit, _NoTitle, metaclass=_ContainerType): \n",
+    "        \"\"\"else condition type\"\"\""
    ]
   },
   {
@@ -943,161 +1105,161 @@
      "output_type": "stream",
      "text": [
       "[NbConvertApp] Converting notebook wtypes.ipynb to python\n",
-      "[NbConvertApp] Writing 22252 bytes to wtypes.py\n",
+      "[NbConvertApp] Writing 27842 bytes to wtypes.py\n",
       "Fixing /Users/tonyfast/webtypes/wtypes.py\n",
-      "\u001b[22;0t\u001b]0;IPython: tonyfast/webtypes\u0007TestResults(failed=0, attempted=65)\n",
+      "\u001b[22;0t\u001b]0;IPython: tonyfast/webtypes\u0007TestResults(failed=0, attempted=81)\n",
       "Name                                                        Stmts   Miss  Cover\n",
       "-------------------------------------------------------------------------------\n",
       "/Users/tonyfast/.local/lib/python3.7/site-packages/six.py     472    433     8%\n",
-      "wtypes.py                                                     291     44    85%\n",
+      "wtypes.py                                                     367     73    80%\n",
       "-------------------------------------------------------------------------------\n",
-      "TOTAL                                                         763    477    37%\n"
+      "TOTAL                                                         839    506    40%\n"
      ]
     },
     {
      "data": {
       "image/svg+xml": [
-       "<svg height=\"308pt\" viewBox=\"0.00 0.00 4815.50 308.00\" width=\"4816pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
-       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 304)\">\n",
+       "<svg height=\"353pt\" viewBox=\"0.00 0.00 4960.50 353.00\" width=\"4961pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
+       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 349)\">\n",
        "<title>classes_wtypes</title>\n",
-       "<polygon fill=\"#ffffff\" points=\"-4,4 -4,-304 4811.5,-304 4811.5,4 -4,4\" stroke=\"transparent\"/>\n",
+       "<polygon fill=\"#ffffff\" points=\"-4,4 -4,-349 4956.5,-349 4956.5,4 -4,4\" stroke=\"transparent\"/>\n",
        "<!-- 0 -->\n",
        "<g class=\"node\" id=\"node1\">\n",
        "<title>0</title>\n",
-       "<polygon fill=\"none\" points=\"3621.5,-107.5 3621.5,-177.5 3728.5,-177.5 3728.5,-107.5 3621.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3675\" y=\"-162.3\">AdditionalItems</text>\n",
-       "<polyline fill=\"none\" points=\"3621.5,-154.5 3728.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3621.5,-130.5 3728.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3675\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2945.5,-130 2945.5,-200 3052.5,-200 3052.5,-130 2945.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2999\" y=\"-184.8\">AdditionalItems</text>\n",
+       "<polyline fill=\"none\" points=\"2945.5,-177 3052.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2945.5,-153 3052.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2999\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 42 -->\n",
-       "<g class=\"node\" id=\"node43\">\n",
-       "<title>42</title>\n",
-       "<polygon fill=\"none\" points=\"1654,-222 1654,-292 1708,-292 1708,-222 1654,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1681\" y=\"-276.8\">Trait</text>\n",
-       "<polyline fill=\"none\" points=\"1654,-269 1708,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1654,-245 1708,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1681\" y=\"-229.8\"> </text>\n",
+       "<!-- 45 -->\n",
+       "<g class=\"node\" id=\"node46\">\n",
+       "<title>45</title>\n",
+       "<polygon fill=\"none\" points=\"1908,-267 1908,-337 1962,-337 1962,-267 1908,-267\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1935\" y=\"-321.8\">Trait</text>\n",
+       "<polyline fill=\"none\" points=\"1908,-314 1962,-314 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1908,-290 1962,-290 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1935\" y=\"-274.8\"> </text>\n",
        "</g>\n",
-       "<!-- 0&#45;&gt;42 -->\n",
+       "<!-- 0&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge1\">\n",
-       "<title>0-&gt;42</title>\n",
-       "<path d=\"M3621.4321,-174.8552C3618.3001,-176.0602 3615.1445,-177.1243 3612,-178 3483.9251,-213.6688 2548.8189,-208.1171 2416,-214 2148.1362,-225.8645 1825.7605,-247.1561 1718.0519,-254.4599\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7555,-250.9718 1708.016,-255.1421 1718.2304,-257.9557 1717.7555,-250.9718\" stroke=\"#000000\"/>\n",
+       "<title>0-&gt;45</title>\n",
+       "<path d=\"M2969.0314,-200.0883C2959.4368,-209.0861 2948.1273,-217.7085 2936,-223 2933.1759,-224.2322 2153.5265,-284.9883 1972.3155,-299.0959\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.9076,-295.617 1962.2094,-299.8826 1972.4509,-302.5959 1971.9076,-295.617\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 49 -->\n",
-       "<g class=\"node\" id=\"node50\">\n",
-       "<title>49</title>\n",
-       "<polygon fill=\"none\" points=\"2425,-222 2425,-292 2485,-292 2485,-222 2425,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2455\" y=\"-276.8\">_NoInit</text>\n",
-       "<polyline fill=\"none\" points=\"2425,-269 2485,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2425,-245 2485,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2455\" y=\"-229.8\"> </text>\n",
+       "<!-- 52 -->\n",
+       "<g class=\"node\" id=\"node53\">\n",
+       "<title>52</title>\n",
+       "<polygon fill=\"none\" points=\"2499,-267 2499,-337 2559,-337 2559,-267 2499,-267\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2529\" y=\"-321.8\">_NoInit</text>\n",
+       "<polyline fill=\"none\" points=\"2499,-314 2559,-314 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2499,-290 2559,-290 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2529\" y=\"-274.8\"> </text>\n",
        "</g>\n",
-       "<!-- 0&#45;&gt;49 -->\n",
+       "<!-- 0&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge2\">\n",
-       "<title>0-&gt;49</title>\n",
-       "<path d=\"M3621.3993,-174.7407C3618.2757,-175.9753 3615.1309,-177.077 3612,-178 3484.5168,-215.5829 3147.5966,-204.912 3015,-214 2819.9318,-227.3698 2586.8699,-246.177 2495.0168,-253.7006\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.7167,-250.2134 2485.0363,-254.5193 2495.289,-257.19 2494.7167,-250.2134\" stroke=\"#000000\"/>\n",
+       "<title>0-&gt;52</title>\n",
+       "<path d=\"M2967.6488,-200.1324C2958.2653,-208.7958 2947.4112,-217.2335 2936,-223 2871.6559,-255.5156 2658.8044,-285.5161 2569.2558,-297.0285\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.6931,-293.5718 2559.2158,-298.308 2569.5781,-300.5156 2568.6931,-293.5718\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 50 -->\n",
-       "<g class=\"node\" id=\"node51\">\n",
-       "<title>50</title>\n",
-       "<polygon fill=\"none\" points=\"3024.5,-222 3024.5,-292 3091.5,-292 3091.5,-222 3024.5,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3058\" y=\"-276.8\">_NoTitle</text>\n",
-       "<polyline fill=\"none\" points=\"3024.5,-269 3091.5,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3024.5,-245 3091.5,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3058\" y=\"-229.8\"> </text>\n",
+       "<!-- 53 -->\n",
+       "<g class=\"node\" id=\"node54\">\n",
+       "<title>53</title>\n",
+       "<polygon fill=\"none\" points=\"3162.5,-267 3162.5,-337 3229.5,-337 3229.5,-267 3162.5,-267\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3196\" y=\"-321.8\">_NoTitle</text>\n",
+       "<polyline fill=\"none\" points=\"3162.5,-314 3229.5,-314 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3162.5,-290 3229.5,-290 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3196\" y=\"-274.8\"> </text>\n",
        "</g>\n",
-       "<!-- 0&#45;&gt;50 -->\n",
+       "<!-- 0&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge3\">\n",
-       "<title>0-&gt;50</title>\n",
-       "<path d=\"M3621.302,-174.434C3618.2036,-175.7477 3615.0908,-176.9503 3612,-178 3517.1048,-210.2278 3215.3556,-241.8191 3101.7893,-252.8689\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.3321,-249.3967 3091.7154,-253.8431 3102.0059,-256.3641 3101.3321,-249.3967\" stroke=\"#000000\"/>\n",
+       "<title>0-&gt;53</title>\n",
+       "<path d=\"M3033.873,-200.1596C3042.4278,-208.0579 3051.7837,-216.1271 3061,-223 3090.2393,-244.8047 3125.9595,-265.476 3153.3109,-280.2008\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3151.7728,-283.3471 3162.2443,-284.9595 3155.0639,-277.169 3151.7728,-283.3471\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 1 -->\n",
        "<g class=\"node\" id=\"node2\">\n",
        "<title>1</title>\n",
-       "<polygon fill=\"none\" points=\"3746.5,-107.5 3746.5,-177.5 3879.5,-177.5 3879.5,-107.5 3746.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3813\" y=\"-162.3\">AdditionalProperties</text>\n",
-       "<polyline fill=\"none\" points=\"3746.5,-154.5 3879.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3746.5,-130.5 3879.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3813\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3070.5,-130 3070.5,-200 3203.5,-200 3203.5,-130 3070.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3137\" y=\"-184.8\">AdditionalProperties</text>\n",
+       "<polyline fill=\"none\" points=\"3070.5,-177 3203.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3070.5,-153 3203.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3137\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 1&#45;&gt;42 -->\n",
+       "<!-- 1&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge4\">\n",
-       "<title>1-&gt;42</title>\n",
-       "<path d=\"M3746.4025,-175.4112C3743.2612,-176.3905 3740.1179,-177.263 3737,-178 3594.1055,-211.7769 2562.6975,-207.7115 2416,-214 2148.1196,-225.4833 1825.7545,-247.0184 1718.0503,-254.4226\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7504,-250.9348 1708.0148,-255.1143 1718.2318,-257.9183 1717.7504,-250.9348\" stroke=\"#000000\"/>\n",
+       "<title>1-&gt;45</title>\n",
+       "<path d=\"M3099.8373,-200.2459C3088.2407,-209.2471 3074.8385,-217.8319 3061,-223 2941.894,-267.4809 2616.8282,-250.0892 2490,-259 2294.994,-272.7009 2061.6509,-291.5966 1972.3028,-298.9239\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.8127,-295.4523 1962.1327,-299.759 1972.3856,-302.4288 1971.8127,-295.4523\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 1&#45;&gt;49 -->\n",
+       "<!-- 1&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge5\">\n",
-       "<title>1-&gt;49</title>\n",
-       "<path d=\"M3746.3812,-175.3231C3743.2457,-176.3262 3740.1094,-177.2279 3737,-178 3581.0915,-216.7163 3175.3228,-203.8496 3015,-214 2819.8649,-226.3544 2586.8409,-245.737 2495.0073,-253.5576\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.6952,-250.0714 2485.0291,-254.4092 2495.2905,-257.0461 2494.6952,-250.0714\" stroke=\"#000000\"/>\n",
+       "<title>1-&gt;52</title>\n",
+       "<path d=\"M3098.7582,-200.1113C3087.3406,-208.8832 3074.3022,-217.3815 3061,-223 2971.7208,-260.7092 2677.4213,-289.2081 2569.3033,-298.6385\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.7978,-295.169 2559.1362,-299.5168 2569.4004,-302.1431 2568.7978,-295.169\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 1&#45;&gt;50 -->\n",
+       "<!-- 1&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge6\">\n",
-       "<title>1-&gt;50</title>\n",
-       "<path d=\"M3746.3131,-175.067C3743.196,-176.1394 3740.0822,-177.1257 3737,-178 3616.3892,-212.2134 3232.3728,-243.763 3101.8829,-253.742\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.5553,-250.2567 3091.8494,-254.5048 3102.0861,-257.2365 3101.5553,-250.2567\" stroke=\"#000000\"/>\n",
+       "<title>1-&gt;53</title>\n",
+       "<path d=\"M3152.194,-200.2809C3159.6953,-217.6993 3168.825,-238.8988 3176.8044,-257.4272\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3173.6875,-259.0385 3180.8575,-266.8387 3180.1167,-256.2697 3173.6875,-259.0385\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 2 -->\n",
        "<g class=\"node\" id=\"node3\">\n",
        "<title>2</title>\n",
-       "<polygon fill=\"none\" points=\"1545,-107.5 1545,-177.5 1599,-177.5 1599,-107.5 1545,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1572\" y=\"-162.3\">AllOf</text>\n",
-       "<polyline fill=\"none\" points=\"1545,-154.5 1599,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1545,-130.5 1599,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1572\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"831,-130 831,-200 885,-200 885,-130 831,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"858\" y=\"-184.8\">AllOf</text>\n",
+       "<polyline fill=\"none\" points=\"831,-177 885,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"831,-153 885,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"858\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 2&#45;&gt;42 -->\n",
+       "<!-- 2&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge7\">\n",
-       "<title>2-&gt;42</title>\n",
-       "<path d=\"M1599.2241,-171.0978C1613.5301,-186.1257 1631.2145,-204.7024 1646.4742,-220.7321\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1644.3151,-223.5403 1653.7452,-228.3699 1649.3852,-218.7138 1644.3151,-223.5403\" stroke=\"#000000\"/>\n",
+       "<title>2-&gt;45</title>\n",
+       "<path d=\"M872.6441,-200.1598C878.0445,-209.0441 885.0845,-217.5886 894,-223 981.3553,-276.0214 1722.6575,-296.9335 1897.9532,-301.1618\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.8968,-304.6613 1907.9772,-301.4002 1898.0633,-297.6633 1897.8968,-304.6613\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 2&#45;&gt;49 -->\n",
+       "<!-- 2&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge8\">\n",
-       "<title>2-&gt;49</title>\n",
-       "<path d=\"M1599.2774,-172.8231C1602.0567,-174.8202 1604.9761,-176.5923 1608,-178 1681.7028,-212.3117 2255.2349,-246.0437 2414.2443,-254.8093\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.3607,-258.3208 2424.5374,-255.3736 2414.744,-251.3313 2414.3607,-258.3208\" stroke=\"#000000\"/>\n",
+       "<title>2-&gt;52</title>\n",
+       "<path d=\"M872.3153,-200.102C877.7363,-209.1 884.8694,-217.7192 894,-223 945.8234,-252.9727 1911.2243,-255.6993 1971,-259 2165.3017,-269.7288 2397.1148,-289.9893 2488.8192,-298.3005\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5115,-301.7868 2498.7874,-299.2069 2489.1455,-294.8156 2488.5115,-301.7868\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 3 -->\n",
        "<g class=\"node\" id=\"node4\">\n",
        "<title>3</title>\n",
-       "<polygon fill=\"none\" points=\"1617.5,-107.5 1617.5,-177.5 1672.5,-177.5 1672.5,-107.5 1617.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1645\" y=\"-162.3\">AnyOf</text>\n",
-       "<polyline fill=\"none\" points=\"1617.5,-154.5 1672.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1617.5,-130.5 1672.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1645\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"903.5,-130 903.5,-200 958.5,-200 958.5,-130 903.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"931\" y=\"-184.8\">AnyOf</text>\n",
+       "<polyline fill=\"none\" points=\"903.5,-177 958.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"903.5,-153 958.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"931\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 3&#45;&gt;42 -->\n",
+       "<!-- 3&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge9\">\n",
-       "<title>3-&gt;42</title>\n",
-       "<path d=\"M1656.0949,-177.7881C1659.4824,-188.5622 1663.2545,-200.5596 1666.8175,-211.8916\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1663.5415,-213.1416 1669.8797,-221.6314 1670.2192,-211.042 1663.5415,-213.1416\" stroke=\"#000000\"/>\n",
+       "<title>3-&gt;45</title>\n",
+       "<path d=\"M946.2578,-200.1435C951.8115,-209.0275 958.997,-217.576 968,-223 1048.8659,-271.7192 1729.7236,-295.6948 1897.6689,-300.9006\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.6531,-304.4017 1907.7557,-301.2097 1897.8676,-297.405 1897.6531,-304.4017\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 3&#45;&gt;49 -->\n",
+       "<!-- 3&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge10\">\n",
-       "<title>3-&gt;49</title>\n",
-       "<path d=\"M1672.67,-172.4778C1675.643,-174.6105 1678.7682,-176.505 1682,-178 1814.452,-239.2717 2275.1775,-253.404 2414.6715,-256.3115\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.8401,-259.8154 2424.9082,-256.5165 2414.9803,-252.8169 2414.8401,-259.8154\" stroke=\"#000000\"/>\n",
+       "<title>3-&gt;52</title>\n",
+       "<path d=\"M945.9124,-200.1075C951.4883,-209.1057 958.7719,-217.7235 968,-223 1016.4042,-250.6768 1915.3305,-255.8573 1971,-259 2165.2884,-269.9681 2397.109,-290.0934 2488.8173,-298.3345\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5121,-301.8211 2498.786,-299.2331 2489.1406,-294.8493 2488.5121,-301.8211\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 4 -->\n",
        "<g class=\"node\" id=\"node5\">\n",
        "<title>4</title>\n",
-       "<polygon fill=\"none\" points=\"176,-107.5 176,-177.5 230,-177.5 230,-107.5 176,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"203\" y=\"-162.3\">Bool</text>\n",
-       "<polyline fill=\"none\" points=\"176,-154.5 230,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"176,-130.5 230,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"203\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"687,-130 687,-200 741,-200 741,-130 687,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"714\" y=\"-184.8\">Bool</text>\n",
+       "<polyline fill=\"none\" points=\"687,-177 741,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"687,-153 741,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"714\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 4&#45;&gt;42 -->\n",
+       "<!-- 4&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge11\">\n",
-       "<title>4-&gt;42</title>\n",
-       "<path d=\"M230.2201,-172.9495C233.0118,-174.9192 235.9497,-176.6504 239,-178 370.903,-236.3621 1430.8086,-253.6342 1643.7992,-256.5303\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.8076,-260.0307 1653.8535,-256.6649 1643.9013,-253.0313 1643.8076,-260.0307\" stroke=\"#000000\"/>\n",
+       "<title>4-&gt;45</title>\n",
+       "<path d=\"M728.6121,-200.2127C734.012,-209.0978 741.0598,-217.6296 750,-223 850.5034,-283.3726 1707.8445,-298.8278 1897.822,-301.5241\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.824,-305.0244 1907.8717,-301.6636 1897.9212,-298.0251 1897.824,-305.0244\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 5 -->\n",
        "<g class=\"node\" id=\"node6\">\n",
@@ -1108,20 +1270,20 @@
        "<polyline fill=\"none\" points=\"108,-23.5 162,-23.5 \" stroke=\"#000000\"/>\n",
        "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"135\" y=\"-8.3\"> </text>\n",
        "</g>\n",
-       "<!-- 14 -->\n",
-       "<g class=\"node\" id=\"node15\">\n",
-       "<title>14</title>\n",
-       "<polygon fill=\"none\" points=\"104,-107.5 104,-177.5 158,-177.5 158,-107.5 104,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"131\" y=\"-162.3\">Dict</text>\n",
-       "<polyline fill=\"none\" points=\"104,-154.5 158,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"104,-130.5 158,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"131\" y=\"-115.3\"> </text>\n",
+       "<!-- 15 -->\n",
+       "<g class=\"node\" id=\"node16\">\n",
+       "<title>15</title>\n",
+       "<polygon fill=\"none\" points=\"101.5,-130 101.5,-200 164.5,-200 164.5,-130 101.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"133\" y=\"-184.8\">Dict</text>\n",
+       "<polyline fill=\"none\" points=\"101.5,-177 164.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"101.5,-153 164.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"109.5\" y=\"-137.8\">update()</text>\n",
        "</g>\n",
-       "<!-- 5&#45;&gt;14 -->\n",
+       "<!-- 5&#45;&gt;15 -->\n",
        "<g class=\"edge\" id=\"edge12\">\n",
-       "<title>5-&gt;14</title>\n",
-       "<path d=\"M133.6903,-70.5358C133.3725,-79.0343 133.0284,-88.2414 132.6957,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"129.1888,-97.2617 132.3127,-107.3855 136.1839,-97.5232 129.1888,-97.2617\" stroke=\"#000000\"/>\n",
+       "<title>5-&gt;15</title>\n",
+       "<path d=\"M134.4588,-70.5446C134.2253,-85.6604 133.9493,-103.5338 133.7005,-119.6429\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"130.1966,-119.8745 133.5417,-129.9274 137.1958,-119.9827 130.1966,-119.8745\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 6 -->\n",
        "<g class=\"node\" id=\"node7\">\n",
@@ -1135,2160 +1297,1080 @@
        "<!-- 11 -->\n",
        "<g class=\"node\" id=\"node12\">\n",
        "<title>11</title>\n",
-       "<polygon fill=\"none\" points=\"12.5,-107.5 12.5,-177.5 85.5,-177.5 85.5,-107.5 12.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"49\" y=\"-162.3\">DataClass</text>\n",
-       "<polyline fill=\"none\" points=\"12.5,-154.5 85.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"12.5,-130.5 85.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"49\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"10.5,-130 10.5,-200 83.5,-200 83.5,-130 10.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"47\" y=\"-184.8\">DataClass</text>\n",
+       "<polyline fill=\"none\" points=\"10.5,-177 83.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"10.5,-153 83.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"47\" y=\"-137.8\"> </text>\n",
        "</g>\n",
        "<!-- 6&#45;&gt;11 -->\n",
        "<g class=\"edge\" id=\"edge13\">\n",
        "<title>6-&gt;11</title>\n",
-       "<path d=\"M46.3097,-70.5358C46.6275,-79.0343 46.9716,-88.2414 47.3043,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"43.8161,-97.5232 47.6873,-107.3855 50.8112,-97.2617 43.8161,-97.5232\" stroke=\"#000000\"/>\n",
+       "<path d=\"M45.5412,-70.5446C45.7747,-85.6604 46.0507,-103.5338 46.2995,-119.6429\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"42.8042,-119.9827 46.4583,-129.9274 49.8034,-119.8745 42.8042,-119.9827\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 7 -->\n",
        "<g class=\"node\" id=\"node8\">\n",
        "<title>7</title>\n",
-       "<polygon fill=\"none\" points=\"1691,-107.5 1691,-177.5 1745,-177.5 1745,-107.5 1691,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1718\" y=\"-162.3\">Const</text>\n",
-       "<polyline fill=\"none\" points=\"1691,-154.5 1745,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1691,-130.5 1745,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1718\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"977,-130 977,-200 1031,-200 1031,-130 977,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1004\" y=\"-184.8\">Const</text>\n",
+       "<polyline fill=\"none\" points=\"977,-177 1031,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"977,-153 1031,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1004\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 7&#45;&gt;42 -->\n",
+       "<!-- 7&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge14\">\n",
-       "<title>7-&gt;42</title>\n",
-       "<path d=\"M1706.5969,-177.7881C1703.1153,-188.5622 1699.2384,-200.5596 1695.5765,-211.8916\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1692.1737,-211.0396 1692.4292,-221.6314 1698.8346,-213.1921 1692.1737,-211.0396\" stroke=\"#000000\"/>\n",
+       "<title>7-&gt;45</title>\n",
+       "<path d=\"M1018.6873,-200.0891C1024.0884,-208.9722 1031.1179,-217.5339 1040,-223 1114.0212,-268.5531 1737.5461,-294.6677 1897.6495,-300.6626\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.8165,-304.1711 1907.9393,-301.0439 1898.0758,-297.1759 1897.8165,-304.1711\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 7&#45;&gt;49 -->\n",
+       "<!-- 7&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge15\">\n",
-       "<title>7-&gt;49</title>\n",
-       "<path d=\"M1745.3072,-172.76C1748.08,-174.7709 1750.9898,-176.5633 1754,-178 1872.3905,-234.5064 2283.5315,-251.7627 2414.5541,-255.8897\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.8249,-259.3996 2424.9273,-256.2072 2415.0391,-252.4028 2414.8249,-259.3996\" stroke=\"#000000\"/>\n",
+       "<title>7-&gt;52</title>\n",
+       "<path d=\"M1018.333,-200.0715C1023.7543,-209.0689 1030.8832,-217.6953 1040,-223 1129.4772,-275.0633 1867.651,-253.022 1971,-259 2165.273,-270.2374 2397.1023,-290.2106 2488.8151,-298.3727\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5127,-301.8596 2498.7843,-299.2626 2489.1351,-294.8873 2488.5127,-301.8596\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 8 -->\n",
        "<g class=\"node\" id=\"node9\">\n",
        "<title>8</title>\n",
-       "<polygon fill=\"none\" points=\"2073,-107.5 2073,-177.5 2139,-177.5 2139,-107.5 2073,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2106\" y=\"-162.3\">Contains</text>\n",
-       "<polyline fill=\"none\" points=\"2073,-154.5 2139,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2073,-130.5 2139,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2106\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3222,-130 3222,-200 3288,-200 3288,-130 3222,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3255\" y=\"-184.8\">Contains</text>\n",
+       "<polyline fill=\"none\" points=\"3222,-177 3288,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3222,-153 3288,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3255\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 8&#45;&gt;42 -->\n",
+       "<!-- 8&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge16\">\n",
-       "<title>8-&gt;42</title>\n",
-       "<path d=\"M2072.6119,-173.0854C2069.8041,-174.9119 2066.9193,-176.5805 2064,-178 1946.6855,-235.0415 1789.7236,-250.9606 1718.7112,-255.3533\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1718.2538,-251.8737 1708.4715,-255.9427 1718.6561,-258.8622 1718.2538,-251.8737\" stroke=\"#000000\"/>\n",
+       "<title>8-&gt;45</title>\n",
+       "<path d=\"M3236.5356,-200.1242C3230.0306,-209.1227 3221.8364,-217.7366 3212,-223 3141.1796,-260.8956 2570.1596,-253.8972 2490,-259 2294.9081,-271.419 2061.6149,-291.0586 1972.2914,-298.7545\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.786,-295.2851 1962.1243,-299.6326 1972.3883,-302.2591 1971.786,-295.2851\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 8&#45;&gt;49 -->\n",
+       "<!-- 8&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge17\">\n",
-       "<title>8-&gt;49</title>\n",
-       "<path d=\"M2139.4676,-172.9268C2142.2571,-174.79 2145.1159,-176.5102 2148,-178 2236.748,-223.8421 2353.9704,-244.3916 2414.6814,-252.4697\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.2695,-255.9454 2424.6342,-253.7489 2415.162,-249.0025 2414.2695,-255.9454\" stroke=\"#000000\"/>\n",
+       "<title>8-&gt;52</title>\n",
+       "<path d=\"M3236.0894,-200.0206C3229.6164,-208.9026 3221.5507,-217.4809 3212,-223 3101.548,-286.8278 2699.4137,-299.1437 2569.66,-301.4704\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2569.3148,-297.9756 2559.3753,-301.6439 2569.4329,-304.9746 2569.3148,-297.9756\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 8&#45;&gt;50 -->\n",
+       "<!-- 8&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge18\">\n",
-       "<title>8-&gt;50</title>\n",
-       "<path d=\"M2139.2124,-173.4753C2142.0609,-175.2117 2145.0028,-176.7534 2148,-178 2168.2779,-186.4341 2835.2344,-239.4553 3014.1858,-253.5582\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3014.0462,-257.0579 3024.2902,-254.354 3014.5959,-250.0795 3014.0462,-257.0579\" stroke=\"#000000\"/>\n",
+       "<title>8-&gt;53</title>\n",
+       "<path d=\"M3239.806,-200.2809C3232.3047,-217.6993 3223.175,-238.8988 3215.1956,-257.4272\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3211.8833,-256.2697 3211.1425,-266.8387 3218.3125,-259.0385 3211.8833,-256.2697\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 9 -->\n",
        "<g class=\"node\" id=\"node10\">\n",
        "<title>9</title>\n",
-       "<polygon fill=\"none\" points=\"3898,-107.5 3898,-177.5 4012,-177.5 4012,-107.5 3898,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3955\" y=\"-162.3\">ContentEncoding</text>\n",
-       "<polyline fill=\"none\" points=\"3898,-154.5 4012,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3898,-130.5 4012,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3955\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"4161,-130 4161,-200 4275,-200 4275,-130 4161,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4218\" y=\"-184.8\">ContentEncoding</text>\n",
+       "<polyline fill=\"none\" points=\"4161,-177 4275,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4161,-153 4275,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4218\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 9&#45;&gt;49 -->\n",
+       "<!-- 9&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge19\">\n",
-       "<title>9-&gt;49</title>\n",
-       "<path d=\"M3897.9334,-174.8113C3894.6277,-176.0277 3891.3038,-177.1061 3888,-178 3700.5737,-228.7089 3208.8279,-202.5655 3015,-214 2819.8135,-225.5146 2586.8186,-245.373 2495.0001,-253.4393\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.6777,-249.954 2485.0235,-254.3182 2495.2921,-256.927 2494.6777,-249.954\" stroke=\"#000000\"/>\n",
+       "<title>9-&gt;52</title>\n",
+       "<path d=\"M4186.274,-200.1408C4175.9915,-209.2578 4163.8853,-217.9311 4151,-223 4047.7414,-263.6202 3263.8085,-253.1851 3153,-259 2932.4951,-270.5715 2668.5949,-290.8897 2569.3564,-298.7591\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8655,-295.287 2559.1744,-299.5687 2569.4204,-302.2649 2568.8655,-295.287\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 9&#45;&gt;50 -->\n",
+       "<!-- 9&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge20\">\n",
-       "<title>9-&gt;50</title>\n",
-       "<path d=\"M3897.8724,-174.5974C3894.5824,-175.8689 3891.2786,-177.0178 3888,-178 3738.3717,-222.8251 3251.1251,-248.2185 3101.8625,-255.0853\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.5394,-251.5963 3091.709,-255.5477 3101.8579,-258.589 3101.5394,-251.5963\" stroke=\"#000000\"/>\n",
+       "<title>9-&gt;53</title>\n",
+       "<path d=\"M4185.7774,-200.0682C4175.566,-209.0655 4163.6222,-217.6927 4151,-223 4066.2743,-258.6247 3416.198,-291.6126 3239.9546,-299.97\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.5794,-296.4837 3229.7555,-300.4511 3239.9094,-303.4759 3239.5794,-296.4837\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 10 -->\n",
        "<g class=\"node\" id=\"node11\">\n",
        "<title>10</title>\n",
-       "<polygon fill=\"none\" points=\"2157.5,-107.5 2157.5,-177.5 2282.5,-177.5 2282.5,-107.5 2157.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2220\" y=\"-162.3\">ContentMediaType</text>\n",
-       "<polyline fill=\"none\" points=\"2157.5,-154.5 2282.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2157.5,-130.5 2282.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2220\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3306.5,-130 3306.5,-200 3431.5,-200 3431.5,-130 3306.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3369\" y=\"-184.8\">ContentMediaType</text>\n",
+       "<polyline fill=\"none\" points=\"3306.5,-177 3431.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3306.5,-153 3431.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3369\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 10&#45;&gt;42 -->\n",
+       "<!-- 10&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge21\">\n",
-       "<title>10-&gt;42</title>\n",
-       "<path d=\"M2157.2186,-174.7403C2154.1329,-175.9177 2151.0499,-177.0135 2148,-178 1993.1944,-228.0716 1798.7073,-247.9354 1718.36,-254.3749\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.9401,-250.8969 1708.2419,-255.1626 1718.4834,-257.8758 1717.9401,-250.8969\" stroke=\"#000000\"/>\n",
+       "<title>10-&gt;45</title>\n",
+       "<path d=\"M3334.4855,-200.0923C3323.4239,-209.208 3310.5132,-217.8927 3297,-223 3213.0405,-254.732 2579.5892,-253.5326 2490,-259 2294.8763,-270.9078 2061.6015,-290.844 1972.2872,-298.687\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7755,-295.2184 1962.1211,-299.5822 1972.3896,-302.1914 1971.7755,-295.2184\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 10&#45;&gt;49 -->\n",
+       "<!-- 10&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge22\">\n",
-       "<title>10-&gt;49</title>\n",
-       "<path d=\"M2282.695,-173.9101C2285.5,-175.2957 2288.2783,-176.6641 2291,-178 2333.3472,-198.7849 2382.0667,-222.1893 2415.3308,-238.0923\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.1768,-241.4199 2424.7087,-242.5727 2417.1944,-235.1037 2414.1768,-241.4199\" stroke=\"#000000\"/>\n",
+       "<title>10-&gt;52</title>\n",
+       "<path d=\"M3333.5513,-200.2077C3322.6527,-209.0927 3310.0628,-217.6257 3297,-223 3163.0533,-278.1082 2707.9111,-296.4733 2569.3551,-300.8579\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2569.069,-297.365 2559.182,-301.1725 2569.2854,-304.3616 2569.069,-297.365\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 10&#45;&gt;50 -->\n",
+       "<!-- 10&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge23\">\n",
-       "<title>10-&gt;50</title>\n",
-       "<path d=\"M2282.6202,-175.2786C2285.4205,-176.2767 2288.2212,-177.1915 2291,-178 2428.6221,-218.0424 2872.6857,-246.3721 3014.2251,-254.566\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3014.0889,-258.0639 3024.2732,-255.1432 3014.4904,-251.0754 3014.0889,-258.0639\" stroke=\"#000000\"/>\n",
+       "<title>10-&gt;53</title>\n",
+       "<path d=\"M3325.6767,-200.0652C3316.2441,-207.6533 3306.3032,-215.6151 3297,-223 3277.6461,-238.3631 3256.0873,-255.2558 3237.8743,-269.4633\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3235.4968,-266.8788 3229.7615,-275.787 3239.8003,-272.3997 3235.4968,-266.8788\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 11&#45;&gt;42 -->\n",
+       "<!-- 11&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge24\">\n",
-       "<title>11-&gt;42</title>\n",
-       "<path d=\"M85.522,-173.6089C88.6078,-175.3144 91.7823,-176.8126 95,-178 244.5026,-233.1698 1417.697,-253.126 1643.4792,-256.4732\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.751,-259.9775 1653.8013,-256.6244 1643.8536,-252.9782 1643.751,-259.9775\" stroke=\"#000000\"/>\n",
+       "<title>11-&gt;45</title>\n",
+       "<path d=\"M66.5998,-200.1967C73.4134,-209.1968 81.9227,-217.7934 92,-223 175.1412,-265.9564 1643.225,-296.3353 1897.5941,-301.2879\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.7302,-304.7911 1907.7961,-301.4856 1897.8658,-297.7924 1897.7302,-304.7911\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 52 -->\n",
-       "<g class=\"node\" id=\"node53\">\n",
-       "<title>52</title>\n",
-       "<polygon fill=\"none\" points=\"59.5,-222 59.5,-292 120.5,-292 120.5,-222 59.5,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"90\" y=\"-276.8\">_Object</text>\n",
-       "<polyline fill=\"none\" points=\"59.5,-269 120.5,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"59.5,-245 120.5,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"67.5\" y=\"-229.8\">load()</text>\n",
+       "<!-- 55 -->\n",
+       "<g class=\"node\" id=\"node56\">\n",
+       "<title>55</title>\n",
+       "<polygon fill=\"none\" points=\"22.5,-267 22.5,-337 157.5,-337 157.5,-267 22.5,-267\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"90\" y=\"-321.8\">_Object</text>\n",
+       "<polyline fill=\"none\" points=\"22.5,-314 157.5,-314 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"22.5,-290 157.5,-290 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"30.5\" y=\"-274.8\">from_config_file(cls)</text>\n",
        "</g>\n",
-       "<!-- 11&#45;&gt;52 -->\n",
+       "<!-- 11&#45;&gt;55 -->\n",
        "<g class=\"edge\" id=\"edge25\">\n",
-       "<title>11-&gt;52</title>\n",
-       "<path d=\"M61.6359,-177.7881C65.4939,-188.5622 69.7899,-200.5596 73.8477,-211.8916\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"70.6689,-213.3967 77.3352,-221.6314 77.2591,-211.0368 70.6689,-213.3967\" stroke=\"#000000\"/>\n",
+       "<title>11-&gt;55</title>\n",
+       "<path d=\"M58.0736,-200.2809C63.5156,-217.6194 70.1335,-238.7044 75.9299,-257.172\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"72.6299,-258.3457 78.964,-266.8387 79.3086,-256.2494 72.6299,-258.3457\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 12 -->\n",
        "<g class=\"node\" id=\"node13\">\n",
        "<title>12</title>\n",
-       "<polygon fill=\"none\" points=\"2300.5,-107.5 2300.5,-177.5 2395.5,-177.5 2395.5,-107.5 2300.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2348\" y=\"-162.3\">Dependencies</text>\n",
-       "<polyline fill=\"none\" points=\"2300.5,-154.5 2395.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2300.5,-130.5 2395.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2348\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1049,-130 1049,-200 1107,-200 1107,-130 1049,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1078\" y=\"-184.8\">Default</text>\n",
+       "<polyline fill=\"none\" points=\"1049,-177 1107,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1049,-153 1107,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1078\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 12&#45;&gt;42 -->\n",
+       "<!-- 12&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge26\">\n",
-       "<title>12-&gt;42</title>\n",
-       "<path d=\"M2300.2121,-174.2071C2297.1579,-175.6203 2294.0742,-176.9025 2291,-178 2184.0875,-216.1688 1834.007,-245.4289 1718.4131,-254.2506\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.9947,-250.7722 1708.2873,-255.0167 1718.5228,-257.7523 1717.9947,-250.7722\" stroke=\"#000000\"/>\n",
+       "<title>12-&gt;45</title>\n",
+       "<path d=\"M1093.9016,-200.0736C1099.6091,-208.9565 1106.9328,-217.5219 1116,-223 1183.6101,-263.8478 1745.8072,-293.0854 1897.4423,-300.2811\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.4845,-303.7869 1907.6381,-300.761 1897.8137,-296.7946 1897.4845,-303.7869\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 12&#45;&gt;49 -->\n",
+       "<!-- 12&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge27\">\n",
-       "<title>12-&gt;49</title>\n",
-       "<path d=\"M2380.9766,-177.7881C2392.6799,-190.3117 2405.9277,-204.488 2417.9482,-217.3511\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2415.478,-219.834 2424.863,-224.7506 2420.5925,-215.0545 2415.478,-219.834\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 12&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge28\">\n",
-       "<title>12-&gt;50</title>\n",
-       "<path d=\"M2395.777,-174.2379C2398.834,-175.6433 2401.9212,-176.9154 2405,-178 2518.4044,-217.9505 2887.0836,-245.6304 3014.3371,-254.1948\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3014.2751,-257.6983 3024.4859,-254.8716 3014.741,-250.7138 3014.2751,-257.6983\" stroke=\"#000000\"/>\n",
+       "<title>12-&gt;52</title>\n",
+       "<path d=\"M1093.5207,-200.0898C1099.2518,-209.0875 1106.6833,-217.7096 1116,-223 1198.6837,-269.9511 1876.0841,-253.3463 1971,-259 2165.2534,-270.5707 2397.0938,-290.3557 2488.8123,-298.4201\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5133,-301.9072 2498.7821,-299.2991 2489.1282,-294.9343 2488.5133,-301.9072\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 13 -->\n",
        "<g class=\"node\" id=\"node14\">\n",
        "<title>13</title>\n",
-       "<polygon fill=\"none\" points=\"2414,-107.5 2414,-177.5 2496,-177.5 2496,-107.5 2414,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2455\" y=\"-162.3\">Description</text>\n",
-       "<polyline fill=\"none\" points=\"2414,-154.5 2496,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2414,-130.5 2496,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2455\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3449.5,-130 3449.5,-200 3544.5,-200 3544.5,-130 3449.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3497\" y=\"-184.8\">Dependencies</text>\n",
+       "<polyline fill=\"none\" points=\"3449.5,-177 3544.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3449.5,-153 3544.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3497\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 13&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge28\">\n",
+       "<title>13-&gt;45</title>\n",
+       "<path d=\"M3470.8425,-200.0579C3462.1182,-209.1726 3451.6227,-217.8655 3440,-223 3343.3771,-265.6847 2595.4561,-252.919 2490,-259 2294.8374,-270.2538 2061.5852,-290.5695 1972.2821,-298.6006\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7623,-295.1332 1962.1173,-299.5177 1972.3914,-302.1049 1971.7623,-295.1332\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 13&#45;&gt;42 -->\n",
+       "<!-- 13&#45;&gt;52 -->\n",
        "<g class=\"edge\" id=\"edge29\">\n",
-       "<title>13-&gt;42</title>\n",
-       "<path d=\"M2413.9129,-173.5392C2410.6555,-175.2341 2407.3338,-176.751 2404,-178 2276.0527,-225.9352 1847.7339,-249.282 1718.3354,-255.3559\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.9718,-251.8689 1708.1443,-255.8274 1718.2954,-258.8614 1717.9718,-251.8689\" stroke=\"#000000\"/>\n",
+       "<title>13-&gt;52</title>\n",
+       "<path d=\"M3470.3891,-200.0068C3461.7193,-209.0028 3451.3667,-217.6446 3440,-223 3400.0198,-241.8364 2740.1161,-287.6895 2569.176,-299.2956\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8327,-295.8108 2559.0922,-299.979 2569.306,-302.7948 2568.8327,-295.8108\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 13&#45;&gt;49 -->\n",
+       "<!-- 13&#45;&gt;53 -->\n",
        "<g class=\"edge\" id=\"edge30\">\n",
-       "<title>13-&gt;49</title>\n",
-       "<path d=\"M2455,-177.7881C2455,-188.4534 2455,-200.3173 2455,-211.548\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2451.5001,-211.6313 2455,-221.6314 2458.5001,-211.6314 2451.5001,-211.6313\" stroke=\"#000000\"/>\n",
+       "<title>13-&gt;53</title>\n",
+       "<path d=\"M3467.7461,-200.2223C3459.4638,-208.5764 3449.9678,-216.8391 3440,-223 3376.2184,-262.422 3290.7676,-284.164 3239.7548,-294.4277\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3238.8638,-291.0355 3229.7202,-296.3876 3240.2057,-297.9057 3238.8638,-291.0355\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 13&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge31\">\n",
-       "<title>13-&gt;50</title>\n",
-       "<path d=\"M2496.1654,-173.8843C2499.0758,-175.4227 2502.0336,-176.8164 2505,-178 2597.9176,-215.0749 2900.2272,-243.7008 3014.0855,-253.4167\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3013.9265,-256.9157 3024.1859,-254.2711 3014.5165,-249.9406 3013.9265,-256.9157\" stroke=\"#000000\"/>\n",
+       "<!-- 14 -->\n",
+       "<g class=\"node\" id=\"node15\">\n",
+       "<title>14</title>\n",
+       "<polygon fill=\"none\" points=\"3563,-130 3563,-200 3645,-200 3645,-130 3563,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3604\" y=\"-184.8\">Description</text>\n",
+       "<polyline fill=\"none\" points=\"3563,-177 3645,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3563,-153 3645,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3604\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 14&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge32\">\n",
-       "<title>14-&gt;42</title>\n",
-       "<path d=\"M158.2162,-172.9582C161.0088,-174.926 163.948,-176.6543 167,-178 305.9142,-239.2486 1424.1982,-254.2646 1643.6922,-256.6329\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.7084,-260.1331 1653.7449,-256.7392 1643.7825,-253.1335 1643.7084,-260.1331\" stroke=\"#000000\"/>\n",
+       "<!-- 14&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge31\">\n",
+       "<title>14-&gt;45</title>\n",
+       "<path d=\"M3581.2396,-200.0276C3573.4518,-209.1414 3563.9096,-217.8414 3553,-223 3446.1628,-273.5179 2607.9963,-252.434 2490,-259 2294.8152,-269.8612 2061.5759,-290.4047 1972.2791,-298.5487\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7545,-295.082 1962.1151,-299.4789 1972.3925,-302.0529 1971.7545,-295.082\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 14&#45;&gt;52 -->\n",
-       "<g class=\"edge\" id=\"edge33\">\n",
+       "<g class=\"edge\" id=\"edge32\">\n",
        "<title>14-&gt;52</title>\n",
-       "<path d=\"M118.3641,-177.7881C114.5061,-188.5622 110.2101,-200.5596 106.1523,-211.8916\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"102.7409,-211.0368 102.6648,-221.6314 109.3311,-213.3967 102.7409,-211.0368\" stroke=\"#000000\"/>\n",
+       "<path d=\"M3580.8357,-200.0356C3573.0927,-209.0322 3563.6758,-217.6672 3553,-223 3530.5679,-234.2053 2756.5035,-286.7426 2569.406,-299.2994\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.9266,-295.8235 2559.1832,-299.9848 2569.395,-302.8079 2568.9266,-295.8235\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 15 -->\n",
-       "<g class=\"node\" id=\"node16\">\n",
-       "<title>15</title>\n",
-       "<polygon fill=\"none\" points=\"248,-107.5 248,-177.5 302,-177.5 302,-107.5 248,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"275\" y=\"-162.3\">Else</text>\n",
-       "<polyline fill=\"none\" points=\"248,-154.5 302,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"248,-130.5 302,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"275\" y=\"-115.3\"> </text>\n",
+       "<!-- 14&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge33\">\n",
+       "<title>14-&gt;53</title>\n",
+       "<path d=\"M3579.5337,-200.0011C3571.9412,-208.6639 3562.928,-217.1342 3553,-223 3500.0654,-254.2757 3322.8262,-283.4537 3239.7147,-295.8004\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3238.9682,-292.3724 3229.5843,-297.2911 3239.9873,-299.2979 3238.9682,-292.3724\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 15&#45;&gt;42 -->\n",
+       "<!-- 15&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge34\">\n",
-       "<title>15-&gt;42</title>\n",
-       "<path d=\"M302.2243,-172.94C305.0151,-174.9118 307.9517,-176.646 311,-178 435.8609,-233.4606 1436.9208,-252.9595 1643.7085,-256.4143\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.7093,-259.9147 1653.7656,-256.5801 1643.8247,-252.9157 1643.7093,-259.9147\" stroke=\"#000000\"/>\n",
+       "<title>15-&gt;45</title>\n",
+       "<path d=\"M150.2843,-200.1247C156.4797,-209.1233 164.3694,-217.737 174,-223 252.3102,-265.7957 1650.2168,-296.1964 1897.7069,-301.2551\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.9046,-304.7597 1907.9738,-301.4638 1898.047,-297.7612 1897.9046,-304.7597\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 15&#45;&gt;55 -->\n",
+       "<g class=\"edge\" id=\"edge35\">\n",
+       "<title>15-&gt;55</title>\n",
+       "<path d=\"M121.9264,-200.2809C116.4844,-217.6194 109.8665,-238.7044 104.0701,-257.172\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"100.6914,-256.2494 101.036,-266.8387 107.3701,-258.3457 100.6914,-256.2494\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 16 -->\n",
        "<g class=\"node\" id=\"node17\">\n",
        "<title>16</title>\n",
-       "<polygon fill=\"none\" points=\"1763,-107.5 1763,-177.5 1817,-177.5 1817,-107.5 1763,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1790\" y=\"-162.3\">Enum</text>\n",
-       "<polyline fill=\"none\" points=\"1763,-154.5 1817,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1763,-130.5 1817,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1790\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 16&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge35\">\n",
-       "<title>16-&gt;42</title>\n",
-       "<path d=\"M1762.7759,-171.0978C1748.4699,-186.1257 1730.7855,-204.7024 1715.5258,-220.7321\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1712.6148,-218.7138 1708.2548,-228.3699 1717.6849,-223.5403 1712.6148,-218.7138\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3663,-130 3663,-200 3717,-200 3717,-130 3663,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3690\" y=\"-184.8\">Else</text>\n",
+       "<polyline fill=\"none\" points=\"3663,-177 3717,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3663,-153 3717,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3690\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 16&#45;&gt;49 -->\n",
+       "<!-- 16&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge36\">\n",
-       "<title>16-&gt;49</title>\n",
-       "<path d=\"M1817.3272,-172.7184C1820.0957,-174.7383 1822.999,-176.5441 1826,-178 1930.8776,-228.8783 2292.8496,-249.6472 2414.6463,-255.2998\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.5227,-258.7977 2424.6714,-255.7559 2414.8409,-251.8049 2414.5227,-258.7977\" stroke=\"#000000\"/>\n",
+       "<title>16-&gt;45</title>\n",
+       "<path d=\"M3675.6931,-200.1165C3670.2723,-209.1149 3663.1372,-217.7306 3654,-223 3597.9545,-255.3214 2554.6029,-255.5002 2490,-259 2294.7995,-269.5747 2061.5693,-290.2845 1972.2771,-298.5109\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7488,-295.0447 1962.1135,-299.4507 1972.3934,-302.015 1971.7488,-295.0447\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 16&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge37\">\n",
+       "<title>16-&gt;52</title>\n",
+       "<path d=\"M3675.3756,-200.1923C3669.9755,-209.0771 3662.9307,-217.6138 3654,-223 3651.0274,-224.7928 2769.243,-285.4892 2569.0849,-299.2464\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.7409,-295.7617 2559.0045,-299.9392 2569.2209,-302.7452 2568.7409,-295.7617\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 16&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge38\">\n",
+       "<title>16-&gt;53</title>\n",
+       "<path d=\"M3674.6397,-200.2252C3669.2877,-208.8889 3662.4518,-217.3036 3654,-223 3586.4694,-268.515 3340.6802,-291.3697 3239.7329,-299.0013\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.2878,-295.5246 3229.5741,-299.7546 3239.8056,-302.5054 3239.2878,-295.5246\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 17 -->\n",
        "<g class=\"node\" id=\"node18\">\n",
        "<title>17</title>\n",
-       "<polygon fill=\"none\" points=\"1835,-107.5 1835,-177.5 1907,-177.5 1907,-107.5 1835,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1871\" y=\"-162.3\">Examples</text>\n",
-       "<polyline fill=\"none\" points=\"1835,-154.5 1907,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1835,-130.5 1907,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1871\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"759,-130 759,-200 813,-200 813,-130 759,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"786\" y=\"-184.8\">Enum</text>\n",
+       "<polyline fill=\"none\" points=\"759,-177 813,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"759,-153 813,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"786\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 17&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge37\">\n",
-       "<title>17-&gt;42</title>\n",
-       "<path d=\"M1834.7922,-171.9013C1831.8598,-174.0239 1828.9067,-176.0815 1826,-178 1790.4857,-201.4406 1747.4069,-224.2579 1717.4756,-239.2941\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1715.6351,-236.3007 1708.2459,-243.8935 1718.7572,-242.5659 1715.6351,-236.3007\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 17&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge38\">\n",
-       "<title>17-&gt;49</title>\n",
-       "<path d=\"M1907.0841,-173.4251C1909.998,-175.1468 1912.9841,-176.7009 1916,-178 2006.2609,-216.8798 2305.2087,-244.6986 2414.5169,-253.7911\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.5377,-257.3045 2424.7912,-254.6368 2415.112,-250.3281 2414.5377,-257.3045\" stroke=\"#000000\"/>\n",
+       "<!-- 17&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge39\">\n",
+       "<title>17-&gt;45</title>\n",
+       "<path d=\"M800.627,-200.1879C806.0272,-209.0726 813.0713,-217.6104 822,-223 915.9041,-279.683 1714.8282,-297.9044 1897.7804,-301.3523\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.907,-304.8552 1907.9701,-301.541 1898.0366,-297.8564 1897.907,-304.8552\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 18 -->\n",
        "<g class=\"node\" id=\"node19\">\n",
        "<title>18</title>\n",
-       "<polygon fill=\"none\" points=\"1925,-107.5 1925,-177.5 2055,-177.5 2055,-107.5 1925,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1990\" y=\"-162.3\">ExclusiveMaximum</text>\n",
-       "<polyline fill=\"none\" points=\"1925,-154.5 2055,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1925,-130.5 2055,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1990\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1125,-130 1125,-200 1197,-200 1197,-130 1125,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1161\" y=\"-184.8\">Examples</text>\n",
+       "<polyline fill=\"none\" points=\"1125,-177 1197,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1125,-153 1197,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1161\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 18&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge39\">\n",
-       "<title>18-&gt;42</title>\n",
-       "<path d=\"M1924.8255,-174.3018C1921.8561,-175.5813 1918.9044,-176.8204 1916,-178 1847.2679,-205.9159 1764.5651,-232.0513 1717.8578,-246.1501\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1716.7494,-242.8285 1708.1774,-249.0552 1718.7615,-249.5331 1716.7494,-242.8285\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 18&#45;&gt;49 -->\n",
+       "<!-- 18&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge40\">\n",
-       "<title>18-&gt;49</title>\n",
-       "<path d=\"M2055.0041,-174.762C2058.0196,-175.917 2061.0276,-177.004 2064,-178 2188.5482,-219.7349 2343.1755,-242.9929 2414.9407,-252.2433\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.5536,-255.7222 2424.9143,-253.507 2415.4336,-248.7777 2414.5536,-255.7222\" stroke=\"#000000\"/>\n",
+       "<title>18-&gt;45</title>\n",
+       "<path d=\"M1181.0534,-200.0845C1187.8317,-208.9675 1196.2088,-217.5303 1206,-223 1266.86,-256.9984 1757.2852,-290.6534 1897.6138,-299.6618\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.6522,-303.1713 1907.8548,-300.3153 1898.098,-296.1855 1897.6522,-303.1713\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 18&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge41\">\n",
+       "<title>18-&gt;52</title>\n",
+       "<path d=\"M1180.6137,-200.1698C1187.4276,-209.1693 1195.9337,-217.7723 1206,-223 1281.5178,-262.2181 1886.0693,-253.7304 1971,-259 2165.2242,-271.0508 2397.081,-290.5647 2488.8081,-298.4883\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5142,-301.9759 2498.7789,-299.3517 2489.1182,-295.002 2488.5142,-301.9759\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 19 -->\n",
        "<g class=\"node\" id=\"node20\">\n",
        "<title>19</title>\n",
-       "<polygon fill=\"none\" points=\"970,-107.5 970,-177.5 1098,-177.5 1098,-107.5 970,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1034\" y=\"-162.3\">ExclusiveMinimum</text>\n",
-       "<polyline fill=\"none\" points=\"970,-154.5 1098,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"970,-130.5 1098,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1034\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1215,-130 1215,-200 1345,-200 1345,-130 1215,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1280\" y=\"-184.8\">ExclusiveMaximum</text>\n",
+       "<polyline fill=\"none\" points=\"1215,-177 1345,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1215,-153 1345,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1280\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 19&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge41\">\n",
-       "<title>19-&gt;42</title>\n",
-       "<path d=\"M1098.0391,-175.0013C1101.0373,-176.0916 1104.0333,-177.0995 1107,-178 1303.2575,-237.5717 1551.0052,-252.364 1643.7303,-255.9176\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.6284,-259.4161 1653.7485,-256.2803 1643.8817,-252.4207 1643.6284,-259.4161\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 19&#45;&gt;49 -->\n",
+       "<!-- 19&#45;&gt;45 -->\n",
        "<g class=\"edge\" id=\"edge42\">\n",
-       "<title>19-&gt;49</title>\n",
-       "<path d=\"M1098.3684,-175.4311C1101.2519,-176.3875 1104.1367,-177.2518 1107,-178 1109.0332,-178.5313 2190.6216,-241.5914 2414.6709,-254.6498\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.4973,-258.1455 2424.684,-255.2333 2414.9046,-251.1574 2414.4973,-258.1455\" stroke=\"#000000\"/>\n",
+       "<title>19-&gt;45</title>\n",
+       "<path d=\"M1317.0679,-200.2275C1328.1833,-209.0005 1340.9197,-217.4704 1354,-223 1453.2341,-264.9507 1785.5782,-291.538 1897.6981,-299.4877\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.6255,-302.9911 1907.8458,-300.1988 1898.1149,-296.0083 1897.6255,-302.9911\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 19&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge43\">\n",
+       "<title>19-&gt;52</title>\n",
+       "<path d=\"M1316.039,-200.2837C1327.3273,-209.2858 1340.4115,-217.8615 1354,-223 1482.466,-271.5792 1833.9693,-249.7233 1971,-259 2165.1533,-272.1438 2397.0502,-291.0405 2488.7981,-298.6437\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5159,-302.1322 2498.7712,-299.4714 2489.095,-295.1562 2488.5159,-302.1322\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 20 -->\n",
        "<g class=\"node\" id=\"node21\">\n",
        "<title>20</title>\n",
-       "<polygon fill=\"none\" points=\"320,-107.5 320,-177.5 374,-177.5 374,-107.5 320,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"347\" y=\"-162.3\">Float</text>\n",
-       "<polyline fill=\"none\" points=\"320,-154.5 374,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"320,-130.5 374,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"347\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1363,-130 1363,-200 1491,-200 1491,-130 1363,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1427\" y=\"-184.8\">ExclusiveMinimum</text>\n",
+       "<polyline fill=\"none\" points=\"1363,-177 1491,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1363,-153 1491,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1427\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 20&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge43\">\n",
-       "<title>20-&gt;42</title>\n",
-       "<path d=\"M374.229,-172.9295C377.0188,-174.9035 379.9538,-176.6411 383,-178 500.8621,-230.5769 1443.7237,-252.2571 1643.7783,-256.2883\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.7266,-259.7879 1653.7944,-256.4878 1643.8661,-252.7892 1643.7266,-259.7879\" stroke=\"#000000\"/>\n",
+       "<!-- 20&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge44\">\n",
+       "<title>20-&gt;45</title>\n",
+       "<path d=\"M1464.0462,-200.1591C1474.922,-208.8225 1487.3207,-217.2536 1500,-223 1571.4401,-255.3775 1806.0558,-286.4085 1897.7784,-297.6076\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.3806,-301.0849 1907.729,-298.8129 1898.2225,-294.1357 1897.3806,-301.0849\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 20&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge45\">\n",
+       "<title>20-&gt;52</title>\n",
+       "<path d=\"M1462.5438,-200.1272C1473.6793,-209.1258 1486.5887,-217.739 1500,-223 1597.7218,-261.3348 1866.3358,-250.9673 1971,-259 2165.0271,-273.891 2396.9953,-291.8011 2488.7801,-298.892\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5174,-302.382 2498.7573,-299.6628 2489.0567,-295.4028 2488.5174,-302.382\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 21 -->\n",
        "<g class=\"node\" id=\"node22\">\n",
        "<title>21</title>\n",
-       "<polygon fill=\"none\" points=\"4030.5,-107.5 4030.5,-177.5 4087.5,-177.5 4087.5,-107.5 4030.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4059\" y=\"-162.3\">Format</text>\n",
-       "<polyline fill=\"none\" points=\"4030.5,-154.5 4087.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4030.5,-130.5 4087.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4059\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"183,-130 183,-200 237,-200 237,-130 183,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"210\" y=\"-184.8\">Float</text>\n",
+       "<polyline fill=\"none\" points=\"183,-177 237,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"183,-153 237,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"210\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 21&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge44\">\n",
-       "<title>21-&gt;49</title>\n",
-       "<path d=\"M4030.1561,-173.0234C4027.2335,-174.977 4024.1684,-176.6843 4021,-178 3917.7026,-220.8943 3126.6727,-207.7171 3015,-214 2819.7829,-224.9833 2586.8053,-245.1427 2494.9958,-253.3644\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.6669,-249.8798 2485.0202,-254.2606 2495.2933,-256.8517 2494.6669,-249.8798\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 21&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge45\">\n",
-       "<title>21-&gt;50</title>\n",
-       "<path d=\"M4030.0883,-172.8654C4027.1804,-174.8533 4024.1373,-176.6117 4021,-178 3936.1581,-215.5451 3278.7754,-247.1966 3101.7716,-255.1018\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.3691,-251.6161 3091.5342,-255.5563 3101.6797,-258.6092 3101.3691,-251.6161\" stroke=\"#000000\"/>\n",
+       "<!-- 21&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge46\">\n",
+       "<title>21-&gt;45</title>\n",
+       "<path d=\"M224.3605,-200.0245C229.7824,-209.0208 236.9048,-217.6585 246,-223 319.656,-266.2574 1655.9683,-296.1681 1897.6811,-301.2363\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.6568,-304.7365 1907.7276,-301.4458 1897.8028,-297.738 1897.6568,-304.7365\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 22 -->\n",
        "<g class=\"node\" id=\"node23\">\n",
        "<title>22</title>\n",
-       "<polygon fill=\"none\" points=\"392,-107.5 392,-177.5 446,-177.5 446,-107.5 392,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"419\" y=\"-162.3\">If</text>\n",
-       "<polyline fill=\"none\" points=\"392,-154.5 446,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"392,-130.5 446,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"419\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"4293.5,-130 4293.5,-200 4350.5,-200 4350.5,-130 4293.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4322\" y=\"-184.8\">Format</text>\n",
+       "<polyline fill=\"none\" points=\"4293.5,-177 4350.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4293.5,-153 4350.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4322\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 22&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge46\">\n",
-       "<title>22-&gt;42</title>\n",
-       "<path d=\"M446.2343,-172.9177C449.0229,-174.8943 451.9563,-176.6357 455,-178 565.8514,-227.6864 1450.3334,-251.5034 1643.7281,-256.145\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.8655,-259.6492 1653.9458,-256.3878 1644.0318,-252.6512 1643.8655,-259.6492\" stroke=\"#000000\"/>\n",
+       "<!-- 22&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge47\">\n",
+       "<title>22-&gt;52</title>\n",
+       "<path d=\"M4306.5138,-200.1509C4300.7835,-209.15 4293.3437,-217.7575 4284,-223 4229.1749,-253.761 3215.7856,-255.8386 3153,-259 2932.4711,-270.1043 2668.585,-290.6975 2569.3534,-298.6998\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8573,-295.2284 2559.1721,-299.5233 2569.4217,-302.2056 2568.8573,-295.2284\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 22&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge48\">\n",
+       "<title>22-&gt;53</title>\n",
+       "<path d=\"M4306.1814,-200.2128C4300.4752,-209.0979 4293.1314,-217.6296 4284,-223 4192.7808,-276.6478 3431.4687,-296.8377 3239.711,-301.0981\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.6337,-297.5988 3229.7128,-301.3171 3239.7871,-304.5971 3239.6337,-297.5988\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 23 -->\n",
        "<g class=\"node\" id=\"node24\">\n",
        "<title>23</title>\n",
-       "<polygon fill=\"none\" points=\"464,-107.5 464,-177.5 520,-177.5 520,-107.5 464,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"492\" y=\"-162.3\">Integer</text>\n",
-       "<polyline fill=\"none\" points=\"464,-154.5 520,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"464,-130.5 520,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"492\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3735,-130 3735,-200 3789,-200 3789,-130 3735,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3762\" y=\"-184.8\">If</text>\n",
+       "<polyline fill=\"none\" points=\"3735,-177 3789,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3735,-153 3789,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3762\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 23&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge47\">\n",
-       "<title>23-&gt;42</title>\n",
-       "<path d=\"M520.0665,-172.9078C522.9162,-174.8865 525.9065,-176.6312 529,-178 632.9661,-224.0039 1457.2368,-250.5093 1643.6269,-255.9496\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.6537,-259.4517 1653.7508,-256.2426 1643.8563,-252.4546 1643.6537,-259.4517\" stroke=\"#000000\"/>\n",
+       "<!-- 23&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge49\">\n",
+       "<title>23-&gt;45</title>\n",
+       "<path d=\"M3747.6991,-200.127C3742.2785,-209.1256 3735.1419,-217.7388 3726,-223 3666.4601,-257.2653 2558.5985,-255.3457 2490,-259 2294.79,-269.399 2061.5653,-290.2108 1972.2758,-298.4877\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7453,-295.0218 1962.1126,-299.4334 1972.3939,-301.9917 1971.7453,-295.0218\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 23&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge50\">\n",
+       "<title>23-&gt;52</title>\n",
+       "<path d=\"M3747.4011,-200.2348C3742.0014,-209.1203 3734.9505,-217.6467 3726,-223 3671.2529,-255.7444 3216.6543,-254.8072 3153,-259 2932.6692,-273.5128 2668.6665,-292.0998 2569.3785,-299.1324\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.9189,-295.6561 2559.1913,-299.8544 2569.4138,-302.6386 2568.9189,-295.6561\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 23&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge51\">\n",
+       "<title>23-&gt;53</title>\n",
+       "<path d=\"M3746.9111,-200.051C3741.5327,-208.8223 3734.6153,-217.3354 3726,-223 3645.9896,-275.6074 3351.9398,-294.692 3239.8229,-300.1497\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.3773,-296.6668 3229.5541,-300.636 3239.7085,-303.659 3239.3773,-296.6668\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 24 -->\n",
        "<g class=\"node\" id=\"node25\">\n",
        "<title>24</title>\n",
-       "<polygon fill=\"none\" points=\"2514,-107.5 2514,-177.5 2568,-177.5 2568,-107.5 2514,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2541\" y=\"-162.3\">Items</text>\n",
-       "<polyline fill=\"none\" points=\"2514,-154.5 2568,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2514,-130.5 2568,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2541\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 24&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge48\">\n",
-       "<title>24-&gt;42</title>\n",
-       "<path d=\"M2513.7186,-172.8146C2510.9402,-174.8136 2508.0221,-176.5884 2505,-178 2362.3954,-244.6124 1860.5622,-255.0698 1718.6433,-256.7009\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1718.259,-253.2047 1708.297,-256.8112 1718.3338,-260.2043 1718.259,-253.2047\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"255,-130 255,-200 311,-200 311,-130 255,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283\" y=\"-184.8\">Integer</text>\n",
+       "<polyline fill=\"none\" points=\"255,-177 311,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"255,-153 311,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"283\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 24&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge49\">\n",
-       "<title>24-&gt;49</title>\n",
-       "<path d=\"M2514.4954,-177.7881C2505.9943,-189.1064 2496.4794,-201.7745 2487.5949,-213.6033\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2484.7722,-211.5336 2481.5651,-221.6314 2490.3693,-215.7375 2484.7722,-211.5336\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 24&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge50\">\n",
-       "<title>24-&gt;50</title>\n",
-       "<path d=\"M2568.3883,-172.5955C2571.1435,-174.642 2574.0271,-176.4876 2577,-178 2653.4773,-216.9053 2910.6086,-243.7447 3014.2031,-253.2217\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3014.045,-256.7216 3024.3196,-254.1365 3014.6755,-249.7501 3014.045,-256.7216\" stroke=\"#000000\"/>\n",
+       "<!-- 24&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge52\">\n",
+       "<title>24-&gt;45</title>\n",
+       "<path d=\"M297.9564,-200.0311C303.5333,-209.0276 310.8064,-217.6637 320,-223 390.4994,-263.9208 1662.9182,-295.6276 1897.8645,-301.1466\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.875,-304.6477 1907.9541,-301.3824 1898.0386,-297.6496 1897.875,-304.6477\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 25 -->\n",
        "<g class=\"node\" id=\"node26\">\n",
        "<title>25</title>\n",
-       "<polygon fill=\"none\" points=\"538,-107.5 538,-177.5 592,-177.5 592,-107.5 538,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"565\" y=\"-162.3\">List</text>\n",
-       "<polyline fill=\"none\" points=\"538,-154.5 592,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"538,-130.5 592,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"565\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3807,-130 3807,-200 3861,-200 3861,-130 3807,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3834\" y=\"-184.8\">Items</text>\n",
+       "<polyline fill=\"none\" points=\"3807,-177 3861,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3807,-153 3861,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3834\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 25&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge51\">\n",
-       "<title>25-&gt;42</title>\n",
-       "<path d=\"M592.2472,-172.889C595.033,-174.8718 597.9622,-176.6225 601,-178 697.6908,-221.8436 1464.6023,-249.822 1643.6952,-255.7977\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.814,-259.3035 1653.9243,-256.1363 1644.0456,-252.3073 1643.814,-259.3035\" stroke=\"#000000\"/>\n",
+       "<!-- 25&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge53\">\n",
+       "<title>25-&gt;45</title>\n",
+       "<path d=\"M3819.7045,-200.1364C3814.284,-209.1352 3807.1462,-217.7461 3798,-223 3734.9656,-259.2092 2562.5943,-255.1912 2490,-259 2294.7818,-269.2426 2061.5619,-290.1451 1972.2747,-298.467\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7422,-295.0015 1962.1118,-299.4179 1972.3944,-301.971 1971.7422,-295.0015\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 25&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge54\">\n",
+       "<title>25-&gt;52</title>\n",
+       "<path d=\"M3819.4252,-200.2753C3814.0259,-209.1613 3806.9691,-217.678 3798,-223 3736.2708,-259.6282 3224.6391,-254.5326 3153,-259 2932.6198,-272.7428 2668.6461,-291.783 2569.3723,-299.0347\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.9046,-295.5594 2559.1865,-299.7796 2569.4152,-302.5408 2568.9046,-295.5594\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 25&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge55\">\n",
+       "<title>25-&gt;53</title>\n",
+       "<path d=\"M3818.9755,-200.1498C3813.5976,-208.922 3806.6645,-217.4109 3798,-223 3705.3659,-282.7544 3362.2611,-297.6018 3239.7922,-301.0348\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.5603,-297.5397 3229.6578,-301.3067 3239.7482,-304.5371 3239.5603,-297.5397\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 26 -->\n",
        "<g class=\"node\" id=\"node27\">\n",
        "<title>26</title>\n",
-       "<polygon fill=\"none\" points=\"2586,-107.5 2586,-177.5 2668,-177.5 2668,-107.5 2586,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2627\" y=\"-162.3\">MaxLength</text>\n",
-       "<polyline fill=\"none\" points=\"2586,-154.5 2668,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2586,-130.5 2668,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2627\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge52\">\n",
-       "<title>26-&gt;42</title>\n",
-       "<path d=\"M2585.9067,-174.0724C2582.9786,-175.5647 2579.9972,-176.8968 2577,-178 2415.4439,-237.4626 1867.5472,-253.0994 1718.6261,-256.2937\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1718.1326,-252.8032 1708.2077,-256.5107 1718.2784,-259.8016 1718.1326,-252.8032\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge53\">\n",
-       "<title>26-&gt;49</title>\n",
-       "<path d=\"M2585.8968,-171.893C2582.8961,-173.9743 2579.9074,-176.0279 2577,-178 2549.4743,-196.6712 2517.9502,-217.0591 2493.8426,-232.4459\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2491.8716,-229.5516 2485.3176,-237.876 2495.6323,-235.4556 2491.8716,-229.5516\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge54\">\n",
-       "<title>26-&gt;50</title>\n",
-       "<path d=\"M2668.2553,-173.6688C2671.1438,-175.2599 2674.0721,-176.7242 2677,-178 2792.2485,-228.2179 2941.2771,-247.172 3014.0705,-253.7788\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3013.978,-257.2839 3024.2443,-254.6662 3014.5863,-250.3104 3013.978,-257.2839\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"329,-107.5 329,-222.5 453,-222.5 453,-107.5 329,-107.5\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"391\" y=\"-207.3\">List</text>\n",
+       "<polyline fill=\"none\" points=\"329,-199.5 453,-199.5 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"329,-175.5 453,-175.5 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"337\" y=\"-160.3\">append(object)</text>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"337\" y=\"-145.3\">extend(object)</text>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"337\" y=\"-130.3\">insert(id, object)</text>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"337\" y=\"-115.3\">pop(index, default)</text>\n",
+       "</g>\n",
+       "<!-- 26&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge56\">\n",
+       "<title>26-&gt;45</title>\n",
+       "<path d=\"M453.1988,-219.0639C456.0931,-220.5276 459.0313,-221.851 462,-223 599.5448,-276.2333 1682.2778,-297.6312 1897.7739,-301.3834\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.8788,-304.8856 1907.9376,-301.5584 1897.9994,-297.8866 1897.8788,-304.8856\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 27 -->\n",
        "<g class=\"node\" id=\"node28\">\n",
        "<title>27</title>\n",
-       "<polygon fill=\"none\" points=\"1116.5,-107.5 1116.5,-177.5 1191.5,-177.5 1191.5,-107.5 1116.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1154\" y=\"-162.3\">Maximum</text>\n",
-       "<polyline fill=\"none\" points=\"1116.5,-154.5 1191.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1116.5,-130.5 1191.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1154\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3879.5,-130 3879.5,-200 3952.5,-200 3952.5,-130 3879.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3916\" y=\"-184.8\">MaxItems</text>\n",
+       "<polyline fill=\"none\" points=\"3879.5,-177 3952.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3879.5,-153 3952.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3916\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 27&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge55\">\n",
-       "<title>27-&gt;42</title>\n",
-       "<path d=\"M1191.7637,-173.831C1194.4678,-175.3824 1197.2245,-176.7936 1200,-178 1280.3115,-212.9086 1545.1347,-243.0063 1643.6499,-253.2566\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.433,-256.7527 1653.7394,-254.2973 1644.1513,-249.7896 1643.433,-256.7527\" stroke=\"#000000\"/>\n",
+       "<!-- 27&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge57\">\n",
+       "<title>27-&gt;45</title>\n",
+       "<path d=\"M3896.1118,-200.0158C3889.1055,-209.1293 3880.348,-217.8321 3870,-223 3801.3878,-257.2658 2566.5903,-255.0366 2490,-259 2294.7745,-269.1026 2061.5588,-290.0863 1972.2738,-298.4485\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7395,-294.9832 1962.1111,-299.4041 1972.3949,-301.9525 1971.7395,-294.9832\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 27&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge56\">\n",
-       "<title>27-&gt;49</title>\n",
-       "<path d=\"M1191.6309,-174.1586C1194.3676,-175.6298 1197.1677,-176.9337 1200,-178 1214.5825,-183.49 2202.0732,-242.0648 2414.8754,-254.6337\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.7931,-258.1349 2424.9821,-255.2305 2415.2058,-251.147 2414.7931,-258.1349\" stroke=\"#000000\"/>\n",
+       "<!-- 27&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge58\">\n",
+       "<title>27-&gt;52</title>\n",
+       "<path d=\"M3895.7981,-200.1625C3888.8294,-209.1619 3880.1708,-217.7666 3870,-223 3799.0718,-259.4962 3232.6259,-254.2579 3153,-259 2932.5822,-272.1269 2668.6307,-291.5296 2569.3675,-298.9565\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8933,-295.4821 2559.1829,-299.7198 2569.4165,-302.4626 2568.8933,-295.4821\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 27&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge59\">\n",
+       "<title>27-&gt;53</title>\n",
+       "<path d=\"M3895.3331,-200.0374C3888.4016,-208.9197 3879.8789,-217.4939 3870,-223 3761.0364,-283.732 3371.1443,-298.0456 3239.6568,-301.1788\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.471,-297.6821 3229.5535,-301.4095 3239.6308,-304.6802 3239.471,-297.6821\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 28 -->\n",
        "<g class=\"node\" id=\"node29\">\n",
        "<title>28</title>\n",
-       "<polygon fill=\"none\" points=\"2686.5,-107.5 2686.5,-177.5 2765.5,-177.5 2765.5,-107.5 2686.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2726\" y=\"-162.3\">MinLength</text>\n",
-       "<polyline fill=\"none\" points=\"2686.5,-154.5 2765.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2686.5,-130.5 2765.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2726\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"3971,-130 3971,-200 4053,-200 4053,-130 3971,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4012\" y=\"-184.8\">MaxLength</text>\n",
+       "<polyline fill=\"none\" points=\"3971,-177 4053,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"3971,-153 4053,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4012\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 28&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge57\">\n",
-       "<title>28-&gt;42</title>\n",
-       "<path d=\"M2686.3503,-173.8049C2683.2855,-175.4112 2680.1542,-176.8377 2677,-178 2585.6765,-211.653 1888.9423,-247.0189 1718.5238,-255.2281\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1718.1175,-251.7435 1708.2966,-255.7185 1718.4528,-258.7354 1718.1175,-251.7435\" stroke=\"#000000\"/>\n",
+       "<!-- 28&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge60\">\n",
+       "<title>28-&gt;45</title>\n",
+       "<path d=\"M3989.27,-200.0922C3981.483,-209.2078 3971.9337,-217.8927 3961,-223 3886.9354,-257.5971 2571.6408,-254.8412 2490,-259 2294.7664,-268.9451 2061.5554,-290.0203 1972.2727,-298.4277\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7364,-294.9627 1962.1103,-299.3886 1972.3954,-301.9316 1971.7364,-294.9627\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 28&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge58\">\n",
-       "<title>28-&gt;49</title>\n",
-       "<path d=\"M2686.4941,-172.5352C2683.3462,-174.489 2680.1607,-176.3367 2677,-178 2616.586,-209.793 2540.6005,-233.706 2495.0169,-246.5026\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2493.9208,-243.1743 2485.2159,-249.2139 2495.7871,-249.9209 2493.9208,-243.1743\" stroke=\"#000000\"/>\n",
+       "<!-- 28&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge61\">\n",
+       "<title>28-&gt;52</title>\n",
+       "<path d=\"M3988.9444,-200.2578C3981.2038,-209.2593 3971.761,-217.8412 3961,-223 3879.9638,-261.8483 3242.7226,-253.9106 3153,-259 2932.5461,-271.505 2668.6158,-291.2738 2569.3629,-298.8776\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8821,-295.4041 2559.1794,-299.6593 2569.418,-302.3835 2568.8821,-295.4041\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 28&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge59\">\n",
-       "<title>28-&gt;50</title>\n",
-       "<path d=\"M2765.6435,-173.4629C2768.407,-175.1044 2771.2056,-176.6362 2774,-178 2854.0999,-217.0941 2956.6563,-239.559 3014.042,-249.927\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3013.7597,-253.4312 3024.2159,-251.7235 3014.9769,-246.5379 3013.7597,-253.4312\" stroke=\"#000000\"/>\n",
+       "<!-- 28&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge62\">\n",
+       "<title>28-&gt;53</title>\n",
+       "<path d=\"M3988.4847,-200.1627C3980.7901,-209.047 3971.4867,-217.5908 3961,-223 3833.8023,-288.6101 3383.1451,-299.7343 3239.99,-301.6172\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.7864,-298.1194 3229.8302,-301.7419 3239.8724,-305.1188 3239.7864,-298.1194\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 29 -->\n",
        "<g class=\"node\" id=\"node30\">\n",
        "<title>29</title>\n",
-       "<polygon fill=\"none\" points=\"1209.5,-107.5 1209.5,-177.5 1282.5,-177.5 1282.5,-107.5 1209.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1246\" y=\"-162.3\">Minimum</text>\n",
-       "<polyline fill=\"none\" points=\"1209.5,-154.5 1282.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1209.5,-130.5 1282.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1246\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1509.5,-130 1509.5,-200 1584.5,-200 1584.5,-130 1509.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1547\" y=\"-184.8\">Maximum</text>\n",
+       "<polyline fill=\"none\" points=\"1509.5,-177 1584.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1509.5,-153 1584.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1547\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 29&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge60\">\n",
-       "<title>29-&gt;42</title>\n",
-       "<path d=\"M1282.6939,-173.559C1285.4201,-175.1998 1288.2011,-176.7031 1291,-178 1411.733,-233.9408 1571.5654,-250.4242 1643.3149,-255.1573\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.4539,-258.6725 1653.6511,-255.7971 1643.8864,-251.6859 1643.4539,-258.6725\" stroke=\"#000000\"/>\n",
+       "<!-- 29&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge63\">\n",
+       "<title>29-&gt;45</title>\n",
+       "<path d=\"M1568.7933,-200.2512C1575.5923,-208.8087 1583.7657,-217.1636 1593,-223 1643.8586,-255.1445 1819.7357,-284.7024 1897.5096,-296.5393\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.3997,-300.0622 1907.8095,-298.0904 1898.4422,-293.1402 1897.3997,-300.0622\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 29&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge61\">\n",
-       "<title>29-&gt;49</title>\n",
-       "<path d=\"M1282.5097,-173.9936C1285.2804,-175.5295 1288.1216,-176.8907 1291,-178 1317.8215,-188.3367 2212.7842,-242.4863 2414.7712,-254.5962\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.7475,-258.1009 2424.939,-255.2053 2415.1662,-251.1134 2414.7475,-258.1009\" stroke=\"#000000\"/>\n",
+       "<!-- 29&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge64\">\n",
+       "<title>29-&gt;52</title>\n",
+       "<path d=\"M1567.5531,-200.2456C1574.4828,-209.1312 1583.033,-217.655 1593,-223 1603.0508,-228.3899 2310.8237,-284.7283 2488.758,-298.8192\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5061,-302.3101 2498.7511,-299.6102 2489.0585,-295.3319 2488.5061,-302.3101\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 30 -->\n",
        "<g class=\"node\" id=\"node31\">\n",
        "<title>30</title>\n",
-       "<polygon fill=\"none\" points=\"1300.5,-107.5 1300.5,-177.5 1379.5,-177.5 1379.5,-107.5 1300.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1340\" y=\"-162.3\">MultipleOf</text>\n",
-       "<polyline fill=\"none\" points=\"1300.5,-154.5 1379.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1300.5,-130.5 1379.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1340\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"4071.5,-130 4071.5,-200 4142.5,-200 4142.5,-130 4071.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4107\" y=\"-184.8\">MinItems</text>\n",
+       "<polyline fill=\"none\" points=\"4071.5,-177 4142.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4071.5,-153 4142.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4107\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 30&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge62\">\n",
-       "<title>30-&gt;42</title>\n",
-       "<path d=\"M1379.6309,-173.4889C1382.3975,-175.1241 1385.2002,-176.6473 1388,-178 1474.6371,-219.8592 1586.782,-242.2002 1643.9454,-251.5676\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.5338,-255.0461 1653.9607,-253.1674 1644.6381,-248.1337 1643.5338,-255.0461\" stroke=\"#000000\"/>\n",
+       "<!-- 30&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge65\">\n",
+       "<title>30-&gt;45</title>\n",
+       "<path d=\"M4087.6948,-200.0217C4080.845,-209.1354 4072.2425,-217.8368 4062,-223 3983.9946,-262.3226 2577.2466,-254.6244 2490,-259 2294.7586,-268.7917 2061.5522,-289.9559 1972.2717,-298.4074\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7334,-294.9427 1962.1095,-299.3735 1972.3959,-301.9113 1971.7334,-294.9427\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 30&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge63\">\n",
-       "<title>30-&gt;49</title>\n",
-       "<path d=\"M1379.6445,-174.2697C1382.3865,-175.6898 1385.182,-176.9542 1388,-178 1437.0576,-196.2056 2226.6454,-243.5808 2414.9234,-254.6589\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.7599,-258.1552 2424.948,-255.2478 2415.1705,-251.1673 2414.7599,-258.1552\" stroke=\"#000000\"/>\n",
+       "<!-- 30&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge66\">\n",
+       "<title>30-&gt;52</title>\n",
+       "<path d=\"M4087.411,-200.2177C4080.5976,-209.2183 4072.0857,-217.8098 4062,-223 3972.1233,-269.2513 3253.9308,-253.525 3153,-259 2932.5159,-270.9603 2668.6034,-291.0497 2569.3591,-298.8084\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8724,-295.3357 2559.1764,-299.6064 2569.4194,-302.3143 2568.8724,-295.3357\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 30&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge67\">\n",
+       "<title>30-&gt;53</title>\n",
+       "<path d=\"M4087.0061,-200.1921C4080.2288,-209.0768 4071.8373,-217.6136 4062,-223 3989.4378,-262.7314 3406.2836,-292.34 3240.0703,-300.0338\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3239.5637,-296.5533 3229.7349,-300.5088 3239.8851,-303.5459 3239.5637,-296.5533\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 31 -->\n",
        "<g class=\"node\" id=\"node32\">\n",
        "<title>31</title>\n",
-       "<polygon fill=\"none\" points=\"610,-107.5 610,-177.5 664,-177.5 664,-107.5 610,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"637\" y=\"-162.3\">Not</text>\n",
-       "<polyline fill=\"none\" points=\"610,-154.5 664,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"610,-130.5 664,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"637\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1938.5,-130 1938.5,-200 2017.5,-200 2017.5,-130 1938.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1978\" y=\"-184.8\">MinLength</text>\n",
+       "<polyline fill=\"none\" points=\"1938.5,-177 2017.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1938.5,-153 2017.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1978\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 31&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge64\">\n",
-       "<title>31-&gt;42</title>\n",
-       "<path d=\"M664.255,-172.8718C667.0391,-174.8584 669.9658,-176.6146 673,-178 762.7377,-218.9721 1472.1053,-248.9027 1643.7164,-255.5909\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.6498,-259.0909 1653.7777,-255.9804 1643.9206,-252.0961 1643.6498,-259.0909\" stroke=\"#000000\"/>\n",
+       "<!-- 31&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge68\">\n",
+       "<title>31-&gt;45</title>\n",
+       "<path d=\"M1966.9264,-200.2809C1961.4844,-217.6194 1954.8665,-238.7044 1949.0701,-257.172\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1945.6914,-256.2494 1946.036,-266.8387 1952.3701,-258.3457 1945.6914,-256.2494\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 31&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge69\">\n",
+       "<title>31-&gt;52</title>\n",
+       "<path d=\"M2000.2174,-200.1006C2007.4094,-208.8723 2016.1183,-217.3733 2026,-223 2105.2791,-268.1422 2383.7187,-291.8473 2488.6151,-299.3371\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.5728,-302.8427 2498.7934,-300.0517 2489.0631,-295.8599 2488.5728,-302.8427\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 31&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge70\">\n",
+       "<title>31-&gt;53</title>\n",
+       "<path d=\"M1999.4081,-200.0797C2006.687,-209.0772 2015.6439,-217.7017 2026,-223 2133.4625,-277.9788 2447.5638,-250.8771 2568,-259 2787.305,-273.7912 3049.6587,-291.8834 3152.0439,-298.9593\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.0864,-302.4705 3162.3039,-299.6685 3152.5691,-295.4871 3152.0864,-302.4705\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 32 -->\n",
        "<g class=\"node\" id=\"node33\">\n",
        "<title>32</title>\n",
-       "<polygon fill=\"none\" points=\"682,-107.5 682,-177.5 736,-177.5 736,-107.5 682,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"709\" y=\"-162.3\">Null</text>\n",
-       "<polyline fill=\"none\" points=\"682,-154.5 736,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"682,-130.5 736,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"709\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1602.5,-130 1602.5,-200 1675.5,-200 1675.5,-130 1602.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1639\" y=\"-184.8\">Minimum</text>\n",
+       "<polyline fill=\"none\" points=\"1602.5,-177 1675.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1602.5,-153 1675.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1639\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 32&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge65\">\n",
-       "<title>32-&gt;42</title>\n",
-       "<path d=\"M736.264,-172.8521C739.0462,-174.8429 741.9699,-176.6056 745,-178 827.8087,-216.1086 1479.9762,-247.9126 1643.7756,-255.3545\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.6996,-258.8545 1653.8474,-255.8092 1644.0154,-251.8616 1643.6996,-258.8545\" stroke=\"#000000\"/>\n",
+       "<!-- 32&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge71\">\n",
+       "<title>32-&gt;45</title>\n",
+       "<path d=\"M1660.7442,-200.0832C1667.3469,-208.5387 1675.2125,-216.8852 1684,-223 1750.6552,-269.3821 1845.7592,-289.441 1897.669,-297.3699\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.359,-300.8617 1907.7593,-298.8406 1898.3687,-293.9348 1897.359,-300.8617\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 32&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge72\">\n",
+       "<title>32-&gt;52</title>\n",
+       "<path d=\"M1659.0017,-200.1778C1665.7792,-209.0623 1674.1688,-217.6026 1684,-223 1719.7423,-242.6229 2325.6245,-287.3886 2488.8,-299.1345\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.672,-302.6342 2498.8971,-299.8598 2489.1736,-295.6522 2488.672,-302.6342\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 33 -->\n",
        "<g class=\"node\" id=\"node34\">\n",
        "<title>33</title>\n",
-       "<polygon fill=\"none\" points=\"1397.5,-107.5 1397.5,-177.5 1452.5,-177.5 1452.5,-107.5 1397.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1425\" y=\"-162.3\">OneOf</text>\n",
-       "<polyline fill=\"none\" points=\"1397.5,-154.5 1452.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1397.5,-130.5 1452.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1425\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"1693.5,-130 1693.5,-200 1772.5,-200 1772.5,-130 1693.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1733\" y=\"-184.8\">MultipleOf</text>\n",
+       "<polyline fill=\"none\" points=\"1693.5,-177 1772.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1693.5,-153 1772.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1733\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 33&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge66\">\n",
-       "<title>33-&gt;42</title>\n",
-       "<path d=\"M1452.6793,-171.3136C1455.6929,-173.7481 1458.8232,-176.0284 1462,-178 1520.6235,-214.384 1598.4405,-237.3717 1643.7883,-248.6512\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.2264,-252.1163 1653.7699,-251.0746 1644.878,-245.314 1643.2264,-252.1163\" stroke=\"#000000\"/>\n",
+       "<!-- 33&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge73\">\n",
+       "<title>33-&gt;45</title>\n",
+       "<path d=\"M1758.3077,-200.2627C1765.1033,-208.3321 1772.8479,-216.4518 1781,-223 1816.986,-251.9058 1865.2329,-274.566 1898.0702,-288.0684\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.1522,-291.4719 1907.7358,-291.9616 1899.7676,-284.9788 1897.1522,-291.4719\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 33&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge67\">\n",
-       "<title>33-&gt;49</title>\n",
-       "<path d=\"M1452.6346,-172.5555C1455.615,-174.6719 1458.7516,-176.5414 1462,-178 1506.2057,-197.8499 2234.3461,-243.5083 2414.7891,-254.5589\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.7159,-258.0609 2424.9108,-255.1777 2415.143,-251.0739 2414.7159,-258.0609\" stroke=\"#000000\"/>\n",
+       "<!-- 33&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge74\">\n",
+       "<title>33-&gt;52</title>\n",
+       "<path d=\"M1754.7883,-200.1268C1762.0247,-209.0105 1770.8641,-217.5631 1781,-223 1843.6575,-256.6095 2341.1213,-290.2127 2488.1896,-299.4929\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.3606,-303.0104 2498.5602,-300.1435 2488.799,-296.0241 2488.3606,-303.0104\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 34 -->\n",
        "<g class=\"node\" id=\"node35\">\n",
        "<title>34</title>\n",
-       "<polygon fill=\"none\" points=\"1471,-107.5 1471,-177.5 1527,-177.5 1527,-107.5 1471,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1499\" y=\"-162.3\">Pattern</text>\n",
-       "<polyline fill=\"none\" points=\"1471,-154.5 1527,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1471,-130.5 1527,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1499\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 34&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge68\">\n",
-       "<title>34-&gt;42</title>\n",
-       "<path d=\"M1527.0139,-170.8178C1529.9597,-173.3527 1532.9828,-175.7919 1536,-178 1570.5476,-203.2838 1614.1317,-225.9525 1644.4529,-240.4532\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.266,-243.7632 1653.8032,-244.8671 1646.2543,-237.4331 1643.266,-243.7632\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"471,-130 471,-200 525,-200 525,-130 471,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"498\" y=\"-184.8\">Not</text>\n",
+       "<polyline fill=\"none\" points=\"471,-177 525,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"471,-153 525,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"498\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 34&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge69\">\n",
-       "<title>34-&gt;49</title>\n",
-       "<path d=\"M1527.0925,-172.8497C1529.9365,-174.8411 1532.9185,-176.6045 1536,-178 1616.9167,-214.6441 2247.9146,-247.1125 2414.6852,-255.1167\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2414.8325,-258.6276 2424.988,-255.6083 2415.1662,-251.6356 2414.8325,-258.6276\" stroke=\"#000000\"/>\n",
+       "<!-- 34&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge75\">\n",
+       "<title>34-&gt;45</title>\n",
+       "<path d=\"M512.5767,-200.2719C517.9761,-209.158 525.0324,-217.6754 534,-223 594.3182,-258.8143 1680.5087,-294.1421 1897.472,-300.8592\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.6047,-304.3649 1907.7079,-301.1748 1897.8205,-297.3682 1897.6047,-304.3649\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 35 -->\n",
        "<g class=\"node\" id=\"node36\">\n",
        "<title>35</title>\n",
-       "<polygon fill=\"none\" points=\"2783.5,-107.5 2783.5,-177.5 2896.5,-177.5 2896.5,-107.5 2783.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2840\" y=\"-162.3\">PatternProperties</text>\n",
-       "<polyline fill=\"none\" points=\"2783.5,-154.5 2896.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2783.5,-130.5 2896.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2840\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 35&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge70\">\n",
-       "<title>35-&gt;42</title>\n",
-       "<path d=\"M2783.3949,-174.8332C2780.2663,-176.0233 2777.1235,-177.0923 2774,-178 2722.1958,-193.0549 1903.9709,-243.4602 1718.2813,-254.7454\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.962,-251.2583 1708.1924,-255.3579 1718.3862,-258.2454 1717.962,-251.2583\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 35&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge71\">\n",
-       "<title>35-&gt;49</title>\n",
-       "<path d=\"M2783.1783,-174.1912C2780.1062,-175.549 2777.0348,-176.8295 2774,-178 2677.1315,-215.3632 2556.7928,-239.5257 2495.2963,-250.3756\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.4831,-246.9643 2485.2301,-252.1249 2495.6817,-253.861 2494.4831,-246.9643\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"543,-130 543,-200 597,-200 597,-130 543,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"570\" y=\"-184.8\">Null</text>\n",
+       "<polyline fill=\"none\" points=\"543,-177 597,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"543,-153 597,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"570\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 35&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge72\">\n",
-       "<title>35-&gt;50</title>\n",
-       "<path d=\"M2896.6784,-173.5558C2899.489,-175.0642 2902.2747,-176.5524 2905,-178 2942.0855,-197.6981 2984.5379,-219.5645 3015.3019,-235.289\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3013.9573,-238.5322 3024.4552,-239.9626 3017.1406,-232.2979 3013.9573,-238.5322\" stroke=\"#000000\"/>\n",
+       "<!-- 35&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge76\">\n",
+       "<title>35-&gt;45</title>\n",
+       "<path d=\"M584.5872,-200.2543C589.9867,-209.1401 597.0405,-217.6618 606,-223 719.691,-290.739 1693.6567,-300.504 1897.6343,-301.8098\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.8133,-305.3108 1907.8345,-301.872 1897.8561,-298.311 1897.8133,-305.3108\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 36 -->\n",
        "<g class=\"node\" id=\"node37\">\n",
        "<title>36</title>\n",
-       "<polygon fill=\"none\" points=\"2914.5,-107.5 2914.5,-177.5 2987.5,-177.5 2987.5,-107.5 2914.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2951\" y=\"-162.3\">Properties</text>\n",
-       "<polyline fill=\"none\" points=\"2914.5,-154.5 2987.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2914.5,-130.5 2987.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2951\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 36&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge73\">\n",
-       "<title>36-&gt;42</title>\n",
-       "<path d=\"M2914.4582,-173.5557C2911.3769,-175.2735 2908.2089,-176.789 2905,-178 2876.4975,-188.7565 1920.3571,-243.4389 1718.2756,-254.8938\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.9482,-251.4067 1708.1621,-255.4667 1718.3441,-258.3955 1717.9482,-251.4067\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1790.5,-130 1790.5,-200 1845.5,-200 1845.5,-130 1790.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1818\" y=\"-184.8\">OneOf</text>\n",
+       "<polyline fill=\"none\" points=\"1790.5,-177 1845.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1790.5,-153 1845.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1818\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 36&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge74\">\n",
-       "<title>36-&gt;49</title>\n",
-       "<path d=\"M2914.2981,-173.1642C2911.2538,-174.9725 2908.138,-176.6155 2905,-178 2831.2925,-210.5211 2591.222,-241.1727 2495.2142,-252.4452\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.5685,-248.9967 2485.0407,-253.6304 2495.3785,-255.9497 2494.5685,-248.9967\" stroke=\"#000000\"/>\n",
+       "<!-- 36&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge77\">\n",
+       "<title>36-&gt;45</title>\n",
+       "<path d=\"M1838.6902,-200.2292C1843.7148,-207.9606 1849.2939,-215.9404 1855,-223 1868.6879,-239.9348 1885.6375,-257.1116 1900.407,-271.1039\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1898.208,-273.8394 1907.9029,-278.1125 1902.9888,-268.7262 1898.208,-273.8394\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 36&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge75\">\n",
-       "<title>36-&gt;50</title>\n",
-       "<path d=\"M2983.9766,-177.7881C2994.757,-189.324 3006.8477,-202.2623 3018.0827,-214.2847\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3015.5631,-216.7147 3024.9481,-221.6314 3020.6775,-211.9353 3015.5631,-216.7147\" stroke=\"#000000\"/>\n",
+       "<!-- 36&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge78\">\n",
+       "<title>36-&gt;52</title>\n",
+       "<path d=\"M1833.5729,-200.2427C1839.1014,-209.0158 1846.195,-217.482 1855,-223 1908.8777,-256.7647 2351.1682,-289.7608 2488.489,-299.2746\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.3714,-302.7747 2498.5883,-299.97 2488.8523,-295.7913 2488.3714,-302.7747\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 37 -->\n",
        "<g class=\"node\" id=\"node38\">\n",
        "<title>37</title>\n",
-       "<polygon fill=\"none\" points=\"3006,-107.5 3006,-177.5 3110,-177.5 3110,-107.5 3006,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3058\" y=\"-162.3\">PropertyNames</text>\n",
-       "<polyline fill=\"none\" points=\"3006,-154.5 3110,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3006,-130.5 3110,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3058\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 37&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge76\">\n",
-       "<title>37-&gt;42</title>\n",
-       "<path d=\"M3005.9822,-174.4555C3002.6696,-175.8063 2999.3279,-177.0069 2996,-178 2988.12,-180.3516 1931.8878,-242.3075 1718.3721,-254.8124\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1718.0664,-251.3243 1708.2881,-255.403 1718.4756,-258.3123 1718.0664,-251.3243\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1864,-130 1864,-200 1920,-200 1920,-130 1864,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1892\" y=\"-184.8\">Pattern</text>\n",
+       "<polyline fill=\"none\" points=\"1864,-177 1920,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"1864,-153 1920,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1892\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 37&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge77\">\n",
-       "<title>37-&gt;49</title>\n",
-       "<path d=\"M3005.8746,-174.1212C3002.5891,-175.556 2999.2827,-176.8664 2996,-178 2902.7671,-210.196 2604.3546,-242.1832 2495.3532,-253.0811\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.7137,-249.6273 2485.1087,-254.0989 2495.4057,-256.5931 2494.7137,-249.6273\" stroke=\"#000000\"/>\n",
+       "<!-- 37&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge79\">\n",
+       "<title>37-&gt;45</title>\n",
+       "<path d=\"M1903.0736,-200.2809C1908.5156,-217.6194 1915.1335,-238.7044 1920.9299,-257.172\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1917.6299,-258.3457 1923.964,-266.8387 1924.3086,-256.2494 1917.6299,-258.3457\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 37&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge78\">\n",
-       "<title>37-&gt;50</title>\n",
-       "<path d=\"M3058,-177.7881C3058,-188.4534 3058,-200.3173 3058,-211.548\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3054.5001,-211.6313 3058,-221.6314 3061.5001,-211.6314 3054.5001,-211.6313\" stroke=\"#000000\"/>\n",
+       "<!-- 37&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge80\">\n",
+       "<title>37-&gt;52</title>\n",
+       "<path d=\"M1907.6245,-200.1609C1913.1535,-208.9333 1920.2345,-217.4194 1929,-223 2022.5597,-282.5647 2369.8949,-297.6139 2488.7833,-301.0595\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.817,-304.5617 2498.9103,-301.3407 2489.0113,-297.5644 2488.817,-304.5617\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 38 -->\n",
        "<g class=\"node\" id=\"node39\">\n",
        "<title>38</title>\n",
-       "<polygon fill=\"none\" points=\"3128,-107.5 3128,-177.5 3196,-177.5 3196,-107.5 3128,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3162\" y=\"-162.3\">Required</text>\n",
-       "<polyline fill=\"none\" points=\"3128,-154.5 3196,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3128,-130.5 3196,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3162\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2035.5,-130 2035.5,-200 2148.5,-200 2148.5,-130 2035.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2092\" y=\"-184.8\">PatternProperties</text>\n",
+       "<polyline fill=\"none\" points=\"2035.5,-177 2148.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2035.5,-153 2148.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2092\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 38&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge79\">\n",
-       "<title>38-&gt;42</title>\n",
-       "<path d=\"M3127.9953,-173.598C3125.0794,-175.306 3122.0679,-176.8078 3119,-178 3046.098,-206.331 2494.096,-209.716 2416,-214 2148.2761,-228.6861 1825.811,-248.1753 1718.0656,-254.736\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7948,-251.2459 1708.0262,-255.3477 1718.2206,-258.2329 1717.7948,-251.2459\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 38&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge80\">\n",
-       "<title>38-&gt;49</title>\n",
-       "<path d=\"M3127.901,-173.3668C3125.0069,-175.1283 3122.0261,-176.7053 3119,-178 3005.4382,-226.5875 2621.8718,-248.9851 2495.6459,-255.161\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2495.0981,-251.6832 2485.2779,-255.6599 2495.4346,-258.6751 2495.0981,-251.6832\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 38&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge81\">\n",
-       "<title>38-&gt;50</title>\n",
-       "<path d=\"M3129.948,-177.7881C3119.5687,-189.2152 3107.9397,-202.0183 3097.1074,-213.9442\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3094.2579,-211.8758 3090.1252,-221.6314 3099.4396,-216.5822 3094.2579,-211.8758\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 39 -->\n",
-       "<g class=\"node\" id=\"node40\">\n",
-       "<title>39</title>\n",
-       "<polygon fill=\"none\" points=\"754,-107.5 754,-177.5 808,-177.5 808,-107.5 754,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"781\" y=\"-162.3\">String</text>\n",
-       "<polyline fill=\"none\" points=\"754,-154.5 808,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"754,-130.5 808,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"781\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 39&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge82\">\n",
-       "<title>39-&gt;42</title>\n",
-       "<path d=\"M808.2747,-172.8291C811.0545,-174.8249 813.9748,-176.595 817,-178 892.8689,-213.2362 1487.66,-246.8067 1643.6472,-255.0694\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.5227,-258.5676 1653.693,-255.5985 1643.891,-251.5772 1643.5227,-258.5676\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 40 -->\n",
-       "<g class=\"node\" id=\"node41\">\n",
-       "<title>40</title>\n",
-       "<polygon fill=\"none\" points=\"826,-107.5 826,-177.5 880,-177.5 880,-107.5 826,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"853\" y=\"-162.3\">Then</text>\n",
-       "<polyline fill=\"none\" points=\"826,-154.5 880,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"826,-130.5 880,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"853\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 40&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge83\">\n",
-       "<title>40-&gt;42</title>\n",
-       "<path d=\"M880.2873,-172.802C883.0644,-174.8037 885.9806,-176.5826 889,-178 1025.6901,-242.1694 1506.2458,-254.3517 1643.8985,-256.5426\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.8949,-260.0428 1653.9466,-256.6942 1644.0006,-253.0436 1643.8949,-260.0428\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 41 -->\n",
-       "<g class=\"node\" id=\"node42\">\n",
-       "<title>41</title>\n",
-       "<polygon fill=\"none\" points=\"3214,-107.5 3214,-177.5 3268,-177.5 3268,-107.5 3214,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3241\" y=\"-162.3\">Title</text>\n",
-       "<polyline fill=\"none\" points=\"3214,-154.5 3268,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3214,-130.5 3268,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3241\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 41&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge84\">\n",
-       "<title>41-&gt;42</title>\n",
-       "<path d=\"M3213.7933,-172.9799C3210.9987,-174.943 3208.0564,-176.6643 3205,-178 3124.5856,-213.142 2503.6392,-209.4372 2416,-214 2148.2362,-227.9406 1825.7966,-247.906 1718.0617,-254.663\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7842,-251.1735 1708.0233,-255.2934 1718.223,-258.1597 1717.7842,-251.1735\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 41&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge85\">\n",
-       "<title>41-&gt;49</title>\n",
-       "<path d=\"M3213.7041,-172.7839C3210.9289,-174.7895 3208.0154,-176.5742 3205,-178 3140.5508,-208.4735 2642.8963,-244.2768 2495.811,-254.2834\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2495.1801,-250.818 2485.4394,-254.9857 2495.6531,-257.802 2495.1801,-250.818\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 41&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge86\">\n",
-       "<title>41-&gt;50</title>\n",
-       "<path d=\"M3213.8075,-170.8578C3210.9283,-173.3846 3207.9663,-175.8109 3205,-178 3172.254,-202.1661 3131.1853,-223.5972 3100.7865,-238.0189\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3099.289,-234.8553 3091.716,-242.2648 3102.2567,-241.1951 3099.289,-234.8553\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 43 -->\n",
-       "<g class=\"node\" id=\"node44\">\n",
-       "<title>43</title>\n",
-       "<polygon fill=\"none\" points=\"898,-107.5 898,-177.5 952,-177.5 952,-107.5 898,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"925\" y=\"-162.3\">Tuple</text>\n",
-       "<polyline fill=\"none\" points=\"898,-154.5 952,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"898,-130.5 952,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"925\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 43&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge87\">\n",
-       "<title>43-&gt;42</title>\n",
-       "<path d=\"M952.3026,-172.7696C955.0764,-174.7784 957.9877,-176.5677 961,-178 1083.8874,-236.4313 1513.5574,-252.5279 1643.4947,-256.1088\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1643.6393,-259.6138 1653.7291,-256.3818 1643.826,-252.6163 1643.6393,-259.6138\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 44 -->\n",
-       "<g class=\"node\" id=\"node45\">\n",
-       "<title>44</title>\n",
-       "<polygon fill=\"none\" points=\"536,-.5 536,-70.5 594,-70.5 594,-.5 536,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"565\" y=\"-55.3\">Unique</text>\n",
-       "<polyline fill=\"none\" points=\"536,-47.5 594,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"536,-23.5 594,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"565\" y=\"-8.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 44&#45;&gt;25 -->\n",
-       "<g class=\"edge\" id=\"edge88\">\n",
-       "<title>44-&gt;25</title>\n",
-       "<path d=\"M565,-70.5358C565,-79.0343 565,-88.2414 565,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"561.5001,-97.3855 565,-107.3855 568.5001,-97.3855 561.5001,-97.3855\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 45 -->\n",
-       "<g class=\"node\" id=\"node46\">\n",
-       "<title>45</title>\n",
-       "<polygon fill=\"none\" points=\"3286.5,-107.5 3286.5,-177.5 3375.5,-177.5 3375.5,-107.5 3286.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3331\" y=\"-162.3\">UniqueItems</text>\n",
-       "<polyline fill=\"none\" points=\"3286.5,-154.5 3375.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3286.5,-130.5 3375.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3331\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 45&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge89\">\n",
-       "<title>45-&gt;42</title>\n",
-       "<path d=\"M3286.2268,-174.3831C3283.1851,-175.775 3280.0969,-177.0023 3277,-178 3185.8629,-207.3622 2511.6301,-209.2038 2416,-214 2148.2102,-227.4308 1825.7872,-247.7218 1718.0592,-254.6131\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7771,-251.1239 1708.0214,-255.2562 1718.2247,-258.1096 1717.7771,-251.1239\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 45&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge90\">\n",
-       "<title>45-&gt;49</title>\n",
-       "<path d=\"M3286.4734,-174.037C3283.3468,-175.538 3280.1746,-176.8817 3277,-178 3202.729,-204.1629 2650.5145,-243.6047 2495.4112,-254.2636\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2495.0968,-250.7769 2485.3594,-254.9523 2495.5752,-257.7605 2495.0968,-250.7769\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 45&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge91\">\n",
-       "<title>45-&gt;50</title>\n",
-       "<path d=\"M3286.392,-172.9581C3283.2595,-174.744 3280.1105,-176.4438 3277,-178 3218.5257,-207.2544 3146.5055,-231.0815 3101.4071,-244.6591\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3100.2403,-241.3546 3091.6542,-247.5618 3102.2371,-248.0638 3100.2403,-241.3546\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 46 -->\n",
-       "<g class=\"node\" id=\"node47\">\n",
-       "<title>46</title>\n",
-       "<polygon fill=\"none\" points=\"4711.5,-107.5 4711.5,-177.5 4796.5,-177.5 4796.5,-107.5 4711.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4754\" y=\"-162.3\">_ConstType</text>\n",
-       "<polyline fill=\"none\" points=\"4711.5,-154.5 4796.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4711.5,-130.5 4796.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4754\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 54 -->\n",
-       "<g class=\"node\" id=\"node55\">\n",
-       "<title>54</title>\n",
-       "<polygon fill=\"none\" points=\"4399.5,-214.5 4399.5,-299.5 4526.5,-299.5 4526.5,-214.5 4399.5,-214.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4463\" y=\"-284.3\">_SchemaMeta</text>\n",
-       "<polyline fill=\"none\" points=\"4399.5,-276.5 4526.5,-276.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4399.5,-252.5 4526.5,-252.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"4407.5\" y=\"-237.3\">create(cls, name)</text>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"4407.5\" y=\"-222.3\">validate(cls, object)</text>\n",
-       "</g>\n",
-       "<!-- 46&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge92\">\n",
-       "<title>46-&gt;54</title>\n",
-       "<path d=\"M4711.4366,-172.9141C4708.2999,-174.7325 4705.1357,-176.4498 4702,-178 4648.7653,-204.3172 4584.7047,-224.9546 4536.3108,-238.5268\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4535.2445,-235.1903 4526.5404,-241.2309 4537.1117,-241.9367 4535.2445,-235.1903\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 47 -->\n",
-       "<g class=\"node\" id=\"node48\">\n",
-       "<title>47</title>\n",
-       "<polygon fill=\"none\" points=\"4700.5,-.5 4700.5,-70.5 4807.5,-70.5 4807.5,-.5 4700.5,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4754\" y=\"-55.3\">_ContainerType</text>\n",
-       "<polyline fill=\"none\" points=\"4700.5,-47.5 4807.5,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4700.5,-23.5 4807.5,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4754\" y=\"-8.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 47&#45;&gt;46 -->\n",
-       "<g class=\"edge\" id=\"edge93\">\n",
-       "<title>47-&gt;46</title>\n",
-       "<path d=\"M4754,-70.5358C4754,-79.0343 4754,-88.2414 4754,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4750.5001,-97.3855 4754,-107.3855 4757.5001,-97.3855 4750.5001,-97.3855\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 48 -->\n",
-       "<g class=\"node\" id=\"node49\">\n",
-       "<title>48</title>\n",
-       "<polygon fill=\"none\" points=\"4106,-107.5 4106,-177.5 4196,-177.5 4196,-107.5 4106,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4151\" y=\"-162.3\">_ListSchema</text>\n",
-       "<polyline fill=\"none\" points=\"4106,-154.5 4196,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4106,-130.5 4196,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4151\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 48&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge94\">\n",
-       "<title>48-&gt;54</title>\n",
-       "<path d=\"M4196.1323,-173.4721C4199.0849,-175.0901 4202.0554,-176.6161 4205,-178 4264.6434,-206.0316 4336.649,-227.1119 4389.4174,-240.4155\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4388.8228,-243.8741 4399.3719,-242.8906 4390.5119,-237.081 4388.8228,-243.8741\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 51 -->\n",
-       "<g class=\"node\" id=\"node52\">\n",
-       "<title>51</title>\n",
-       "<polygon fill=\"none\" points=\"4214.5,-107.5 4214.5,-177.5 4331.5,-177.5 4331.5,-107.5 4214.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4273\" y=\"-162.3\">_NumericSchema</text>\n",
-       "<polyline fill=\"none\" points=\"4214.5,-154.5 4331.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4214.5,-130.5 4331.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4273\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 51&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge95\">\n",
-       "<title>51-&gt;54</title>\n",
-       "<path d=\"M4331.2975,-177.6319C4350.017,-188.9129 4370.9833,-201.5478 4390.5873,-213.3618\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4388.8177,-216.3818 4399.1892,-218.5456 4392.4308,-210.3863 4388.8177,-216.3818\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 53 -->\n",
-       "<g class=\"node\" id=\"node54\">\n",
-       "<title>53</title>\n",
-       "<polygon fill=\"none\" points=\"4349.5,-107.5 4349.5,-177.5 4454.5,-177.5 4454.5,-107.5 4349.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4402\" y=\"-162.3\">_ObjectSchema</text>\n",
-       "<polyline fill=\"none\" points=\"4349.5,-154.5 4454.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4349.5,-130.5 4454.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4402\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 53&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge96\">\n",
-       "<title>53-&gt;54</title>\n",
-       "<path d=\"M4420.7998,-177.7881C4425.4687,-186.5519 4430.5689,-196.1251 4435.5587,-205.4913\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4432.5004,-207.1946 4440.2913,-214.3746 4438.6783,-203.9032 4432.5004,-207.1946\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 55 -->\n",
-       "<g class=\"node\" id=\"node56\">\n",
-       "<title>55</title>\n",
-       "<polygon fill=\"none\" points=\"4473,-107.5 4473,-177.5 4575,-177.5 4575,-107.5 4473,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4524\" y=\"-162.3\">_StringSchema</text>\n",
-       "<polyline fill=\"none\" points=\"4473,-154.5 4575,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4473,-130.5 4575,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4524\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 55&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge97\">\n",
-       "<title>55-&gt;54</title>\n",
-       "<path d=\"M4505.2002,-177.7881C4500.5313,-186.5519 4495.4311,-196.1251 4490.4413,-205.4913\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4487.3217,-203.9032 4485.7087,-214.3746 4493.4996,-207.1946 4487.3217,-203.9032\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 56 -->\n",
-       "<g class=\"node\" id=\"node57\">\n",
-       "<title>56</title>\n",
-       "<polygon fill=\"none\" points=\"4593,-107.5 4593,-177.5 4693,-177.5 4693,-107.5 4593,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4643\" y=\"-162.3\">_TupleSchema</text>\n",
-       "<polyline fill=\"none\" points=\"4593,-154.5 4693,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4593,-130.5 4693,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4643\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 56&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge98\">\n",
-       "<title>56-&gt;54</title>\n",
-       "<path d=\"M4592.86,-174.3946C4575.0088,-185.75 4554.5358,-198.7731 4535.2038,-211.0703\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4533.2677,-208.1538 4526.7086,-216.4742 4537.0248,-214.0601 4533.2677,-208.1538\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 57 -->\n",
-       "<g class=\"node\" id=\"node58\">\n",
-       "<title>57</title>\n",
-       "<polygon fill=\"none\" points=\"3393.5,-107.5 3393.5,-177.5 3490.5,-177.5 3490.5,-107.5 3393.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3442\" y=\"-162.3\">maxProperties</text>\n",
-       "<polyline fill=\"none\" points=\"3393.5,-154.5 3490.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3393.5,-130.5 3490.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3442\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 57&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge99\">\n",
-       "<title>57-&gt;42</title>\n",
-       "<path d=\"M3393.4603,-174.5453C3390.3307,-175.8735 3387.1646,-177.0446 3384,-178 3280.9636,-209.1079 2523.5069,-208.8567 2416,-214 2148.1799,-226.8129 1825.7763,-247.4986 1718.0562,-254.5527\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7685,-251.0639 1708.0192,-255.2112 1718.2269,-258.0489 1717.7685,-251.0639\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 57&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge100\">\n",
-       "<title>57-&gt;49</title>\n",
-       "<path d=\"M3393.404,-174.3665C3390.2886,-175.7396 3387.1409,-176.9694 3384,-178 3362.5223,-185.047 2670.8503,-239.9728 2495.2297,-253.8324\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.8167,-250.354 2485.1229,-254.6296 2495.3672,-257.3323 2494.8167,-250.354\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 57&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge101\">\n",
-       "<title>57-&gt;50</title>\n",
-       "<path d=\"M3393.1948,-173.8028C3390.132,-175.3177 3387.053,-176.7325 3384,-178 3287.4529,-218.0814 3166.0157,-240.7955 3102.0644,-250.7909\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.2873,-247.369 3091.9326,-252.3427 3102.3472,-254.2883 3101.2873,-247.369\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 58 -->\n",
-       "<g class=\"node\" id=\"node59\">\n",
-       "<title>58</title>\n",
-       "<polygon fill=\"none\" points=\"3508.5,-107.5 3508.5,-177.5 3603.5,-177.5 3603.5,-107.5 3508.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3556\" y=\"-162.3\">minProperties</text>\n",
-       "<polyline fill=\"none\" points=\"3508.5,-154.5 3603.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3508.5,-130.5 3603.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3556\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge102\">\n",
-       "<title>58-&gt;42</title>\n",
-       "<path d=\"M3508.3285,-174.5595C3505.245,-175.8841 3502.1232,-177.0506 3499,-178 3383.8056,-213.0194 2536.2734,-208.4837 2416,-214 2148.1551,-226.2847 1825.7674,-247.3079 1718.0538,-254.501\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"1717.7613,-251.0126 1708.0174,-255.1727 1718.2288,-257.997 1717.7613,-251.0126\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge103\">\n",
-       "<title>58-&gt;49</title>\n",
-       "<path d=\"M3508.2806,-174.4076C3505.2092,-175.7704 3502.103,-176.9867 3499,-178 3396.4752,-211.4793 3122.5459,-205.8714 3015,-214 2820.0303,-228.7364 2586.9125,-246.7694 2495.0306,-253.8932\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2494.7464,-250.4046 2485.047,-254.6674 2495.2877,-257.3837 2494.7464,-250.4046\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge104\">\n",
-       "<title>58-&gt;50</title>\n",
-       "<path d=\"M3508.472,-173.874C3505.3276,-175.3923 3502.1556,-176.7864 3499,-178 3360.217,-231.3726 3182.7906,-249.0864 3101.824,-254.6354\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3101.2634,-251.1645 3091.5138,-255.3113 3101.7214,-258.1495 3101.2634,-251.1645\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "</g>\n",
-       "</svg>"
-      ],
-      "text/plain": [
-       "<IPython.core.display.SVG object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "image/svg+xml": [
-       "<svg height=\"308pt\" viewBox=\"0.00 0.00 6817.00 308.00\" width=\"6817pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
-       "<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 304)\">\n",
-       "<title>classes_wtypes</title>\n",
-       "<polygon fill=\"#ffffff\" points=\"-4,4 -4,-304 6813,-304 6813,4 -4,4\" stroke=\"transparent\"/>\n",
-       "<!-- 0 -->\n",
-       "<g class=\"node\" id=\"node1\">\n",
-       "<title>0</title>\n",
-       "<polygon fill=\"none\" points=\"5190,-107.5 5190,-177.5 5341,-177.5 5341,-107.5 5190,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5265.5\" y=\"-162.3\">wtypes.AdditionalItems</text>\n",
-       "<polyline fill=\"none\" points=\"5190,-154.5 5341,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5190,-130.5 5341,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5265.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 42 -->\n",
-       "<g class=\"node\" id=\"node43\">\n",
-       "<title>42</title>\n",
-       "<polygon fill=\"none\" points=\"2409,-222 2409,-292 2496,-292 2496,-222 2409,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2452.5\" y=\"-276.8\">wtypes.Trait</text>\n",
-       "<polyline fill=\"none\" points=\"2409,-269 2496,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2409,-245 2496,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2452.5\" y=\"-229.8\"> </text>\n",
-       "</g>\n",
-       "<!-- 0&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge1\">\n",
-       "<title>0-&gt;42</title>\n",
-       "<path d=\"M5189.9535,-175.6966C5186.7883,-176.5632 5183.6292,-177.3382 5180.5,-178 4995.7655,-217.067 3670.2266,-208.0579 3481.5,-214 3108.0806,-225.7572 2658.7228,-246.9681 2506.1592,-254.3678\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9358,-250.8744 2496.1174,-254.8557 2506.2755,-257.8662 2505.9358,-250.8744\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 49 -->\n",
-       "<g class=\"node\" id=\"node50\">\n",
-       "<title>49</title>\n",
-       "<polygon fill=\"none\" points=\"3491,-222 3491,-292 3594,-292 3594,-222 3491,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3542.5\" y=\"-276.8\">wtypes._NoInit</text>\n",
-       "<polyline fill=\"none\" points=\"3491,-269 3594,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3491,-245 3594,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3542.5\" y=\"-229.8\"> </text>\n",
-       "</g>\n",
-       "<!-- 0&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge2\">\n",
-       "<title>0-&gt;49</title>\n",
-       "<path d=\"M5189.9351,-175.6116C5186.775,-176.5017 5183.622,-177.3049 5180.5,-178 4996.8274,-218.8948 4522.4499,-204.8992 4334.5,-214 4062.3803,-227.1764 3737.8271,-245.6692 3604.4151,-253.3911\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.1624,-249.8998 3594.3816,-253.9724 3604.5673,-256.8881 3604.1624,-249.8998\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 50 -->\n",
-       "<g class=\"node\" id=\"node51\">\n",
-       "<title>50</title>\n",
-       "<polygon fill=\"none\" points=\"4343.5,-222 4343.5,-292 4453.5,-292 4453.5,-222 4343.5,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4398.5\" y=\"-276.8\">wtypes._NoTitle</text>\n",
-       "<polyline fill=\"none\" points=\"4343.5,-269 4453.5,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4343.5,-245 4453.5,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4398.5\" y=\"-229.8\"> </text>\n",
-       "</g>\n",
-       "<!-- 0&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge3\">\n",
-       "<title>0-&gt;50</title>\n",
-       "<path d=\"M5189.8802,-175.3809C5186.7353,-176.3349 5183.6005,-177.2144 5180.5,-178 5045.1615,-212.2916 4626.5274,-242.2387 4463.9737,-252.8762\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.3941,-249.4064 4453.6426,-253.5488 4463.8489,-256.3917 4463.3941,-249.4064\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 1 -->\n",
-       "<g class=\"node\" id=\"node2\">\n",
-       "<title>1</title>\n",
-       "<polygon fill=\"none\" points=\"5359.5,-107.5 5359.5,-177.5 5535.5,-177.5 5535.5,-107.5 5359.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5447.5\" y=\"-162.3\">wtypes.AdditionalProperties</text>\n",
-       "<polyline fill=\"none\" points=\"5359.5,-154.5 5535.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5359.5,-130.5 5535.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5447.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 1&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge4\">\n",
-       "<title>1-&gt;42</title>\n",
-       "<path d=\"M5359.4605,-175.8941C5356.1192,-176.6817 5352.7916,-177.3894 5349.5,-178 5145.3876,-215.8608 3688.9974,-207.6659 3481.5,-214 3108.0695,-225.3994 2658.7188,-246.8366 2506.1581,-254.3315\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9323,-250.8383 2496.1165,-254.8258 2506.2765,-257.8299 2505.9323,-250.8383\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 1&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge5\">\n",
-       "<title>1-&gt;49</title>\n",
-       "<path d=\"M5359.4474,-175.8254C5356.1098,-176.6324 5352.7865,-177.3628 5349.5,-178 5127.9283,-220.9568 4559.9705,-203.8817 4334.5,-214 4062.3354,-226.2138 3737.8067,-245.2319 3604.4082,-253.2421\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.1475,-249.7513 3594.3757,-253.8454 3604.5678,-256.7387 3604.1475,-249.7513\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 1&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge6\">\n",
-       "<title>1-&gt;50</title>\n",
-       "<path d=\"M5359.406,-175.6246C5356.0801,-176.4881 5352.7705,-177.2851 5349.5,-178 5179.7313,-215.1108 4649.5791,-244.4501 4463.6938,-253.8339\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.3367,-250.3474 4453.5249,-254.3447 4463.6879,-257.3385 4463.3367,-250.3474\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 2 -->\n",
-       "<g class=\"node\" id=\"node3\">\n",
-       "<title>2</title>\n",
-       "<polygon fill=\"none\" points=\"2235.5,-107.5 2235.5,-177.5 2327.5,-177.5 2327.5,-107.5 2235.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2281.5\" y=\"-162.3\">wtypes.AllOf</text>\n",
-       "<polyline fill=\"none\" points=\"2235.5,-154.5 2327.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2235.5,-130.5 2327.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2281.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 2&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge7\">\n",
-       "<title>2-&gt;42</title>\n",
-       "<path d=\"M2327.7751,-173.4853C2350.2387,-188.5268 2377.3143,-206.6563 2400.4905,-222.1749\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.5803,-225.108 2408.8369,-227.7636 2402.475,-219.2915 2398.5803,-225.108\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 2&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge8\">\n",
-       "<title>2-&gt;49</title>\n",
-       "<path d=\"M2327.7998,-174.5864C2330.6759,-175.8819 2333.5866,-177.0368 2336.5,-178 2445.5154,-214.041 3249.7729,-246.2043 3480.6794,-254.7727\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.7926,-258.2792 3490.9151,-255.151 3481.0512,-251.2839 3480.7926,-258.2792\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 3 -->\n",
-       "<g class=\"node\" id=\"node4\">\n",
-       "<title>3</title>\n",
-       "<polygon fill=\"none\" points=\"2346,-107.5 2346,-177.5 2445,-177.5 2445,-107.5 2346,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2395.5\" y=\"-162.3\">wtypes.AnyOf</text>\n",
-       "<polyline fill=\"none\" points=\"2346,-154.5 2445,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2346,-130.5 2445,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2395.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 3&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge9\">\n",
-       "<title>3-&gt;42</title>\n",
-       "<path d=\"M2413.067,-177.7881C2418.5389,-188.7799 2424.6446,-201.0448 2430.3858,-212.5776\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2427.3031,-214.2391 2434.8929,-221.6314 2433.5696,-211.1195 2427.3031,-214.2391\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 3&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge10\">\n",
-       "<title>3-&gt;49</title>\n",
-       "<path d=\"M2445.2838,-174.5566C2448.3393,-175.8597 2451.4233,-177.0244 2454.5,-178 2647.9117,-239.3317 3279.7848,-253.3392 3480.6254,-256.276\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.6571,-259.7767 3490.7059,-256.4194 3480.7567,-252.7774 3480.6571,-259.7767\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 4 -->\n",
-       "<g class=\"node\" id=\"node5\">\n",
-       "<title>4</title>\n",
-       "<polygon fill=\"none\" points=\"252,-107.5 252,-177.5 339,-177.5 339,-107.5 252,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"295.5\" y=\"-162.3\">wtypes.Bool</text>\n",
-       "<polyline fill=\"none\" points=\"252,-154.5 339,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"252,-130.5 339,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"295.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 4&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge11\">\n",
-       "<title>4-&gt;42</title>\n",
-       "<path d=\"M339.0984,-174.2535C342.1925,-175.7014 345.3399,-176.9743 348.5,-178 548.5338,-242.9273 2089.2575,-254.9628 2398.5368,-256.732\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.5754,-260.2322 2408.5949,-256.7884 2398.6147,-253.2323 2398.5754,-260.2322\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 5 -->\n",
-       "<g class=\"node\" id=\"node6\">\n",
-       "<title>5</title>\n",
-       "<polygon fill=\"none\" points=\"151.5,-.5 151.5,-70.5 247.5,-70.5 247.5,-.5 151.5,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"199.5\" y=\"-55.3\">wtypes.Bunch</text>\n",
-       "<polyline fill=\"none\" points=\"151.5,-47.5 247.5,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"151.5,-23.5 247.5,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"199.5\" y=\"-8.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 14 -->\n",
-       "<g class=\"node\" id=\"node15\">\n",
-       "<title>14</title>\n",
-       "<polygon fill=\"none\" points=\"149.5,-107.5 149.5,-177.5 233.5,-177.5 233.5,-107.5 149.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"191.5\" y=\"-162.3\">wtypes.Dict</text>\n",
-       "<polyline fill=\"none\" points=\"149.5,-154.5 233.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"149.5,-130.5 233.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"191.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 5&#45;&gt;14 -->\n",
-       "<g class=\"edge\" id=\"edge12\">\n",
-       "<title>5-&gt;14</title>\n",
-       "<path d=\"M196.8805,-70.5358C196.2451,-79.0343 195.5567,-88.2414 194.8913,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"191.3808,-97.1523 194.1254,-107.3855 198.3613,-97.6743 191.3808,-97.1523\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 6 -->\n",
-       "<g class=\"node\" id=\"node7\">\n",
-       "<title>6</title>\n",
-       "<polygon fill=\"none\" points=\"0,-.5 0,-70.5 133,-70.5 133,-.5 0,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"66.5\" y=\"-55.3\">wtypes.Configurable</text>\n",
-       "<polyline fill=\"none\" points=\"0,-47.5 133,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"0,-23.5 133,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"66.5\" y=\"-8.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 11 -->\n",
-       "<g class=\"node\" id=\"node12\">\n",
-       "<title>11</title>\n",
-       "<polygon fill=\"none\" points=\"15.5,-107.5 15.5,-177.5 131.5,-177.5 131.5,-107.5 15.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"73.5\" y=\"-162.3\">wtypes.DataClass</text>\n",
-       "<polyline fill=\"none\" points=\"15.5,-154.5 131.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"15.5,-130.5 131.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"73.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 6&#45;&gt;11 -->\n",
-       "<g class=\"edge\" id=\"edge13\">\n",
-       "<title>6-&gt;11</title>\n",
-       "<path d=\"M68.7921,-70.5358C69.348,-79.0343 69.9504,-88.2414 70.5326,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"67.0574,-97.6353 71.2028,-107.3855 74.0424,-97.1783 67.0574,-97.6353\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 7 -->\n",
-       "<g class=\"node\" id=\"node8\">\n",
-       "<title>7</title>\n",
-       "<polygon fill=\"none\" points=\"2463.5,-107.5 2463.5,-177.5 2555.5,-177.5 2555.5,-107.5 2463.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2509.5\" y=\"-162.3\">wtypes.Const</text>\n",
-       "<polyline fill=\"none\" points=\"2463.5,-154.5 2555.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2463.5,-130.5 2555.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2509.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 7&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge14\">\n",
-       "<title>7-&gt;42</title>\n",
-       "<path d=\"M2491.933,-177.7881C2486.4611,-188.7799 2480.3554,-201.0448 2474.6142,-212.5776\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2471.4304,-211.1195 2470.1071,-221.6314 2477.6969,-214.2391 2471.4304,-211.1195\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 7&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge15\">\n",
-       "<title>7-&gt;49</title>\n",
-       "<path d=\"M2555.8175,-174.5334C2558.6891,-175.8424 2561.594,-177.0147 2564.5,-178 2735.3985,-235.9433 3293.2988,-252.0879 3480.5673,-255.9322\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.7177,-259.4358 3490.7859,-256.1372 3480.8582,-252.4372 3480.7177,-259.4358\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 8 -->\n",
-       "<g class=\"node\" id=\"node9\">\n",
-       "<title>8</title>\n",
-       "<polygon fill=\"none\" points=\"3009,-107.5 3009,-177.5 3118,-177.5 3118,-107.5 3009,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3063.5\" y=\"-162.3\">wtypes.Contains</text>\n",
-       "<polyline fill=\"none\" points=\"3009,-154.5 3118,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3009,-130.5 3118,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3063.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 8&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge16\">\n",
-       "<title>8-&gt;42</title>\n",
-       "<path d=\"M3008.9275,-174.4219C3005.7856,-175.7388 3002.6307,-176.9454 2999.5,-178 2825.613,-236.578 2606.2815,-251.7232 2506.4306,-255.6371\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2506.1499,-252.145 2496.2859,-256.0119 2506.4083,-259.1402 2506.1499,-252.145\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 8&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge17\">\n",
-       "<title>8-&gt;49</title>\n",
-       "<path d=\"M3118.3259,-174.7285C3121.0547,-175.9091 3123.7879,-177.0088 3126.5,-178 3247.6291,-222.2713 3398.1022,-242.9653 3480.8173,-251.6059\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.5029,-255.0919 3490.8065,-252.625 3481.2134,-248.128 3480.5029,-255.0919\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 8&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge18\">\n",
-       "<title>8-&gt;50</title>\n",
-       "<path d=\"M3118.1846,-175.1565C3120.9511,-176.2226 3123.7311,-177.181 3126.5,-178 3155.7162,-186.6417 4076.7918,-238.9227 4332.9666,-253.3278\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4333.0513,-256.838 4343.232,-253.9047 4333.4442,-249.849 4333.0513,-256.838\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 9 -->\n",
-       "<g class=\"node\" id=\"node10\">\n",
-       "<title>9</title>\n",
-       "<polygon fill=\"none\" points=\"5553.5,-107.5 5553.5,-177.5 5711.5,-177.5 5711.5,-107.5 5553.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5632.5\" y=\"-162.3\">wtypes.ContentEncoding</text>\n",
-       "<polyline fill=\"none\" points=\"5553.5,-154.5 5711.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5553.5,-130.5 5711.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5632.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 9&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge19\">\n",
-       "<title>9-&gt;49</title>\n",
-       "<path d=\"M5553.2695,-175.9209C5550.3315,-176.6935 5547.4023,-177.3917 5544.5,-178 5281.2124,-233.1805 4603.2707,-202.7073 4334.5,-214 4062.3017,-225.4367 3737.7913,-244.8788 3604.4029,-253.1218\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.1358,-249.6315 3594.3712,-253.7429 3604.5684,-256.6181 3604.1358,-249.6315\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 9&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge20\">\n",
-       "<title>9-&gt;50</title>\n",
-       "<path d=\"M5553.2372,-175.7742C5550.3084,-176.5883 5547.3898,-177.3351 5544.5,-178 5336.4272,-225.8712 4674.7174,-248.9291 4463.7748,-255.1924\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.6702,-251.6938 4453.7776,-255.4866 4463.8762,-258.6908 4463.6702,-251.6938\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 10 -->\n",
-       "<g class=\"node\" id=\"node11\">\n",
-       "<title>10</title>\n",
-       "<polygon fill=\"none\" points=\"3136,-107.5 3136,-177.5 3305,-177.5 3305,-107.5 3136,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3220.5\" y=\"-162.3\">wtypes.ContentMediaType</text>\n",
-       "<polyline fill=\"none\" points=\"3136,-154.5 3305,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3136,-130.5 3305,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3220.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 10&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge21\">\n",
-       "<title>10-&gt;42</title>\n",
-       "<path d=\"M3135.998,-175.4988C3132.8089,-176.3977 3129.6356,-177.2364 3126.5,-178 2900.3298,-233.0814 2621.7885,-250.1976 2506.4419,-255.1409\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.969,-251.6575 2496.1228,-255.5691 2506.2593,-258.6514 2505.969,-251.6575\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 10&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge22\">\n",
-       "<title>10-&gt;49</title>\n",
-       "<path d=\"M3305.0102,-174.5416C3308.2118,-175.7156 3311.3835,-176.8718 3314.5,-178 3370.7655,-198.368 3435.2252,-220.6015 3481.2178,-236.2777\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.1478,-239.6106 3490.7422,-239.5202 3482.4038,-232.9841 3480.1478,-239.6106\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 10&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge23\">\n",
-       "<title>10-&gt;50</title>\n",
-       "<path d=\"M3305.2201,-175.7458C3308.3337,-176.5679 3311.4336,-177.3242 3314.5,-178 3510.5647,-221.2113 4129.6907,-247.171 4333.0623,-254.7018\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4333.1669,-258.208 4343.2888,-255.0779 4333.4243,-251.2127 4333.1669,-258.208\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 11&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge24\">\n",
-       "<title>11-&gt;42</title>\n",
-       "<path d=\"M131.7047,-175.2524C134.6341,-176.2929 137.5746,-177.2196 140.5,-178 364.952,-237.8771 2072.1044,-254.051 2398.6168,-256.6095\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.7345,-260.1104 2408.7613,-256.6881 2398.7888,-253.1106 2398.7345,-260.1104\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 52 -->\n",
-       "<g class=\"node\" id=\"node53\">\n",
-       "<title>52</title>\n",
-       "<polygon fill=\"none\" points=\"80.5,-222 80.5,-292 184.5,-292 184.5,-222 80.5,-222\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"132.5\" y=\"-276.8\">wtypes._Object</text>\n",
-       "<polyline fill=\"none\" points=\"80.5,-269 184.5,-269 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"80.5,-245 184.5,-245 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"88.5\" y=\"-229.8\">load()</text>\n",
-       "</g>\n",
-       "<!-- 11&#45;&gt;52 -->\n",
-       "<g class=\"edge\" id=\"edge25\">\n",
-       "<title>11-&gt;52</title>\n",
-       "<path d=\"M91.6834,-177.7881C97.3473,-188.7799 103.6672,-201.0448 109.6098,-212.5776\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"106.5833,-214.3453 114.2751,-221.6314 112.8058,-211.1389 106.5833,-214.3453\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 12 -->\n",
-       "<g class=\"node\" id=\"node13\">\n",
-       "<title>12</title>\n",
-       "<polygon fill=\"none\" points=\"3323.5,-107.5 3323.5,-177.5 3461.5,-177.5 3461.5,-107.5 3323.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3392.5\" y=\"-162.3\">wtypes.Dependencies</text>\n",
-       "<polyline fill=\"none\" points=\"3323.5,-154.5 3461.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3323.5,-130.5 3461.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3392.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 12&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge26\">\n",
-       "<title>12-&gt;42</title>\n",
-       "<path d=\"M3323.1695,-175.1517C3319.9324,-176.2012 3316.6994,-177.1594 3313.5,-178 3159.6299,-218.4245 2670.268,-246.0677 2506.4902,-254.3806\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9915,-250.9012 2496.1803,-254.9001 2506.3439,-257.8923 2505.9915,-250.9012\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 12&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge27\">\n",
-       "<title>12-&gt;49</title>\n",
-       "<path d=\"M3438.7289,-177.7881C3454.3425,-189.7065 3471.917,-203.1217 3488.1035,-215.4774\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3486.3512,-218.5429 3496.4237,-221.8285 3490.5986,-212.9787 3486.3512,-218.5429\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 12&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge28\">\n",
-       "<title>12-&gt;50</title>\n",
-       "<path d=\"M3461.8069,-175.4627C3464.7164,-176.394 3467.6213,-177.2465 3470.5,-178 3634.192,-220.8483 4150.4972,-246.4381 4333.4464,-254.3494\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4333.3197,-257.8471 4343.4606,-254.7791 4333.6199,-250.8535 4333.3197,-257.8471\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 13 -->\n",
-       "<g class=\"node\" id=\"node14\">\n",
-       "<title>13</title>\n",
-       "<polygon fill=\"none\" points=\"3480,-107.5 3480,-177.5 3605,-177.5 3605,-107.5 3480,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3542.5\" y=\"-162.3\">wtypes.Description</text>\n",
-       "<polyline fill=\"none\" points=\"3480,-154.5 3605,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3480,-130.5 3605,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3542.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 13&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge29\">\n",
-       "<title>13-&gt;42</title>\n",
-       "<path d=\"M3479.8213,-175.0842C3476.7082,-176.1697 3473.5912,-177.1519 3470.5,-178 3286.0353,-228.608 2689.124,-250.0325 2506.252,-255.5121\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9681,-252.0189 2496.0761,-255.8133 2506.1753,-259.0158 2505.9681,-252.0189\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 13&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge30\">\n",
-       "<title>13-&gt;49</title>\n",
-       "<path d=\"M3542.5,-177.7881C3542.5,-188.4534 3542.5,-200.3173 3542.5,-211.548\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3539.0001,-211.6313 3542.5,-221.6314 3546.0001,-211.6314 3539.0001,-211.6313\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 13&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge31\">\n",
-       "<title>13-&gt;50</title>\n",
-       "<path d=\"M3605.1178,-175.2868C3607.9187,-176.2827 3610.7202,-177.1947 3613.5,-178 3748.1913,-217.019 4169.6008,-244.159 4332.9175,-253.4611\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4333.1142,-256.9777 4343.2958,-254.048 4333.5094,-249.9889 4333.1142,-256.9777\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 14&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge32\">\n",
-       "<title>14-&gt;42</title>\n",
-       "<path d=\"M233.6844,-174.4018C236.5823,-175.7891 239.5322,-177.0102 242.5,-178 452.6041,-248.072 2079.5461,-256.0074 2398.3905,-256.8911\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.7353,-260.3919 2408.7446,-256.9185 2398.7539,-253.3919 2398.7353,-260.3919\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 14&#45;&gt;52 -->\n",
-       "<g class=\"edge\" id=\"edge33\">\n",
-       "<title>14-&gt;52</title>\n",
-       "<path d=\"M173.3166,-177.7881C167.6527,-188.7799 161.3328,-201.0448 155.3902,-212.5776\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"152.1942,-211.1389 150.7249,-221.6314 158.4167,-214.3453 152.1942,-211.1389\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 15 -->\n",
-       "<g class=\"node\" id=\"node16\">\n",
-       "<title>15</title>\n",
-       "<polygon fill=\"none\" points=\"357.5,-107.5 357.5,-177.5 441.5,-177.5 441.5,-107.5 357.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"399.5\" y=\"-162.3\">wtypes.Else</text>\n",
-       "<polyline fill=\"none\" points=\"357.5,-154.5 441.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"357.5,-130.5 441.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"399.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 15&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge34\">\n",
-       "<title>15-&gt;42</title>\n",
-       "<path d=\"M441.6887,-174.3888C444.5856,-175.7793 447.534,-177.0047 450.5,-178 639.7276,-241.4996 2099.0071,-254.6391 2398.7774,-256.6775\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.9248,-260.1784 2408.948,-256.7454 2398.9716,-253.1786 2398.9248,-260.1784\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 16 -->\n",
-       "<g class=\"node\" id=\"node17\">\n",
-       "<title>16</title>\n",
-       "<polygon fill=\"none\" points=\"2574,-107.5 2574,-177.5 2667,-177.5 2667,-107.5 2574,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2620.5\" y=\"-162.3\">wtypes.Enum</text>\n",
-       "<polyline fill=\"none\" points=\"2574,-154.5 2667,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2574,-130.5 2667,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2620.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 16&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge35\">\n",
-       "<title>16-&gt;42</title>\n",
-       "<path d=\"M2573.7026,-174.3946C2552.1799,-189.0634 2526.5736,-206.5153 2504.4546,-221.5904\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2502.456,-218.717 2496.1638,-227.241 2506.3983,-224.5013 2502.456,-218.717\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 16&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge36\">\n",
-       "<title>16-&gt;49</title>\n",
-       "<path d=\"M2667.1486,-174.6435C2669.9131,-175.9032 2672.7065,-177.0368 2675.5,-178 2824.8061,-229.4784 3308.1118,-249.5553 3480.6113,-255.1937\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.6809,-258.6977 3490.7884,-255.5213 3480.9062,-251.7013 3480.6809,-258.6977\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 17 -->\n",
-       "<g class=\"node\" id=\"node18\">\n",
-       "<title>17</title>\n",
-       "<polygon fill=\"none\" points=\"2685,-107.5 2685,-177.5 2800,-177.5 2800,-107.5 2685,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2742.5\" y=\"-162.3\">wtypes.Examples</text>\n",
-       "<polyline fill=\"none\" points=\"2685,-154.5 2800,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2685,-130.5 2800,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2742.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 17&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge37\">\n",
-       "<title>17-&gt;42</title>\n",
-       "<path d=\"M2684.6522,-173.8178C2681.5767,-175.2731 2678.5131,-176.6766 2675.5,-178 2618.9189,-202.8516 2551.8159,-225.78 2506.104,-240.4614\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2504.8628,-237.1835 2496.3997,-243.5574 2506.9905,-243.8523 2504.8628,-237.1835\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 17&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge38\">\n",
-       "<title>17-&gt;49</title>\n",
-       "<path d=\"M2800.2681,-175.1359C2803.0141,-176.1897 2805.7658,-177.1532 2808.5,-178 2933.7141,-216.7817 3327.4442,-244.0251 3480.6475,-253.4092\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.6268,-256.9143 3490.8208,-254.0277 3481.0517,-249.9272 3480.6268,-256.9143\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 18 -->\n",
-       "<g class=\"node\" id=\"node19\">\n",
-       "<title>18</title>\n",
-       "<polygon fill=\"none\" points=\"2818,-107.5 2818,-177.5 2991,-177.5 2991,-107.5 2818,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2904.5\" y=\"-162.3\">wtypes.ExclusiveMaximum</text>\n",
-       "<polyline fill=\"none\" points=\"2818,-154.5 2991,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2818,-130.5 2991,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2904.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 18&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge39\">\n",
-       "<title>18-&gt;42</title>\n",
-       "<path d=\"M2817.8132,-175.1561C2814.6799,-176.145 2811.5684,-177.0968 2808.5,-178 2702.8589,-209.0976 2576.4188,-234.4083 2506.2173,-247.4389\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.4766,-244.0164 2496.2769,-249.2715 2506.7458,-250.9004 2505.4766,-244.0164\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 18&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge40\">\n",
-       "<title>18-&gt;49</title>\n",
-       "<path d=\"M2991.238,-175.7561C2994.0124,-176.5492 2996.7712,-177.3002 2999.5,-178 3170.7894,-221.9282 3379.167,-243.6875 3480.7894,-252.3311\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.6188,-255.829 3490.876,-253.1757 3481.2029,-248.8534 3480.6188,-255.829\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 19 -->\n",
-       "<g class=\"node\" id=\"node20\">\n",
-       "<title>19</title>\n",
-       "<polygon fill=\"none\" points=\"1400,-107.5 1400,-177.5 1571,-177.5 1571,-107.5 1400,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1485.5\" y=\"-162.3\">wtypes.ExclusiveMinimum</text>\n",
-       "<polyline fill=\"none\" points=\"1400,-154.5 1571,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1400,-130.5 1571,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1485.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 19&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge41\">\n",
-       "<title>19-&gt;42</title>\n",
-       "<path d=\"M1571.1446,-175.6729C1574.2847,-176.5156 1577.4099,-177.2961 1580.5,-178 1737.7642,-213.8257 2233.5213,-244.5425 2398.5025,-254.0016\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.701,-257.5186 2408.8841,-254.5938 2399.0996,-250.5299 2398.701,-257.5186\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 19&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge42\">\n",
-       "<title>19-&gt;49</title>\n",
-       "<path d=\"M1571.1003,-175.8794C1574.253,-176.6637 1577.3928,-177.3757 1580.5,-178 1781.963,-218.4777 2299.1767,-205.7474 2504.5,-214 2875.046,-228.8935 3319.961,-247.6014 3480.7532,-254.389\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.7908,-257.8936 3490.9296,-254.8187 3481.0862,-250.8999 3480.7908,-257.8936\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 20 -->\n",
-       "<g class=\"node\" id=\"node21\">\n",
-       "<title>20</title>\n",
-       "<polygon fill=\"none\" points=\"459.5,-107.5 459.5,-177.5 547.5,-177.5 547.5,-107.5 459.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"503.5\" y=\"-162.3\">wtypes.Float</text>\n",
-       "<polyline fill=\"none\" points=\"459.5,-154.5 547.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"459.5,-130.5 547.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"503.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 20&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge43\">\n",
-       "<title>20-&gt;42</title>\n",
-       "<path d=\"M547.7227,-174.5263C550.6158,-175.8593 553.5525,-177.0366 556.5,-178 735.5227,-236.5146 2107.5558,-253.5268 2398.423,-256.4919\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.6721,-259.9945 2408.7068,-256.5955 2398.7426,-252.9949 2398.6721,-259.9945\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 21 -->\n",
-       "<g class=\"node\" id=\"node22\">\n",
-       "<title>21</title>\n",
-       "<polygon fill=\"none\" points=\"5729.5,-107.5 5729.5,-177.5 5829.5,-177.5 5829.5,-107.5 5729.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5779.5\" y=\"-162.3\">wtypes.Format</text>\n",
-       "<polyline fill=\"none\" points=\"5729.5,-154.5 5829.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5729.5,-130.5 5829.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5779.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 21&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge44\">\n",
-       "<title>21-&gt;49</title>\n",
-       "<path d=\"M5729.4275,-174.8683C5726.47,-176.0699 5723.4838,-177.1297 5720.5,-178 5572.6111,-221.1379 4488.4281,-207.8236 4334.5,-214 4062.2806,-224.9229 3737.7817,-244.6454 3604.3997,-253.0422\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.1282,-249.5523 3594.3685,-253.6751 3604.569,-256.5384 3604.1282,-249.5523\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 21&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge45\">\n",
-       "<title>21-&gt;50</title>\n",
-       "<path d=\"M5729.391,-174.7467C5726.4429,-175.9798 5723.4687,-177.0795 5720.5,-178 5599.9454,-215.3812 4713.5818,-246.7574 4463.8325,-254.928\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.6982,-251.4305 4453.8176,-255.2544 4463.9263,-258.4267 4463.6982,-251.4305\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 22 -->\n",
-       "<g class=\"node\" id=\"node23\">\n",
-       "<title>22</title>\n",
-       "<polygon fill=\"none\" points=\"566,-107.5 566,-177.5 635,-177.5 635,-107.5 566,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"600.5\" y=\"-162.3\">wtypes.If</text>\n",
-       "<polyline fill=\"none\" points=\"566,-154.5 635,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"566,-130.5 635,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"600.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 22&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge46\">\n",
-       "<title>22-&gt;42</title>\n",
-       "<path d=\"M635.0106,-173.9222C637.7678,-175.5006 640.6084,-176.8888 643.5,-178 810.8101,-242.2964 2115.7814,-254.7318 2398.565,-256.6801\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.9386,-260.1826 2408.962,-256.7501 2398.9858,-253.1827 2398.9386,-260.1826\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 23 -->\n",
-       "<g class=\"node\" id=\"node24\">\n",
-       "<title>23</title>\n",
-       "<polygon fill=\"none\" points=\"653,-107.5 653,-177.5 752,-177.5 752,-107.5 653,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"702.5\" y=\"-162.3\">wtypes.Integer</text>\n",
-       "<polyline fill=\"none\" points=\"653,-154.5 752,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"653,-130.5 752,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"702.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 23&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge47\">\n",
-       "<title>23-&gt;42</title>\n",
-       "<path d=\"M752.0568,-174.934C754.8551,-176.0978 757.6786,-177.1336 760.5,-178 920.0091,-226.9842 2126.6703,-251.208 2398.3068,-256.0723\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.6277,-259.5785 2408.6884,-256.2569 2398.7522,-252.5796 2398.6277,-259.5785\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 24 -->\n",
-       "<g class=\"node\" id=\"node25\">\n",
-       "<title>24</title>\n",
-       "<polygon fill=\"none\" points=\"3623,-107.5 3623,-177.5 3714,-177.5 3714,-107.5 3623,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3668.5\" y=\"-162.3\">wtypes.Items</text>\n",
-       "<polyline fill=\"none\" points=\"3623,-154.5 3714,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3623,-130.5 3714,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3668.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 24&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge48\">\n",
-       "<title>24-&gt;42</title>\n",
-       "<path d=\"M3622.8357,-174.2869C3619.753,-175.7027 3616.6279,-176.9615 3613.5,-178 3507.6214,-213.1525 2720.1305,-246.4568 2506.0708,-254.9325\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.8749,-251.4374 2496.0207,-255.3289 2506.1509,-258.432 2505.8749,-251.4374\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 24&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge49\">\n",
-       "<title>24-&gt;49</title>\n",
-       "<path d=\"M3629.6677,-177.7881C3616.8534,-189.4329 3602.4666,-202.5065 3589.1313,-214.6247\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3586.4679,-212.3158 3581.4209,-221.6314 3591.1756,-217.4963 3586.4679,-212.3158\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 24&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge50\">\n",
-       "<title>24-&gt;50</title>\n",
-       "<path d=\"M3714.304,-174.5606C3717.0173,-175.8417 3719.7588,-177.0026 3722.5,-178 3833.9181,-218.5383 4186.0733,-244.067 4333.0584,-253.2067\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4333.0843,-256.7148 4343.2806,-253.8364 4333.5148,-249.728 4333.0843,-256.7148\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 25 -->\n",
-       "<g class=\"node\" id=\"node26\">\n",
-       "<title>25</title>\n",
-       "<polygon fill=\"none\" points=\"770,-107.5 770,-177.5 851,-177.5 851,-107.5 770,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"810.5\" y=\"-162.3\">wtypes.List</text>\n",
-       "<polyline fill=\"none\" points=\"770,-154.5 851,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"770,-130.5 851,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"810.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 25&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge51\">\n",
-       "<title>25-&gt;42</title>\n",
-       "<path d=\"M851.2669,-174.4961C853.9714,-175.8367 856.7253,-177.0239 859.5,-178 1007.1598,-229.9442 2136.7632,-251.7598 2398.4805,-256.1453\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.8019,-259.651 2408.8586,-256.3176 2398.9182,-252.652 2398.8019,-259.651\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 26 -->\n",
-       "<g class=\"node\" id=\"node27\">\n",
-       "<title>26</title>\n",
-       "<polygon fill=\"none\" points=\"3732,-107.5 3732,-177.5 3857,-177.5 3857,-107.5 3732,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3794.5\" y=\"-162.3\">wtypes.MaxLength</text>\n",
-       "<polyline fill=\"none\" points=\"3732,-154.5 3857,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3732,-130.5 3857,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3794.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge52\">\n",
-       "<title>26-&gt;42</title>\n",
-       "<path d=\"M3731.8372,-175.1431C3728.7199,-176.2128 3725.5976,-177.1756 3722.5,-178 3603.8332,-209.5807 2733.2648,-245.8976 2506.4222,-254.9004\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9661,-251.4156 2496.1123,-255.3084 2506.2429,-258.4102 2505.9661,-251.4156\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge53\">\n",
-       "<title>26-&gt;49</title>\n",
-       "<path d=\"M3731.7506,-173.6434C3728.6286,-175.1286 3725.5322,-176.5879 3722.5,-178 3683.3343,-196.2391 3638.8859,-215.7586 3603.9576,-230.8316\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3602.1708,-227.7903 3594.3707,-234.9603 3604.9396,-234.2194 3602.1708,-227.7903\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 26&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge54\">\n",
-       "<title>26-&gt;50</title>\n",
-       "<path d=\"M3857.1674,-175.1228C3859.9547,-176.1635 3862.7398,-177.1298 3865.5,-178 4028.7371,-229.4621 4230.9027,-247.7173 4332.9677,-253.9448\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4332.9347,-257.4488 4343.1237,-254.5447 4333.3475,-250.461 4332.9347,-257.4488\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 27 -->\n",
-       "<g class=\"node\" id=\"node28\">\n",
-       "<title>27</title>\n",
-       "<polygon fill=\"none\" points=\"1589.5,-107.5 1589.5,-177.5 1707.5,-177.5 1707.5,-107.5 1589.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1648.5\" y=\"-162.3\">wtypes.Maximum</text>\n",
-       "<polyline fill=\"none\" points=\"1589.5,-154.5 1707.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1589.5,-130.5 1707.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1648.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 27&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge55\">\n",
-       "<title>27-&gt;42</title>\n",
-       "<path d=\"M1707.6666,-174.9857C1710.6147,-176.0975 1713.5684,-177.1123 1716.5,-178 1844.5712,-216.7813 2251.3274,-244.7454 2398.605,-253.8278\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.558,-257.3314 2408.7531,-254.449 2398.9857,-250.3444 2398.558,-257.3314\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 27&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge56\">\n",
-       "<title>27-&gt;49</title>\n",
-       "<path d=\"M1707.6,-175.2188C1710.566,-176.2683 1713.5417,-177.2061 1716.5,-178 1727.3959,-180.9241 3161.4982,-241.0617 3480.2207,-254.3965\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.5079,-257.9115 3490.6455,-254.8326 3480.8005,-250.9176 3480.5079,-257.9115\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 28 -->\n",
-       "<g class=\"node\" id=\"node29\">\n",
-       "<title>28</title>\n",
-       "<polygon fill=\"none\" points=\"3875,-107.5 3875,-177.5 3998,-177.5 3998,-107.5 3875,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3936.5\" y=\"-162.3\">wtypes.MinLength</text>\n",
-       "<polyline fill=\"none\" points=\"3875,-154.5 3998,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"3875,-130.5 3998,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"3936.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 28&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge57\">\n",
-       "<title>28-&gt;42</title>\n",
-       "<path d=\"M3874.7293,-175.1687C3871.6494,-176.2315 3868.5634,-177.1859 3865.5,-178 3732.4266,-213.3647 2748.9593,-247.3698 2506.4369,-255.2797\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9982,-251.792 2496.1172,-255.6151 2506.2256,-258.7883 2505.9982,-251.792\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 28&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge58\">\n",
-       "<title>28-&gt;49</title>\n",
-       "<path d=\"M3874.9053,-174.3146C3871.7518,-175.6224 3868.605,-176.8604 3865.5,-178 3777.1478,-210.4274 3670.333,-233.592 3604.402,-246.1404\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.3612,-242.7747 3594.1806,-248.063 3604.6553,-249.654 3603.3612,-242.7747\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 28&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge59\">\n",
-       "<title>28-&gt;50</title>\n",
-       "<path d=\"M3998.0393,-174.4701C4001.2075,-175.7369 4004.3726,-176.9235 4007.5,-178 4118.5814,-216.235 4254.1313,-238.4859 4332.9488,-249.1477\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4332.8402,-252.664 4343.2146,-250.514 4333.7638,-245.7252 4332.8402,-252.664\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 29 -->\n",
-       "<g class=\"node\" id=\"node30\">\n",
-       "<title>29</title>\n",
-       "<polygon fill=\"none\" points=\"1725.5,-107.5 1725.5,-177.5 1841.5,-177.5 1841.5,-107.5 1725.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1783.5\" y=\"-162.3\">wtypes.Minimum</text>\n",
-       "<polyline fill=\"none\" points=\"1725.5,-154.5 1841.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1725.5,-130.5 1841.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1783.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 29&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge60\">\n",
-       "<title>29-&gt;42</title>\n",
-       "<path d=\"M1841.8065,-174.9046C1844.7086,-176.0381 1847.6156,-177.0797 1850.5,-178 1952.3273,-210.4904 2270.6103,-241.0809 2398.5018,-252.3921\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.5593,-255.9106 2408.8274,-253.3 2399.1724,-248.9375 2398.5593,-255.9106\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 29&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge61\">\n",
-       "<title>29-&gt;49</title>\n",
-       "<path d=\"M1841.717,-175.207C1844.6431,-176.2596 1847.5796,-177.2013 1850.5,-178 1890.6003,-188.9665 3180.7634,-242.2282 3480.6577,-254.4824\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.7699,-257.9898 3490.9044,-254.9009 3481.0556,-250.9957 3480.7699,-257.9898\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 30 -->\n",
-       "<g class=\"node\" id=\"node31\">\n",
-       "<title>30</title>\n",
-       "<polygon fill=\"none\" points=\"1860,-107.5 1860,-177.5 1983,-177.5 1983,-107.5 1860,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1921.5\" y=\"-162.3\">wtypes.MultipleOf</text>\n",
-       "<polyline fill=\"none\" points=\"1860,-154.5 1983,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1860,-130.5 1983,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1921.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 30&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge62\">\n",
-       "<title>30-&gt;42</title>\n",
-       "<path d=\"M1983.0013,-174.5832C1986.1795,-175.8201 1989.3571,-176.9694 1992.5,-178 2134.9282,-224.704 2311.7009,-245.1609 2398.8199,-252.9167\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.726,-256.4217 2408.9914,-253.8005 2399.332,-249.4479 2398.726,-256.4217\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 30&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge63\">\n",
-       "<title>30-&gt;49</title>\n",
-       "<path d=\"M1983.2657,-175.1874C1986.347,-176.2453 1989.4346,-177.1934 1992.5,-178 2065.5404,-197.2182 3199.9021,-243.3832 3480.2275,-254.5415\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.4823,-258.0543 3490.6135,-254.9545 3480.7605,-251.0599 3480.4823,-258.0543\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 31 -->\n",
-       "<g class=\"node\" id=\"node32\">\n",
-       "<title>31</title>\n",
-       "<polygon fill=\"none\" points=\"869,-107.5 869,-177.5 950,-177.5 950,-107.5 869,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"909.5\" y=\"-162.3\">wtypes.Not</text>\n",
-       "<polyline fill=\"none\" points=\"869,-154.5 950,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"869,-130.5 950,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"909.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 31&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge64\">\n",
-       "<title>31-&gt;42</title>\n",
-       "<path d=\"M950.2707,-174.4853C952.9743,-175.8286 955.7269,-177.0194 958.5,-178 1096.3298,-226.7402 2147.2568,-250.8527 2398.6163,-255.9577\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.8791,-259.4636 2408.9476,-256.1659 2399.0202,-252.465 2398.8791,-259.4636\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 32 -->\n",
-       "<g class=\"node\" id=\"node33\">\n",
-       "<title>32</title>\n",
-       "<polygon fill=\"none\" points=\"968,-107.5 968,-177.5 1053,-177.5 1053,-107.5 968,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1010.5\" y=\"-162.3\">wtypes.Null</text>\n",
-       "<polyline fill=\"none\" points=\"968,-154.5 1053,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"968,-130.5 1053,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1010.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 32&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge65\">\n",
-       "<title>32-&gt;42</title>\n",
-       "<path d=\"M1053.2663,-174.1825C1056.3044,-175.6478 1059.3954,-176.9439 1062.5,-178 1190.6004,-221.5764 2158.0736,-249.3627 2398.5265,-255.6422\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.6757,-259.1472 2408.7632,-255.908 2398.8574,-252.1495 2398.6757,-259.1472\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 33 -->\n",
-       "<g class=\"node\" id=\"node34\">\n",
-       "<title>33</title>\n",
-       "<polygon fill=\"none\" points=\"2001.5,-107.5 2001.5,-177.5 2099.5,-177.5 2099.5,-107.5 2001.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2050.5\" y=\"-162.3\">wtypes.OneOf</text>\n",
-       "<polyline fill=\"none\" points=\"2001.5,-154.5 2099.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2001.5,-130.5 2099.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2050.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 33&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge66\">\n",
-       "<title>33-&gt;42</title>\n",
-       "<path d=\"M2099.6159,-174.0072C2102.5748,-175.4502 2105.5487,-176.7955 2108.5,-178 2206.7137,-218.0836 2329.4023,-240.0812 2398.5538,-250.1238\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.3764,-253.6338 2408.7697,-251.5768 2399.3621,-246.7035 2398.3764,-253.6338\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 33&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge67\">\n",
-       "<title>33-&gt;49</title>\n",
-       "<path d=\"M2099.7304,-174.764C2102.636,-175.9926 2105.5695,-177.0866 2108.5,-178 2174.8601,-198.6834 3213.9234,-243.2857 3480.5391,-254.4343\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.6697,-257.9427 3490.807,-254.8631 3480.9618,-250.9488 3480.6697,-257.9427\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 34 -->\n",
-       "<g class=\"node\" id=\"node35\">\n",
-       "<title>34</title>\n",
-       "<polygon fill=\"none\" points=\"2118,-107.5 2118,-177.5 2217,-177.5 2217,-107.5 2118,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2167.5\" y=\"-162.3\">wtypes.Pattern</text>\n",
-       "<polyline fill=\"none\" points=\"2118,-154.5 2217,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"2118,-130.5 2217,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2167.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 34&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge68\">\n",
-       "<title>34-&gt;42</title>\n",
-       "<path d=\"M2217.327,-173.4336C2220.3973,-175.0413 2223.4702,-176.5774 2226.5,-178 2283.7537,-204.8821 2352.7983,-227.7199 2399.3849,-241.8225\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.3889,-245.1778 2408.9728,-244.6976 2400.3995,-238.4727 2398.3889,-245.1778\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 34&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge69\">\n",
-       "<title>34-&gt;49</title>\n",
-       "<path d=\"M2217.2693,-174.6029C2220.3285,-175.8942 2223.4173,-177.0437 2226.5,-178 2347.0511,-215.3981 3236.9027,-247.0007 3480.8222,-255.0295\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3480.8195,-258.5312 3490.9288,-255.3608 3481.0489,-251.5349 3480.8195,-258.5312\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 35 -->\n",
-       "<g class=\"node\" id=\"node36\">\n",
-       "<title>35</title>\n",
-       "<polygon fill=\"none\" points=\"4016.5,-107.5 4016.5,-177.5 4172.5,-177.5 4172.5,-107.5 4016.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4094.5\" y=\"-162.3\">wtypes.PatternProperties</text>\n",
-       "<polyline fill=\"none\" points=\"4016.5,-154.5 4172.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4016.5,-130.5 4172.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4094.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 35&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge70\">\n",
-       "<title>35-&gt;42</title>\n",
-       "<path d=\"M4016.2305,-175.5743C4012.9693,-176.4747 4009.7175,-177.2902 4006.5,-178 3931.78,-194.4828 2771.7995,-243.6816 2506.3314,-254.7654\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2506.0208,-251.2752 2496.1754,-255.189 2506.3126,-258.2691 2506.0208,-251.2752\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 35&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge71\">\n",
-       "<title>35-&gt;49</title>\n",
-       "<path d=\"M4016.1097,-175.0943C4012.8819,-176.1276 4009.6701,-177.102 4006.5,-178 3865.3127,-217.9946 3693.8828,-240.7523 3604.1143,-250.7754\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.6623,-247.3039 3594.1057,-251.8778 3604.4288,-254.2618 3603.6623,-247.3039\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 35&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge72\">\n",
-       "<title>35-&gt;50</title>\n",
-       "<path d=\"M4172.6983,-174.5733C4175.6666,-175.7384 4178.6083,-176.8841 4181.5,-178 4232.4442,-197.6588 4290.6036,-218.7608 4333.8809,-234.2058\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4332.8405,-237.5506 4343.4352,-237.61 4335.19,-230.9566 4332.8405,-237.5506\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 36 -->\n",
-       "<g class=\"node\" id=\"node37\">\n",
-       "<title>36</title>\n",
-       "<polygon fill=\"none\" points=\"4190.5,-107.5 4190.5,-177.5 4306.5,-177.5 4306.5,-107.5 4190.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4248.5\" y=\"-162.3\">wtypes.Properties</text>\n",
-       "<polyline fill=\"none\" points=\"4190.5,-154.5 4306.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4190.5,-130.5 4306.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4248.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 36&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge73\">\n",
-       "<title>36-&gt;42</title>\n",
-       "<path d=\"M4190.284,-175.2106C4187.3577,-176.2623 4184.4208,-177.2028 4181.5,-178 4160.7848,-183.654 2797.4912,-242.2419 2506.6861,-254.6851\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2506.2421,-251.2008 2496.4008,-255.1251 2506.5413,-258.1944 2506.2421,-251.2008\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 36&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge74\">\n",
-       "<title>36-&gt;49</title>\n",
-       "<path d=\"M4190.202,-174.9315C4187.2976,-176.0578 4184.3878,-177.0904 4181.5,-178 4074.4937,-211.7027 3742.4379,-241.1224 3604.0373,-252.2554\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.7064,-248.7706 3594.0173,-253.0566 3604.2645,-255.7483 3603.7064,-248.7706\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 36&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge75\">\n",
-       "<title>36-&gt;50</title>\n",
-       "<path d=\"M4294.7289,-177.7881C4310.3425,-189.7065 4327.917,-203.1217 4344.1035,-215.4774\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4342.3512,-218.5429 4352.4237,-221.8285 4346.5986,-212.9787 4342.3512,-218.5429\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 37 -->\n",
-       "<g class=\"node\" id=\"node38\">\n",
-       "<title>37</title>\n",
-       "<polygon fill=\"none\" points=\"4325,-107.5 4325,-177.5 4472,-177.5 4472,-107.5 4325,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4398.5\" y=\"-162.3\">wtypes.PropertyNames</text>\n",
-       "<polyline fill=\"none\" points=\"4325,-154.5 4472,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4325,-130.5 4472,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4398.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 37&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge76\">\n",
-       "<title>37-&gt;42</title>\n",
-       "<path d=\"M4324.7338,-175.6143C4321.6423,-176.5037 4318.5567,-177.306 4315.5,-178 4309.8299,-179.2874 2811.8703,-241.9745 2506.4734,-254.7439\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.962,-251.2622 2496.117,-255.1769 2506.2545,-258.256 2505.962,-251.2622\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 37&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge77\">\n",
-       "<title>37-&gt;49</title>\n",
-       "<path d=\"M4324.6778,-175.3834C4321.6018,-176.3367 4318.5347,-177.2154 4315.5,-178 4180.9907,-212.7768 3762.5084,-242.7339 3604.101,-253.1133\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.8,-249.6254 3594.0489,-253.7685 3604.2554,-256.6106 3603.8,-249.6254\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 37&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge78\">\n",
-       "<title>37-&gt;50</title>\n",
-       "<path d=\"M4398.5,-177.7881C4398.5,-188.4534 4398.5,-200.3173 4398.5,-211.548\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4395.0001,-211.6313 4398.5,-221.6314 4402.0001,-211.6314 4395.0001,-211.6313\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 38 -->\n",
-       "<g class=\"node\" id=\"node39\">\n",
-       "<title>38</title>\n",
-       "<polygon fill=\"none\" points=\"4490,-107.5 4490,-177.5 4601,-177.5 4601,-107.5 4490,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4545.5\" y=\"-162.3\">wtypes.Required</text>\n",
-       "<polyline fill=\"none\" points=\"4490,-154.5 4601,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4490,-130.5 4601,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4545.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 38&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge79\">\n",
-       "<title>38-&gt;42</title>\n",
-       "<path d=\"M4489.8104,-174.9716C4486.7141,-176.1255 4483.5998,-177.1489 4480.5,-178 4373.3916,-207.4072 3592.4881,-209.6813 3481.5,-214 3108.1781,-228.5266 2658.7587,-247.9861 2506.1691,-254.6484\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9633,-251.154 2496.1256,-255.0872 2506.2688,-258.1473 2505.9633,-251.154\" stroke=\"#000000\"/>\n",
+       "<!-- 38&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge81\">\n",
+       "<title>38-&gt;45</title>\n",
+       "<path d=\"M2052.2471,-200.0032C2043.6031,-207.5952 2034.5016,-215.5743 2026,-223 2007.5839,-239.0855 1987.016,-256.9496 1970.0996,-271.6156\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1967.3786,-269.3423 1962.1139,-278.5366 1971.9631,-274.6321 1967.3786,-269.3423\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 38&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge80\">\n",
-       "<title>38-&gt;49</title>\n",
-       "<path d=\"M4489.7583,-174.7905C4486.6756,-175.9917 4483.5785,-177.0748 4480.5,-178 4315.4576,-227.6023 3785.7072,-249.0945 3604.1978,-255.1271\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.9057,-251.6347 3594.026,-255.461 3604.1355,-258.6309 3603.9057,-251.6347\" stroke=\"#000000\"/>\n",
+       "<!-- 38&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge82\">\n",
+       "<title>38-&gt;52</title>\n",
+       "<path d=\"M2124.9105,-200.2873C2134.5137,-208.8447 2145.5321,-217.1905 2157,-223 2268.2026,-279.3337 2417.7242,-295.5439 2488.5533,-300.1724\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.6291,-303.6834 2498.8234,-300.7975 2489.0545,-296.6964 2488.6291,-303.6834\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 38&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge81\">\n",
-       "<title>38-&gt;50</title>\n",
-       "<path d=\"M4500.1957,-177.7881C4484.8943,-189.7065 4467.6713,-203.1217 4451.8086,-215.4774\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4449.3932,-212.9222 4443.6547,-221.8285 4453.6947,-218.4447 4449.3932,-212.9222\" stroke=\"#000000\"/>\n",
+       "<!-- 38&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge83\">\n",
+       "<title>38-&gt;53</title>\n",
+       "<path d=\"M2123.0809,-200.1167C2132.9836,-209.1151 2144.6138,-217.7308 2157,-223 2180.2928,-232.909 2957.4833,-285.9065 3152.1376,-299.0493\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.069,-302.5525 3162.2819,-299.7337 3152.5403,-295.5684 3152.069,-302.5525\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 39 -->\n",
        "<g class=\"node\" id=\"node40\">\n",
        "<title>39</title>\n",
-       "<polygon fill=\"none\" points=\"1071.5,-107.5 1071.5,-177.5 1165.5,-177.5 1165.5,-107.5 1071.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1118.5\" y=\"-162.3\">wtypes.String</text>\n",
-       "<polyline fill=\"none\" points=\"1071.5,-154.5 1165.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1071.5,-130.5 1165.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1118.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2166.5,-130 2166.5,-200 2239.5,-200 2239.5,-130 2166.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2203\" y=\"-184.8\">Properties</text>\n",
+       "<polyline fill=\"none\" points=\"2166.5,-177 2239.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2166.5,-153 2239.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2203\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 39&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge82\">\n",
-       "<title>39-&gt;42</title>\n",
-       "<path d=\"M1165.665,-174.5987C1168.5874,-175.891 1171.5433,-177.0419 1174.5,-178 1292.1736,-216.1312 2171.3194,-247.6756 2398.8594,-255.2619\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.7733,-258.7609 2408.884,-255.5947 2399.0056,-251.7648 2398.7733,-258.7609\" stroke=\"#000000\"/>\n",
+       "<!-- 39&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge84\">\n",
+       "<title>39-&gt;45</title>\n",
+       "<path d=\"M2180.2559,-200.1586C2173.5603,-208.5136 2165.675,-216.7927 2157,-223 2099.6244,-264.0545 2018.8045,-285.647 1972.1654,-295.3679\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.3085,-291.97 1962.1948,-297.373 1972.6886,-298.8326 1971.3085,-291.97\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 39&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge85\">\n",
+       "<title>39-&gt;52</title>\n",
+       "<path d=\"M2225.2248,-200.2589C2231.9742,-208.713 2240.0153,-217.015 2249,-223 2324.1891,-273.0861 2430.9998,-291.7482 2488.5382,-298.4471\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.367,-301.9493 2498.6897,-299.5636 2489.1323,-294.9913 2488.367,-301.9493\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 39&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge86\">\n",
+       "<title>39-&gt;53</title>\n",
+       "<path d=\"M2223.5497,-200.2519C2230.4794,-209.1376 2239.0304,-217.6599 2249,-223 2289.3266,-244.6006 2970.8389,-288.0849 3152.0467,-299.308\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.0743,-302.8163 3162.2712,-299.9399 3152.5062,-295.8296 3152.0743,-302.8163\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 40 -->\n",
        "<g class=\"node\" id=\"node41\">\n",
        "<title>40</title>\n",
-       "<polygon fill=\"none\" points=\"1183.5,-107.5 1183.5,-177.5 1271.5,-177.5 1271.5,-107.5 1183.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1227.5\" y=\"-162.3\">wtypes.Then</text>\n",
-       "<polyline fill=\"none\" points=\"1183.5,-154.5 1271.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1183.5,-130.5 1271.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1227.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2258,-130 2258,-200 2362,-200 2362,-130 2258,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2310\" y=\"-184.8\">PropertyNames</text>\n",
+       "<polyline fill=\"none\" points=\"2258,-177 2362,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2258,-153 2362,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2310\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 40&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge83\">\n",
-       "<title>40-&gt;42</title>\n",
-       "<path d=\"M1271.7526,-174.4365C1274.6382,-175.792 1277.5651,-176.9989 1280.5,-178 1387.1425,-214.3777 2183.1376,-246.8235 2398.7653,-255.0143\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.7617,-258.5165 2408.8868,-255.3971 2399.0263,-251.5215 2398.7617,-258.5165\" stroke=\"#000000\"/>\n",
+       "<!-- 40&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge87\">\n",
+       "<title>40-&gt;45</title>\n",
+       "<path d=\"M2278.6865,-200.0286C2269.5265,-208.5865 2258.997,-216.9972 2248,-223 2156.8111,-272.7758 2033.569,-291.8877 1972.5058,-298.6446\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.7772,-295.202 1962.1997,-299.732 1972.5118,-302.1633 1971.7772,-295.202\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 40&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge88\">\n",
+       "<title>40-&gt;52</title>\n",
+       "<path d=\"M2343.2831,-200.0254C2351.8852,-208.102 2361.4307,-216.2844 2371,-223 2408.585,-249.3765 2456.2503,-271.9222 2489.3492,-286.0959\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2488.1276,-289.3793 2498.7015,-290.0442 2490.8501,-282.9304 2488.1276,-289.3793\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 40&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge89\">\n",
+       "<title>40-&gt;53</title>\n",
+       "<path d=\"M2339.2144,-200.2579C2348.4349,-209.1437 2359.2994,-217.6646 2371,-223 2442.4175,-255.5662 2991.489,-290.0123 3152.0418,-299.4726\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3151.8583,-302.9678 3162.0461,-300.0593 3152.2681,-295.9798 3151.8583,-302.9678\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 41 -->\n",
        "<g class=\"node\" id=\"node42\">\n",
        "<title>41</title>\n",
-       "<polygon fill=\"none\" points=\"4619.5,-107.5 4619.5,-177.5 4705.5,-177.5 4705.5,-107.5 4619.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4662.5\" y=\"-162.3\">wtypes.Title</text>\n",
-       "<polyline fill=\"none\" points=\"4619.5,-154.5 4705.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4619.5,-130.5 4705.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4662.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2380,-130 2380,-200 2448,-200 2448,-130 2380,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2414\" y=\"-184.8\">Required</text>\n",
+       "<polyline fill=\"none\" points=\"2380,-177 2448,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2380,-153 2448,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2414\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 41&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge84\">\n",
-       "<title>41-&gt;42</title>\n",
-       "<path d=\"M4619.2177,-174.1294C4616.0225,-175.6325 4612.7684,-176.9493 4609.5,-178 4490.1199,-216.3777 3606.8121,-209.3822 3481.5,-214 3108.149,-227.7582 2658.748,-247.7037 2506.1661,-254.5706\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9555,-251.0764 2496.1231,-255.023 2506.2706,-258.0693 2505.9555,-251.0764\" stroke=\"#000000\"/>\n",
+       "<!-- 41&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge90\">\n",
+       "<title>41-&gt;45</title>\n",
+       "<path d=\"M2394.4106,-200.2337C2388.0131,-208.8974 2380.156,-217.31 2371,-223 2304.0759,-264.5899 2065.0693,-290.2052 1972.2405,-298.7804\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1971.8191,-295.3041 1962.1773,-299.6958 1972.4533,-302.2754 1971.8191,-295.3041\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 41&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge85\">\n",
-       "<title>41-&gt;49</title>\n",
-       "<path d=\"M4619.4727,-173.8212C4616.1912,-175.4237 4612.8504,-176.8448 4609.5,-178 4514.4739,-210.7656 3817.3257,-244.6012 3604.213,-254.2727\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.9684,-250.7801 3594.1367,-254.7283 3604.2846,-257.7729 3603.9684,-250.7801\" stroke=\"#000000\"/>\n",
+       "<!-- 41&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge91\">\n",
+       "<title>41-&gt;52</title>\n",
+       "<path d=\"M2439.1321,-200.0955C2444.8625,-207.7564 2451.0266,-215.7405 2457,-223 2467.9361,-236.2906 2480.3988,-250.3206 2491.8465,-262.8096\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2489.4663,-265.3912 2498.8204,-270.3663 2494.6104,-260.6438 2489.4663,-265.3912\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 41&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge86\">\n",
-       "<title>41-&gt;50</title>\n",
-       "<path d=\"M4619.3165,-172.5834C4616.0452,-174.5026 4612.7514,-176.3311 4609.5,-178 4562.365,-202.1934 4506.0397,-222.9011 4463.4444,-237.0388\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4462.1604,-233.7765 4453.7513,-240.2215 4464.3442,-240.4272 4462.1604,-233.7765\" stroke=\"#000000\"/>\n",
+       "<!-- 41&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge92\">\n",
+       "<title>41-&gt;53</title>\n",
+       "<path d=\"M2432.8799,-200.074C2439.3524,-208.9569 2447.4255,-217.5222 2457,-223 2517.4958,-257.6107 3002.293,-290.0732 3152.0758,-299.3591\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.0744,-302.8656 3162.2708,-299.9874 3152.505,-295.8788 3152.0744,-302.8656\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 42 -->\n",
+       "<g class=\"node\" id=\"node43\">\n",
+       "<title>42</title>\n",
+       "<polygon fill=\"none\" points=\"615,-130 615,-200 669,-200 669,-130 615,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"642\" y=\"-184.8\">String</text>\n",
+       "<polyline fill=\"none\" points=\"615,-177 669,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"615,-153 669,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"642\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 42&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge93\">\n",
+       "<title>42-&gt;45</title>\n",
+       "<path d=\"M656.5989,-200.2347C661.9986,-209.1201 669.0496,-217.6466 678,-223 785.1038,-287.0606 1700.8686,-299.6919 1897.795,-301.6754\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1897.8914,-305.1764 1907.9251,-301.7743 1897.9598,-298.1768 1897.8914,-305.1764\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 43 -->\n",
        "<g class=\"node\" id=\"node44\">\n",
        "<title>43</title>\n",
-       "<polygon fill=\"none\" points=\"1289.5,-107.5 1289.5,-177.5 1381.5,-177.5 1381.5,-107.5 1289.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1335.5\" y=\"-162.3\">wtypes.Tuple</text>\n",
-       "<polyline fill=\"none\" points=\"1289.5,-154.5 1381.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"1289.5,-130.5 1381.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"1335.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2466,-130 2466,-200 2520,-200 2520,-130 2466,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2493\" y=\"-184.8\">Then</text>\n",
+       "<polyline fill=\"none\" points=\"2466,-177 2520,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2466,-153 2520,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2493\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 43&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge87\">\n",
-       "<title>43-&gt;42</title>\n",
-       "<path d=\"M1381.8101,-174.5555C1384.6836,-175.8589 1387.5909,-177.0239 1390.5,-178 1580.485,-241.7427 2210.2175,-254.1792 2398.7276,-256.4938\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2398.8994,-259.996 2408.9401,-256.6145 2398.9822,-252.9965 2398.8994,-259.996\" stroke=\"#000000\"/>\n",
+       "<!-- 43&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge94\">\n",
+       "<title>43-&gt;45</title>\n",
+       "<path d=\"M2477.9029,-200.0385C2472.5243,-208.8096 2465.609,-217.3258 2457,-223 2376.8154,-275.8504 2078.1364,-295.1117 1972.3957,-300.3613\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1972.0201,-296.8752 1962.2005,-300.8533 1972.3577,-303.8671 1972.0201,-296.8752\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 43&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge95\">\n",
+       "<title>43-&gt;52</title>\n",
+       "<path d=\"M2502.2709,-200.2809C2506.806,-217.5395 2512.3165,-238.5102 2517.1533,-256.9166\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2513.8339,-258.0565 2519.7605,-266.8387 2520.6041,-256.2775 2513.8339,-258.0565\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 43&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge96\">\n",
+       "<title>43-&gt;53</title>\n",
+       "<path d=\"M2507.9788,-200.2212C2513.3562,-208.9942 2520.3005,-217.4656 2529,-223 2581.6185,-256.4747 3012.0705,-289.1698 3152.1376,-299.0124\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.2621,-302.5295 3162.4817,-299.7347 3152.7498,-295.5465 3152.2621,-302.5295\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 44 -->\n",
        "<g class=\"node\" id=\"node45\">\n",
        "<title>44</title>\n",
-       "<polygon fill=\"none\" points=\"760,-.5 760,-70.5 861,-70.5 861,-.5 760,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"810.5\" y=\"-55.3\">wtypes.Unique</text>\n",
-       "<polyline fill=\"none\" points=\"760,-47.5 861,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"760,-23.5 861,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"810.5\" y=\"-8.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 44&#45;&gt;25 -->\n",
-       "<g class=\"edge\" id=\"edge88\">\n",
-       "<title>44-&gt;25</title>\n",
-       "<path d=\"M810.5,-70.5358C810.5,-79.0343 810.5,-88.2414 810.5,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"807.0001,-97.3855 810.5,-107.3855 814.0001,-97.3855 807.0001,-97.3855\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 45 -->\n",
-       "<g class=\"node\" id=\"node46\">\n",
-       "<title>45</title>\n",
-       "<polygon fill=\"none\" points=\"4723.5,-107.5 4723.5,-177.5 4855.5,-177.5 4855.5,-107.5 4723.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4789.5\" y=\"-162.3\">wtypes.UniqueItems</text>\n",
-       "<polyline fill=\"none\" points=\"4723.5,-154.5 4855.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4723.5,-130.5 4855.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4789.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"2538,-130 2538,-200 2592,-200 2592,-130 2538,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2565\" y=\"-184.8\">Title</text>\n",
+       "<polyline fill=\"none\" points=\"2538,-177 2592,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2538,-153 2592,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2565\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 45&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge89\">\n",
-       "<title>45-&gt;42</title>\n",
-       "<path d=\"M4723.3677,-175.5371C4720.4053,-176.4644 4717.4416,-177.2937 4714.5,-178 4581.2292,-209.9981 3618.4721,-209.1387 3481.5,-214 3108.1307,-227.2513 2658.7412,-247.5173 2506.1643,-254.5192\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9504,-251.0252 2496.1216,-254.9806 2506.2717,-258.0179 2505.9504,-251.0252\" stroke=\"#000000\"/>\n",
+       "<!-- 44&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge97\">\n",
+       "<title>44-&gt;45</title>\n",
+       "<path d=\"M2549.9691,-200.1399C2544.5912,-208.9121 2537.6596,-217.4034 2529,-223 2436.1162,-283.0297 2087.7984,-297.839 1972.3991,-301.1345\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1972.1879,-297.6388 1962.2871,-301.4105 1972.3789,-304.6362 1972.1879,-297.6388\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 45&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge90\">\n",
-       "<title>45-&gt;49</title>\n",
-       "<path d=\"M4723.3323,-175.3957C4720.3796,-176.3618 4717.4276,-177.2378 4714.5,-178 4660.3843,-192.089 3838.4573,-240.0392 3604.3141,-253.4749\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.049,-249.9842 3594.2658,-254.051 3604.4497,-256.9728 3604.049,-249.9842\" stroke=\"#000000\"/>\n",
+       "<!-- 44&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge98\">\n",
+       "<title>44-&gt;52</title>\n",
+       "<path d=\"M2555.7291,-200.2809C2551.194,-217.5395 2545.6835,-238.5102 2540.8467,-256.9166\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2537.3959,-256.2775 2538.2395,-266.8387 2544.1661,-258.0565 2537.3959,-256.2775\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 45&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge91\">\n",
-       "<title>45-&gt;50</title>\n",
-       "<path d=\"M4723.1322,-174.7467C4720.2343,-175.8904 4717.3485,-176.9811 4714.5,-178 4629.843,-208.2833 4528.4516,-231.423 4463.767,-244.6114\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4462.8183,-241.2322 4453.7089,-246.6422 4464.2038,-248.0937 4462.8183,-241.2322\" stroke=\"#000000\"/>\n",
+       "<!-- 44&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge99\">\n",
+       "<title>44-&gt;53</title>\n",
+       "<path d=\"M2580.0301,-200.1412C2585.408,-208.9133 2592.3398,-217.4043 2601,-223 2692.4242,-282.0722 3030.875,-297.3418 3152.2916,-300.9606\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.2474,-304.4607 3162.3434,-301.2481 3152.4476,-297.4635 3152.2474,-304.4607\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 46 -->\n",
        "<g class=\"node\" id=\"node47\">\n",
        "<title>46</title>\n",
-       "<polygon fill=\"none\" points=\"6669.5,-107.5 6669.5,-177.5 6797.5,-177.5 6797.5,-107.5 6669.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6733.5\" y=\"-162.3\">wtypes._ConstType</text>\n",
-       "<polyline fill=\"none\" points=\"6669.5,-154.5 6797.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6669.5,-130.5 6797.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6733.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"327,-.5 327,-70.5 381,-70.5 381,-.5 327,-.5\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"354\" y=\"-55.3\">Tuple</text>\n",
+       "<polyline fill=\"none\" points=\"327,-47.5 381,-47.5 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"327,-23.5 381,-23.5 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"354\" y=\"-8.3\"> </text>\n",
        "</g>\n",
-       "<!-- 54 -->\n",
-       "<g class=\"node\" id=\"node55\">\n",
-       "<title>54</title>\n",
-       "<polygon fill=\"none\" points=\"6263.5,-214.5 6263.5,-299.5 6403.5,-299.5 6403.5,-214.5 6263.5,-214.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6333.5\" y=\"-284.3\">wtypes._SchemaMeta</text>\n",
-       "<polyline fill=\"none\" points=\"6263.5,-276.5 6403.5,-276.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6263.5,-252.5 6403.5,-252.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"6271.5\" y=\"-237.3\">create(cls, name)</text>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"6271.5\" y=\"-222.3\">validate(cls, object)</text>\n",
-       "</g>\n",
-       "<!-- 46&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge92\">\n",
-       "<title>46-&gt;54</title>\n",
-       "<path d=\"M6669.3385,-174.6315C6666.3734,-175.8218 6663.4179,-176.9519 6660.5,-178 6578.4173,-207.4833 6480.8264,-229.4514 6413.7514,-242.6395\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6412.8166,-239.2557 6403.669,-244.601 6414.1534,-246.1269 6412.8166,-239.2557\" stroke=\"#000000\"/>\n",
+       "<!-- 46&#45;&gt;26 -->\n",
+       "<g class=\"edge\" id=\"edge100\">\n",
+       "<title>46-&gt;26</title>\n",
+       "<path d=\"M364.0127,-70.5446C366.4271,-78.9949 369.0877,-88.3071 371.7689,-97.691\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"368.4482,-98.8093 374.5608,-107.4629 375.1789,-96.8862 368.4482,-98.8093\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 47 -->\n",
        "<g class=\"node\" id=\"node48\">\n",
        "<title>47</title>\n",
-       "<polygon fill=\"none\" points=\"6658,-.5 6658,-70.5 6809,-70.5 6809,-.5 6658,-.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6733.5\" y=\"-55.3\">wtypes._ContainerType</text>\n",
-       "<polyline fill=\"none\" points=\"6658,-47.5 6809,-47.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6658,-23.5 6809,-23.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6733.5\" y=\"-8.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"399,-.5 399,-70.5 457,-70.5 457,-.5 399,-.5\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"428\" y=\"-55.3\">Unique</text>\n",
+       "<polyline fill=\"none\" points=\"399,-47.5 457,-47.5 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"399,-23.5 457,-23.5 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"428\" y=\"-8.3\"> </text>\n",
        "</g>\n",
-       "<!-- 47&#45;&gt;46 -->\n",
-       "<g class=\"edge\" id=\"edge93\">\n",
-       "<title>47-&gt;46</title>\n",
-       "<path d=\"M6733.5,-70.5358C6733.5,-79.0343 6733.5,-88.2414 6733.5,-97.1407\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6730.0001,-97.3855 6733.5,-107.3855 6737.0001,-97.3855 6730.0001,-97.3855\" stroke=\"#000000\"/>\n",
+       "<!-- 47&#45;&gt;26 -->\n",
+       "<g class=\"edge\" id=\"edge101\">\n",
+       "<title>47-&gt;26</title>\n",
+       "<path d=\"M417.9873,-70.5446C415.5729,-78.9949 412.9123,-88.3071 410.2311,-97.691\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"406.8211,-96.8862 407.4392,-107.4629 413.5518,-98.8093 406.8211,-96.8862\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 48 -->\n",
        "<g class=\"node\" id=\"node49\">\n",
        "<title>48</title>\n",
-       "<polygon fill=\"none\" points=\"5848,-107.5 5848,-177.5 5981,-177.5 5981,-107.5 5848,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5914.5\" y=\"-162.3\">wtypes._ListSchema</text>\n",
-       "<polyline fill=\"none\" points=\"5848,-154.5 5981,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5848,-130.5 5981,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5914.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 48&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge94\">\n",
-       "<title>48-&gt;54</title>\n",
-       "<path d=\"M5981.3198,-174.6435C5984.4009,-175.8306 5987.4708,-176.9567 5990.5,-178 6078.3347,-208.2506 6182.8078,-230.4322 6253.1834,-243.4605\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6252.8463,-246.9569 6263.3133,-245.3161 6254.1077,-240.0714 6252.8463,-246.9569\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 51 -->\n",
-       "<g class=\"node\" id=\"node52\">\n",
-       "<title>51</title>\n",
-       "<polygon fill=\"none\" points=\"5999.5,-107.5 5999.5,-177.5 6159.5,-177.5 6159.5,-107.5 5999.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6079.5\" y=\"-162.3\">wtypes._NumericSchema</text>\n",
-       "<polyline fill=\"none\" points=\"5999.5,-154.5 6159.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5999.5,-130.5 6159.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6079.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 51&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge95\">\n",
-       "<title>51-&gt;54</title>\n",
-       "<path d=\"M6157.4345,-177.6319C6188.0951,-191.4533 6223.2642,-207.3071 6254.0688,-221.1934\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6252.9239,-224.5165 6263.4789,-225.4354 6255.8007,-218.1349 6252.9239,-224.5165\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 53 -->\n",
-       "<g class=\"node\" id=\"node54\">\n",
-       "<title>53</title>\n",
-       "<polygon fill=\"none\" points=\"6177.5,-107.5 6177.5,-177.5 6325.5,-177.5 6325.5,-107.5 6177.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6251.5\" y=\"-162.3\">wtypes._ObjectSchema</text>\n",
-       "<polyline fill=\"none\" points=\"6177.5,-154.5 6325.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6177.5,-130.5 6325.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6251.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 53&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge96\">\n",
-       "<title>53-&gt;54</title>\n",
-       "<path d=\"M6276.7718,-177.7881C6283.1775,-186.7326 6290.187,-196.5203 6297.0264,-206.0704\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6294.3055,-208.2823 6302.9735,-214.3746 6299.9966,-204.2066 6294.3055,-208.2823\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2610.5,-130 2610.5,-200 2699.5,-200 2699.5,-130 2610.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2655\" y=\"-184.8\">UniqueItems</text>\n",
+       "<polyline fill=\"none\" points=\"2610.5,-177 2699.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2610.5,-153 2699.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2655\" y=\"-137.8\"> </text>\n",
        "</g>\n",
-       "<!-- 55 -->\n",
-       "<g class=\"node\" id=\"node56\">\n",
-       "<title>55</title>\n",
-       "<polygon fill=\"none\" points=\"6344,-107.5 6344,-177.5 6489,-177.5 6489,-107.5 6344,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6416.5\" y=\"-162.3\">wtypes._StringSchema</text>\n",
-       "<polyline fill=\"none\" points=\"6344,-154.5 6489,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6344,-130.5 6489,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6416.5\" y=\"-115.3\"> </text>\n",
+       "<!-- 48&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge102\">\n",
+       "<title>48-&gt;45</title>\n",
+       "<path d=\"M2629.7049,-200.0729C2621.5514,-208.9558 2611.7966,-217.5214 2601,-223 2489.3885,-279.6362 2095.5502,-296.8617 1972.215,-300.9276\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1972.0169,-297.432 1962.134,-301.2502 1972.2409,-304.4285 1972.0169,-297.432\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 55&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge97\">\n",
-       "<title>55-&gt;54</title>\n",
-       "<path d=\"M6390.92,-177.7881C6384.4362,-186.7326 6377.3412,-196.5203 6370.4184,-206.0704\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6367.4341,-204.2239 6364.3988,-214.3746 6373.1017,-208.3323 6367.4341,-204.2239\" stroke=\"#000000\"/>\n",
+       "<!-- 48&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge103\">\n",
+       "<title>48-&gt;52</title>\n",
+       "<path d=\"M2622.5519,-200.2809C2605.3004,-219.0384 2584.0162,-242.1808 2566.11,-261.6502\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2563.3684,-259.4608 2559.1751,-269.1905 2568.5207,-264.1994 2563.3684,-259.4608\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 56 -->\n",
-       "<g class=\"node\" id=\"node57\">\n",
-       "<title>56</title>\n",
-       "<polygon fill=\"none\" points=\"6507.5,-107.5 6507.5,-177.5 6651.5,-177.5 6651.5,-107.5 6507.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6579.5\" y=\"-162.3\">wtypes._TupleSchema</text>\n",
-       "<polyline fill=\"none\" points=\"6507.5,-154.5 6651.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"6507.5,-130.5 6651.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"6579.5\" y=\"-115.3\"> </text>\n",
+       "<!-- 48&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge104\">\n",
+       "<title>48-&gt;53</title>\n",
+       "<path d=\"M2680.1473,-200.0806C2688.0946,-208.8522 2697.5599,-217.358 2708,-223 2784.7392,-264.4708 3047.2815,-289.8913 3152.1828,-298.604\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3152.1667,-302.1143 3162.4191,-299.4425 3152.7382,-295.1376 3152.1667,-302.1143\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 56&#45;&gt;54 -->\n",
-       "<g class=\"edge\" id=\"edge98\">\n",
-       "<title>56-&gt;54</title>\n",
-       "<path d=\"M6507.3541,-176.0801C6477.6749,-189.8942 6443.2012,-205.9399 6412.8154,-220.0829\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"6411.1155,-217.0135 6403.5264,-224.4064 6414.0694,-223.3597 6411.1155,-217.0135\" stroke=\"#000000\"/>\n",
+       "<!-- 49 -->\n",
+       "<g class=\"node\" id=\"node50\">\n",
+       "<title>49</title>\n",
+       "<polygon fill=\"none\" points=\"4856.5,-130 4856.5,-200 4941.5,-200 4941.5,-130 4856.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4899\" y=\"-184.8\">_ConstType</text>\n",
+       "<polyline fill=\"none\" points=\"4856.5,-177 4941.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4856.5,-153 4941.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4899\" y=\"-137.8\"> </text>\n",
        "</g>\n",
        "<!-- 57 -->\n",
        "<g class=\"node\" id=\"node58\">\n",
        "<title>57</title>\n",
-       "<polygon fill=\"none\" points=\"4874,-107.5 4874,-177.5 5015,-177.5 5015,-107.5 4874,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4944.5\" y=\"-162.3\">wtypes.maxProperties</text>\n",
-       "<polyline fill=\"none\" points=\"4874,-154.5 5015,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"4874,-130.5 5015,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4944.5\" y=\"-115.3\"> </text>\n",
+       "<polygon fill=\"none\" points=\"4601.5,-259.5 4601.5,-344.5 4728.5,-344.5 4728.5,-259.5 4601.5,-259.5\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4665\" y=\"-329.3\">_SchemaMeta</text>\n",
+       "<polyline fill=\"none\" points=\"4601.5,-321.5 4728.5,-321.5 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4601.5,-297.5 4728.5,-297.5 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"4609.5\" y=\"-282.3\">create(cls, name)</text>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"start\" x=\"4609.5\" y=\"-267.3\">validate(cls, object)</text>\n",
+       "</g>\n",
+       "<!-- 49&#45;&gt;57 -->\n",
+       "<g class=\"edge\" id=\"edge105\">\n",
+       "<title>49-&gt;57</title>\n",
+       "<path d=\"M4871.7798,-200.2732C4864.3539,-208.4342 4855.8854,-216.5933 4847,-223 4814.1826,-246.6626 4773.1662,-265.2422 4738.383,-278.4217\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4736.9078,-275.2358 4728.7496,-281.9956 4739.3426,-281.7987 4736.9078,-275.2358\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 57&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge99\">\n",
-       "<title>57-&gt;42</title>\n",
-       "<path d=\"M4873.8957,-175.5477C4870.7531,-176.4722 4867.6127,-177.2979 4864.5,-178 4714.5481,-211.8211 3635.1304,-208.7908 3481.5,-214 3108.1102,-226.6606 2658.7337,-247.3002 2506.1622,-254.4593\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9446,-250.9656 2496.1199,-254.9312 2506.2732,-257.9579 2505.9446,-250.9656\" stroke=\"#000000\"/>\n",
+       "<!-- 50 -->\n",
+       "<g class=\"node\" id=\"node51\">\n",
+       "<title>50</title>\n",
+       "<polygon fill=\"none\" points=\"4845.5,-.5 4845.5,-70.5 4952.5,-70.5 4952.5,-.5 4845.5,-.5\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4899\" y=\"-55.3\">_ContainerType</text>\n",
+       "<polyline fill=\"none\" points=\"4845.5,-47.5 4952.5,-47.5 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4845.5,-23.5 4952.5,-23.5 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4899\" y=\"-8.3\"> </text>\n",
+       "</g>\n",
+       "<!-- 50&#45;&gt;49 -->\n",
+       "<g class=\"edge\" id=\"edge106\">\n",
+       "<title>50-&gt;49</title>\n",
+       "<path d=\"M4899,-70.5446C4899,-85.6604 4899,-103.5338 4899,-119.6429\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4895.5001,-119.9274 4899,-129.9274 4902.5001,-119.9275 4895.5001,-119.9274\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 57&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge100\">\n",
-       "<title>57-&gt;49</title>\n",
-       "<path d=\"M4873.8647,-175.4155C4870.7306,-176.3762 4867.6005,-177.2456 4864.5,-178 4833.4958,-185.5434 3861.6911,-239.4353 3604.4586,-253.5978\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3603.9707,-250.1192 3594.1781,-254.1636 3604.3554,-257.1087 3603.9707,-250.1192\" stroke=\"#000000\"/>\n",
+       "<!-- 51 -->\n",
+       "<g class=\"node\" id=\"node52\">\n",
+       "<title>51</title>\n",
+       "<polygon fill=\"none\" points=\"4369,-130 4369,-200 4459,-200 4459,-130 4369,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4414\" y=\"-184.8\">_ListSchema</text>\n",
+       "<polyline fill=\"none\" points=\"4369,-177 4459,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4369,-153 4459,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4414\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 51&#45;&gt;57 -->\n",
+       "<g class=\"edge\" id=\"edge107\">\n",
+       "<title>51-&gt;57</title>\n",
+       "<path d=\"M4442.0345,-200.1154C4449.813,-208.3742 4458.6968,-216.6184 4468,-223 4505.5374,-248.749 4552.719,-268.043 4591.4969,-281.116\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4590.5705,-284.4959 4601.1637,-284.3058 4592.764,-277.8485 4590.5705,-284.4959\" stroke=\"#000000\"/>\n",
        "</g>\n",
-       "<!-- 57&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge101\">\n",
-       "<title>57-&gt;50</title>\n",
-       "<path d=\"M4873.7501,-174.9943C4870.6474,-176.0703 4867.5551,-177.079 4864.5,-178 4725.1158,-220.0176 4555.1155,-241.7389 4463.8767,-251.1154\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.2825,-247.6575 4453.685,-252.1449 4463.9861,-254.6221 4463.2825,-247.6575\" stroke=\"#000000\"/>\n",
+       "<!-- 54 -->\n",
+       "<g class=\"node\" id=\"node55\">\n",
+       "<title>54</title>\n",
+       "<polygon fill=\"none\" points=\"4477.5,-130 4477.5,-200 4594.5,-200 4594.5,-130 4477.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4536\" y=\"-184.8\">_NumericSchema</text>\n",
+       "<polyline fill=\"none\" points=\"4477.5,-177 4594.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4477.5,-153 4594.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4536\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 54&#45;&gt;57 -->\n",
+       "<g class=\"edge\" id=\"edge108\">\n",
+       "<title>54-&gt;57</title>\n",
+       "<path d=\"M4569.2207,-200.2809C4583.9161,-215.8876 4601.4696,-234.5298 4617.5113,-251.5663\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4615.3562,-254.3831 4624.7597,-259.2642 4620.4526,-249.5844 4615.3562,-254.3831\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 56 -->\n",
+       "<g class=\"node\" id=\"node57\">\n",
+       "<title>56</title>\n",
+       "<polygon fill=\"none\" points=\"4612.5,-130 4612.5,-200 4717.5,-200 4717.5,-130 4612.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4665\" y=\"-184.8\">_ObjectSchema</text>\n",
+       "<polyline fill=\"none\" points=\"4612.5,-177 4717.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4612.5,-153 4717.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4665\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 56&#45;&gt;57 -->\n",
+       "<g class=\"edge\" id=\"edge109\">\n",
+       "<title>56-&gt;57</title>\n",
+       "<path d=\"M4665,-200.2809C4665,-215.1846 4665,-232.8565 4665,-249.2547\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4661.5001,-249.2642 4665,-259.2642 4668.5001,-249.2643 4661.5001,-249.2642\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "<!-- 58 -->\n",
        "<g class=\"node\" id=\"node59\">\n",
        "<title>58</title>\n",
-       "<polygon fill=\"none\" points=\"5033.5,-107.5 5033.5,-177.5 5171.5,-177.5 5171.5,-107.5 5033.5,-107.5\" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5102.5\" y=\"-162.3\">wtypes.minProperties</text>\n",
-       "<polyline fill=\"none\" points=\"5033.5,-154.5 5171.5,-154.5 \" stroke=\"#000000\"/>\n",
-       "<polyline fill=\"none\" points=\"5033.5,-130.5 5171.5,-130.5 \" stroke=\"#000000\"/>\n",
-       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"5102.5\" y=\"-115.3\"> </text>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;42 -->\n",
-       "<g class=\"edge\" id=\"edge102\">\n",
-       "<title>58-&gt;42</title>\n",
-       "<path d=\"M5033.2366,-175.4261C5029.9814,-176.4014 5026.7262,-177.2689 5023.5,-178 4856.3574,-215.8742 3652.7892,-208.4221 3481.5,-214 3108.0935,-226.1598 2658.7276,-247.1161 2506.1605,-254.4086\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"2505.9397,-250.9151 2496.1185,-254.8894 2506.2745,-257.9071 2505.9397,-250.9151\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;49 -->\n",
-       "<g class=\"edge\" id=\"edge103\">\n",
-       "<title>58-&gt;49</title>\n",
-       "<path d=\"M5033.2094,-175.3096C5029.9615,-176.3164 5026.7153,-177.2225 5023.5,-178 4874.4754,-214.0371 4487.6029,-205.844 4334.5,-214 4062.4473,-228.4926 3737.8575,-246.2672 3604.4255,-253.5949\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"3604.1834,-250.1028 3594.3904,-254.146 3604.5674,-257.0922 3604.1834,-250.1028\" stroke=\"#000000\"/>\n",
-       "</g>\n",
-       "<!-- 58&#45;&gt;50 -->\n",
-       "<g class=\"edge\" id=\"edge104\">\n",
-       "<title>58-&gt;50</title>\n",
-       "<path d=\"M5033.1323,-175.0147C5029.9053,-176.1013 5026.6846,-177.1048 5023.5,-178 4824.7116,-233.8798 4579.1911,-250.3055 4463.9932,-255.0785\" fill=\"none\" stroke=\"#000000\"/>\n",
-       "<polygon fill=\"none\" points=\"4463.7766,-251.5843 4453.9238,-255.4796 4464.0552,-258.5788 4463.7766,-251.5843\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4736,-130 4736,-200 4838,-200 4838,-130 4736,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4787\" y=\"-184.8\">_StringSchema</text>\n",
+       "<polyline fill=\"none\" points=\"4736,-177 4838,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"4736,-153 4838,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"4787\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 58&#45;&gt;57 -->\n",
+       "<g class=\"edge\" id=\"edge110\">\n",
+       "<title>58-&gt;57</title>\n",
+       "<path d=\"M4755.582,-200.2809C4741.684,-215.8876 4725.083,-234.5298 4709.9118,-251.5663\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"4707.0933,-249.4685 4703.0567,-259.2642 4712.3209,-254.1238 4707.0933,-249.4685\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 59 -->\n",
+       "<g class=\"node\" id=\"node60\">\n",
+       "<title>59</title>\n",
+       "<polygon fill=\"none\" points=\"2717.5,-130 2717.5,-200 2814.5,-200 2814.5,-130 2717.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2766\" y=\"-184.8\">maxProperties</text>\n",
+       "<polyline fill=\"none\" points=\"2717.5,-177 2814.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2717.5,-153 2814.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2766\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 59&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge111\">\n",
+       "<title>59-&gt;45</title>\n",
+       "<path d=\"M2738.4722,-200.202C2729.709,-209.087 2719.3185,-217.6213 2708,-223 2640.9883,-254.8448 2118.2979,-290.2983 1972.5949,-299.6412\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1972.1343,-296.1634 1962.3775,-300.2931 1972.5801,-303.1492 1972.1343,-296.1634\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 59&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge112\">\n",
+       "<title>59-&gt;52</title>\n",
+       "<path d=\"M2735.0866,-200.1174C2726.8176,-208.2823 2717.5166,-216.4821 2708,-223 2664.0077,-253.13 2606.6644,-276.0127 2568.8834,-289.2075\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2567.5715,-285.9572 2559.247,-292.511 2569.8416,-292.5789 2567.5715,-285.9572\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 59&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge113\">\n",
+       "<title>59-&gt;53</title>\n",
+       "<path d=\"M2793.9385,-200.0406C2802.4267,-208.7036 2812.3529,-217.1641 2823,-223 2879.6149,-254.0321 3066.5259,-283.6418 3152.2909,-295.9785\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3151.8391,-299.4494 3162.2331,-297.3963 3152.8274,-292.5195 3151.8391,-299.4494\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 60 -->\n",
+       "<g class=\"node\" id=\"node61\">\n",
+       "<title>60</title>\n",
+       "<polygon fill=\"none\" points=\"2832.5,-130 2832.5,-200 2927.5,-200 2927.5,-130 2832.5,-130\" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2880\" y=\"-184.8\">minProperties</text>\n",
+       "<polyline fill=\"none\" points=\"2832.5,-177 2927.5,-177 \" stroke=\"#000000\"/>\n",
+       "<polyline fill=\"none\" points=\"2832.5,-153 2927.5,-153 \" stroke=\"#000000\"/>\n",
+       "<text fill=\"#000000\" font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"2880\" y=\"-137.8\"> </text>\n",
+       "</g>\n",
+       "<!-- 60&#45;&gt;45 -->\n",
+       "<g class=\"edge\" id=\"edge114\">\n",
+       "<title>60-&gt;45</title>\n",
+       "<path d=\"M2853.0886,-200.2937C2844.4788,-209.1801 2834.2331,-217.6923 2823,-223 2803.4228,-232.2504 2139.204,-285.72 1972.6045,-299.0102\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"1972.0529,-295.5429 1962.3626,-299.8265 1972.6092,-302.5208 1972.0529,-295.5429\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 60&#45;&gt;52 -->\n",
+       "<g class=\"edge\" id=\"edge115\">\n",
+       "<title>60-&gt;52</title>\n",
+       "<path d=\"M2851.2542,-200.2687C2842.9002,-208.7227 2833.2424,-217.0222 2823,-223 2740.7531,-271.0022 2628.64,-290.5685 2569.4462,-297.9477\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"2568.8894,-294.4892 2559.3741,-299.1486 2569.7182,-301.44 2568.8894,-294.4892\" stroke=\"#000000\"/>\n",
+       "</g>\n",
+       "<!-- 60&#45;&gt;53 -->\n",
+       "<g class=\"edge\" id=\"edge116\">\n",
+       "<title>60-&gt;53</title>\n",
+       "<path d=\"M2908.2859,-200.0558C2916.493,-208.5114 2925.9701,-216.8649 2936,-223 3004.9997,-265.2055 3098.1965,-286.3129 3152.2307,-295.6515\" fill=\"none\" stroke=\"#000000\"/>\n",
+       "<polygon fill=\"none\" points=\"3151.7329,-299.1168 3162.173,-297.3129 3152.8867,-292.2125 3151.7329,-299.1168\" stroke=\"#000000\"/>\n",
        "</g>\n",
        "</g>\n",
        "</svg>"
@@ -3303,12 +2385,11 @@
    ],
    "source": [
     "    if __name__ == \"__main__\":\n",
+    "        from IPython import get_ipython\n",
     "        if \"__file__\" in locals():\n",
-    "            if \"covtest\" in __import__(\"sys\").argv:\n",
-    "                print(__import__(\"doctest\").testmod(optionflags=8))\n",
+    "            if \"covtest\" in __import__(\"sys\").argv: print(__import__(\"doctest\").testmod(optionflags=8))\n",
     "        else:\n",
     "            import IPython\n",
-    "\n",
     "            get_ipython().system(\n",
     "                \"jupyter nbconvert --to python --TemplateExporter.exclude_input_prompt=True wtypes.ipynb\"\n",
     "            )\n",
@@ -3320,25 +2401,8 @@
     "            get_ipython().system(\"coverage html\")\n",
     "            with IPython.utils.capture.capture_output():\n",
     "                get_ipython().system(\"pyreverse wtypes -osvg -pwtypes\")\n",
-    "            IPython.display.display(IPython.display.SVG(\"classes_wtypes.svg\"))\n",
-    "            with IPython.utils.capture.capture_output():\n",
-    "                get_ipython().system(\"pyreverse wtypes -osvg -pwtypes -my -s1\")\n",
-    "            IPython.display.display(IPython.display.SVG(\"classes_wtypes.svg\"))"
+    "            IPython.display.display(IPython.display.SVG(\"classes_wtypes.svg\"))\n"
    ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
   }
  ],
  "metadata": {
diff --git a/wtypes.py b/wtypes.py
index 7d1d676..7c7a2f2 100644
--- a/wtypes.py
+++ b/wtypes.py
@@ -23,6 +23,7 @@ __version__ = "0.0.1"
 import abc
 import copy
 import dataclasses
+import functools
 import inspect
 import re
 import typing
@@ -136,7 +137,7 @@ Returns
 type
     
         """
-        return type(name, (cls,), {"_schema": copy.copy(cls._schema)}, **schema)
+        return type(name, (cls,), {"_schema": copy.deepcopy(cls._schema)}, **schema)
 
     def __neg__(cls):
         """The Not version of a type."""
@@ -237,10 +238,12 @@ def _python_to_wtype(object):
             object = Dict
         elif object == int:
             object = Integer
+        elif object == tuple:
+            object = Tuple
         elif object == float:
             object = Float
         elif object == None:
-            object = Null
+            object = None
         elif object == bool:
             object = Bool
     return object
@@ -250,7 +253,7 @@ def _get_schema_from_typeish(object):
     """infer a schema from an object."""
     if isinstance(object, dict):
         return {k: _get_schema_from_typeish(v) for k, v in object.items()}
-    if isinstance(object, tuple):
+    if isinstance(object, (list, tuple)):
         return list(map(_get_schema_from_typeish, object))
     object = _python_to_wtype(object)
     if hasattr(object, "_schema"):
@@ -267,6 +270,9 @@ def _object_to_webtype(object):
         return Dict
     if isinstance(object, str):
         return String
+    if isinstance(object, tuple):
+        return Tuple
+
     if isinstance(object, typing.Sequence):
         return List
     if isinstance(object, bool):
@@ -310,15 +316,34 @@ Returns
 object
     Return an instance of the object and carry along the schema information.
 """
+        args = cls._resolve_defaults(*args, **kwargs)
         args and cls.validate(args[0])
-        if isinstance(cls, _ContainerType):
+        if dataclasses.is_dataclass(cls):
+            self = super().__new__(cls, *args, **kwargs)
+            cls.validate(vars(self))
+        elif isinstance(cls, _ConstType) or issubclass(cls, Tuple):
             if args:
                 return _object_to_webtype(args[0])(args[0])
-        return super().__new__(cls, *args, **kwargs)
-
+        else:
+            self = super().__new__(cls, *args, **kwargs)
+            self.__init__(*args, **kwargs)
+        args or cls.validate(self)
+        return self
 
-#             except: return  if args else cls()
-#             return self
+    @classmethod
+    def _resolve_defaults(cls, *args, **kwargs):
+        if not args and not kwargs:
+            if "default" in cls._schema:
+                return (cls._schema.default,)
+            elif "properties" in cls._schema:
+                return (
+                    {
+                        k: v["default"]
+                        for k, v in cls._schema["properties"]
+                        if "default" in v
+                    },
+                )
+        return args
 
 
 class Description(_NoInit, Trait, _NoTitle, metaclass=_ConstType):
@@ -339,6 +364,10 @@ class Examples(_NoInit, Trait, metaclass=_ConstType):
     """"""
 
 
+class Default(_NoInit, Trait, metaclass=_ConstType):
+    """"""
+
+
 class Title(_NoInit, Trait, _NoTitle, metaclass=_ConstType):
     """An empty type with a title
     
@@ -379,6 +408,7 @@ Examples
 
     >>> Bool(), Bool(True), Bool(False)
     (False, True, False)
+    >>> assert (Bool + Default[True])()
     
 Note
 ----
@@ -389,6 +419,7 @@ It is not possible to base class ``bool`` so object creation is customized.
     _schema = dict(type="boolean")
 
     def __new__(cls, *args):
+        args = cls._resolve_defaults(*args)
         args = args or (bool(),)
         args and cls.validate(args[0])
         return args[0]
@@ -401,6 +432,7 @@ Examples
 --------
 
     >>> Null(None)
+    >>> assert (Null + Default[None])() is None
     
 .. Null Type:
     https://json-schema.org/understanding-json-schema/reference/null.html
@@ -410,6 +442,7 @@ Examples
     _schema = dict(type="null")
 
     def __new__(cls, *args):
+        args = cls._resolve_defaults(*args)
         args and cls.validate(args[0])
 
 
@@ -449,24 +482,22 @@ class Integer(Trait, int, metaclass=_NumericSchema):
     """integer type
     
     
->>> assert isinstance(10, Float)
+Examples
+--------
 
-Symbollic conditions.
+    >>> assert isinstance(10, Integer)
+    >>> assert not isinstance(10.1, Integer)
+    >>> (Integer+Default[9])(9)
+    9
 
-    >>> bounded = (10< Float)< 100
+
+    >>> bounded = (10< Integer)< 100
     >>> bounded._schema.toDict()
-    {'type': 'number', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}
+    {'type': 'integer', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}
 
     >>> assert isinstance(12, bounded)
     >>> assert not isinstance(0, bounded)
-
-Multiples
-
-    >>> assert (Integer+MultipleOf[3])(9) == 9
-
-
-.. Numeric Types:
-    https://json-schema.org/understanding-json-schema/reference/numeric.html
+    >>> assert (Integer/3)(9) == 9
     
     """
 
@@ -477,16 +508,25 @@ class Float(Trait, float, metaclass=_NumericSchema):
     """float type
     
     
-    >>> assert isinstance(10, Integer)
-    >>> assert not isinstance(10.1, Integer)
+    >>> assert isinstance(10, Float)
+    >>> assert isinstance(10.1, Float)
+
+Symbollic conditions.
 
     >>> bounded = (10< Float)< 100
     >>> bounded._schema.toDict()
     {'type': 'number', 'exclusiveMinimum': 10, 'exclusiveMaximum': 100}
 
-    >>> assert isinstance(12, bounded)
-    >>> assert not isinstance(0, bounded)
-    >>> assert (Integer/3)(9) == 9
+    >>> assert isinstance(12.1, bounded)
+    >>> assert not isinstance(0.1, bounded)
+
+Multiples
+
+    >>> assert (Float+MultipleOf[3])(9) == 9
+
+
+.. Numeric Types:
+    https://json-schema.org/understanding-json-schema/reference/numeric.html
     
     """
 
@@ -537,14 +577,22 @@ class _Object(metaclass=_ObjectSchema):
     _schema = dict(type="object")
 
     def __init_subclass__(cls, **kwargs):
-        cls._schema = copy.copy(cls._schema)
+        cls._schema = copy.deepcopy(cls._schema)
         cls._schema.update(kwargs)
         cls._schema.update(Properties[cls.__annotations__]._schema)
+        required = []
+        for key in cls.__annotations__:
+            if hasattr(cls, key):
+                ...  # cls._schema.properties[key]['default'] = getattr(cls, key)
+            else:
+                required.append(key)
+        if required:
+            cls._schema["required"] = required
 
-    def load(self, *object):
-        self.update(__import__("anyconfig").load(object))
-        type(self).validate(self)
-        return self
+    @classmethod
+    def from_config_file(cls, *object):
+        args = __import__("anyconfig").load(object)
+        return cls(args)
 
 
 class Dict(Trait, dict, _Object):
@@ -553,6 +601,8 @@ class Dict(Trait, dict, _Object):
 Examples
 --------
 
+    >>> assert istype(Dict, __import__('collections').abc.MutableMapping)
+
     >>> assert isinstance({}, Dict)
     >>> assert not isinstance([], Dict)
     
@@ -573,10 +623,37 @@ Examples
     https://json-schema.org/understanding-json-schema/reference/object.html
     """
 
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
+    def __new__(cls, *args, **kwargs):
+        return super().__new__(cls, dict(*args, **kwargs))
+
+    def _validate(self):
         type(self).validate(self)
 
+    def __setitem__(self, key, object):
+        """Only test the key being set to avoid invalid state."""
+        properties = self._schema.get("properties", None)
+        if key in properties:
+            jsonschema.validate(
+                object,
+                self._schema.get("properties", {}).get(key, {}),
+                format_checker=jsonschema.draft7_format_checker,
+            )
+        else:
+            jsonschema.validate(
+                {key: object},
+                {**self._schema, "required": []},
+                format_checker=jsonschema.draft7_format_checker,
+            )
+        super().__setitem__(key, object)
+
+    def update(self, *args, **kwargs):
+        jsonschema.validate(
+            dict(*args, **kwargs),
+            {**self._schema, "required": []},
+            format_checker=jsonschema.draft7_format_checker,
+        )
+        super().update(*args, **kwargs)
+
 
 class Bunch(Dict, munch.Munch):
     """Bunch type
@@ -604,11 +681,13 @@ Examples
 
     >>> class q(DataClass): a: int
     >>> q._schema.toDict()
-    {'type': 'object', 'properties': {'a': {'type': 'integer'}}}
+    {'type': 'object', 'properties': {'a': {'type': 'integer'}}, 'required': ['a']}
 
     >>> q(a=10)
     q(a=10)
     
+    >>> assert not isinstance({}, q)
+    
     """
 
     def __new__(cls, *args, **kwargs):
@@ -617,11 +696,29 @@ Examples
         return self
 
     def __init_subclass__(cls, **kwargs):
-        cls._schema.update(Properties[cls.__annotations__]._schema)
+        super().__init_subclass__()
         dataclasses.dataclass(cls)
 
-    def __post_init__(self):
-        type(self).validate(vars(self))
+    def __setattr__(self, key, object):
+        """Only test the attribute being set to avoid invalid state."""
+        if isinstance(object, dict):
+            object = object.get(key)
+        properties = self._schema.get("properties", None)
+        (
+            jsonschema.validate(
+                object,
+                self._schema.get("properties", {}).get(key, {}),
+                format_checker=jsonschema.draft7_format_checker,
+            )
+            if key in properties
+            else jsonschema.validate(
+                {key: object},
+                {**self._schema, "required": []},
+                format_checker=jsonschema.draft7_format_checker,
+            )
+        )
+        super().__setattr__(key, object)
+        # trigger change here.
 
 
 class AdditionalProperties(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
@@ -657,7 +754,6 @@ class PatternProperties(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
 
 class _StringSchema(_SchemaMeta):
     """Meta operations for strings types.
-    
     """
 
     def __mod__(cls, object):
@@ -723,10 +819,23 @@ class _ListSchema(_SchemaMeta):
     """Meta operations for list types."""
 
     def __getitem__(cls, object):
-        if isinstance(object, tuple):
+        if istype(cls, Tuple) and isinstance(object, (tuple, list)):
+            return cls + Items[list(object)]
+        elif isinstance(object, tuple):
             return cls + Items[AnyOf[object]]
         return cls + Items[object]
 
+    def __gt__(cls, object):
+        """Minumum array length"""
+        return cls + MinItems[object]
+
+    def __lt__(cls, object):
+        """Maximum array length"""
+        return cls + MaxItems[object]
+
+    __rgt__ = __rge__ = __le__ = __lt__
+    __rlt__ = __rle__ = __ge__ = __gt__
+
 
 class List(Trait, list, metaclass=_ListSchema):
     """List type
@@ -742,17 +851,74 @@ List
     
 Typed list
 
+    >>> assert List[Integer]([1, 2, 3])
     >>> assert isinstance([1], List[Integer])
     >>> assert not isinstance([1.1], List[Integer])
     
+    >>> List[Integer, String]._schema.toDict()
+    {'type': 'array', 'items': {'anyOf': [{'type': 'integer'}, {'type': 'string'}]}}
+
+    
 Tuple        
     
+    >>> assert List[Integer, String]([1, 'abc', 2])
     >>> assert isinstance([1, '1'], List[Integer, String])
     >>> assert not isinstance([1, {}], List[Integer, String])
     """
 
     _schema = dict(type="array")
 
+    def __new__(cls, *args, **kwargs):
+        if args and isinstance(args[0], tuple):
+            args = (list(args[0]) + list(args[1:]),)
+        return super().__new__(cls, *args, **kwargs)
+
+    def _verify_item(self, object, id=None):
+        items = self._schema.get("items", None)
+        if items:
+            if isinstance(items, dict):
+                if isinstance(id, slice):
+                    List[items].validate(object)
+                else:
+                    jsonschema.validate(
+                        object, items, format_checker=jsonschema.draft7_format_checker
+                    )
+            elif isinstance(items, list):
+                if isinstance(id, slice):
+                    # condition for negative slices
+                    Tuple[tuple(items[id])].validate(object)
+                elif isinstance(id, int):
+                    # condition for negative integers
+                    jsonschema.validate(
+                        object,
+                        items[id],
+                        format_checker=jsonschema.draft7_format_checker,
+                    )
+
+    def __setitem__(self, id, object):
+        self._verify_item(object, id)
+        super().__setitem__(id, object)
+
+    def append(self, object):
+        self._verify_item(object, len(self) + 1)
+        super().append(object)
+
+    def insert(self, id, object):
+        self._verify_item(object, id)
+        super().insert(id, object)
+
+    def extend(self, object):
+        id = slice(len(self), len(self) + 3)
+        self._verify_item(object, id)
+        super().extend(object)
+
+    def pop(self, index=-1, default=None):
+        value = super().pop(index, default)
+        try:
+            type(self).validate(self)
+        except ValidationError:
+            self.insert(index, value)
+
 
 class Unique(List, uniqueItems=True):
     """Unique list type
@@ -761,22 +927,14 @@ class Unique(List, uniqueItems=True):
 Examples
 --------
 
+    >>> assert Unique(list('abc'))
     >>> assert isinstance([1,2], Unique)
     >>> assert not isinstance([1,1], Unique)
     
     """
 
 
-class _TupleSchema(_SchemaMeta):
-    """Meta operations for list types."""
-
-    def __getitem__(cls, object):
-        if not isinstance(object, tuple):
-            object = (object,)
-        return cls + Items[object]
-
-
-class Tuple(Trait, metaclass=_TupleSchema):
+class Tuple(List):
     """tuple type
     
 Note
@@ -790,13 +948,15 @@ Examples
 --------
 
     >>> assert isinstance([1,2], Tuple)
-    >>> assert isinstance([1,'1'], Tuple[Integer, String])
-    >>> assert not isinstance([1,1], Tuple[Integer, String])
+    >>> assert Tuple[Integer, String]([1, 'abc'])
+    >>> Tuple[Integer, String]._schema.toDict()
+    {'type': 'array', 'items': [{'type': 'integer'}, {'type': 'string'}]}
+
+    >>> assert isinstance([1,'1'], Tuple[[Integer, String]])
+    >>> assert not isinstance([1,1], Tuple[[Integer, String]])
     
     """
 
-    _schema = dict(type="array")
-
 
 class UniqueItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType):
     """Schema for unique items in a list."""
@@ -814,6 +974,14 @@ class AdditionalItems(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
     ...
 
 
+class MinItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType):
+    """Minimum length of an array."""
+
+
+class MaxItems(Trait, _NoInit, _NoTitle, metaclass=_ConstType):
+    """Maximum length of an array."""
+
+
 # ## Combining Schema
 
 
@@ -842,6 +1010,7 @@ class AnyOf(Trait, _NoInit, metaclass=_ContainerType):
 Examples
 --------
 
+    >>> assert AnyOf[Integer, String]('abc')
     >>> assert isinstance(10, AnyOf[Integer, String])
     >>> assert not isinstance([], AnyOf[Integer, String])
     
@@ -856,6 +1025,7 @@ class AllOf(Trait, _NoInit, metaclass=_ContainerType):
 Examples
 --------
 
+    >>> assert AllOf[Float>0, Integer/3](9)
     >>> assert isinstance(9, AllOf[Float>0, Integer/3])
     >>> assert not isinstance(-9, AllOf[Float>0, Integer/3])
     
@@ -870,6 +1040,7 @@ class OneOf(Trait, _NoInit, metaclass=_ContainerType):
 Examples
 --------
 
+    >>> assert OneOf[Float>0, Integer/3](-9)
     >>> assert isinstance(-9, OneOf[Float>0, Integer/3])
     >>> assert not isinstance(9, OneOf[Float>0, Integer/3])
 
@@ -879,13 +1050,14 @@ Examples
 """
 
 
-class Enum(Trait, _NoInit, metaclass=_ConstType):
+class Enum(Trait, metaclass=_ConstType):
     """An enumerate type that is restricted to its inputs.
     
     
 Examples
 --------
 
+    >>> assert Enum['cat', 'dog']('cat')
     >>> assert isinstance('cat', Enum['cat', 'dog'])
     >>> assert not isinstance('🐢', Enum['cat', 'dog'])
 
@@ -918,16 +1090,20 @@ Regex.compile = re.compile
 del key
 
 
-class If(Trait, metaclass=_ContainerType):
-    ...
+class If(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
+    """if condition type
+    
+.. Conditions:
+    https://json-schema.org/understanding-json-schema/reference/conditionals.html
+    """
 
 
-class Then(Trait, metaclass=_ContainerType):
-    ...
+class Then(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
+    """then condition type"""
 
 
-class Else(Trait, metaclass=_ContainerType):
-    ...
+class Else(Trait, _NoInit, _NoTitle, metaclass=_ContainerType):
+    """else condition type"""
 
 
 # ## Configuration classes
@@ -938,6 +1114,8 @@ class Configurable(DataClass):
 
 
 if __name__ == "__main__":
+    from IPython import get_ipython
+
     if "__file__" in locals():
         if "covtest" in __import__("sys").argv:
             print(__import__("doctest").testmod(optionflags=8))
@@ -956,6 +1134,3 @@ if __name__ == "__main__":
         with IPython.utils.capture.capture_output():
             get_ipython().system("pyreverse wtypes -osvg -pwtypes")
         IPython.display.display(IPython.display.SVG("classes_wtypes.svg"))
-        with IPython.utils.capture.capture_output():
-            get_ipython().system("pyreverse wtypes -osvg -pwtypes -my -s1")
-        IPython.display.display(IPython.display.SVG("classes_wtypes.svg"))


Test patch:
diff --git a/test_wtypes.ipynb b/test_wtypes.ipynb
index 29684f6..9c3e258 100644
--- a/test_wtypes.ipynb
+++ b/test_wtypes.ipynb
@@ -7,7 +7,8 @@
    "outputs": [],
    "source": [
     "    from wtypes import *\n",
-    "    import pytest, anyconfig"
+    "    import pytest, anyconfig\n",
+    "    invalid = pytest.raises(ValidationError)"
    ]
   },
   {
@@ -16,18 +17,16 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "    def test_load_config():\n",
-    "        class BadProject(Bunch):\n",
-    "            tool: Dict\n",
-    "            __annotations__ = {'build-system': Integer}\n",
-    "\n",
-    "        with pytest.raises(ValidationError):\n",
-    "            BadProject().load('pyproject.toml')\n",
+    "    def test_update_attr():\n",
     "        \n",
-    "        class PyProject(Bunch):\n",
-    "            tool: Dict\n",
-    "            __annotations__ = {'build-system': Dict}\n",
-    "        PyProject().load('pyproject.toml')"
+    "        for cls in [Bunch]:\n",
+    "            class Class(cls): \n",
+    "                a: int = None\n",
+    "            d = Class()\n",
+    "            with invalid: d['a'] = 'abc'\n",
+    "            assert 'a' not in d\n",
+    "            d.a = 10\n",
+    "            assert d.a == 10"
    ]
   },
   {
@@ -40,9 +39,9 @@
     "        class Thing(Dict):\n",
     "            a: Integer\n",
     "\n",
-    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}}\n",
+    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}, 'required': ['a']}\n",
     "        assert Thing(a=1)\n",
-    "        with pytest.raises(ValidationError):\n",
+    "        with invalid:\n",
     "            Thing(a='abc')\n"
    ]
   },
@@ -56,10 +55,10 @@
     "        class Thing(Bunch):\n",
     "            a: Integer\n",
     "\n",
-    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}}\n",
+    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}, 'required': ['a']}\n",
     "        t = Thing(a=1)\n",
     "        assert t.a == 1\n",
-    "        with pytest.raises(ValidationError):\n",
+    "        with invalid:\n",
     "            Thing(a='abc')\n"
    ]
   },
@@ -68,15 +67,104 @@
    "execution_count": 5,
    "metadata": {},
    "outputs": [],
+   "source": [
+    "    def test_dict_mods():\n",
+    "        d = Dict[{'a': Integer, 'b': String}]({'a': 1})\n",
+    "\n",
+    "        with invalid: d[\"a\"] = 'abc'\n",
+    "        d['a'] = 8\n",
+    "        d['b'] = 'abc'\n",
+    "        with invalid: d['b'] = 10\n",
+    "        d['b'] = 'wxyz'\n",
+    "\n",
+    "        assert d == {'a': 8, 'b': 'wxyz'}\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "    def test_list_mods():\n",
+    "        l = List[Integer, Bool]()\n",
+    "        with invalid: l.append(1.2)\n",
+    "        l.append(1)\n",
+    "        l.extend([1,True])\n",
+    "        with invalid: l.extend([1, 'abc'])\n",
+    "        l.extend([False, 2, 4])\n",
+    "        assert l == [1, 1, True, False, 2, 4]\n",
+    "        with invalid: l.insert(1, 'abc')\n",
+    "        l.insert(1, 8)\n",
+    "        assert l == [1, 8, 1, True, False, 2, 4]\n",
+    "\n",
+    "        ml = List[Integer] + MinItems[1]\n",
+    "\n",
+    "        with invalid: ml()\n",
+    "        with invalid: ml(['abc'])\n",
+    "        assert ml([1])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "    def test_update_item():\n",
+    "        for cls in [Dict, Bunch]:\n",
+    "            d = cls[{'a': int}]()\n",
+    "            assert 'a' not in d\n",
+    "            d['a'] = 10\n",
+    "            assert d['a'] == 10"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "    def test_load_config():\n",
+    "        class BadProject(Bunch):\n",
+    "            tool: Dict\n",
+    "            __annotations__ = {'build-system': Integer}\n",
+    "\n",
+    "        with invalid:\n",
+    "            BadProject().load('pyproject.toml')\n",
+    "        \n",
+    "        class PyProject(Bunch):\n",
+    "            tool: Dict\n",
+    "            __annotations__ = {'build-system': Dict}\n",
+    "        PyProject.from_config_file('pyproject.toml')"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "    def test_tuple():\n",
+    "        assert Tuple((1,2))\n",
+    "        assert Tuple([1,2])\n",
+    "        with invalid: Tuple[[Integer, String]]({})"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "    def test_dataclass():\n",
     "        class Thing(DataClass):\n",
     "            a: Integer\n",
     "\n",
     "        assert dataclasses.is_dataclass(Thing)\n",
-    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}}\n",
+    "        assert Thing._schema.toDict() == {'type': 'object', 'properties': {'a': {'type': 'integer'}}, 'required': ['a']}\n",
     "        assert Thing(a=1)\n",
-    "        with pytest.raises(ValidationError):\n",
+    "        with invalid:\n",
     "            Thing(a='abc')\n"
    ]
   }