From 66db92ca08f29eb4601e7a38ce348ab8df7340b4 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 17:48:09 -0700 Subject: [PATCH 01/11] remove bundle --- edg/edgir/common_pb2.py | 12 +- edg/edgir/common_pb2.pyi | 376 ++++------ edg/edgir/elem_pb2.py | 67 +- edg/edgir/elem_pb2.pyi | 1388 +++++++++++++++-------------------- edg/edgir/expr_pb2.py | 13 +- edg/edgir/expr_pb2.pyi | 1183 ++++++++++++++--------------- edg/edgir/impl_pb2.py | 11 +- edg/edgir/impl_pb2.pyi | 155 ++-- edg/edgir/init_pb2.py | 11 +- edg/edgir/init_pb2.pyi | 184 ++--- edg/edgir/lit_pb2.py | 13 +- edg/edgir/lit_pb2.pyi | 415 +++++------ edg/edgir/name_pb2.py | 11 +- edg/edgir/name_pb2.pyi | 97 +-- edg/edgir/ref_pb2.py | 11 +- edg/edgir/ref_pb2.pyi | 240 +++--- edg/edgir/schema_pb2.py | 29 +- edg/edgir/schema_pb2.pyi | 315 ++++---- edg/edgrpc/compiler_pb2.py | 11 +- edg/edgrpc/compiler_pb2.pyi | 244 +++--- edg/edgrpc/hdl_pb2.py | 13 +- edg/edgrpc/hdl_pb2.pyi | 1136 ++++++++++++++-------------- proto/README.md | 1 + proto/edgir/elem.proto | 15 +- proto/edgir/schema.proto | 1 - 25 files changed, 2764 insertions(+), 3188 deletions(-) diff --git a/edg/edgir/common_pb2.py b/edg/edgir/common_pb2.py index a88fe9b8c..01c1565e4 100644 --- a/edg/edgir/common_pb2.py +++ b/edg/edgir/common_pb2.py @@ -1,20 +1,16 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x12edgir/common.proto\x12\x0cedgir.common"\x95\x03\n\x08Metadata\x12&\n\x07unknown\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12\x0f\n\x05known\x18\x02 \x01(\tH\x00\x121\n\x07members\x18e \x01(\x0b2\x1e.edgir.common.Metadata.MembersH\x01\x12\x13\n\ttext_leaf\x18f \x01(\tH\x01\x12\x12\n\x08bin_leaf\x18g \x01(\x0cH\x01\x125\n\x0esource_locator\x18n \x01(\x0b2\x1b.edgir.common.SourceLocatorH\x01\x12$\n\x05error\x18p \x01(\x0b2\x13.edgir.common.ErrorH\x01\x1a\x86\x01\n\x07Members\x126\n\x04node\x18\n \x03(\x0b2(.edgir.common.Metadata.Members.NodeEntry\x1aC\n\tNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b2\x16.edgir.common.Metadata:\x028\x01B\x06\n\x04typeB\x06\n\x04meta"\xc9\x01\n\rSourceLocator\x12\x14\n\x0cfile_package\x18\x01 \x01(\t\x12\x13\n\x0bline_offset\x18\x02 \x01(\x05\x12\x12\n\ncol_offset\x18\x03 \x01(\x05\x12;\n\x0bsource_type\x18\x04 \x01(\x0e2&.edgir.common.SourceLocator.SourceType"<\n\nSourceType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0e\n\nDEFINITION\x10\x01\x12\x11\n\rINSTANTIATION\x10\x02"X\n\x05Error\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\x12+\n\x06source\x18\x02 \x03(\x0b2\x1b.edgir.common.SourceLocator"\x07\n\x05Emptyb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12edgir/common.proto\x12\x0cedgir.common"\x95\x03\n\x08Metadata\x12&\n\x07unknown\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12\x0f\n\x05known\x18\x02 \x01(\tH\x00\x121\n\x07members\x18e \x01(\x0b2\x1e.edgir.common.Metadata.MembersH\x01\x12\x13\n\ttext_leaf\x18f \x01(\tH\x01\x12\x12\n\x08bin_leaf\x18g \x01(\x0cH\x01\x125\n\x0esource_locator\x18n \x01(\x0b2\x1b.edgir.common.SourceLocatorH\x01\x12$\n\x05error\x18p \x01(\x0b2\x13.edgir.common.ErrorH\x01\x1a\x86\x01\n\x07Members\x126\n\x04node\x18\n \x03(\x0b2(.edgir.common.Metadata.Members.NodeEntry\x1aC\n\tNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b2\x16.edgir.common.Metadata:\x028\x01B\x06\n\x04typeB\x06\n\x04meta"\xc9\x01\n\rSourceLocator\x12\x14\n\x0cfile_package\x18\x01 \x01(\t\x12\x13\n\x0bline_offset\x18\x02 \x01(\x05\x12\x12\n\ncol_offset\x18\x03 \x01(\x05\x12;\n\x0bsource_type\x18\x04 \x01(\x0e2&.edgir.common.SourceLocator.SourceType"<\n\nSourceType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0e\n\nDEFINITION\x10\x01\x12\x11\n\rINSTANTIATION\x10\x02"X\n\x05Error\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\x12+\n\x06source\x18\x02 \x03(\x0b2\x1b.edgir.common.SourceLocator"\x07\n\x05Emptyb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.common_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.common_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _METADATA_MEMBERS_NODEENTRY._options = None - _METADATA_MEMBERS_NODEENTRY._serialized_options = b"8\x01" + _METADATA_MEMBERS_NODEENTRY._serialized_options = b'8\x01' _METADATA._serialized_start = 37 _METADATA._serialized_end = 442 _METADATA_MEMBERS._serialized_start = 292 @@ -28,4 +24,4 @@ _ERROR._serialized_start = 648 _ERROR._serialized_end = 736 _EMPTY._serialized_start = 738 - _EMPTY._serialized_end = 745 + _EMPTY._serialized_end = 745 \ No newline at end of file diff --git a/edg/edgir/common_pb2.pyi b/edg/edgir/common_pb2.pyi index 9ee680ab3..bad85ffc9 100644 --- a/edg/edgir/common_pb2.pyi +++ b/edg/edgir/common_pb2.pyi @@ -7,251 +7,195 @@ Package : edg.common This is where we keep shared types that we reuse and don't have a good place for. """ - -import builtins -import collections.abc -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.internal.enum_type_wrapper -import google.protobuf.message +from collections import abc as _abc +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +import builtins as _builtins import sys -import typing - +import typing as _typing if sys.version_info >= (3, 10): - import typing as typing_extensions + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class Metadata(google.protobuf.message.Message): +@_typing.final +class Metadata(_message.Message): """* Arbitrary metadata stored in tree form.""" - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Members(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class NodeEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str - - @property - def value(self) -> global___Metadata: ... - def __init__(self, *, key: builtins.str = ..., value: global___Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... - - NODE_FIELD_NUMBER: builtins.int - - @property - def node(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___Metadata]: ... - def __init__(self, *, node: collections.abc.Mapping[builtins.str, global___Metadata] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["node", b"node"]) -> None: ... - - UNKNOWN_FIELD_NUMBER: builtins.int - KNOWN_FIELD_NUMBER: builtins.int - MEMBERS_FIELD_NUMBER: builtins.int - TEXT_LEAF_FIELD_NUMBER: builtins.int - BIN_LEAF_FIELD_NUMBER: builtins.int - SOURCE_LOCATOR_FIELD_NUMBER: builtins.int - ERROR_FIELD_NUMBER: builtins.int - - @property - def unknown(self) -> global___Empty: ... - known: builtins.str - - @property - def members(self) -> global___Metadata.Members: ... - text_leaf: builtins.str - bin_leaf: builtins.bytes - "* I wanted to split binary and text data, since we might\n just want to dump a raw file/image/datasheet in here\n for safekeeping.\n\n Mixing up binary and textual formats is just a recipe\n for trouble.\n " - - @property - def source_locator(self) -> global___SourceLocator: + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Members(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class NodeEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + + @_builtins.property + def value(self) -> Global___Metadata: + ... + + def __init__(self, *, key: _builtins.str=..., value: Global___Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + NODE_FIELD_NUMBER: _builtins.int + + @_builtins.property + def node(self) -> _containers.MessageMap[_builtins.str, Global___Metadata]: + ... + + def __init__(self, *, node: _abc.Mapping[_builtins.str, Global___Metadata] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['node', b'node'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + UNKNOWN_FIELD_NUMBER: _builtins.int + KNOWN_FIELD_NUMBER: _builtins.int + MEMBERS_FIELD_NUMBER: _builtins.int + TEXT_LEAF_FIELD_NUMBER: _builtins.int + BIN_LEAF_FIELD_NUMBER: _builtins.int + SOURCE_LOCATOR_FIELD_NUMBER: _builtins.int + ERROR_FIELD_NUMBER: _builtins.int + known: _builtins.str + text_leaf: _builtins.str + bin_leaf: _builtins.bytes + '* I wanted to split binary and text data, since we might\n just want to dump a raw file/image/datasheet in here\n for safekeeping.\n\n Mixing up binary and textual formats is just a recipe\n for trouble.\n ' + + @_builtins.property + def unknown(self) -> Global___Empty: + ... + + @_builtins.property + def members(self) -> Global___Metadata.Members: + ... + + @_builtins.property + def source_locator(self) -> Global___SourceLocator: """Defined formats Note: key should be the message definition name (eg, SourceLocator) TODO: how to handle multiple metadata of a given type? """ - @property - def error(self) -> global___Error: ... - def __init__( - self, - *, - unknown: global___Empty | None = ..., - known: builtins.str = ..., - members: global___Metadata.Members | None = ..., - text_leaf: builtins.str = ..., - bin_leaf: builtins.bytes = ..., - source_locator: global___SourceLocator | None = ..., - error: global___Error | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "bin_leaf", - b"bin_leaf", - "error", - b"error", - "known", - b"known", - "members", - b"members", - "meta", - b"meta", - "source_locator", - b"source_locator", - "text_leaf", - b"text_leaf", - "type", - b"type", - "unknown", - b"unknown", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "bin_leaf", - b"bin_leaf", - "error", - b"error", - "known", - b"known", - "members", - b"members", - "meta", - b"meta", - "source_locator", - b"source_locator", - "text_leaf", - b"text_leaf", - "type", - b"type", - "unknown", - b"unknown", - ], - ) -> None: ... - @typing.overload - def WhichOneof( - self, oneof_group: typing_extensions.Literal["meta", b"meta"] - ) -> typing_extensions.Literal["members", "text_leaf", "bin_leaf", "source_locator", "error"] | None: ... - @typing.overload - def WhichOneof( - self, oneof_group: typing_extensions.Literal["type", b"type"] - ) -> typing_extensions.Literal["unknown", "known"] | None: ... - -global___Metadata = Metadata - -@typing_extensions.final -class SourceLocator(google.protobuf.message.Message): + @_builtins.property + def error(self) -> Global___Error: + ... + + def __init__(self, *, unknown: Global___Empty | None=..., known: _builtins.str=..., members: Global___Metadata.Members | None=..., text_leaf: _builtins.str=..., bin_leaf: _builtins.bytes=..., source_locator: Global___SourceLocator | None=..., error: Global___Error | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['bin_leaf', b'bin_leaf', 'error', b'error', 'known', b'known', 'members', b'members', 'meta', b'meta', 'source_locator', b'source_locator', 'text_leaf', b'text_leaf', 'type', b'type', 'unknown', b'unknown'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['bin_leaf', b'bin_leaf', 'error', b'error', 'known', b'known', 'members', b'members', 'meta', b'meta', 'source_locator', b'source_locator', 'text_leaf', b'text_leaf', 'type', b'type', 'unknown', b'unknown'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_meta: _TypeAlias = _typing.Literal['members', 'text_leaf', 'bin_leaf', 'source_locator', 'error'] + _WhichOneofArgType_meta: _TypeAlias = _typing.Literal['meta', b'meta'] + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['unknown', 'known'] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + + @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType_meta) -> _WhichOneofReturnType_meta | None: + ... + + @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: + ... +Global___Metadata: _TypeAlias = Metadata + +@_typing.final +class SourceLocator(_message.Message): """* Definitions for structured metadata formats * For locating source data """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor + DESCRIPTOR: _descriptor.Descriptor class _SourceType: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType - class _SourceTypeEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[SourceLocator._SourceType.ValueType], builtins.type - ): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + class _SourceTypeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[SourceLocator._SourceType.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNKNOWN: SourceLocator._SourceType.ValueType DEFINITION: SourceLocator._SourceType.ValueType - "source defining this class, would be present in library" + 'source defining this class, would be present in library' INSTANTIATION: SourceLocator._SourceType.ValueType - "source of instantiation, would be present in design" + 'source of instantiation, would be present in design' - class SourceType(_SourceType, metaclass=_SourceTypeEnumTypeWrapper): ... + class SourceType(_SourceType, metaclass=_SourceTypeEnumTypeWrapper): + ... UNKNOWN: SourceLocator.SourceType.ValueType DEFINITION: SourceLocator.SourceType.ValueType - "source defining this class, would be present in library" + 'source defining this class, would be present in library' INSTANTIATION: SourceLocator.SourceType.ValueType - "source of instantiation, would be present in design" - FILE_PACKAGE_FIELD_NUMBER: builtins.int - LINE_OFFSET_FIELD_NUMBER: builtins.int - COL_OFFSET_FIELD_NUMBER: builtins.int - SOURCE_TYPE_FIELD_NUMBER: builtins.int - file_package: builtins.str - "package name (portable, not tied to an absolute path) that locates the file" - line_offset: builtins.int - "line number" - col_offset: builtins.int - "character offset within the line" - source_type: global___SourceLocator.SourceType.ValueType - - def __init__( - self, - *, - file_package: builtins.str = ..., - line_offset: builtins.int = ..., - col_offset: builtins.int = ..., - source_type: global___SourceLocator.SourceType.ValueType = ..., - ) -> None: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "col_offset", - b"col_offset", - "file_package", - b"file_package", - "line_offset", - b"line_offset", - "source_type", - b"source_type", - ], - ) -> None: ... - -global___SourceLocator = SourceLocator - -@typing_extensions.final -class Error(google.protobuf.message.Message): + 'source of instantiation, would be present in design' + FILE_PACKAGE_FIELD_NUMBER: _builtins.int + LINE_OFFSET_FIELD_NUMBER: _builtins.int + COL_OFFSET_FIELD_NUMBER: _builtins.int + SOURCE_TYPE_FIELD_NUMBER: _builtins.int + file_package: _builtins.str + 'package name (portable, not tied to an absolute path) that locates the file' + line_offset: _builtins.int + 'line number' + col_offset: _builtins.int + 'character offset within the line' + source_type: Global___SourceLocator.SourceType.ValueType + + def __init__(self, *, file_package: _builtins.str=..., line_offset: _builtins.int=..., col_offset: _builtins.int=..., source_type: Global___SourceLocator.SourceType.ValueType=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['col_offset', b'col_offset', 'file_package', b'file_package', 'line_offset', b'line_offset', 'source_type', b'source_type'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___SourceLocator: _TypeAlias = SourceLocator + +@_typing.final +class Error(_message.Message): """* Used to communicate results of analysis / checking passes. Limited to Block and Link objects. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - MESSAGE_FIELD_NUMBER: builtins.int - TRACEBACK_FIELD_NUMBER: builtins.int - SOURCE_FIELD_NUMBER: builtins.int - message: builtins.str - "free-form error message" - traceback: builtins.str - "full traceback TODO: should there be a structured stack trace?" - - @property - def source(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___SourceLocator]: + DESCRIPTOR: _descriptor.Descriptor + MESSAGE_FIELD_NUMBER: _builtins.int + TRACEBACK_FIELD_NUMBER: _builtins.int + SOURCE_FIELD_NUMBER: _builtins.int + message: _builtins.str + 'free-form error message' + traceback: _builtins.str + 'full traceback TODO: should there be a structured stack trace?' + + @_builtins.property + def source(self) -> _containers.RepeatedCompositeFieldContainer[Global___SourceLocator]: """source locator, eg line of failing constraint""" - def __init__( - self, - *, - message: builtins.str = ..., - traceback: builtins.str = ..., - source: collections.abc.Iterable[global___SourceLocator] | None = ..., - ) -> None: ... - def ClearField( - self, - field_name: typing_extensions.Literal["message", b"message", "source", b"source", "traceback", b"traceback"], - ) -> None: ... - -global___Error = Error - -@typing_extensions.final -class Empty(google.protobuf.message.Message): - """* Placeholder until I figure out how to import properly""" + def __init__(self, *, message: _builtins.str=..., traceback: _builtins.str=..., source: _abc.Iterable[Global___SourceLocator] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['message', b'message', 'source', b'source', 'traceback', b'traceback'] - DESCRIPTOR: google.protobuf.descriptor.Descriptor + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Error: _TypeAlias = Error - def __init__(self) -> None: ... +@_typing.final +class Empty(_message.Message): + """* Placeholder until I figure out how to import properly""" + DESCRIPTOR: _descriptor.Descriptor -global___Empty = Empty + def __init__(self) -> None: + ... +Global___Empty: _TypeAlias = Empty \ No newline at end of file diff --git a/edg/edgir/elem_pb2.py b/edg/edgir/elem_pb2.py index 840892556..1848baf86 100644 --- a/edg/edgir/elem_pb2.py +++ b/edg/edgir/elem_pb2.py @@ -1,25 +1,20 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import init_pb2 as edgir_dot_init__pb2 from ..edgir import expr_pb2 as edgir_dot_expr__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\x95\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xc1\x02\n\x06Bundle\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xd6\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00\x12$\n\x06bundle\x18\x06 \x01(\x0b2\x12.edgir.elem.BundleH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xc4\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\xbf\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05ports\x18* \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xb0\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xc4\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.elem_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.elem_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._options = None - _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_options = b"8\x01" + _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_options = b'8\x01' _NAMEDVALINIT._serialized_start = 105 _NAMEDVALINIT._serialized_end = 169 _NAMEDVALUEEXPR._serialized_start = 171 @@ -31,32 +26,30 @@ _NAMEDLINKLIKE._serialized_start = 379 _NAMEDLINKLIKE._serialized_end = 445 _PORT._serialized_start = 448 - _PORT._serialized_end = 725 - _BUNDLE._serialized_start = 728 - _BUNDLE._serialized_end = 1049 - _PORTARRAY._serialized_start = 1052 - _PORTARRAY._serialized_end = 1254 - _PORTARRAY_PORTS._serialized_start = 1193 - _PORTARRAY_PORTS._serialized_end = 1242 - _PORTLIKE._serialized_start = 1257 - _PORTLIKE._serialized_end = 1471 - _PARAMETER._serialized_start = 1473 - _PARAMETER._serialized_end = 1534 - _STRINGDESCRIPTIONELEMENT._serialized_start = 1536 - _STRINGDESCRIPTIONELEMENT._serialized_end = 1633 - _HIERARCHYBLOCK._serialized_start = 1636 - _HIERARCHYBLOCK._serialized_end = 2472 - _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_start = 2397 - _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_end = 2472 - _GENERATOR._serialized_start = 2474 - _GENERATOR._serialized_end = 2532 - _BLOCKLIBRARY._serialized_start = 2534 - _BLOCKLIBRARY._serialized_end = 2626 - _BLOCKLIKE._serialized_start = 2629 - _BLOCKLIKE._serialized_end = 2785 - _LINK._serialized_start = 2788 - _LINK._serialized_end = 3208 - _LINKARRAY._serialized_start = 3211 - _LINKARRAY._serialized_end = 3437 - _LINKLIKE._serialized_start = 3440 - _LINKLIKE._serialized_end = 3618 + _PORT._serialized_end = 767 + _PORTARRAY._serialized_start = 770 + _PORTARRAY._serialized_end = 972 + _PORTARRAY_PORTS._serialized_start = 911 + _PORTARRAY_PORTS._serialized_end = 960 + _PORTLIKE._serialized_start = 975 + _PORTLIKE._serialized_end = 1151 + _PARAMETER._serialized_start = 1153 + _PARAMETER._serialized_end = 1214 + _STRINGDESCRIPTIONELEMENT._serialized_start = 1216 + _STRINGDESCRIPTIONELEMENT._serialized_end = 1313 + _HIERARCHYBLOCK._serialized_start = 1316 + _HIERARCHYBLOCK._serialized_end = 2152 + _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_start = 2077 + _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_end = 2152 + _GENERATOR._serialized_start = 2154 + _GENERATOR._serialized_end = 2212 + _BLOCKLIBRARY._serialized_start = 2214 + _BLOCKLIBRARY._serialized_end = 2306 + _BLOCKLIKE._serialized_start = 2309 + _BLOCKLIKE._serialized_end = 2465 + _LINK._serialized_start = 2468 + _LINK._serialized_end = 2888 + _LINKARRAY._serialized_start = 2891 + _LINKARRAY._serialized_end = 3117 + _LINKLIKE._serialized_start = 3120 + _LINKLIKE._serialized_end = 3298 \ No newline at end of file diff --git a/edg/edgir/elem_pb2.pyi b/edg/edgir/elem_pb2.pyi index c1a1b0487..9c09803fc 100644 --- a/edg/edgir/elem_pb2.pyi +++ b/edg/edgir/elem_pb2.pyi @@ -13,854 +13,688 @@ We don't strictly differentiate between library elements and elements within a design within the protobuf. In general, when there is a library element, we """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.message +from collections import abc as _abc +from edgir import common_pb2 as _common_pb2 +from edgir import expr_pb2 as _expr_pb2 +from edgir import init_pb2 as _init_pb2 +from edgir import ref_pb2 as _ref_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class NamedValInit(google.protobuf.message.Message): +@_typing.final +class NamedValInit(_message.Message): """These are essentially a element in a map, but because maps are unordered (whereas we want to preserve ordering to preserve design intent through the compiler), we use a sequence of these pairs. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - name: builtins.str - - @property - def value(self) -> edgir.init_pb2.ValInit: ... - def __init__(self, *, name: builtins.str = ..., value: edgir.init_pb2.ValInit | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "value", b"value"]) -> None: ... - -global___NamedValInit = NamedValInit - -@typing_extensions.final -class NamedValueExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - name: builtins.str - - @property - def value(self) -> edgir.expr_pb2.ValueExpr: ... - def __init__(self, *, name: builtins.str = ..., value: edgir.expr_pb2.ValueExpr | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "value", b"value"]) -> None: ... - -global___NamedValueExpr = NamedValueExpr - -@typing_extensions.final -class NamedPortLike(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - name: builtins.str - - @property - def value(self) -> global___PortLike: ... - def __init__(self, *, name: builtins.str = ..., value: global___PortLike | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "value", b"value"]) -> None: ... - -global___NamedPortLike = NamedPortLike - -@typing_extensions.final -class NamedBlockLike(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - name: builtins.str - - @property - def value(self) -> global___BlockLike: ... - def __init__(self, *, name: builtins.str = ..., value: global___BlockLike | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "value", b"value"]) -> None: ... - -global___NamedBlockLike = NamedBlockLike - -@typing_extensions.final -class NamedLinkLike(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - name: builtins.str - - @property - def value(self) -> global___LinkLike: ... - def __init__(self, *, name: builtins.str = ..., value: global___LinkLike | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name", "value", b"value"]) -> None: ... - -global___NamedLinkLike = NamedLinkLike - -@typing_extensions.final -class Port(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PARAMS_FIELD_NUMBER: builtins.int - CONSTRAINTS_FIELD_NUMBER: builtins.int - SELF_CLASS_FIELD_NUMBER: builtins.int - SUPERCLASSES_FIELD_NUMBER: builtins.int - SUPER_SUPERCLASSES_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def params(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValInit]: ... - @property - def constraints( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValueExpr]: ... - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + name: _builtins.str + + @_builtins.property + def value(self) -> _init_pb2.ValInit: + ... + + def __init__(self, *, name: _builtins.str=..., value: _init_pb2.ValInit | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___NamedValInit: _TypeAlias = NamedValInit + +@_typing.final +class NamedValueExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + name: _builtins.str + + @_builtins.property + def value(self) -> _expr_pb2.ValueExpr: + ... + + def __init__(self, *, name: _builtins.str=..., value: _expr_pb2.ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___NamedValueExpr: _TypeAlias = NamedValueExpr + +@_typing.final +class NamedPortLike(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + name: _builtins.str + + @_builtins.property + def value(self) -> Global___PortLike: + ... + + def __init__(self, *, name: _builtins.str=..., value: Global___PortLike | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___NamedPortLike: _TypeAlias = NamedPortLike + +@_typing.final +class NamedBlockLike(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + name: _builtins.str + + @_builtins.property + def value(self) -> Global___BlockLike: + ... + + def __init__(self, *, name: _builtins.str=..., value: Global___BlockLike | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___NamedBlockLike: _TypeAlias = NamedBlockLike + +@_typing.final +class NamedLinkLike(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + name: _builtins.str + + @_builtins.property + def value(self) -> Global___LinkLike: + ... + + def __init__(self, *, name: _builtins.str=..., value: Global___LinkLike | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___NamedLinkLike: _TypeAlias = NamedLinkLike + +@_typing.final +class Port(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PARAMS_FIELD_NUMBER: _builtins.int + CONSTRAINTS_FIELD_NUMBER: _builtins.int + PORTS_FIELD_NUMBER: _builtins.int + SELF_CLASS_FIELD_NUMBER: _builtins.int + SUPERCLASSES_FIELD_NUMBER: _builtins.int + SUPER_SUPERCLASSES_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: + ... + + @_builtins.property + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: + ... + + @_builtins.property + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: + ... + + @_builtins.property + def self_class(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """superclasses, may be empty""" - @property - def super_superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + @_builtins.property + def super_superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """all (recursive) superclasses above superclasses""" - @property - def meta(self) -> edgir.common_pb2.Metadata: + @_builtins.property + def meta(self) -> _common_pb2.Metadata: """TODO: this provides type hierarchy data only, inheritance semantics are currently undefined""" - def __init__( - self, - *, - params: collections.abc.Iterable[global___NamedValInit] | None = ..., - constraints: collections.abc.Iterable[global___NamedValueExpr] | None = ..., - self_class: edgir.ref_pb2.LibraryPath | None = ..., - superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - super_superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["meta", b"meta", "self_class", b"self_class"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "constraints", - b"constraints", - "meta", - b"meta", - "params", - b"params", - "self_class", - b"self_class", - "super_superclasses", - b"super_superclasses", - "superclasses", - b"superclasses", - ], - ) -> None: ... - -global___Port = Port - -@typing_extensions.final -class Bundle(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PARAMS_FIELD_NUMBER: builtins.int - PORTS_FIELD_NUMBER: builtins.int - CONSTRAINTS_FIELD_NUMBER: builtins.int - SELF_CLASS_FIELD_NUMBER: builtins.int - SUPERCLASSES_FIELD_NUMBER: builtins.int - SUPER_SUPERCLASSES_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def params(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValInit]: ... - @property - def ports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedPortLike]: ... - @property - def constraints( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValueExpr]: ... - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: - """superclasses, may be empty""" + def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] - @property - def super_superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: - """all (recursive) superclasses above superclasses""" + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'meta', b'meta', 'params', b'params', 'ports', b'ports', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Port: _TypeAlias = Port + +@_typing.final +class PortArray(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Ports(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PORTS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: + ... + + def __init__(self, *, ports: _abc.Iterable[Global___NamedPortLike] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['ports', b'ports'] - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - params: collections.abc.Iterable[global___NamedValInit] | None = ..., - ports: collections.abc.Iterable[global___NamedPortLike] | None = ..., - constraints: collections.abc.Iterable[global___NamedValueExpr] | None = ..., - self_class: edgir.ref_pb2.LibraryPath | None = ..., - superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - super_superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["meta", b"meta", "self_class", b"self_class"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "constraints", - b"constraints", - "meta", - b"meta", - "params", - b"params", - "ports", - b"ports", - "self_class", - b"self_class", - "super_superclasses", - b"super_superclasses", - "superclasses", - b"superclasses", - ], - ) -> None: ... - -global___Bundle = Bundle - -@typing_extensions.final -class PortArray(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Ports(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PORTS_FIELD_NUMBER: builtins.int - - @property - def ports( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedPortLike]: ... - def __init__(self, *, ports: collections.abc.Iterable[global___NamedPortLike] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["ports", b"ports"]) -> None: ... - - SELF_CLASS_FIELD_NUMBER: builtins.int - PORTS_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + SELF_CLASS_FIELD_NUMBER: _builtins.int + PORTS_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def self_class(self) -> _ref_pb2.LibraryPath: """The class that applies to every port in the set/array. Used when a new port is instantiated by the front or back end. """ - @property - def ports(self) -> global___PortArray.Ports: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - self_class: edgir.ref_pb2.LibraryPath | None = ..., - ports: global___PortArray.Ports | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "contains", b"contains", "meta", b"meta", "ports", b"ports", "self_class", b"self_class" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "contains", b"contains", "meta", b"meta", "ports", b"ports", "self_class", b"self_class" - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["contains", b"contains"] - ) -> typing_extensions.Literal["ports"] | None: ... - -global___PortArray = PortArray - -@typing_extensions.final -class PortLike(google.protobuf.message.Message): - """* Wrapper for different port like elements""" + @_builtins.property + def ports(self) -> Global___PortArray.Ports: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, self_class: _ref_pb2.LibraryPath | None=..., ports: Global___PortArray.Ports | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['contains', b'contains', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['contains', b'contains', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] - DESCRIPTOR: google.protobuf.descriptor.Descriptor - UNDEFINED_FIELD_NUMBER: builtins.int - LIB_ELEM_FIELD_NUMBER: builtins.int - PORT_FIELD_NUMBER: builtins.int - ARRAY_FIELD_NUMBER: builtins.int - BUNDLE_FIELD_NUMBER: builtins.int - - @property - def undefined(self) -> edgir.common_pb2.Empty: ... - @property - def lib_elem(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def port(self) -> global___Port: + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_contains: _TypeAlias = _typing.Literal['ports'] + _WhichOneofArgType_contains: _TypeAlias = _typing.Literal['contains', b'contains'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_contains) -> _WhichOneofReturnType_contains | None: + ... +Global___PortArray: _TypeAlias = PortArray + +@_typing.final +class PortLike(_message.Message): + """* Wrapper for different port like elements""" + DESCRIPTOR: _descriptor.Descriptor + UNDEFINED_FIELD_NUMBER: _builtins.int + LIB_ELEM_FIELD_NUMBER: _builtins.int + PORT_FIELD_NUMBER: _builtins.int + ARRAY_FIELD_NUMBER: _builtins.int + + @_builtins.property + def undefined(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def lib_elem(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def port(self) -> Global___Port: """* 'port' disallowed w/in the library""" - @property - def array(self) -> global___PortArray: ... - @property - def bundle(self) -> global___Bundle: - """* 'bundle' disallowed w/in the library""" - - def __init__( - self, - *, - undefined: edgir.common_pb2.Empty | None = ..., - lib_elem: edgir.ref_pb2.LibraryPath | None = ..., - port: global___Port | None = ..., - array: global___PortArray | None = ..., - bundle: global___Bundle | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "bundle", - b"bundle", - "is", - b"is", - "lib_elem", - b"lib_elem", - "port", - b"port", - "undefined", - b"undefined", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "bundle", - b"bundle", - "is", - b"is", - "lib_elem", - b"lib_elem", - "port", - b"port", - "undefined", - b"undefined", - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["is", b"is"] - ) -> typing_extensions.Literal["undefined", "lib_elem", "port", "array", "bundle"] | None: ... - -global___PortLike = PortLike - -@typing_extensions.final -class Parameter(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - UNIT_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - unit: builtins.str - - def __init__(self, *, path: edgir.ref_pb2.LocalPath | None = ..., unit: builtins.str = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["path", b"path"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["path", b"path", "unit", b"unit"]) -> None: ... - -global___Parameter = Parameter - -@typing_extensions.final -class StringDescriptionElement(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - TEXT_FIELD_NUMBER: builtins.int - PARAM_FIELD_NUMBER: builtins.int - text: builtins.str - - @property - def param(self) -> global___Parameter: ... - def __init__(self, *, text: builtins.str = ..., param: global___Parameter | None = ...) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["ElementType", b"ElementType", "param", b"param", "text", b"text"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["ElementType", b"ElementType", "param", b"param", "text", b"text"] - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["ElementType", b"ElementType"] - ) -> typing_extensions.Literal["text", "param"] | None: ... - -global___StringDescriptionElement = StringDescriptionElement - -@typing_extensions.final -class HierarchyBlock(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class ParamDefaultsEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str - - @property - def value(self) -> edgir.expr_pb2.ValueExpr: ... - def __init__(self, *, key: builtins.str = ..., value: edgir.expr_pb2.ValueExpr | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... - - PARAMS_FIELD_NUMBER: builtins.int - PARAM_DEFAULTS_FIELD_NUMBER: builtins.int - PORTS_FIELD_NUMBER: builtins.int - BLOCKS_FIELD_NUMBER: builtins.int - LINKS_FIELD_NUMBER: builtins.int - CONSTRAINTS_FIELD_NUMBER: builtins.int - SELF_CLASS_FIELD_NUMBER: builtins.int - SUPERCLASSES_FIELD_NUMBER: builtins.int - SUPER_SUPERCLASSES_FIELD_NUMBER: builtins.int - PREREFINE_CLASS_FIELD_NUMBER: builtins.int - PREREFINE_MIXINS_FIELD_NUMBER: builtins.int - GENERATOR_FIELD_NUMBER: builtins.int - IS_ABSTRACT_FIELD_NUMBER: builtins.int - DEFAULT_REFINEMENT_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - DESCRIPTION_FIELD_NUMBER: builtins.int - - @property - def params(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValInit]: ... - @property - def param_defaults(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, edgir.expr_pb2.ValueExpr]: + @_builtins.property + def array(self) -> Global___PortArray: + ... + + def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: _ref_pb2.LibraryPath | None=..., port: Global___Port | None=..., array: Global___PortArray | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'is', b'is', 'lib_elem', b'lib_elem', 'port', b'port', 'undefined', b'undefined'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'is', b'is', 'lib_elem', b'lib_elem', 'port', b'port', 'undefined', b'undefined'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_is: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'port', 'array'] + _WhichOneofArgType_is: _TypeAlias = _typing.Literal['is', b'is'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_is) -> _WhichOneofReturnType_is | None: + ... +Global___PortLike: _TypeAlias = PortLike + +@_typing.final +class Parameter(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + UNIT_FIELD_NUMBER: _builtins.int + unit: _builtins.str + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., unit: _builtins.str=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'unit', b'unit'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Parameter: _TypeAlias = Parameter + +@_typing.final +class StringDescriptionElement(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + TEXT_FIELD_NUMBER: _builtins.int + PARAM_FIELD_NUMBER: _builtins.int + text: _builtins.str + + @_builtins.property + def param(self) -> Global___Parameter: + ... + + def __init__(self, *, text: _builtins.str=..., param: Global___Parameter | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['ElementType', b'ElementType', 'param', b'param', 'text', b'text'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['ElementType', b'ElementType', 'param', b'param', 'text', b'text'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_ElementType: _TypeAlias = _typing.Literal['text', 'param'] + _WhichOneofArgType_ElementType: _TypeAlias = _typing.Literal['ElementType', b'ElementType'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_ElementType) -> _WhichOneofReturnType_ElementType | None: + ... +Global___StringDescriptionElement: _TypeAlias = StringDescriptionElement + +@_typing.final +class HierarchyBlock(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class ParamDefaultsEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + + @_builtins.property + def value(self) -> _expr_pb2.ValueExpr: + ... + + def __init__(self, *, key: _builtins.str=..., value: _expr_pb2.ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + PARAMS_FIELD_NUMBER: _builtins.int + PARAM_DEFAULTS_FIELD_NUMBER: _builtins.int + PORTS_FIELD_NUMBER: _builtins.int + BLOCKS_FIELD_NUMBER: _builtins.int + LINKS_FIELD_NUMBER: _builtins.int + CONSTRAINTS_FIELD_NUMBER: _builtins.int + SELF_CLASS_FIELD_NUMBER: _builtins.int + SUPERCLASSES_FIELD_NUMBER: _builtins.int + SUPER_SUPERCLASSES_FIELD_NUMBER: _builtins.int + PREREFINE_CLASS_FIELD_NUMBER: _builtins.int + PREREFINE_MIXINS_FIELD_NUMBER: _builtins.int + GENERATOR_FIELD_NUMBER: _builtins.int + IS_ABSTRACT_FIELD_NUMBER: _builtins.int + DEFAULT_REFINEMENT_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + DESCRIPTION_FIELD_NUMBER: _builtins.int + is_abstract: _builtins.bool + 'true if self_class is abstract, and should error if used in a design' + + @_builtins.property + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: + ... + + @_builtins.property + def param_defaults(self) -> _containers.MessageMap[_builtins.str, _expr_pb2.ValueExpr]: """Refinements may introduce new parameters which would not be assigned a value in the parent class. In those cases, those new parameters are given these default values. unordered """ - @property - def ports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedPortLike]: ... - @property - def blocks(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedBlockLike]: + @_builtins.property + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: + ... + + @_builtins.property + def blocks(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedBlockLike]: """* Bridges, which adapt an edge port to a link port - eg, edge VoltageSink to an internal link VoltageSource, are defined as blocks in the IR. Upper layers can define convenience constructs and/or infer these blocks. """ - @property - def links(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedLinkLike]: ... - @property - def constraints( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValueExpr]: + @_builtins.property + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: + ... + + @_builtins.property + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: """* Connections between internal block and link ports are represented by connected constraints. Connections between internal; block and edge (of this block) ports are represented by exported constraints. """ - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: + @_builtins.property + def self_class(self) -> _ref_pb2.LibraryPath: """self class, equivalent to the library name""" - @property - def superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + @_builtins.property + def superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """immediate superclasses, may be empty""" - @property - def super_superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + @_builtins.property + def super_superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """all (recursive) superclasses above superclasses""" - @property - def prerefine_class(self) -> edgir.ref_pb2.LibraryPath: + @_builtins.property + def prerefine_class(self) -> _ref_pb2.LibraryPath: """class pre-refinement, only defined if refined""" - @property - def prerefine_mixins( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + @_builtins.property + def prerefine_mixins(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """mixins pre-refinement, from library elem""" - @property - def generator(self) -> global___Generator: + @_builtins.property + def generator(self) -> Global___Generator: """optional, and removed upon invocation""" - is_abstract: builtins.bool - "true if self_class is abstract, and should error if used in a design" - @property - def default_refinement(self) -> edgir.ref_pb2.LibraryPath: + @_builtins.property + def default_refinement(self) -> _ref_pb2.LibraryPath: """optional default refinement subclass, only valid for library blocks""" - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - @property - def description( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___StringDescriptionElement]: ... - def __init__( - self, - *, - params: collections.abc.Iterable[global___NamedValInit] | None = ..., - param_defaults: collections.abc.Mapping[builtins.str, edgir.expr_pb2.ValueExpr] | None = ..., - ports: collections.abc.Iterable[global___NamedPortLike] | None = ..., - blocks: collections.abc.Iterable[global___NamedBlockLike] | None = ..., - links: collections.abc.Iterable[global___NamedLinkLike] | None = ..., - constraints: collections.abc.Iterable[global___NamedValueExpr] | None = ..., - self_class: edgir.ref_pb2.LibraryPath | None = ..., - superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - super_superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - prerefine_class: edgir.ref_pb2.LibraryPath | None = ..., - prerefine_mixins: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - generator: global___Generator | None = ..., - is_abstract: builtins.bool = ..., - default_refinement: edgir.ref_pb2.LibraryPath | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - description: collections.abc.Iterable[global___StringDescriptionElement] | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "default_refinement", - b"default_refinement", - "generator", - b"generator", - "meta", - b"meta", - "prerefine_class", - b"prerefine_class", - "self_class", - b"self_class", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "blocks", - b"blocks", - "constraints", - b"constraints", - "default_refinement", - b"default_refinement", - "description", - b"description", - "generator", - b"generator", - "is_abstract", - b"is_abstract", - "links", - b"links", - "meta", - b"meta", - "param_defaults", - b"param_defaults", - "params", - b"params", - "ports", - b"ports", - "prerefine_class", - b"prerefine_class", - "prerefine_mixins", - b"prerefine_mixins", - "self_class", - b"self_class", - "super_superclasses", - b"super_superclasses", - "superclasses", - b"superclasses", - ], - ) -> None: ... - -global___HierarchyBlock = HierarchyBlock - -@typing_extensions.final -class Generator(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - REQUIRED_PARAMS_FIELD_NUMBER: builtins.int - - @property - def required_params( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LocalPath]: + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + @_builtins.property + def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: + ... + + def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., param_defaults: _abc.Mapping[_builtins.str, _expr_pb2.ValueExpr] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., blocks: _abc.Iterable[Global___NamedBlockLike] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., prerefine_class: _ref_pb2.LibraryPath | None=..., prerefine_mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., generator: Global___Generator | None=..., is_abstract: _builtins.bool=..., default_refinement: _ref_pb2.LibraryPath | None=..., meta: _common_pb2.Metadata | None=..., description: _abc.Iterable[Global___StringDescriptionElement] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['default_refinement', b'default_refinement', 'generator', b'generator', 'meta', b'meta', 'prerefine_class', b'prerefine_class', 'self_class', b'self_class'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['blocks', b'blocks', 'constraints', b'constraints', 'default_refinement', b'default_refinement', 'description', b'description', 'generator', b'generator', 'is_abstract', b'is_abstract', 'links', b'links', 'meta', b'meta', 'param_defaults', b'param_defaults', 'params', b'params', 'ports', b'ports', 'prerefine_class', b'prerefine_class', 'prerefine_mixins', b'prerefine_mixins', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___HierarchyBlock: _TypeAlias = HierarchyBlock + +@_typing.final +class Generator(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + REQUIRED_PARAMS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def required_params(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LocalPath]: """Parameters that must be defined for the generator to fire. These parameters are the only ones accessible to the generator. """ - def __init__(self, *, required_params: collections.abc.Iterable[edgir.ref_pb2.LocalPath] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["required_params", b"required_params"]) -> None: ... - -global___Generator = Generator - -@typing_extensions.final -class BlockLibrary(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - BASE_FIELD_NUMBER: builtins.int - MIXINS_FIELD_NUMBER: builtins.int - - @property - def base(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def mixins( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: ... - def __init__( - self, - *, - base: edgir.ref_pb2.LibraryPath | None = ..., - mixins: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["base", b"base"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["base", b"base", "mixins", b"mixins"]) -> None: ... - -global___BlockLibrary = BlockLibrary - -@typing_extensions.final -class BlockLike(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - UNDEFINED_FIELD_NUMBER: builtins.int - LIB_ELEM_FIELD_NUMBER: builtins.int - HIERARCHY_FIELD_NUMBER: builtins.int - - @property - def undefined(self) -> edgir.common_pb2.Empty: ... - @property - def lib_elem(self) -> global___BlockLibrary: ... - @property - def hierarchy(self) -> global___HierarchyBlock: + def __init__(self, *, required_params: _abc.Iterable[_ref_pb2.LocalPath] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['required_params', b'required_params'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Generator: _TypeAlias = Generator + +@_typing.final +class BlockLibrary(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + BASE_FIELD_NUMBER: _builtins.int + MIXINS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def base(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def mixins(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: + ... + + def __init__(self, *, base: _ref_pb2.LibraryPath | None=..., mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['base', b'base'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['base', b'base', 'mixins', b'mixins'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BlockLibrary: _TypeAlias = BlockLibrary + +@_typing.final +class BlockLike(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + UNDEFINED_FIELD_NUMBER: _builtins.int + LIB_ELEM_FIELD_NUMBER: _builtins.int + HIERARCHY_FIELD_NUMBER: _builtins.int + + @_builtins.property + def undefined(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def lib_elem(self) -> Global___BlockLibrary: + ... + + @_builtins.property + def hierarchy(self) -> Global___HierarchyBlock: """* not allowed w/in the library""" - def __init__( - self, - *, - undefined: edgir.common_pb2.Empty | None = ..., - lib_elem: global___BlockLibrary | None = ..., - hierarchy: global___HierarchyBlock | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "hierarchy", b"hierarchy", "lib_elem", b"lib_elem", "type", b"type", "undefined", b"undefined" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "hierarchy", b"hierarchy", "lib_elem", b"lib_elem", "type", b"type", "undefined", b"undefined" - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["type", b"type"] - ) -> typing_extensions.Literal["undefined", "lib_elem", "hierarchy"] | None: ... - -global___BlockLike = BlockLike - -@typing_extensions.final -class Link(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PARAMS_FIELD_NUMBER: builtins.int - PORTS_FIELD_NUMBER: builtins.int - LINKS_FIELD_NUMBER: builtins.int - CONSTRAINTS_FIELD_NUMBER: builtins.int - SELF_CLASS_FIELD_NUMBER: builtins.int - SUPERCLASSES_FIELD_NUMBER: builtins.int - SUPER_SUPERCLASSES_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - DESCRIPTION_FIELD_NUMBER: builtins.int - - @property - def params(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValInit]: ... - @property - def ports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedPortLike]: ... - @property - def links(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedLinkLike]: ... - @property - def constraints( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValueExpr]: ... - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: Global___BlockLibrary | None=..., hierarchy: Global___HierarchyBlock | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['hierarchy', b'hierarchy', 'lib_elem', b'lib_elem', 'type', b'type', 'undefined', b'undefined'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['hierarchy', b'hierarchy', 'lib_elem', b'lib_elem', 'type', b'type', 'undefined', b'undefined'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'hierarchy'] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: + ... +Global___BlockLike: _TypeAlias = BlockLike + +@_typing.final +class Link(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PARAMS_FIELD_NUMBER: _builtins.int + PORTS_FIELD_NUMBER: _builtins.int + LINKS_FIELD_NUMBER: _builtins.int + CONSTRAINTS_FIELD_NUMBER: _builtins.int + SELF_CLASS_FIELD_NUMBER: _builtins.int + SUPERCLASSES_FIELD_NUMBER: _builtins.int + SUPER_SUPERCLASSES_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + DESCRIPTION_FIELD_NUMBER: _builtins.int + + @_builtins.property + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: + ... + + @_builtins.property + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: + ... + + @_builtins.property + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: + ... + + @_builtins.property + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: + ... + + @_builtins.property + def self_class(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """superclasses, may be empty""" - @property - def super_superclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: + @_builtins.property + def super_superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """all (recursive) superclasses above superclasses""" - @property - def meta(self) -> edgir.common_pb2.Metadata: + @_builtins.property + def meta(self) -> _common_pb2.Metadata: """TODO: this provides type hierarchy data only, inheritance semantics are currently undefined""" - @property - def description( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___StringDescriptionElement]: ... - def __init__( - self, - *, - params: collections.abc.Iterable[global___NamedValInit] | None = ..., - ports: collections.abc.Iterable[global___NamedPortLike] | None = ..., - links: collections.abc.Iterable[global___NamedLinkLike] | None = ..., - constraints: collections.abc.Iterable[global___NamedValueExpr] | None = ..., - self_class: edgir.ref_pb2.LibraryPath | None = ..., - superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - super_superclasses: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - description: collections.abc.Iterable[global___StringDescriptionElement] | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["meta", b"meta", "self_class", b"self_class"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "constraints", - b"constraints", - "description", - b"description", - "links", - b"links", - "meta", - b"meta", - "params", - b"params", - "ports", - b"ports", - "self_class", - b"self_class", - "super_superclasses", - b"super_superclasses", - "superclasses", - b"superclasses", - ], - ) -> None: ... - -global___Link = Link - -@typing_extensions.final -class LinkArray(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - SELF_CLASS_FIELD_NUMBER: builtins.int - PORTS_FIELD_NUMBER: builtins.int - CONSTRAINTS_FIELD_NUMBER: builtins.int - LINKS_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def self_class(self) -> edgir.ref_pb2.LibraryPath: + @_builtins.property + def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: + ... + + def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., meta: _common_pb2.Metadata | None=..., description: _abc.Iterable[Global___StringDescriptionElement] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'description', b'description', 'links', b'links', 'meta', b'meta', 'params', b'params', 'ports', b'ports', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Link: _TypeAlias = Link + +@_typing.final +class LinkArray(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + SELF_CLASS_FIELD_NUMBER: _builtins.int + PORTS_FIELD_NUMBER: _builtins.int + CONSTRAINTS_FIELD_NUMBER: _builtins.int + LINKS_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def self_class(self) -> _ref_pb2.LibraryPath: """The class that applies to every link in the set/array. Used when a new link is instantiated by the front or back end. """ - @property - def ports(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedPortLike]: + @_builtins.property + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: """Only designs should contain an implementation here the last index is the index of the link, the first indices (if any) are the indices of the corresponding port in the inner link """ - @property - def constraints( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedValueExpr]: + @_builtins.property + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: """includes all exported constraints to map link ports to my ports""" - @property - def links(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NamedLinkLike]: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - self_class: edgir.ref_pb2.LibraryPath | None = ..., - ports: collections.abc.Iterable[global___NamedPortLike] | None = ..., - constraints: collections.abc.Iterable[global___NamedValueExpr] | None = ..., - links: collections.abc.Iterable[global___NamedLinkLike] | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["meta", b"meta", "self_class", b"self_class"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "constraints", - b"constraints", - "links", - b"links", - "meta", - b"meta", - "ports", - b"ports", - "self_class", - b"self_class", - ], - ) -> None: ... - -global___LinkArray = LinkArray - -@typing_extensions.final -class LinkLike(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - UNDEFINED_FIELD_NUMBER: builtins.int - LIB_ELEM_FIELD_NUMBER: builtins.int - LINK_FIELD_NUMBER: builtins.int - ARRAY_FIELD_NUMBER: builtins.int - - @property - def undefined(self) -> edgir.common_pb2.Empty: ... - @property - def lib_elem(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def link(self) -> global___Link: + @_builtins.property + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, self_class: _ref_pb2.LibraryPath | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'links', b'links', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LinkArray: _TypeAlias = LinkArray + +@_typing.final +class LinkLike(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + UNDEFINED_FIELD_NUMBER: _builtins.int + LIB_ELEM_FIELD_NUMBER: _builtins.int + LINK_FIELD_NUMBER: _builtins.int + ARRAY_FIELD_NUMBER: _builtins.int + + @_builtins.property + def undefined(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def lib_elem(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def link(self) -> Global___Link: """* not allowed w/in the library""" - @property - def array(self) -> global___LinkArray: ... - def __init__( - self, - *, - undefined: edgir.common_pb2.Empty | None = ..., - lib_elem: edgir.ref_pb2.LibraryPath | None = ..., - link: global___Link | None = ..., - array: global___LinkArray | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "array", b"array", "lib_elem", b"lib_elem", "link", b"link", "type", b"type", "undefined", b"undefined" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "array", b"array", "lib_elem", b"lib_elem", "link", b"link", "type", b"type", "undefined", b"undefined" - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["type", b"type"] - ) -> typing_extensions.Literal["undefined", "lib_elem", "link", "array"] | None: ... - -global___LinkLike = LinkLike + @_builtins.property + def array(self) -> Global___LinkArray: + ... + + def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: _ref_pb2.LibraryPath | None=..., link: Global___Link | None=..., array: Global___LinkArray | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'lib_elem', b'lib_elem', 'link', b'link', 'type', b'type', 'undefined', b'undefined'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'lib_elem', b'lib_elem', 'link', b'link', 'type', b'type', 'undefined', b'undefined'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'link', 'array'] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: + ... +Global___LinkLike: _TypeAlias = LinkLike \ No newline at end of file diff --git a/edg/edgir/expr_pb2.py b/edg/edgir/expr_pb2.py index 6b0f7950b..110e1660f 100644 --- a/edg/edgir/expr_pb2.py +++ b/edg/edgir/expr_pb2.py @@ -1,24 +1,19 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\x9f\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xb7\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"2\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\x9f\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xb7\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"2\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.expr_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.expr_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _STRUCTEXPR_VALSENTRY._options = None - _STRUCTEXPR_VALSENTRY._serialized_options = b"8\x01" + _STRUCTEXPR_VALSENTRY._serialized_options = b'8\x01' _UNARYEXPR._serialized_start = 87 _UNARYEXPR._serialized_end = 267 _UNARYEXPR_OP._serialized_start = 174 @@ -56,4 +51,4 @@ _ASSIGNEXPR._serialized_start = 2026 _ASSIGNEXPR._serialized_end = 2109 _VALUEEXPR._serialized_start = 2112 - _VALUEEXPR._serialized_end = 3031 + _VALUEEXPR._serialized_end = 3031 \ No newline at end of file diff --git a/edg/edgir/expr_pb2.pyi b/edg/edgir/expr_pb2.pyi index 2c6d1cad8..d08af5a6b 100644 --- a/edg/edgir/expr_pb2.pyi +++ b/edg/edgir/expr_pb2.pyi @@ -25,663 +25,728 @@ in a small number number of places to help classify types into groups. I don't think we should be using sorts at all in this module, but it's defined for the sake on completeness. """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.internal.enum_type_wrapper -import google.protobuf.message +from collections import abc as _abc +from edgir import common_pb2 as _common_pb2 +from edgir import lit_pb2 as _lit_pb2 +from edgir import ref_pb2 as _ref_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +import builtins as _builtins import sys -import typing - +import typing as _typing if sys.version_info >= (3, 10): - import typing as typing_extensions + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class UnaryExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor +@_typing.final +class UnaryExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType - class _OpEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[UnaryExpr._Op.ValueType], builtins.type - ): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[UnaryExpr._Op.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: UnaryExpr._Op.ValueType NEGATE: UnaryExpr._Op.ValueType - "* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n " + '* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n ' NOT: UnaryExpr._Op.ValueType - "* Not :: Bool -> Bool" + '* Not :: Bool -> Bool' INVERT: UnaryExpr._Op.ValueType - "* Invert :: Float -> Float\n :: Range Float -> Range Float\n " + '* Invert :: Float -> Float\n :: Range Float -> Range Float\n ' MIN: UnaryExpr._Op.ValueType - "* Min :: Range a -> a" + '* Min :: Range a -> a' MAX: UnaryExpr._Op.ValueType - "* Max :: Range a -> a" + '* Max :: Range a -> a' CENTER: UnaryExpr._Op.ValueType - "* Center :: Range a -> a" + '* Center :: Range a -> a' WIDTH: UnaryExpr._Op.ValueType - "* Width :: Range a -> a" + '* Width :: Range a -> a' - class Op(_Op, metaclass=_OpEnumTypeWrapper): ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): + ... UNDEFINED: UnaryExpr.Op.ValueType NEGATE: UnaryExpr.Op.ValueType - "* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n " + '* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n ' NOT: UnaryExpr.Op.ValueType - "* Not :: Bool -> Bool" + '* Not :: Bool -> Bool' INVERT: UnaryExpr.Op.ValueType - "* Invert :: Float -> Float\n :: Range Float -> Range Float\n " + '* Invert :: Float -> Float\n :: Range Float -> Range Float\n ' MIN: UnaryExpr.Op.ValueType - "* Min :: Range a -> a" + '* Min :: Range a -> a' MAX: UnaryExpr.Op.ValueType - "* Max :: Range a -> a" + '* Max :: Range a -> a' CENTER: UnaryExpr.Op.ValueType - "* Center :: Range a -> a" + '* Center :: Range a -> a' WIDTH: UnaryExpr.Op.ValueType - "* Width :: Range a -> a" - OP_FIELD_NUMBER: builtins.int - VAL_FIELD_NUMBER: builtins.int - op: global___UnaryExpr.Op.ValueType + '* Width :: Range a -> a' + OP_FIELD_NUMBER: _builtins.int + VAL_FIELD_NUMBER: _builtins.int + op: Global___UnaryExpr.Op.ValueType + + @_builtins.property + def val(self) -> Global___ValueExpr: + ... + + def __init__(self, *, op: Global___UnaryExpr.Op.ValueType=..., val: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] - @property - def val(self) -> global___ValueExpr: ... - def __init__(self, *, op: global___UnaryExpr.Op.ValueType = ..., val: global___ValueExpr | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["val", b"val"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["op", b"op", "val", b"val"]) -> None: ... + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['op', b'op', 'val', b'val'] -global___UnaryExpr = UnaryExpr + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___UnaryExpr: _TypeAlias = UnaryExpr -@typing_extensions.final -class UnarySetExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor +@_typing.final +class UnarySetExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType - class _OpEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[UnarySetExpr._Op.ValueType], builtins.type - ): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[UnarySetExpr._Op.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: UnarySetExpr._Op.ValueType SUM: UnarySetExpr._Op.ValueType - "* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n " + '* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n ' ALL_TRUE: UnarySetExpr._Op.ValueType - "* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n " + '* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n ' ANY_TRUE: UnarySetExpr._Op.ValueType - "* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n " + '* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n ' ALL_EQ: UnarySetExpr._Op.ValueType - "* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n " + '* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n ' ALL_UNIQUE: UnarySetExpr._Op.ValueType - "* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n " + '* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n ' MAXIMUM: UnarySetExpr._Op.ValueType - "SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " + 'SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' MINIMUM: UnarySetExpr._Op.ValueType - "* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " + '* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' SET_EXTRACT: UnarySetExpr._Op.ValueType - "* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n " + '* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n ' INTERSECTION: UnarySetExpr._Op.ValueType - "* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n " + '* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n ' HULL: UnarySetExpr._Op.ValueType - "* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n " + '* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n ' NEGATE: UnarySetExpr._Op.ValueType - "* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n " + '* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n ' INVERT: UnarySetExpr._Op.ValueType - "* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n " + '* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n ' FLATTEN: UnarySetExpr._Op.ValueType - "Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n " + 'Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n ' - class Op(_Op, metaclass=_OpEnumTypeWrapper): ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): + ... UNDEFINED: UnarySetExpr.Op.ValueType SUM: UnarySetExpr.Op.ValueType - "* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n " + '* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n ' ALL_TRUE: UnarySetExpr.Op.ValueType - "* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n " + '* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n ' ANY_TRUE: UnarySetExpr.Op.ValueType - "* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n " + '* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n ' ALL_EQ: UnarySetExpr.Op.ValueType - "* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n " + '* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n ' ALL_UNIQUE: UnarySetExpr.Op.ValueType - "* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n " + '* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n ' MAXIMUM: UnarySetExpr.Op.ValueType - "SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " + 'SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' MINIMUM: UnarySetExpr.Op.ValueType - "* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " + '* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' SET_EXTRACT: UnarySetExpr.Op.ValueType - "* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n " + '* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n ' INTERSECTION: UnarySetExpr.Op.ValueType - "* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n " + '* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n ' HULL: UnarySetExpr.Op.ValueType - "* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n " + '* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n ' NEGATE: UnarySetExpr.Op.ValueType - "* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n " + '* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n ' INVERT: UnarySetExpr.Op.ValueType - "* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n " + '* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n ' FLATTEN: UnarySetExpr.Op.ValueType - "Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n " - OP_FIELD_NUMBER: builtins.int - VALS_FIELD_NUMBER: builtins.int - op: global___UnarySetExpr.Op.ValueType + 'Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n ' + OP_FIELD_NUMBER: _builtins.int + VALS_FIELD_NUMBER: _builtins.int + op: Global___UnarySetExpr.Op.ValueType - @property - def vals(self) -> global___ValueExpr: ... - def __init__( - self, *, op: global___UnarySetExpr.Op.ValueType = ..., vals: global___ValueExpr | None = ... - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["vals", b"vals"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["op", b"op", "vals", b"vals"]) -> None: ... + @_builtins.property + def vals(self) -> Global___ValueExpr: + ... -global___UnarySetExpr = UnarySetExpr + def __init__(self, *, op: Global___UnarySetExpr.Op.ValueType=..., vals: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] -@typing_extensions.final -class BinaryExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['op', b'op', 'vals', b'vals'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___UnarySetExpr: _TypeAlias = UnarySetExpr + +@_typing.final +class BinaryExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType - class _OpEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[BinaryExpr._Op.ValueType], builtins.type - ): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[BinaryExpr._Op.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: BinaryExpr._Op.ValueType ADD: BinaryExpr._Op.ValueType - "* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " + '* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' MULT: BinaryExpr._Op.ValueType - "SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " + 'SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' SHRINK_MULT: BinaryExpr._Op.ValueType - "A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n " + 'A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n ' AND: BinaryExpr._Op.ValueType - "DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n " + 'DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n ' OR: BinaryExpr._Op.ValueType - "* Or :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Or :: (lhs :: Bool, rhs :: Bool) -> Bool' XOR: BinaryExpr._Op.ValueType - "* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool' IMPLIES: BinaryExpr._Op.ValueType - "* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool' EQ: BinaryExpr._Op.ValueType - "IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n " + 'IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n ' NEQ: BinaryExpr._Op.ValueType - "* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool" + '* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool' GT: BinaryExpr._Op.ValueType - "* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' GTE: BinaryExpr._Op.ValueType - "* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' LT: BinaryExpr._Op.ValueType - "* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' LTE: BinaryExpr._Op.ValueType - "* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' MAX: BinaryExpr._Op.ValueType - "* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a" + '* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a' MIN: BinaryExpr._Op.ValueType - "* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a" + '* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a' INTERSECTION: BinaryExpr._Op.ValueType - "UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n " + 'UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n ' HULL: BinaryExpr._Op.ValueType - "* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n " + '* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n ' WITHIN: BinaryExpr._Op.ValueType "INTERSECTS = 52;\n\n * Within :: (Numeric a) => (lhs :: Range a, rhs :: Range a) -> Bool\n :: (Numeric a) => (lhs :: a, rhs :: Range a) -> Bool\n\n Whether the lhs range or point is entirely within (contained by) the rhs.\n Used to be named SUBSET changed to a name that doesn't also imply a set op.\n " RANGE: BinaryExpr._Op.ValueType - "* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a" + '* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a' - class Op(_Op, metaclass=_OpEnumTypeWrapper): ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): + ... UNDEFINED: BinaryExpr.Op.ValueType ADD: BinaryExpr.Op.ValueType - "* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " + '* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' MULT: BinaryExpr.Op.ValueType - "SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " + 'SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' SHRINK_MULT: BinaryExpr.Op.ValueType - "A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n " + 'A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n ' AND: BinaryExpr.Op.ValueType - "DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n " + 'DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n ' OR: BinaryExpr.Op.ValueType - "* Or :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Or :: (lhs :: Bool, rhs :: Bool) -> Bool' XOR: BinaryExpr.Op.ValueType - "* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool' IMPLIES: BinaryExpr.Op.ValueType - "* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool" + '* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool' EQ: BinaryExpr.Op.ValueType - "IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n " + 'IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n ' NEQ: BinaryExpr.Op.ValueType - "* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool" + '* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool' GT: BinaryExpr.Op.ValueType - "* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' GTE: BinaryExpr.Op.ValueType - "* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' LT: BinaryExpr.Op.ValueType - "* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' LTE: BinaryExpr.Op.ValueType - "* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" + '* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' MAX: BinaryExpr.Op.ValueType - "* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a" + '* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a' MIN: BinaryExpr.Op.ValueType - "* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a" + '* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a' INTERSECTION: BinaryExpr.Op.ValueType - "UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n " + 'UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n ' HULL: BinaryExpr.Op.ValueType - "* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n " + '* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n ' WITHIN: BinaryExpr.Op.ValueType "INTERSECTS = 52;\n\n * Within :: (Numeric a) => (lhs :: Range a, rhs :: Range a) -> Bool\n :: (Numeric a) => (lhs :: a, rhs :: Range a) -> Bool\n\n Whether the lhs range or point is entirely within (contained by) the rhs.\n Used to be named SUBSET changed to a name that doesn't also imply a set op.\n " RANGE: BinaryExpr.Op.ValueType - "* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a" - OP_FIELD_NUMBER: builtins.int - LHS_FIELD_NUMBER: builtins.int - RHS_FIELD_NUMBER: builtins.int - op: global___BinaryExpr.Op.ValueType - - @property - def lhs(self) -> global___ValueExpr: ... - @property - def rhs(self) -> global___ValueExpr: ... - def __init__( - self, - *, - op: global___BinaryExpr.Op.ValueType = ..., - lhs: global___ValueExpr | None = ..., - rhs: global___ValueExpr | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["lhs", b"lhs", "rhs", b"rhs"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["lhs", b"lhs", "op", b"op", "rhs", b"rhs"]) -> None: ... - -global___BinaryExpr = BinaryExpr - -@typing_extensions.final -class BinarySetExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor + '* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a' + OP_FIELD_NUMBER: _builtins.int + LHS_FIELD_NUMBER: _builtins.int + RHS_FIELD_NUMBER: _builtins.int + op: Global___BinaryExpr.Op.ValueType + + @_builtins.property + def lhs(self) -> Global___ValueExpr: + ... + + @_builtins.property + def rhs(self) -> Global___ValueExpr: + ... + + def __init__(self, *, op: Global___BinaryExpr.Op.ValueType=..., lhs: Global___ValueExpr | None=..., rhs: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['lhs', b'lhs', 'rhs', b'rhs'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['lhs', b'lhs', 'op', b'op', 'rhs', b'rhs'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BinaryExpr: _TypeAlias = BinaryExpr + +@_typing.final +class BinarySetExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType - class _OpEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[BinarySetExpr._Op.ValueType], builtins.type - ): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor + class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[BinarySetExpr._Op.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: BinarySetExpr._Op.ValueType ADD: BinarySetExpr._Op.ValueType - "* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " + '* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' MULT: BinarySetExpr._Op.ValueType - "* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " + '* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' CONCAT: BinarySetExpr._Op.ValueType - "String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n " + 'String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n ' - class Op(_Op, metaclass=_OpEnumTypeWrapper): ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): + ... UNDEFINED: BinarySetExpr.Op.ValueType ADD: BinarySetExpr.Op.ValueType - "* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " + '* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' MULT: BinarySetExpr.Op.ValueType - "* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " + '* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' CONCAT: BinarySetExpr.Op.ValueType - "String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n " - OP_FIELD_NUMBER: builtins.int - LHSET_FIELD_NUMBER: builtins.int - RHS_FIELD_NUMBER: builtins.int - op: global___BinarySetExpr.Op.ValueType - - @property - def lhset(self) -> global___ValueExpr: ... - @property - def rhs(self) -> global___ValueExpr: ... - def __init__( - self, - *, - op: global___BinarySetExpr.Op.ValueType = ..., - lhset: global___ValueExpr | None = ..., - rhs: global___ValueExpr | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["lhset", b"lhset", "rhs", b"rhs"]) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["lhset", b"lhset", "op", b"op", "rhs", b"rhs"] - ) -> None: ... - -global___BinarySetExpr = BinarySetExpr - -@typing_extensions.final -class ArrayExpr(google.protobuf.message.Message): + 'String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n ' + OP_FIELD_NUMBER: _builtins.int + LHSET_FIELD_NUMBER: _builtins.int + RHS_FIELD_NUMBER: _builtins.int + op: Global___BinarySetExpr.Op.ValueType + + @_builtins.property + def lhset(self) -> Global___ValueExpr: + ... + + @_builtins.property + def rhs(self) -> Global___ValueExpr: + ... + + def __init__(self, *, op: Global___BinarySetExpr.Op.ValueType=..., lhset: Global___ValueExpr | None=..., rhs: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['lhset', b'lhset', 'rhs', b'rhs'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['lhset', b'lhset', 'op', b'op', 'rhs', b'rhs'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BinarySetExpr: _TypeAlias = BinarySetExpr + +@_typing.final +class ArrayExpr(_message.Message): """* Creates an array from element exprs""" + DESCRIPTOR: _descriptor.Descriptor + VALS_FIELD_NUMBER: _builtins.int - DESCRIPTOR: google.protobuf.descriptor.Descriptor - VALS_FIELD_NUMBER: builtins.int + @_builtins.property + def vals(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueExpr]: + ... - @property - def vals(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ValueExpr]: ... - def __init__(self, *, vals: collections.abc.Iterable[global___ValueExpr] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["vals", b"vals"]) -> None: ... + def __init__(self, *, vals: _abc.Iterable[Global___ValueExpr] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] -global___ArrayExpr = ArrayExpr + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ArrayExpr: _TypeAlias = ArrayExpr -@typing_extensions.final -class RangeExpr(google.protobuf.message.Message): +@_typing.final +class RangeExpr(_message.Message): """* Ranges have an expression form, allowing you to constrain them without specifying them fully """ + DESCRIPTOR: _descriptor.Descriptor + MINIMUM_FIELD_NUMBER: _builtins.int + MAXIMUM_FIELD_NUMBER: _builtins.int + + @_builtins.property + def minimum(self) -> Global___ValueExpr: + ... - DESCRIPTOR: google.protobuf.descriptor.Descriptor - MINIMUM_FIELD_NUMBER: builtins.int - MAXIMUM_FIELD_NUMBER: builtins.int - - @property - def minimum(self) -> global___ValueExpr: ... - @property - def maximum(self) -> global___ValueExpr: ... - def __init__( - self, *, minimum: global___ValueExpr | None = ..., maximum: global___ValueExpr | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["maximum", b"maximum", "minimum", b"minimum"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["maximum", b"maximum", "minimum", b"minimum"] - ) -> None: ... - -global___RangeExpr = RangeExpr - -@typing_extensions.final -class StructExpr(google.protobuf.message.Message): + @_builtins.property + def maximum(self) -> Global___ValueExpr: + ... + + def __init__(self, *, minimum: Global___ValueExpr | None=..., maximum: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___RangeExpr: _TypeAlias = RangeExpr + +@_typing.final +class StructExpr(_message.Message): """* Structs have an expression form, allowing you to constrain them without specifying them fully """ + DESCRIPTOR: _descriptor.Descriptor - DESCRIPTOR: google.protobuf.descriptor.Descriptor + @_typing.final + class ValsEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str - @typing_extensions.final - class ValsEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str + @_builtins.property + def value(self) -> Global___ValueExpr: + ... - @property - def value(self) -> global___ValueExpr: ... - def __init__(self, *, key: builtins.str = ..., value: global___ValueExpr | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... + def __init__(self, *, key: _builtins.str=..., value: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] - VALS_FIELD_NUMBER: builtins.int + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] - @property - def vals(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___ValueExpr]: ... - def __init__(self, *, vals: collections.abc.Mapping[builtins.str, global___ValueExpr] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["vals", b"vals"]) -> None: ... + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + VALS_FIELD_NUMBER: _builtins.int -global___StructExpr = StructExpr + @_builtins.property + def vals(self) -> _containers.MessageMap[_builtins.str, Global___ValueExpr]: + ... -@typing_extensions.final -class IfThenElseExpr(google.protobuf.message.Message): - """* IfThenElse :: (cond :: Bool, tru :: a, fal :: a) -> a""" + def __init__(self, *, vals: _abc.Mapping[_builtins.str, Global___ValueExpr] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___StructExpr: _TypeAlias = StructExpr - DESCRIPTOR: google.protobuf.descriptor.Descriptor - COND_FIELD_NUMBER: builtins.int - TRU_FIELD_NUMBER: builtins.int - FAL_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def cond(self) -> global___ValueExpr: ... - @property - def tru(self) -> global___ValueExpr: ... - @property - def fal(self) -> global___ValueExpr: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - cond: global___ValueExpr | None = ..., - tru: global___ValueExpr | None = ..., - fal: global___ValueExpr | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["cond", b"cond", "fal", b"fal", "meta", b"meta", "tru", b"tru"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["cond", b"cond", "fal", b"fal", "meta", b"meta", "tru", b"tru"] - ) -> None: ... - -global___IfThenElseExpr = IfThenElseExpr - -@typing_extensions.final -class ExtractExpr(google.protobuf.message.Message): +@_typing.final +class IfThenElseExpr(_message.Message): + """* IfThenElse :: (cond :: Bool, tru :: a, fal :: a) -> a""" + DESCRIPTOR: _descriptor.Descriptor + COND_FIELD_NUMBER: _builtins.int + TRU_FIELD_NUMBER: _builtins.int + FAL_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def cond(self) -> Global___ValueExpr: + ... + + @_builtins.property + def tru(self) -> Global___ValueExpr: + ... + + @_builtins.property + def fal(self) -> Global___ValueExpr: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, cond: Global___ValueExpr | None=..., tru: Global___ValueExpr | None=..., fal: Global___ValueExpr | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['cond', b'cond', 'fal', b'fal', 'meta', b'meta', 'tru', b'tru'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['cond', b'cond', 'fal', b'fal', 'meta', b'meta', 'tru', b'tru'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___IfThenElseExpr: _TypeAlias = IfThenElseExpr + +@_typing.final +class ExtractExpr(_message.Message): """* Extract :: (container :: Array a , index :: Int) -> a Extract :: (container :: Struct{index :: a}, index :: string) -> a Extract :: (container :: Range a , index :: {"minimum"|"maximum"}) -> a """ + DESCRIPTOR: _descriptor.Descriptor + CONTAINER_FIELD_NUMBER: _builtins.int + INDEX_FIELD_NUMBER: _builtins.int - DESCRIPTOR: google.protobuf.descriptor.Descriptor - CONTAINER_FIELD_NUMBER: builtins.int - INDEX_FIELD_NUMBER: builtins.int - - @property - def container(self) -> global___ValueExpr: ... - @property - def index(self) -> global___ValueExpr: ... - def __init__( - self, *, container: global___ValueExpr | None = ..., index: global___ValueExpr | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["container", b"container", "index", b"index"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["container", b"container", "index", b"index"] - ) -> None: ... - -global___ExtractExpr = ExtractExpr - -@typing_extensions.final -class MapExtractExpr(google.protobuf.message.Message): + @_builtins.property + def container(self) -> Global___ValueExpr: + ... + + @_builtins.property + def index(self) -> Global___ValueExpr: + ... + + def __init__(self, *, container: Global___ValueExpr | None=..., index: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'index', b'index'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'index', b'index'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ExtractExpr: _TypeAlias = ExtractExpr + +@_typing.final +class MapExtractExpr(_message.Message): """/** MapExtract :: (container :: Array a , path :: LocalRef{from :: a, to :: b}) -> Array b - MapExtract :: (container :: Set a , path :: LocalRef{from :: a, to :: b}) -> Set b + MapExtract :: (container :: Set a , path :: LocalRef{from :: a, to :: b}) -> Set b - This expression can map over a container and return a container of - the relevant subexpression determined by a path. */ + This expression can map over a container and return a container of + the relevant subexpression determined by a path. */ """ + DESCRIPTOR: _descriptor.Descriptor + CONTAINER_FIELD_NUMBER: _builtins.int + PATH_FIELD_NUMBER: _builtins.int + + @_builtins.property + def container(self) -> Global___ValueExpr: + ... - DESCRIPTOR: google.protobuf.descriptor.Descriptor - CONTAINER_FIELD_NUMBER: builtins.int - PATH_FIELD_NUMBER: builtins.int - - @property - def container(self) -> global___ValueExpr: ... - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - def __init__( - self, *, container: global___ValueExpr | None = ..., path: edgir.ref_pb2.LocalPath | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["container", b"container", "path", b"path"] - ) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["container", b"container", "path", b"path"]) -> None: ... - -global___MapExtractExpr = MapExtractExpr - -@typing_extensions.final -class ConnectedExpr(google.protobuf.message.Message): + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + def __init__(self, *, container: Global___ValueExpr | None=..., path: _ref_pb2.LocalPath | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'path', b'path'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'path', b'path'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___MapExtractExpr: _TypeAlias = MapExtractExpr + +@_typing.final +class ConnectedExpr(_message.Message): """* isConnected :: Port -> Port -> Bool This tells us whether the specified ports are connected """ + DESCRIPTOR: _descriptor.Descriptor + BLOCK_PORT_FIELD_NUMBER: _builtins.int + LINK_PORT_FIELD_NUMBER: _builtins.int + EXPANDED_FIELD_NUMBER: _builtins.int - DESCRIPTOR: google.protobuf.descriptor.Descriptor - BLOCK_PORT_FIELD_NUMBER: builtins.int - LINK_PORT_FIELD_NUMBER: builtins.int - EXPANDED_FIELD_NUMBER: builtins.int - - @property - def block_port(self) -> global___ValueExpr: ... - @property - def link_port(self) -> global___ValueExpr: ... - @property - def expanded(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ConnectedExpr]: + @_builtins.property + def block_port(self) -> Global___ValueExpr: + ... + + @_builtins.property + def link_port(self) -> Global___ValueExpr: + ... + + @_builtins.property + def expanded(self) -> _containers.RepeatedCompositeFieldContainer[Global___ConnectedExpr]: """During compilation, ConnectedExpr may be expanded (allocate replaced with concrete path indices, and arrays replaced with individual element connects). The expanded forms are stored here (including multiple elements in the array case), while the original (parent) is not modified. """ - def __init__( - self, - *, - block_port: global___ValueExpr | None = ..., - link_port: global___ValueExpr | None = ..., - expanded: collections.abc.Iterable[global___ConnectedExpr] | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["block_port", b"block_port", "link_port", b"link_port"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "block_port", b"block_port", "expanded", b"expanded", "link_port", b"link_port" - ], - ) -> None: ... - -global___ConnectedExpr = ConnectedExpr - -@typing_extensions.final -class ExportedExpr(google.protobuf.message.Message): + def __init__(self, *, block_port: Global___ValueExpr | None=..., link_port: Global___ValueExpr | None=..., expanded: _abc.Iterable[Global___ConnectedExpr] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['block_port', b'block_port', 'link_port', b'link_port'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['block_port', b'block_port', 'expanded', b'expanded', 'link_port', b'link_port'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ConnectedExpr: _TypeAlias = ConnectedExpr + +@_typing.final +class ExportedExpr(_message.Message): """* isExported :: Port -> Port -> Bool This tells us whether the specified port is exported to the hierarchy block exterior port """ + DESCRIPTOR: _descriptor.Descriptor + EXTERIOR_PORT_FIELD_NUMBER: _builtins.int + INTERNAL_BLOCK_PORT_FIELD_NUMBER: _builtins.int + EXPANDED_FIELD_NUMBER: _builtins.int + + @_builtins.property + def exterior_port(self) -> Global___ValueExpr: + ... - DESCRIPTOR: google.protobuf.descriptor.Descriptor - EXTERIOR_PORT_FIELD_NUMBER: builtins.int - INTERNAL_BLOCK_PORT_FIELD_NUMBER: builtins.int - EXPANDED_FIELD_NUMBER: builtins.int - - @property - def exterior_port(self) -> global___ValueExpr: ... - @property - def internal_block_port(self) -> global___ValueExpr: ... - @property - def expanded(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ExportedExpr]: + @_builtins.property + def internal_block_port(self) -> Global___ValueExpr: + ... + + @_builtins.property + def expanded(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExportedExpr]: """see comment in ConnectedExpr""" - def __init__( - self, - *, - exterior_port: global___ValueExpr | None = ..., - internal_block_port: global___ValueExpr | None = ..., - expanded: collections.abc.Iterable[global___ExportedExpr] | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "exterior_port", b"exterior_port", "internal_block_port", b"internal_block_port" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "expanded", b"expanded", "exterior_port", b"exterior_port", "internal_block_port", b"internal_block_port" - ], - ) -> None: ... - -global___ExportedExpr = ExportedExpr - -@typing_extensions.final -class AssignExpr(google.protobuf.message.Message): + def __init__(self, *, exterior_port: Global___ValueExpr | None=..., internal_block_port: Global___ValueExpr | None=..., expanded: _abc.Iterable[Global___ExportedExpr] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['exterior_port', b'exterior_port', 'internal_block_port', b'internal_block_port'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['expanded', b'expanded', 'exterior_port', b'exterior_port', 'internal_block_port', b'internal_block_port'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ExportedExpr: _TypeAlias = ExportedExpr + +@_typing.final +class AssignExpr(_message.Message): """Variable assignment (from an expression value), which allows dataflow to be directioned and explicit. Assignments should not be cyclic. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - DST_FIELD_NUMBER: builtins.int - SRC_FIELD_NUMBER: builtins.int - - @property - def dst(self) -> edgir.ref_pb2.LocalPath: ... - @property - def src(self) -> global___ValueExpr: ... - def __init__(self, *, dst: edgir.ref_pb2.LocalPath | None = ..., src: global___ValueExpr | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["dst", b"dst", "src", b"src"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["dst", b"dst", "src", b"src"]) -> None: ... - -global___AssignExpr = AssignExpr - -@typing_extensions.final -class ValueExpr(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - LITERAL_FIELD_NUMBER: builtins.int - BINARY_FIELD_NUMBER: builtins.int - BINARY_SET_FIELD_NUMBER: builtins.int - UNARY_FIELD_NUMBER: builtins.int - UNARY_SET_FIELD_NUMBER: builtins.int - ARRAY_FIELD_NUMBER: builtins.int - STRUCT_FIELD_NUMBER: builtins.int - RANGE_FIELD_NUMBER: builtins.int - IFTHENELSE_FIELD_NUMBER: builtins.int - EXTRACT_FIELD_NUMBER: builtins.int - MAP_EXTRACT_FIELD_NUMBER: builtins.int - CONNECTED_FIELD_NUMBER: builtins.int - EXPORTED_FIELD_NUMBER: builtins.int - CONNECTEDARRAY_FIELD_NUMBER: builtins.int - EXPORTEDARRAY_FIELD_NUMBER: builtins.int - ASSIGN_FIELD_NUMBER: builtins.int - EXPORTEDTUNNEL_FIELD_NUMBER: builtins.int - ASSIGNTUNNEL_FIELD_NUMBER: builtins.int - REF_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def literal(self) -> edgir.lit_pb2.ValueLit: ... - @property - def binary(self) -> global___BinaryExpr: ... - @property - def binary_set(self) -> global___BinarySetExpr: ... - @property - def unary(self) -> global___UnaryExpr: ... - @property - def unary_set(self) -> global___UnarySetExpr: ... - @property - def array(self) -> global___ArrayExpr: + DESCRIPTOR: _descriptor.Descriptor + DST_FIELD_NUMBER: _builtins.int + SRC_FIELD_NUMBER: _builtins.int + + @_builtins.property + def dst(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def src(self) -> Global___ValueExpr: + ... + + def __init__(self, *, dst: _ref_pb2.LocalPath | None=..., src: Global___ValueExpr | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['dst', b'dst', 'src', b'src'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['dst', b'dst', 'src', b'src'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___AssignExpr: _TypeAlias = AssignExpr + +@_typing.final +class ValueExpr(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + LITERAL_FIELD_NUMBER: _builtins.int + BINARY_FIELD_NUMBER: _builtins.int + BINARY_SET_FIELD_NUMBER: _builtins.int + UNARY_FIELD_NUMBER: _builtins.int + UNARY_SET_FIELD_NUMBER: _builtins.int + ARRAY_FIELD_NUMBER: _builtins.int + STRUCT_FIELD_NUMBER: _builtins.int + RANGE_FIELD_NUMBER: _builtins.int + IFTHENELSE_FIELD_NUMBER: _builtins.int + EXTRACT_FIELD_NUMBER: _builtins.int + MAP_EXTRACT_FIELD_NUMBER: _builtins.int + CONNECTED_FIELD_NUMBER: _builtins.int + EXPORTED_FIELD_NUMBER: _builtins.int + CONNECTEDARRAY_FIELD_NUMBER: _builtins.int + EXPORTEDARRAY_FIELD_NUMBER: _builtins.int + ASSIGN_FIELD_NUMBER: _builtins.int + EXPORTEDTUNNEL_FIELD_NUMBER: _builtins.int + ASSIGNTUNNEL_FIELD_NUMBER: _builtins.int + REF_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def literal(self) -> _lit_pb2.ValueLit: + ... + + @_builtins.property + def binary(self) -> Global___BinaryExpr: + ... + + @_builtins.property + def binary_set(self) -> Global___BinarySetExpr: + ... + + @_builtins.property + def unary(self) -> Global___UnaryExpr: + ... + + @_builtins.property + def unary_set(self) -> Global___UnarySetExpr: + ... + + @_builtins.property + def array(self) -> Global___ArrayExpr: """SetExpr set = 5;""" - @property - def struct(self) -> global___StructExpr: ... - @property - def range(self) -> global___RangeExpr: ... - @property - def ifThenElse(self) -> global___IfThenElseExpr: ... - @property - def extract(self) -> global___ExtractExpr: ... - @property - def map_extract(self) -> global___MapExtractExpr: ... - @property - def connected(self) -> global___ConnectedExpr: + @_builtins.property + def struct(self) -> Global___StructExpr: + ... + + @_builtins.property + def range(self) -> Global___RangeExpr: + ... + + @_builtins.property + def ifThenElse(self) -> Global___IfThenElseExpr: + ... + + @_builtins.property + def extract(self) -> Global___ExtractExpr: + ... + + @_builtins.property + def map_extract(self) -> Global___MapExtractExpr: + ... + + @_builtins.property + def connected(self) -> Global___ConnectedExpr: """single port to single port connect""" - @property - def exported(self) -> global___ExportedExpr: + @_builtins.property + def exported(self) -> Global___ExportedExpr: """single port to single port export""" - @property - def connectedArray(self) -> global___ConnectedExpr: + @_builtins.property + def connectedArray(self) -> Global___ConnectedExpr: """array to array connect, where allocate means allocate a subarray""" - @property - def exportedArray(self) -> global___ExportedExpr: + @_builtins.property + def exportedArray(self) -> Global___ExportedExpr: """array to array export, where allocate means allocate a subarray""" - @property - def assign(self) -> global___AssignExpr: ... - @property - def exportedTunnel(self) -> global___ExportedExpr: + @_builtins.property + def assign(self) -> Global___AssignExpr: + ... + + @_builtins.property + def exportedTunnel(self) -> Global___ExportedExpr: """These Exprs support cross-hierarchy operations single port to single port tunneling (cross-hierarchy) export: """ - @property - def assignTunnel(self) -> global___AssignExpr: + @_builtins.property + def assignTunnel(self) -> Global___AssignExpr: """- the exterior port may be a top-level port on any (recursive) sub-block for the exterior port, all path components except the last must be block references, and the last must be a top-level port @@ -694,151 +759,27 @@ class ValueExpr(google.protobuf.message.Message): parameter assignment which may be cross-hierarchy """ - @property - def ref(self) -> edgir.ref_pb2.LocalPath: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - literal: edgir.lit_pb2.ValueLit | None = ..., - binary: global___BinaryExpr | None = ..., - binary_set: global___BinarySetExpr | None = ..., - unary: global___UnaryExpr | None = ..., - unary_set: global___UnarySetExpr | None = ..., - array: global___ArrayExpr | None = ..., - struct: global___StructExpr | None = ..., - range: global___RangeExpr | None = ..., - ifThenElse: global___IfThenElseExpr | None = ..., - extract: global___ExtractExpr | None = ..., - map_extract: global___MapExtractExpr | None = ..., - connected: global___ConnectedExpr | None = ..., - exported: global___ExportedExpr | None = ..., - connectedArray: global___ConnectedExpr | None = ..., - exportedArray: global___ExportedExpr | None = ..., - assign: global___AssignExpr | None = ..., - exportedTunnel: global___ExportedExpr | None = ..., - assignTunnel: global___AssignExpr | None = ..., - ref: edgir.ref_pb2.LocalPath | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "assign", - b"assign", - "assignTunnel", - b"assignTunnel", - "binary", - b"binary", - "binary_set", - b"binary_set", - "connected", - b"connected", - "connectedArray", - b"connectedArray", - "exported", - b"exported", - "exportedArray", - b"exportedArray", - "exportedTunnel", - b"exportedTunnel", - "expr", - b"expr", - "extract", - b"extract", - "ifThenElse", - b"ifThenElse", - "literal", - b"literal", - "map_extract", - b"map_extract", - "meta", - b"meta", - "range", - b"range", - "ref", - b"ref", - "struct", - b"struct", - "unary", - b"unary", - "unary_set", - b"unary_set", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "assign", - b"assign", - "assignTunnel", - b"assignTunnel", - "binary", - b"binary", - "binary_set", - b"binary_set", - "connected", - b"connected", - "connectedArray", - b"connectedArray", - "exported", - b"exported", - "exportedArray", - b"exportedArray", - "exportedTunnel", - b"exportedTunnel", - "expr", - b"expr", - "extract", - b"extract", - "ifThenElse", - b"ifThenElse", - "literal", - b"literal", - "map_extract", - b"map_extract", - "meta", - b"meta", - "range", - b"range", - "ref", - b"ref", - "struct", - b"struct", - "unary", - b"unary", - "unary_set", - b"unary_set", - ], - ) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["expr", b"expr"]) -> ( - typing_extensions.Literal[ - "literal", - "binary", - "binary_set", - "unary", - "unary_set", - "array", - "struct", - "range", - "ifThenElse", - "extract", - "map_extract", - "connected", - "exported", - "connectedArray", - "exportedArray", - "assign", - "exportedTunnel", - "assignTunnel", - "ref", - ] - | None - ): ... - -global___ValueExpr = ValueExpr + @_builtins.property + def ref(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, literal: _lit_pb2.ValueLit | None=..., binary: Global___BinaryExpr | None=..., binary_set: Global___BinarySetExpr | None=..., unary: Global___UnaryExpr | None=..., unary_set: Global___UnarySetExpr | None=..., array: Global___ArrayExpr | None=..., struct: Global___StructExpr | None=..., range: Global___RangeExpr | None=..., ifThenElse: Global___IfThenElseExpr | None=..., extract: Global___ExtractExpr | None=..., map_extract: Global___MapExtractExpr | None=..., connected: Global___ConnectedExpr | None=..., exported: Global___ExportedExpr | None=..., connectedArray: Global___ConnectedExpr | None=..., exportedArray: Global___ExportedExpr | None=..., assign: Global___AssignExpr | None=..., exportedTunnel: Global___ExportedExpr | None=..., assignTunnel: Global___AssignExpr | None=..., ref: _ref_pb2.LocalPath | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'assign', b'assign', 'assignTunnel', b'assignTunnel', 'binary', b'binary', 'binary_set', b'binary_set', 'connected', b'connected', 'connectedArray', b'connectedArray', 'exported', b'exported', 'exportedArray', b'exportedArray', 'exportedTunnel', b'exportedTunnel', 'expr', b'expr', 'extract', b'extract', 'ifThenElse', b'ifThenElse', 'literal', b'literal', 'map_extract', b'map_extract', 'meta', b'meta', 'range', b'range', 'ref', b'ref', 'struct', b'struct', 'unary', b'unary', 'unary_set', b'unary_set'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'assign', b'assign', 'assignTunnel', b'assignTunnel', 'binary', b'binary', 'binary_set', b'binary_set', 'connected', b'connected', 'connectedArray', b'connectedArray', 'exported', b'exported', 'exportedArray', b'exportedArray', 'exportedTunnel', b'exportedTunnel', 'expr', b'expr', 'extract', b'extract', 'ifThenElse', b'ifThenElse', 'literal', b'literal', 'map_extract', b'map_extract', 'meta', b'meta', 'range', b'range', 'ref', b'ref', 'struct', b'struct', 'unary', b'unary', 'unary_set', b'unary_set'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_expr: _TypeAlias = _typing.Literal['literal', 'binary', 'binary_set', 'unary', 'unary_set', 'array', 'struct', 'range', 'ifThenElse', 'extract', 'map_extract', 'connected', 'exported', 'connectedArray', 'exportedArray', 'assign', 'exportedTunnel', 'assignTunnel', 'ref'] + _WhichOneofArgType_expr: _TypeAlias = _typing.Literal['expr', b'expr'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_expr) -> _WhichOneofReturnType_expr | None: + ... +Global___ValueExpr: _TypeAlias = ValueExpr \ No newline at end of file diff --git a/edg/edgir/impl_pb2.py b/edg/edgir/impl_pb2.py index 2392b5cbe..47e51e529 100644 --- a/edg/edgir/impl_pb2.py +++ b/edg/edgir/impl_pb2.py @@ -1,18 +1,13 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/impl.proto\x12\nedgir.impl\x1a\x12edgir/common.proto"1\n\tBlockImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08PortImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08LinkImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"7\n\x0fEnvironmentImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/impl.proto\x12\nedgir.impl\x1a\x12edgir/common.proto"1\n\tBlockImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08PortImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08LinkImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"7\n\x0fEnvironmentImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.impl_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.impl_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCKIMPL._serialized_start = 52 @@ -22,4 +17,4 @@ _LINKIMPL._serialized_start = 153 _LINKIMPL._serialized_end = 201 _ENVIRONMENTIMPL._serialized_start = 203 - _ENVIRONMENTIMPL._serialized_end = 258 + _ENVIRONMENTIMPL._serialized_end = 258 \ No newline at end of file diff --git a/edg/edgir/impl_pb2.pyi b/edg/edgir/impl_pb2.pyi index 7f0b81720..a38a4ffdd 100644 --- a/edg/edgir/impl_pb2.pyi +++ b/edg/edgir/impl_pb2.pyi @@ -10,67 +10,98 @@ stored. Fuck if I know what that will look like, so for now you just get a metadata block. """ - -import builtins -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.message +from edgir import common_pb2 as _common_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor - -@typing_extensions.final -class BlockImpl(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - META_FIELD_NUMBER: builtins.int - - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> None: ... - -global___BlockImpl = BlockImpl - -@typing_extensions.final -class PortImpl(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - META_FIELD_NUMBER: builtins.int - - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> None: ... - -global___PortImpl = PortImpl - -@typing_extensions.final -class LinkImpl(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - META_FIELD_NUMBER: builtins.int - - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> None: ... - -global___LinkImpl = LinkImpl - -@typing_extensions.final -class EnvironmentImpl(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - META_FIELD_NUMBER: builtins.int - - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> None: ... - -global___EnvironmentImpl = EnvironmentImpl + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor + +@_typing.final +class BlockImpl(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BlockImpl: _TypeAlias = BlockImpl + +@_typing.final +class PortImpl(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___PortImpl: _TypeAlias = PortImpl + +@_typing.final +class LinkImpl(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LinkImpl: _TypeAlias = LinkImpl + +@_typing.final +class EnvironmentImpl(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___EnvironmentImpl: _TypeAlias = EnvironmentImpl \ No newline at end of file diff --git a/edg/edgir/init_pb2.py b/edg/edgir/init_pb2.py index 6b6964627..92571bac8 100644 --- a/edg/edgir/init_pb2.py +++ b/edg/edgir/init_pb2.py @@ -1,19 +1,14 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/init.proto\x12\nedgir.init\x1a\x12edgir/common.proto"\xeb\x02\n\x07ValInit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07integer\x18\x02 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07boolean\x18\x03 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12#\n\x04text\x18\x04 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12"\n\x03set\x18\x08 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12%\n\x06struct\x18\t \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.init.ValInitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x05\n\x03valb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/init.proto\x12\nedgir.init\x1a\x12edgir/common.proto"\xeb\x02\n\x07ValInit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07integer\x18\x02 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07boolean\x18\x03 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12#\n\x04text\x18\x04 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12"\n\x03set\x18\x08 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12%\n\x06struct\x18\t \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.init.ValInitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x05\n\x03valb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.init_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.init_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _VALINIT._serialized_start = 53 - _VALINIT._serialized_end = 416 + _VALINIT._serialized_end = 416 \ No newline at end of file diff --git a/edg/edgir/init_pb2.pyi b/edg/edgir/init_pb2.pyi index f4e1024b7..534446937 100644 --- a/edg/edgir/init_pb2.pyi +++ b/edg/edgir/init_pb2.pyi @@ -11,123 +11,85 @@ creating a value. FIXME :: Does this make more sense in another file? """ - -import builtins -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.message +from edgir import common_pb2 as _common_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class ValInit(google.protobuf.message.Message): +@_typing.final +class ValInit(_message.Message): """* This is the general way we initialize values in the local context. I think the frontend should have more type specific wrappers around this since the data required for each type can be different. """ + DESCRIPTOR: _descriptor.Descriptor + FLOATING_FIELD_NUMBER: _builtins.int + INTEGER_FIELD_NUMBER: _builtins.int + BOOLEAN_FIELD_NUMBER: _builtins.int + TEXT_FIELD_NUMBER: _builtins.int + SET_FIELD_NUMBER: _builtins.int + STRUCT_FIELD_NUMBER: _builtins.int + RANGE_FIELD_NUMBER: _builtins.int + ARRAY_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def floating(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def integer(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def boolean(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def text(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def set(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def struct(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def range(self) -> _common_pb2.Empty: + ... + + @_builtins.property + def array(self) -> Global___ValInit: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, floating: _common_pb2.Empty | None=..., integer: _common_pb2.Empty | None=..., boolean: _common_pb2.Empty | None=..., text: _common_pb2.Empty | None=..., set: _common_pb2.Empty | None=..., struct: _common_pb2.Empty | None=..., range: _common_pb2.Empty | None=..., array: Global___ValInit | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'set', b'set', 'struct', b'struct', 'text', b'text', 'val', b'val'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'set', b'set', 'struct', b'struct', 'text', b'text', 'val', b'val'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_val: _TypeAlias = _typing.Literal['floating', 'integer', 'boolean', 'text', 'set', 'struct', 'range', 'array'] + _WhichOneofArgType_val: _TypeAlias = _typing.Literal['val', b'val'] - DESCRIPTOR: google.protobuf.descriptor.Descriptor - FLOATING_FIELD_NUMBER: builtins.int - INTEGER_FIELD_NUMBER: builtins.int - BOOLEAN_FIELD_NUMBER: builtins.int - TEXT_FIELD_NUMBER: builtins.int - SET_FIELD_NUMBER: builtins.int - STRUCT_FIELD_NUMBER: builtins.int - RANGE_FIELD_NUMBER: builtins.int - ARRAY_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def floating(self) -> edgir.common_pb2.Empty: ... - @property - def integer(self) -> edgir.common_pb2.Empty: ... - @property - def boolean(self) -> edgir.common_pb2.Empty: ... - @property - def text(self) -> edgir.common_pb2.Empty: ... - @property - def set(self) -> edgir.common_pb2.Empty: ... - @property - def struct(self) -> edgir.common_pb2.Empty: ... - @property - def range(self) -> edgir.common_pb2.Empty: ... - @property - def array(self) -> global___ValInit: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - floating: edgir.common_pb2.Empty | None = ..., - integer: edgir.common_pb2.Empty | None = ..., - boolean: edgir.common_pb2.Empty | None = ..., - text: edgir.common_pb2.Empty | None = ..., - set: edgir.common_pb2.Empty | None = ..., - struct: edgir.common_pb2.Empty | None = ..., - range: edgir.common_pb2.Empty | None = ..., - array: global___ValInit | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "boolean", - b"boolean", - "floating", - b"floating", - "integer", - b"integer", - "meta", - b"meta", - "range", - b"range", - "set", - b"set", - "struct", - b"struct", - "text", - b"text", - "val", - b"val", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "boolean", - b"boolean", - "floating", - b"floating", - "integer", - b"integer", - "meta", - b"meta", - "range", - b"range", - "set", - b"set", - "struct", - b"struct", - "text", - b"text", - "val", - b"val", - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["val", b"val"] - ) -> ( - typing_extensions.Literal["floating", "integer", "boolean", "text", "set", "struct", "range", "array"] | None - ): ... - -global___ValInit = ValInit + def WhichOneof(self, oneof_group: _WhichOneofArgType_val) -> _WhichOneofReturnType_val | None: + ... +Global___ValInit: _TypeAlias = ValInit \ No newline at end of file diff --git a/edg/edgir/lit_pb2.py b/edg/edgir/lit_pb2.py index 5fa7a1533..96d84789c 100644 --- a/edg/edgir/lit_pb2.py +++ b/edg/edgir/lit_pb2.py @@ -1,22 +1,17 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x0fedgir/lit.proto\x12\tedgir.lit\x1a\x12edgir/common.proto"\x17\n\x08FloatLit\x12\x0b\n\x03val\x18\x01 \x01(\x01"\x15\n\x06IntLit\x12\x0b\n\x03val\x18\x01 \x01(\x12"\x16\n\x07BoolLit\x12\x0b\n\x03val\x18\x01 \x01(\x08"\x16\n\x07TextLit\x12\x0b\n\x03val\x18\x01 \x01(\t"V\n\x08RangeLit\x12$\n\x07minimum\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLit\x12$\n\x07maximum\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"\x84\x01\n\tStructLit\x122\n\x07members\x18\x01 \x03(\x0b2!.edgir.lit.StructLit.MembersEntry\x1aC\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit:\x028\x01"-\n\x08ArrayLit\x12!\n\x04elts\x18\x01 \x03(\x0b2\x13.edgir.lit.ValueLit"\xc6\x02\n\x08ValueLit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.lit.FloatLitH\x00\x12$\n\x07integer\x18\x02 \x01(\x0b2\x11.edgir.lit.IntLitH\x00\x12%\n\x07boolean\x18\x03 \x01(\x0b2\x12.edgir.lit.BoolLitH\x00\x12"\n\x04text\x18\x04 \x01(\x0b2\x12.edgir.lit.TextLitH\x00\x12&\n\x06struct\x18\t \x01(\x0b2\x14.edgir.lit.StructLitH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.lit.RangeLitH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.lit.ArrayLitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04typeb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fedgir/lit.proto\x12\tedgir.lit\x1a\x12edgir/common.proto"\x17\n\x08FloatLit\x12\x0b\n\x03val\x18\x01 \x01(\x01"\x15\n\x06IntLit\x12\x0b\n\x03val\x18\x01 \x01(\x12"\x16\n\x07BoolLit\x12\x0b\n\x03val\x18\x01 \x01(\x08"\x16\n\x07TextLit\x12\x0b\n\x03val\x18\x01 \x01(\t"V\n\x08RangeLit\x12$\n\x07minimum\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLit\x12$\n\x07maximum\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"\x84\x01\n\tStructLit\x122\n\x07members\x18\x01 \x03(\x0b2!.edgir.lit.StructLit.MembersEntry\x1aC\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit:\x028\x01"-\n\x08ArrayLit\x12!\n\x04elts\x18\x01 \x03(\x0b2\x13.edgir.lit.ValueLit"\xc6\x02\n\x08ValueLit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.lit.FloatLitH\x00\x12$\n\x07integer\x18\x02 \x01(\x0b2\x11.edgir.lit.IntLitH\x00\x12%\n\x07boolean\x18\x03 \x01(\x0b2\x12.edgir.lit.BoolLitH\x00\x12"\n\x04text\x18\x04 \x01(\x0b2\x12.edgir.lit.TextLitH\x00\x12&\n\x06struct\x18\t \x01(\x0b2\x14.edgir.lit.StructLitH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.lit.RangeLitH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.lit.ArrayLitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04typeb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.lit_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.lit_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _STRUCTLIT_MEMBERSENTRY._options = None - _STRUCTLIT_MEMBERSENTRY._serialized_options = b"8\x01" + _STRUCTLIT_MEMBERSENTRY._serialized_options = b'8\x01' _FLOATLIT._serialized_start = 50 _FLOATLIT._serialized_end = 73 _INTLIT._serialized_start = 75 @@ -34,4 +29,4 @@ _ARRAYLIT._serialized_start = 369 _ARRAYLIT._serialized_end = 414 _VALUELIT._serialized_start = 417 - _VALUELIT._serialized_end = 743 + _VALUELIT._serialized_end = 743 \ No newline at end of file diff --git a/edg/edgir/lit_pb2.pyi b/edg/edgir/lit_pb2.pyi index 47168fcdc..7d821ab3c 100644 --- a/edg/edgir/lit_pb2.pyi +++ b/edg/edgir/lit_pb2.pyi @@ -7,215 +7,218 @@ Package : edg.lit Literals for assorted priitive types, i.e fixed constant values. """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.message +from collections import abc as _abc +from edgir import common_pb2 as _common_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class FloatLit(google.protobuf.message.Message): +@_typing.final +class FloatLit(_message.Message): """* The core expression primitives we start with are the value literals that we can use """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - VAL_FIELD_NUMBER: builtins.int - val: builtins.float - - def __init__(self, *, val: builtins.float = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["val", b"val"]) -> None: ... - -global___FloatLit = FloatLit - -@typing_extensions.final -class IntLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - VAL_FIELD_NUMBER: builtins.int - val: builtins.int - - def __init__(self, *, val: builtins.int = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["val", b"val"]) -> None: ... - -global___IntLit = IntLit - -@typing_extensions.final -class BoolLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - VAL_FIELD_NUMBER: builtins.int - val: builtins.bool - - def __init__(self, *, val: builtins.bool = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["val", b"val"]) -> None: ... - -global___BoolLit = BoolLit - -@typing_extensions.final -class TextLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - VAL_FIELD_NUMBER: builtins.int - val: builtins.str - - def __init__(self, *, val: builtins.str = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["val", b"val"]) -> None: ... - -global___TextLit = TextLit - -@typing_extensions.final -class RangeLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - MINIMUM_FIELD_NUMBER: builtins.int - MAXIMUM_FIELD_NUMBER: builtins.int - - @property - def minimum(self) -> global___ValueLit: ... - @property - def maximum(self) -> global___ValueLit: ... - def __init__(self, *, minimum: global___ValueLit | None = ..., maximum: global___ValueLit | None = ...) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["maximum", b"maximum", "minimum", b"minimum"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["maximum", b"maximum", "minimum", b"minimum"] - ) -> None: ... - -global___RangeLit = RangeLit - -@typing_extensions.final -class StructLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class MembersEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str - - @property - def value(self) -> global___ValueLit: ... - def __init__(self, *, key: builtins.str = ..., value: global___ValueLit | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... - - MEMBERS_FIELD_NUMBER: builtins.int - - @property - def members(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___ValueLit]: ... - def __init__(self, *, members: collections.abc.Mapping[builtins.str, global___ValueLit] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["members", b"members"]) -> None: ... - -global___StructLit = StructLit - -@typing_extensions.final -class ArrayLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - ELTS_FIELD_NUMBER: builtins.int - - @property - def elts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ValueLit]: ... - def __init__(self, *, elts: collections.abc.Iterable[global___ValueLit] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["elts", b"elts"]) -> None: ... - -global___ArrayLit = ArrayLit - -@typing_extensions.final -class ValueLit(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - FLOATING_FIELD_NUMBER: builtins.int - INTEGER_FIELD_NUMBER: builtins.int - BOOLEAN_FIELD_NUMBER: builtins.int - TEXT_FIELD_NUMBER: builtins.int - STRUCT_FIELD_NUMBER: builtins.int - RANGE_FIELD_NUMBER: builtins.int - ARRAY_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def floating(self) -> global___FloatLit: ... - @property - def integer(self) -> global___IntLit: ... - @property - def boolean(self) -> global___BoolLit: ... - @property - def text(self) -> global___TextLit: ... - @property - def struct(self) -> global___StructLit: ... - @property - def range(self) -> global___RangeLit: ... - @property - def array(self) -> global___ArrayLit: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - floating: global___FloatLit | None = ..., - integer: global___IntLit | None = ..., - boolean: global___BoolLit | None = ..., - text: global___TextLit | None = ..., - struct: global___StructLit | None = ..., - range: global___RangeLit | None = ..., - array: global___ArrayLit | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "boolean", - b"boolean", - "floating", - b"floating", - "integer", - b"integer", - "meta", - b"meta", - "range", - b"range", - "struct", - b"struct", - "text", - b"text", - "type", - b"type", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "array", - b"array", - "boolean", - b"boolean", - "floating", - b"floating", - "integer", - b"integer", - "meta", - b"meta", - "range", - b"range", - "struct", - b"struct", - "text", - b"text", - "type", - b"type", - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["type", b"type"] - ) -> typing_extensions.Literal["floating", "integer", "boolean", "text", "struct", "range", "array"] | None: ... - -global___ValueLit = ValueLit + DESCRIPTOR: _descriptor.Descriptor + VAL_FIELD_NUMBER: _builtins.int + val: _builtins.float + + def __init__(self, *, val: _builtins.float=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___FloatLit: _TypeAlias = FloatLit + +@_typing.final +class IntLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + VAL_FIELD_NUMBER: _builtins.int + val: _builtins.int + + def __init__(self, *, val: _builtins.int=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___IntLit: _TypeAlias = IntLit + +@_typing.final +class BoolLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + VAL_FIELD_NUMBER: _builtins.int + val: _builtins.bool + + def __init__(self, *, val: _builtins.bool=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BoolLit: _TypeAlias = BoolLit + +@_typing.final +class TextLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + VAL_FIELD_NUMBER: _builtins.int + val: _builtins.str + + def __init__(self, *, val: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___TextLit: _TypeAlias = TextLit + +@_typing.final +class RangeLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + MINIMUM_FIELD_NUMBER: _builtins.int + MAXIMUM_FIELD_NUMBER: _builtins.int + + @_builtins.property + def minimum(self) -> Global___ValueLit: + ... + + @_builtins.property + def maximum(self) -> Global___ValueLit: + ... + + def __init__(self, *, minimum: Global___ValueLit | None=..., maximum: Global___ValueLit | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___RangeLit: _TypeAlias = RangeLit + +@_typing.final +class StructLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class MembersEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + + @_builtins.property + def value(self) -> Global___ValueLit: + ... + + def __init__(self, *, key: _builtins.str=..., value: Global___ValueLit | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + MEMBERS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def members(self) -> _containers.MessageMap[_builtins.str, Global___ValueLit]: + ... + + def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___ValueLit] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['members', b'members'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___StructLit: _TypeAlias = StructLit + +@_typing.final +class ArrayLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + ELTS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def elts(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueLit]: + ... + + def __init__(self, *, elts: _abc.Iterable[Global___ValueLit] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['elts', b'elts'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ArrayLit: _TypeAlias = ArrayLit + +@_typing.final +class ValueLit(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + FLOATING_FIELD_NUMBER: _builtins.int + INTEGER_FIELD_NUMBER: _builtins.int + BOOLEAN_FIELD_NUMBER: _builtins.int + TEXT_FIELD_NUMBER: _builtins.int + STRUCT_FIELD_NUMBER: _builtins.int + RANGE_FIELD_NUMBER: _builtins.int + ARRAY_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def floating(self) -> Global___FloatLit: + ... + + @_builtins.property + def integer(self) -> Global___IntLit: + ... + + @_builtins.property + def boolean(self) -> Global___BoolLit: + ... + + @_builtins.property + def text(self) -> Global___TextLit: + ... + + @_builtins.property + def struct(self) -> Global___StructLit: + ... + + @_builtins.property + def range(self) -> Global___RangeLit: + ... + + @_builtins.property + def array(self) -> Global___ArrayLit: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, floating: Global___FloatLit | None=..., integer: Global___IntLit | None=..., boolean: Global___BoolLit | None=..., text: Global___TextLit | None=..., struct: Global___StructLit | None=..., range: Global___RangeLit | None=..., array: Global___ArrayLit | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'struct', b'struct', 'text', b'text', 'type', b'type'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'struct', b'struct', 'text', b'text', 'type', b'type'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['floating', 'integer', 'boolean', 'text', 'struct', 'range', 'array'] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: + ... +Global___ValueLit: _TypeAlias = ValueLit \ No newline at end of file diff --git a/edg/edgir/name_pb2.py b/edg/edgir/name_pb2.py index 5d32702a7..1b64ac05f 100644 --- a/edg/edgir/name_pb2.py +++ b/edg/edgir/name_pb2.py @@ -1,21 +1,16 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgir/name.proto\x12\nedgir.name\x1a\x12edgir/common.proto"O\n\tNamespace\x12\x0f\n\x05basic\x18\x01 \x01(\tH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x0b\n\tnamespace"A\n\x0bLibraryName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/name.proto\x12\nedgir.name\x1a\x12edgir/common.proto"O\n\tNamespace\x12\x0f\n\x05basic\x18\x01 \x01(\tH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x0b\n\tnamespace"A\n\x0bLibraryName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.name_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.name_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _NAMESPACE._serialized_start = 52 _NAMESPACE._serialized_end = 131 _LIBRARYNAME._serialized_start = 133 - _LIBRARYNAME._serialized_end = 198 + _LIBRARYNAME._serialized_end = 198 \ No newline at end of file diff --git a/edg/edgir/name_pb2.pyi b/edg/edgir/name_pb2.pyi index 6635072ee..50564b2fe 100644 --- a/edg/edgir/name_pb2.pyi +++ b/edg/edgir/name_pb2.pyi @@ -10,66 +10,77 @@ There are three major classes of name in edg: - LocalNames, which help organize elements relative to each other. - LibraryNames, which we use to identify specific libraries. """ - -import builtins -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.message +from edgir import common_pb2 as _common_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class Namespace(google.protobuf.message.Message): +@_typing.final +class Namespace(_message.Message): """* A namespace allows us to define a more useful organizational structure over items in the library. It lets us group elements in categories that are orthogonal to the usual Block, Port, Link, ontology. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - BASIC_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - basic: builtins.str + DESCRIPTOR: _descriptor.Descriptor + BASIC_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + basic: _builtins.str "* Basic namespaces are a way to organize library elements into a\n useful hirearchy (e.g. 'Core.*' for the most primitive definitions\n that we define, or 'NXP.*' for NXP made components.)\n\n Basic namespaces should have the following properties:\n\n - First char is a capital letter\n - All other chars must be letters, numbers, '-', '<', '>'\n - CamelCase is preffered, don't use any symbols in the name\n if possible.\n " - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, basic: builtins.str = ..., meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["basic", b"basic", "meta", b"meta", "namespace", b"namespace"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["basic", b"basic", "meta", b"meta", "namespace", b"namespace"] - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["namespace", b"namespace"] - ) -> typing_extensions.Literal["basic"] | None: ... + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, basic: _builtins.str=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['basic', b'basic', 'meta', b'meta', 'namespace', b'namespace'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['basic', b'basic', 'meta', b'meta', 'namespace', b'namespace'] -global___Namespace = Namespace + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_namespace: _TypeAlias = _typing.Literal['basic'] + _WhichOneofArgType_namespace: _TypeAlias = _typing.Literal['namespace', b'namespace'] -@typing_extensions.final -class LibraryName(google.protobuf.message.Message): + def WhichOneof(self, oneof_group: _WhichOneofArgType_namespace) -> _WhichOneofReturnType_namespace | None: + ... +Global___Namespace: _TypeAlias = Namespace + +@_typing.final +class LibraryName(_message.Message): """* A library name is a way to identify a specific library from a set of parent libraries. This can be the initial element in a path or reference. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - name: builtins.str + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + name: _builtins.str "* Since libraries allow for inheritance, we will often want to say\n this element, defined in *this* particular library.\n\n In those cases we want to be able to specify the relevant library\n by its identifier.\n\n Otherwise we assume it's somehow implicit which library we're\n talking about.\n " - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__(self, *, name: builtins.str = ..., meta: edgir.common_pb2.Metadata | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta", "name", b"name"]) -> None: ... + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, name: _builtins.str=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'name', b'name'] -global___LibraryName = LibraryName + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LibraryName: _TypeAlias = LibraryName \ No newline at end of file diff --git a/edg/edgir/ref_pb2.py b/edg/edgir/ref_pb2.py index ee4f3fd9c..154cb44fb 100644 --- a/edg/edgir/ref_pb2.py +++ b/edg/edgir/ref_pb2.py @@ -1,19 +1,14 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import name_pb2 as edgir_dot_name__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x0fedgir/ref.proto\x12\tedgir.ref\x1a\x12edgir/common.proto\x1a\x10edgir/name.proto"f\n\tLocalStep\x12-\n\x0ereserved_param\x18\x01 \x01(\x0e2\x13.edgir.ref.ReservedH\x00\x12\x12\n\x08allocate\x18\x02 \x01(\tH\x00\x12\x0e\n\x04name\x18\x03 \x01(\tH\x00B\x06\n\x04step"W\n\tLocalPath\x12#\n\x05steps\x18\x01 \x03(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata"\xa8\x01\n\x0bLibraryPath\x12&\n\x05start\x18\x01 \x01(\x0b2\x17.edgir.name.LibraryName\x12$\n\x05steps\x18\x02 \x03(\x0b2\x15.edgir.name.Namespace\x12$\n\x06target\x18\x03 \x01(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata*r\n\x08Reserved\x12\r\n\tUNDEFINED\x10\x00\x12\x12\n\x0eCONNECTED_LINK\x10\x01\x12\x10\n\x0cIS_CONNECTED\x10(\x12\n\n\x06LENGTH\x10*\x12\x08\n\x04NAME\x10,\x12\x0c\n\x08ELEMENTS\x10-\x12\r\n\tALLOCATED\x10.b\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fedgir/ref.proto\x12\tedgir.ref\x1a\x12edgir/common.proto\x1a\x10edgir/name.proto"f\n\tLocalStep\x12-\n\x0ereserved_param\x18\x01 \x01(\x0e2\x13.edgir.ref.ReservedH\x00\x12\x12\n\x08allocate\x18\x02 \x01(\tH\x00\x12\x0e\n\x04name\x18\x03 \x01(\tH\x00B\x06\n\x04step"W\n\tLocalPath\x12#\n\x05steps\x18\x01 \x03(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata"\xa8\x01\n\x0bLibraryPath\x12&\n\x05start\x18\x01 \x01(\x0b2\x17.edgir.name.LibraryName\x12$\n\x05steps\x18\x02 \x03(\x0b2\x15.edgir.name.Namespace\x12$\n\x06target\x18\x03 \x01(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata*r\n\x08Reserved\x12\r\n\tUNDEFINED\x10\x00\x12\x12\n\x0eCONNECTED_LINK\x10\x01\x12\x10\n\x0cIS_CONNECTED\x10(\x12\n\n\x06LENGTH\x10*\x12\x08\n\x04NAME\x10,\x12\x0c\n\x08ELEMENTS\x10-\x12\r\n\tALLOCATED\x10.b\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.ref_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.ref_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _RESERVED._serialized_start = 432 @@ -23,4 +18,4 @@ _LOCALPATH._serialized_start = 172 _LOCALPATH._serialized_end = 259 _LIBRARYPATH._serialized_start = 262 - _LIBRARYPATH._serialized_end = 430 + _LIBRARYPATH._serialized_end = 430 \ No newline at end of file diff --git a/edg/edgir/ref_pb2.pyi b/edg/edgir/ref_pb2.pyi index 477ca50ab..4cb753aaf 100644 --- a/edg/edgir/ref_pb2.pyi +++ b/edg/edgir/ref_pb2.pyi @@ -11,171 +11,159 @@ referencing different elements in a designs or libraries. We enforce certain structural properties by having a series of nested 'steps' that determine the next step in a path reference. """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.internal.enum_type_wrapper -import google.protobuf.message +from collections import abc as _abc +from edgir import common_pb2 as _common_pb2 +from edgir import name_pb2 as _name_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper +import builtins as _builtins import sys -import typing - +import typing as _typing if sys.version_info >= (3, 10): - import typing as typing_extensions + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor class _Reserved: - ValueType = typing.NewType("ValueType", builtins.int) - V: typing_extensions.TypeAlias = ValueType + ValueType = _typing.NewType('ValueType', _builtins.int) + V: _TypeAlias = ValueType -class _ReservedEnumTypeWrapper( - google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Reserved.ValueType], builtins.type -): - DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor +class _ReservedEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_Reserved.ValueType], _builtins.type): + DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: _Reserved.ValueType CONNECTED_LINK: _Reserved.ValueType - "* Directions we could move" + '* Directions we could move' IS_CONNECTED: _Reserved.ValueType - "* reserved parameters\n true implies CONNECTED_LINK resolves; not available on PortArray\n " + '* reserved parameters\n true implies CONNECTED_LINK resolves; not available on PortArray\n ' LENGTH: _Reserved.ValueType - " EXISTS = 41;\n available on PortArray and LinkArray\n " + ' EXISTS = 41;\n available on PortArray and LinkArray\n ' NAME: _Reserved.ValueType ELEMENTS: _Reserved.ValueType - "available on PortArray and LinkArray, returns a list of string of element names" + 'available on PortArray and LinkArray, returns a list of string of element names' ALLOCATED: _Reserved.ValueType - "cannot be used as a generator dependency\n available on PortArray, returns a list of string of incoming connection names,\n " + 'cannot be used as a generator dependency\n available on PortArray, returns a list of string of incoming connection names,\n ' class Reserved(_Reserved, metaclass=_ReservedEnumTypeWrapper): """* These are reserved terms that we'll end up using in various places. I'd rather have these in the block/link/bridges where they're going to exist, but that's not possible without polymorphism protibuf doesn't have """ - UNDEFINED: Reserved.ValueType CONNECTED_LINK: Reserved.ValueType -"* Directions we could move" +'* Directions we could move' IS_CONNECTED: Reserved.ValueType -"* reserved parameters\ntrue implies CONNECTED_LINK resolves; not available on PortArray\n" +'* reserved parameters\ntrue implies CONNECTED_LINK resolves; not available on PortArray\n' LENGTH: Reserved.ValueType -" EXISTS = 41;\navailable on PortArray and LinkArray\n" +' EXISTS = 41;\navailable on PortArray and LinkArray\n' NAME: Reserved.ValueType ELEMENTS: Reserved.ValueType -"available on PortArray and LinkArray, returns a list of string of element names" +'available on PortArray and LinkArray, returns a list of string of element names' ALLOCATED: Reserved.ValueType -"cannot be used as a generator dependency\navailable on PortArray, returns a list of string of incoming connection names,\n" -global___Reserved = Reserved +'cannot be used as a generator dependency\navailable on PortArray, returns a list of string of incoming connection names,\n' +Global___Reserved: _TypeAlias = Reserved -@typing_extensions.final -class LocalStep(google.protobuf.message.Message): +@_typing.final +class LocalStep(_message.Message): """* This is an actual step you take within the local environment. The directions encode the type of thing we are referencing, but to the user all of these look just like local variables """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - RESERVED_PARAM_FIELD_NUMBER: builtins.int - ALLOCATE_FIELD_NUMBER: builtins.int - NAME_FIELD_NUMBER: builtins.int - reserved_param: global___Reserved.ValueType - allocate: builtins.str - "Allocates a new element in an array, valid for arrays only.\n Empty string means automatically allocated, while a non-empty string is a suggested name.\n " - name: builtins.str + DESCRIPTOR: _descriptor.Descriptor + RESERVED_PARAM_FIELD_NUMBER: _builtins.int + ALLOCATE_FIELD_NUMBER: _builtins.int + NAME_FIELD_NUMBER: _builtins.int + reserved_param: Global___Reserved.ValueType + allocate: _builtins.str + 'Allocates a new element in an array, valid for arrays only.\n Empty string means automatically allocated, while a non-empty string is a suggested name.\n ' + name: _builtins.str "*\n A local name is what something is called in the context of its parent,\n whether that parent is a namespace (as in the library) or some other\n element (as in a design or heirarchy block).\n\n localNames should have the following properties:\n\n - First char is a lower case letter\n - All other chars must be letters, numbers, '-', '<', '>'\n - lowerCamelCase is preffered, don't use any symbols in the name\n if possible.\n\n These are style guidelines, literally any string will work.\n " - def __init__( - self, - *, - reserved_param: global___Reserved.ValueType = ..., - allocate: builtins.str = ..., - name: builtins.str = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "allocate", b"allocate", "name", b"name", "reserved_param", b"reserved_param", "step", b"step" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "allocate", b"allocate", "name", b"name", "reserved_param", b"reserved_param", "step", b"step" - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["step", b"step"] - ) -> typing_extensions.Literal["reserved_param", "allocate", "name"] | None: ... - -global___LocalStep = LocalStep - -@typing_extensions.final -class LocalPath(google.protobuf.message.Message): + def __init__(self, *, reserved_param: Global___Reserved.ValueType=..., allocate: _builtins.str=..., name: _builtins.str=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['allocate', b'allocate', 'name', b'name', 'reserved_param', b'reserved_param', 'step', b'step'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['allocate', b'allocate', 'name', b'name', 'reserved_param', b'reserved_param', 'step', b'step'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_step: _TypeAlias = _typing.Literal['reserved_param', 'allocate', 'name'] + _WhichOneofArgType_step: _TypeAlias = _typing.Literal['step', b'step'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_step) -> _WhichOneofReturnType_step | None: + ... +Global___LocalStep: _TypeAlias = LocalStep + +@_typing.final +class LocalPath(_message.Message): """* This is a path from a local context to some other local context. To be used as a reference. """ + DESCRIPTOR: _descriptor.Descriptor + STEPS_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def steps(self) -> _containers.RepeatedCompositeFieldContainer[Global___LocalStep]: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, steps: _abc.Iterable[Global___LocalStep] | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] - DESCRIPTOR: google.protobuf.descriptor.Descriptor - STEPS_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def steps(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___LocalStep]: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - steps: collections.abc.Iterable[global___LocalStep] | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["meta", b"meta"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["meta", b"meta", "steps", b"steps"]) -> None: ... - -global___LocalPath = LocalPath - -@typing_extensions.final -class LibraryPath(google.protobuf.message.Message): + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'steps', b'steps'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LocalPath: _TypeAlias = LocalPath + +@_typing.final +class LibraryPath(_message.Message): """* This is a path to an element within a library from the root of a library. To be used as a way to reference such elements. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - START_FIELD_NUMBER: builtins.int - STEPS_FIELD_NUMBER: builtins.int - TARGET_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def start(self) -> edgir.name_pb2.LibraryName: ... - @property - def steps( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.name_pb2.Namespace]: ... - @property - def target(self) -> global___LocalStep: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - start: edgir.name_pb2.LibraryName | None = ..., - steps: collections.abc.Iterable[edgir.name_pb2.Namespace] | None = ..., - target: global___LocalStep | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["meta", b"meta", "start", b"start", "target", b"target"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "meta", b"meta", "start", b"start", "steps", b"steps", "target", b"target" - ], - ) -> None: ... - -global___LibraryPath = LibraryPath + DESCRIPTOR: _descriptor.Descriptor + START_FIELD_NUMBER: _builtins.int + STEPS_FIELD_NUMBER: _builtins.int + TARGET_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def start(self) -> _name_pb2.LibraryName: + ... + + @_builtins.property + def steps(self) -> _containers.RepeatedCompositeFieldContainer[_name_pb2.Namespace]: + ... + + @_builtins.property + def target(self) -> Global___LocalStep: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, start: _name_pb2.LibraryName | None=..., steps: _abc.Iterable[_name_pb2.Namespace] | None=..., target: Global___LocalStep | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'start', b'start', 'target', b'target'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'start', b'start', 'steps', b'steps', 'target', b'target'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LibraryPath: _TypeAlias = LibraryPath \ No newline at end of file diff --git a/edg/edgir/schema_pb2.py b/edg/edgir/schema_pb2.py index a6ad0fd96..46253e26c 100644 --- a/edg/edgir/schema_pb2.py +++ b/edg/edgir/schema_pb2.py @@ -1,32 +1,27 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import elem_pb2 as edgir_dot_elem__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x12edgir/schema.proto\x12\x0cedgir.schema\x1a\x12edgir/common.proto\x1a\x10edgir/elem.proto"\x9b\x04\n\x07Library\x12*\n\x02id\x18\x01 \x01(\x0b2\x1e.edgir.schema.Library.LibIdent\x12\x0f\n\x07imports\x18\x02 \x03(\t\x12&\n\x04root\x18\n \x01(\x0b2\x18.edgir.schema.Library.NS\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a\xea\x02\n\x02NS\x126\n\x07members\x18\x01 \x03(\x0b2%.edgir.schema.Library.NS.MembersEntry\x1a\xdd\x01\n\x03Val\x12 \n\x04port\x18\n \x01(\x0b2\x10.edgir.elem.PortH\x00\x12$\n\x06bundle\x18\x0b \x01(\x0b2\x12.edgir.elem.BundleH\x00\x125\n\x0fhierarchy_block\x18\r \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00\x12 \n\x04link\x18\x0e \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12-\n\tnamespace\x18\x14 \x01(\x0b2\x18.edgir.schema.Library.NSH\x00B\x06\n\x04type\x1aL\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val:\x028\x01\x1a\x18\n\x08LibIdent\x12\x0c\n\x04name\x18\x01 \x01(\t"6\n\x06Design\x12,\n\x08contents\x18\x02 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12edgir/schema.proto\x12\x0cedgir.schema\x1a\x12edgir/common.proto\x1a\x10edgir/elem.proto"\xf5\x03\n\x07Library\x12*\n\x02id\x18\x01 \x01(\x0b2\x1e.edgir.schema.Library.LibIdent\x12\x0f\n\x07imports\x18\x02 \x03(\t\x12&\n\x04root\x18\n \x01(\x0b2\x18.edgir.schema.Library.NS\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a\xc4\x02\n\x02NS\x126\n\x07members\x18\x01 \x03(\x0b2%.edgir.schema.Library.NS.MembersEntry\x1a\xb7\x01\n\x03Val\x12 \n\x04port\x18\n \x01(\x0b2\x10.edgir.elem.PortH\x00\x125\n\x0fhierarchy_block\x18\r \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00\x12 \n\x04link\x18\x0e \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12-\n\tnamespace\x18\x14 \x01(\x0b2\x18.edgir.schema.Library.NSH\x00B\x06\n\x04type\x1aL\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val:\x028\x01\x1a\x18\n\x08LibIdent\x12\x0c\n\x04name\x18\x01 \x01(\t"6\n\x06Design\x12,\n\x08contents\x18\x02 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.schema_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.schema_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _LIBRARY_NS_MEMBERSENTRY._options = None - _LIBRARY_NS_MEMBERSENTRY._serialized_options = b"8\x01" + _LIBRARY_NS_MEMBERSENTRY._serialized_options = b'8\x01' _LIBRARY._serialized_start = 75 - _LIBRARY._serialized_end = 614 + _LIBRARY._serialized_end = 576 _LIBRARY_NS._serialized_start = 226 - _LIBRARY_NS._serialized_end = 588 + _LIBRARY_NS._serialized_end = 550 _LIBRARY_NS_VAL._serialized_start = 289 - _LIBRARY_NS_VAL._serialized_end = 510 - _LIBRARY_NS_MEMBERSENTRY._serialized_start = 512 - _LIBRARY_NS_MEMBERSENTRY._serialized_end = 588 - _LIBRARY_LIBIDENT._serialized_start = 590 - _LIBRARY_LIBIDENT._serialized_end = 614 - _DESIGN._serialized_start = 616 - _DESIGN._serialized_end = 670 + _LIBRARY_NS_VAL._serialized_end = 472 + _LIBRARY_NS_MEMBERSENTRY._serialized_start = 474 + _LIBRARY_NS_MEMBERSENTRY._serialized_end = 550 + _LIBRARY_LIBIDENT._serialized_start = 552 + _LIBRARY_LIBIDENT._serialized_end = 576 + _DESIGN._serialized_start = 578 + _DESIGN._serialized_end = 632 \ No newline at end of file diff --git a/edg/edgir/schema_pb2.pyi b/edg/edgir/schema_pb2.pyi index d6e5e43e7..eeb7ebf64 100644 --- a/edg/edgir/schema_pb2.pyi +++ b/edg/edgir/schema_pb2.pyi @@ -8,23 +8,23 @@ Package : edg.schema These types contain the highest level data structures we use to describe sets of blocks, ports, and links. """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.message +from collections import abc as _abc +from edgir import common_pb2 as _common_pb2 +from edgir import elem_pb2 as _elem_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor -@typing_extensions.final -class Library(google.protobuf.message.Message): +@_typing.final +class Library(_message.Message): """* This is the top-level schema for a library of blocks, ports, and links. It need not be complete (containing all the blocks to be used in a design) @@ -35,160 +35,153 @@ class Library(google.protobuf.message.Message): or definitional conflicts. This means that we can shuffle around partial libraries, for merging, modification, etc.. """ + DESCRIPTOR: _descriptor.Descriptor - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class NS(google.protobuf.message.Message): + @_typing.final + class NS(_message.Message): """* Library Namespace, avoiding collision w/ edg.name.Namespace""" - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Val(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PORT_FIELD_NUMBER: builtins.int - BUNDLE_FIELD_NUMBER: builtins.int - HIERARCHY_BLOCK_FIELD_NUMBER: builtins.int - LINK_FIELD_NUMBER: builtins.int - NAMESPACE_FIELD_NUMBER: builtins.int - - @property - def port(self) -> edgir.elem_pb2.Port: ... - @property - def bundle(self) -> edgir.elem_pb2.Bundle: ... - @property - def hierarchy_block(self) -> edgir.elem_pb2.HierarchyBlock: ... - @property - def link(self) -> edgir.elem_pb2.Link: ... - @property - def namespace(self) -> global___Library.NS: ... - def __init__( - self, - *, - port: edgir.elem_pb2.Port | None = ..., - bundle: edgir.elem_pb2.Bundle | None = ..., - hierarchy_block: edgir.elem_pb2.HierarchyBlock | None = ..., - link: edgir.elem_pb2.Link | None = ..., - namespace: global___Library.NS | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "bundle", - b"bundle", - "hierarchy_block", - b"hierarchy_block", - "link", - b"link", - "namespace", - b"namespace", - "port", - b"port", - "type", - b"type", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "bundle", - b"bundle", - "hierarchy_block", - b"hierarchy_block", - "link", - b"link", - "namespace", - b"namespace", - "port", - b"port", - "type", - b"type", - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["type", b"type"] - ) -> typing_extensions.Literal["port", "bundle", "hierarchy_block", "link", "namespace"] | None: ... - - @typing_extensions.final - class MembersEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str - - @property - def value(self) -> global___Library.NS.Val: ... - def __init__(self, *, key: builtins.str = ..., value: global___Library.NS.Val | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... - - MEMBERS_FIELD_NUMBER: builtins.int - - @property - def members(self) -> google.protobuf.internal.containers.MessageMap[builtins.str, global___Library.NS.Val]: ... - def __init__( - self, *, members: collections.abc.Mapping[builtins.str, global___Library.NS.Val] | None = ... - ) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["members", b"members"]) -> None: ... - - @typing_extensions.final - class LibIdent(google.protobuf.message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Val(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PORT_FIELD_NUMBER: _builtins.int + HIERARCHY_BLOCK_FIELD_NUMBER: _builtins.int + LINK_FIELD_NUMBER: _builtins.int + NAMESPACE_FIELD_NUMBER: _builtins.int + + @_builtins.property + def port(self) -> _elem_pb2.Port: + ... + + @_builtins.property + def hierarchy_block(self) -> _elem_pb2.HierarchyBlock: + ... + + @_builtins.property + def link(self) -> _elem_pb2.Link: + ... + + @_builtins.property + def namespace(self) -> Global___Library.NS: + ... + + def __init__(self, *, port: _elem_pb2.Port | None=..., hierarchy_block: _elem_pb2.HierarchyBlock | None=..., link: _elem_pb2.Link | None=..., namespace: Global___Library.NS | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['hierarchy_block', b'hierarchy_block', 'link', b'link', 'namespace', b'namespace', 'port', b'port', 'type', b'type'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['hierarchy_block', b'hierarchy_block', 'link', b'link', 'namespace', b'namespace', 'port', b'port', 'type', b'type'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['port', 'hierarchy_block', 'link', 'namespace'] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: + ... + + @_typing.final + class MembersEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + + @_builtins.property + def value(self) -> Global___Library.NS.Val: + ... + + def __init__(self, *, key: _builtins.str=..., value: Global___Library.NS.Val | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + MEMBERS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def members(self) -> _containers.MessageMap[_builtins.str, Global___Library.NS.Val]: + ... + + def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___Library.NS.Val] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['members', b'members'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + + @_typing.final + class LibIdent(_message.Message): """* How we identify a library within a set. Will probably evolve to capture more metadata. """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - name: builtins.str - - def __init__(self, *, name: builtins.str = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... - - ID_FIELD_NUMBER: builtins.int - IMPORTS_FIELD_NUMBER: builtins.int - ROOT_FIELD_NUMBER: builtins.int - META_FIELD_NUMBER: builtins.int - - @property - def id(self) -> global___Library.LibIdent: ... - @property - def imports(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ... - @property - def root(self) -> global___Library.NS: ... - @property - def meta(self) -> edgir.common_pb2.Metadata: ... - def __init__( - self, - *, - id: global___Library.LibIdent | None = ..., - imports: collections.abc.Iterable[builtins.str] | None = ..., - root: global___Library.NS | None = ..., - meta: edgir.common_pb2.Metadata | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["id", b"id", "meta", b"meta", "root", b"root"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal["id", b"id", "imports", b"imports", "meta", b"meta", "root", b"root"], - ) -> None: ... - -global___Library = Library - -@typing_extensions.final -class Design(google.protobuf.message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + name: _builtins.str + + def __init__(self, *, name: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + ID_FIELD_NUMBER: _builtins.int + IMPORTS_FIELD_NUMBER: _builtins.int + ROOT_FIELD_NUMBER: _builtins.int + META_FIELD_NUMBER: _builtins.int + + @_builtins.property + def id(self) -> Global___Library.LibIdent: + ... + + @_builtins.property + def imports(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: + ... + + @_builtins.property + def root(self) -> Global___Library.NS: + ... + + @_builtins.property + def meta(self) -> _common_pb2.Metadata: + ... + + def __init__(self, *, id: Global___Library.LibIdent | None=..., imports: _abc.Iterable[_builtins.str] | None=..., root: Global___Library.NS | None=..., meta: _common_pb2.Metadata | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['id', b'id', 'meta', b'meta', 'root', b'root'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['id', b'id', 'imports', b'imports', 'meta', b'meta', 'root', b'root'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Library: _TypeAlias = Library + +@_typing.final +class Design(_message.Message): """* This is a Design for an embedded system at some level of abstraction.""" + DESCRIPTOR: _descriptor.Descriptor + CONTENTS_FIELD_NUMBER: _builtins.int - DESCRIPTOR: google.protobuf.descriptor.Descriptor - CONTENTS_FIELD_NUMBER: builtins.int - - @property - def contents(self) -> edgir.elem_pb2.HierarchyBlock: + @_builtins.property + def contents(self) -> _elem_pb2.HierarchyBlock: """* Delegate the actual contents of the design to a hierarchy block, for which ports are ignored""" - def __init__(self, *, contents: edgir.elem_pb2.HierarchyBlock | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["contents", b"contents"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["contents", b"contents"]) -> None: ... + def __init__(self, *, contents: _elem_pb2.HierarchyBlock | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['contents', b'contents'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['contents', b'contents'] -global___Design = Design + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Design: _TypeAlias = Design \ No newline at end of file diff --git a/edg/edgrpc/compiler_pb2.py b/edg/edgrpc/compiler_pb2.py index a72494fbd..235d99647 100644 --- a/edg/edgrpc/compiler_pb2.py +++ b/edg/edgrpc/compiler_pb2.py @@ -1,21 +1,16 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import schema_pb2 as edgir_dot_schema__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 from ..edgrpc import hdl_pb2 as edgrpc_dot_hdl__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x15edgrpc/compiler.proto\x12\x0fedgrpc.compiler\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x0fedgir/lit.proto\x1a\x10edgrpc/hdl.proto"^\n\x0bErrorRecord\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0f\n\x07details\x18\x04 \x01(\t"e\n\x0fCompilerRequest\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"\xf2\x01\n\x0eCompilerResult\x12$\n\x06design\x18\x01 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x06errors\x18\x04 \x03(\x0b2\x1c.edgrpc.compiler.ErrorRecord\x12;\n\x0csolvedValues\x18\x02 \x03(\x0b2%.edgrpc.compiler.CompilerResult.Value\x1aO\n\x05Value\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLitb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15edgrpc/compiler.proto\x12\x0fedgrpc.compiler\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x0fedgir/lit.proto\x1a\x10edgrpc/hdl.proto"^\n\x0bErrorRecord\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0f\n\x07details\x18\x04 \x01(\t"e\n\x0fCompilerRequest\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"\xf2\x01\n\x0eCompilerResult\x12$\n\x06design\x18\x01 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x06errors\x18\x04 \x03(\x0b2\x1c.edgrpc.compiler.ErrorRecord\x12;\n\x0csolvedValues\x18\x02 \x03(\x0b2%.edgrpc.compiler.CompilerResult.Value\x1aO\n\x05Value\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLitb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgrpc.compiler_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgrpc.compiler_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _ERRORRECORD._serialized_start = 114 @@ -25,4 +20,4 @@ _COMPILERRESULT._serialized_start = 314 _COMPILERRESULT._serialized_end = 556 _COMPILERRESULT_VALUE._serialized_start = 477 - _COMPILERRESULT_VALUE._serialized_end = 556 + _COMPILERRESULT_VALUE._serialized_end = 556 \ No newline at end of file diff --git a/edg/edgrpc/compiler_pb2.pyi b/edg/edgrpc/compiler_pb2.pyi index 162a33bd8..09f4d7453 100644 --- a/edg/edgrpc/compiler_pb2.pyi +++ b/edg/edgrpc/compiler_pb2.pyi @@ -6,125 +6,131 @@ Interface to the HDL (eg, library fetch) is not included here. This no longer uses gRPC to avoid complexity of sockets. """ - -import builtins -import collections.abc -from .. import edgir -from .. import edgrpc -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.message +from collections import abc as _abc +from edgir import lit_pb2 as _lit_pb2 +from edgir import ref_pb2 as _ref_pb2 +from edgir import schema_pb2 as _schema_pb2 +from edgrpc import hdl_pb2 as _hdl_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +import builtins as _builtins import sys - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor - -@typing_extensions.final -class ErrorRecord(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - KIND_FIELD_NUMBER: builtins.int - NAME_FIELD_NUMBER: builtins.int - DETAILS_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor + +@_typing.final +class ErrorRecord(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + KIND_FIELD_NUMBER: _builtins.int + NAME_FIELD_NUMBER: _builtins.int + DETAILS_FIELD_NUMBER: _builtins.int + kind: _builtins.str + 'kind of error, eg failed to generate' + name: _builtins.str + 'constraint name / short description' + details: _builtins.str + 'longer description, optional' + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: """link / block / port, cannot be the constraint""" - kind: builtins.str - "kind of error, eg failed to generate" - name: builtins.str - "constraint name / short description" - details: builtins.str - "longer description, optional" - - def __init__( - self, - *, - path: edgir.ref_pb2.LocalPath | None = ..., - kind: builtins.str = ..., - name: builtins.str = ..., - details: builtins.str = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["path", b"path"]) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal["details", b"details", "kind", b"kind", "name", b"name", "path", b"path"], - ) -> None: ... - -global___ErrorRecord = ErrorRecord - -@typing_extensions.final -class CompilerRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - DESIGN_FIELD_NUMBER: builtins.int - REFINEMENTS_FIELD_NUMBER: builtins.int - - @property - def design(self) -> edgir.schema_pb2.Design: ... - @property - def refinements(self) -> edgrpc.hdl_pb2.Refinements: ... - def __init__( - self, *, design: edgir.schema_pb2.Design | None = ..., refinements: edgrpc.hdl_pb2.Refinements | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["design", b"design", "refinements", b"refinements"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["design", b"design", "refinements", b"refinements"] - ) -> None: ... - -global___CompilerRequest = CompilerRequest - -@typing_extensions.final -class CompilerResult(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Value(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - @property - def value(self) -> edgir.lit_pb2.ValueLit: ... - def __init__( - self, *, path: edgir.ref_pb2.LocalPath | None = ..., value: edgir.lit_pb2.ValueLit | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["path", b"path", "value", b"value"] - ) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["path", b"path", "value", b"value"]) -> None: ... - - DESIGN_FIELD_NUMBER: builtins.int - ERRORS_FIELD_NUMBER: builtins.int - SOLVEDVALUES_FIELD_NUMBER: builtins.int - - @property - def design(self) -> edgir.schema_pb2.Design: ... - @property - def errors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ErrorRecord]: ... - @property - def solvedValues( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___CompilerResult.Value]: ... - def __init__( - self, - *, - design: edgir.schema_pb2.Design | None = ..., - errors: collections.abc.Iterable[global___ErrorRecord] | None = ..., - solvedValues: collections.abc.Iterable[global___CompilerResult.Value] | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["design", b"design"]) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "design", b"design", "errors", b"errors", "solvedValues", b"solvedValues" - ], - ) -> None: ... - -global___CompilerResult = CompilerResult + + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., kind: _builtins.str=..., name: _builtins.str=..., details: _builtins.str=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['details', b'details', 'kind', b'kind', 'name', b'name', 'path', b'path'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ErrorRecord: _TypeAlias = ErrorRecord + +@_typing.final +class CompilerRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + DESIGN_FIELD_NUMBER: _builtins.int + REFINEMENTS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def design(self) -> _schema_pb2.Design: + ... + + @_builtins.property + def refinements(self) -> _hdl_pb2.Refinements: + ... + + def __init__(self, *, design: _schema_pb2.Design | None=..., refinements: _hdl_pb2.Refinements | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinements', b'refinements'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinements', b'refinements'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___CompilerRequest: _TypeAlias = CompilerRequest + +@_typing.final +class CompilerResult(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Value(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def value(self) -> _lit_pb2.ValueLit: + ... + + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., value: _lit_pb2.ValueLit | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + DESIGN_FIELD_NUMBER: _builtins.int + ERRORS_FIELD_NUMBER: _builtins.int + SOLVEDVALUES_FIELD_NUMBER: _builtins.int + + @_builtins.property + def design(self) -> _schema_pb2.Design: + ... + + @_builtins.property + def errors(self) -> _containers.RepeatedCompositeFieldContainer[Global___ErrorRecord]: + ... + + @_builtins.property + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___CompilerResult.Value]: + ... + + def __init__(self, *, design: _schema_pb2.Design | None=..., errors: _abc.Iterable[Global___ErrorRecord] | None=..., solvedValues: _abc.Iterable[Global___CompilerResult.Value] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'errors', b'errors', 'solvedValues', b'solvedValues'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___CompilerResult: _TypeAlias = CompilerResult \ No newline at end of file diff --git a/edg/edgrpc/hdl_pb2.py b/edg/edgrpc/hdl_pb2.py index 97b2a4a65..499d3c6e4 100644 --- a/edg/edgrpc/hdl_pb2.py +++ b/edg/edgrpc/hdl_pb2.py @@ -1,25 +1,20 @@ """Generated protocol buffer code.""" - from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database - _sym_db = _symbol_database.Default() from ..edgir import schema_pb2 as edgir_dot_schema__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import elem_pb2 as edgir_dot_elem__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( - b'\n\x10edgrpc/hdl.proto\x12\nedgrpc.hdl\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x10edgir/elem.proto\x1a\x0fedgir/lit.proto"\xb6\x04\n\x0bRefinements\x124\n\nsubclasses\x18\x01 \x03(\x0b2 .edgrpc.hdl.Refinements.Subclass\x12-\n\x06values\x18\x02 \x03(\x0b2\x1d.edgrpc.hdl.Refinements.Value\x1a\x8e\x01\n\x08Subclass\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12%\n\x03cls\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12+\n\x0breplacement\x18\x03 \x01(\x0b2\x16.edgir.ref.LibraryPathB\x08\n\x06source\x1a\xb0\x02\n\x05Value\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12A\n\tcls_param\x18\x02 \x01(\x0b2,.edgrpc.hdl.Refinements.Value.ClassParamPathH\x00\x12#\n\x04expr\x18\x03 \x01(\x0b2\x13.edgir.lit.ValueLitH\x01\x12%\n\x05param\x18\x04 \x01(\x0b2\x14.edgir.ref.LocalPathH\x01\x1a_\n\x0eClassParamPath\x12#\n\x03cls\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\nparam_path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPathB\x08\n\x06sourceB\x07\n\x05value"\x1a\n\nModuleName\x12\x0c\n\x04name\x18\x01 \x01(\t"8\n\rIndexResponse\x12\'\n\x07indexed\x18\x01 \x03(\x0b2\x16.edgir.ref.LibraryPath"9\n\x0eLibraryRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath"n\n\x0fLibraryResponse\x12-\n\x07element\x18\x01 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"S\n\tExprValue\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"b\n\x10GeneratorRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12%\n\x06values\x18\x04 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"B\n\x11GeneratorResponse\x12-\n\tgenerated\x18\x01 \x01(\x0b2\x1a.edgir.elem.HierarchyBlock"\x97\x01\n\x11RefinementRequest\x12/\n\x0frefinement_pass\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue">\n\x12RefinementResponse\x12(\n\tnewValues\x18\x01 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"\xfc\x01\n\x0eBackendRequest\x12\'\n\x07backend\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue\x12<\n\targuments\x18\x04 \x03(\x0b2).edgrpc.hdl.BackendRequest.ArgumentsEntry\x1a0\n\x0eArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x028\x01"\x8e\x01\n\x0fBackendResponse\x123\n\x07results\x18\x01 \x03(\x0b2".edgrpc.hdl.BackendResponse.Result\x1aF\n\x06Result\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0e\n\x04text\x18\x02 \x01(\tH\x00B\x08\n\x06result"1\n\rErrorResponse\x12\r\n\x05error\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x02 \x01(\t"\xc8\x02\n\nHdlRequest\x12.\n\x0cindex_module\x18\x01 \x01(\x0b2\x16.edgrpc.hdl.ModuleNameH\x00\x129\n\x13get_library_element\x18\x02 \x01(\x0b2\x1a.edgrpc.hdl.LibraryRequestH\x00\x12;\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1c.edgrpc.hdl.GeneratorRequestH\x00\x127\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1d.edgrpc.hdl.RefinementRequestH\x00\x121\n\x0brun_backend\x18\x04 \x01(\x0b2\x1a.edgrpc.hdl.BackendRequestH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00B\t\n\x07request"\xfd\x02\n\x0bHdlResponse\x121\n\x0cindex_module\x18\x01 \x01(\x0b2\x19.edgrpc.hdl.IndexResponseH\x00\x12:\n\x13get_library_element\x18\x02 \x01(\x0b2\x1b.edgrpc.hdl.LibraryResponseH\x00\x12<\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1d.edgrpc.hdl.GeneratorResponseH\x00\x128\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1e.edgrpc.hdl.RefinementResponseH\x00\x122\n\x0brun_backend\x18\x04 \x01(\x0b2\x1b.edgrpc.hdl.BackendResponseH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00\x12*\n\x05error\x18c \x01(\x0b2\x19.edgrpc.hdl.ErrorResponseH\x00B\n\n\x08responseb\x06proto3' -) +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgrpc/hdl.proto\x12\nedgrpc.hdl\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x10edgir/elem.proto\x1a\x0fedgir/lit.proto"\xb6\x04\n\x0bRefinements\x124\n\nsubclasses\x18\x01 \x03(\x0b2 .edgrpc.hdl.Refinements.Subclass\x12-\n\x06values\x18\x02 \x03(\x0b2\x1d.edgrpc.hdl.Refinements.Value\x1a\x8e\x01\n\x08Subclass\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12%\n\x03cls\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12+\n\x0breplacement\x18\x03 \x01(\x0b2\x16.edgir.ref.LibraryPathB\x08\n\x06source\x1a\xb0\x02\n\x05Value\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12A\n\tcls_param\x18\x02 \x01(\x0b2,.edgrpc.hdl.Refinements.Value.ClassParamPathH\x00\x12#\n\x04expr\x18\x03 \x01(\x0b2\x13.edgir.lit.ValueLitH\x01\x12%\n\x05param\x18\x04 \x01(\x0b2\x14.edgir.ref.LocalPathH\x01\x1a_\n\x0eClassParamPath\x12#\n\x03cls\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\nparam_path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPathB\x08\n\x06sourceB\x07\n\x05value"\x1a\n\nModuleName\x12\x0c\n\x04name\x18\x01 \x01(\t"8\n\rIndexResponse\x12\'\n\x07indexed\x18\x01 \x03(\x0b2\x16.edgir.ref.LibraryPath"9\n\x0eLibraryRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath"n\n\x0fLibraryResponse\x12-\n\x07element\x18\x01 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"S\n\tExprValue\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"b\n\x10GeneratorRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12%\n\x06values\x18\x04 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"B\n\x11GeneratorResponse\x12-\n\tgenerated\x18\x01 \x01(\x0b2\x1a.edgir.elem.HierarchyBlock"\x97\x01\n\x11RefinementRequest\x12/\n\x0frefinement_pass\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue">\n\x12RefinementResponse\x12(\n\tnewValues\x18\x01 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"\xfc\x01\n\x0eBackendRequest\x12\'\n\x07backend\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue\x12<\n\targuments\x18\x04 \x03(\x0b2).edgrpc.hdl.BackendRequest.ArgumentsEntry\x1a0\n\x0eArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x028\x01"\x8e\x01\n\x0fBackendResponse\x123\n\x07results\x18\x01 \x03(\x0b2".edgrpc.hdl.BackendResponse.Result\x1aF\n\x06Result\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0e\n\x04text\x18\x02 \x01(\tH\x00B\x08\n\x06result"1\n\rErrorResponse\x12\r\n\x05error\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x02 \x01(\t"\xc8\x02\n\nHdlRequest\x12.\n\x0cindex_module\x18\x01 \x01(\x0b2\x16.edgrpc.hdl.ModuleNameH\x00\x129\n\x13get_library_element\x18\x02 \x01(\x0b2\x1a.edgrpc.hdl.LibraryRequestH\x00\x12;\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1c.edgrpc.hdl.GeneratorRequestH\x00\x127\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1d.edgrpc.hdl.RefinementRequestH\x00\x121\n\x0brun_backend\x18\x04 \x01(\x0b2\x1a.edgrpc.hdl.BackendRequestH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00B\t\n\x07request"\xfd\x02\n\x0bHdlResponse\x121\n\x0cindex_module\x18\x01 \x01(\x0b2\x19.edgrpc.hdl.IndexResponseH\x00\x12:\n\x13get_library_element\x18\x02 \x01(\x0b2\x1b.edgrpc.hdl.LibraryResponseH\x00\x12<\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1d.edgrpc.hdl.GeneratorResponseH\x00\x128\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1e.edgrpc.hdl.RefinementResponseH\x00\x122\n\x0brun_backend\x18\x04 \x01(\x0b2\x1b.edgrpc.hdl.BackendResponseH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00\x12*\n\x05error\x18c \x01(\x0b2\x19.edgrpc.hdl.ErrorResponseH\x00B\n\n\x08responseb\x06proto3') _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgrpc.hdl_pb2", globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgrpc.hdl_pb2', globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BACKENDREQUEST_ARGUMENTSENTRY._options = None - _BACKENDREQUEST_ARGUMENTSENTRY._serialized_options = b"8\x01" + _BACKENDREQUEST_ARGUMENTSENTRY._serialized_options = b'8\x01' _REFINEMENTS._serialized_start = 105 _REFINEMENTS._serialized_end = 671 _REFINEMENTS_SUBCLASS._serialized_start = 222 @@ -59,4 +54,4 @@ _HDLREQUEST._serialized_start = 1853 _HDLREQUEST._serialized_end = 2181 _HDLRESPONSE._serialized_start = 2184 - _HDLRESPONSE._serialized_end = 2565 + _HDLRESPONSE._serialized_end = 2565 \ No newline at end of file diff --git a/edg/edgrpc/hdl_pb2.pyi b/edg/edgrpc/hdl_pb2.pyi index 0b1c2c9ca..14ede7317 100644 --- a/edg/edgrpc/hdl_pb2.pyi +++ b/edg/edgrpc/hdl_pb2.pyi @@ -4,636 +4,568 @@ isort:skip_file * Defines messages for a service provided in Python that exposes HDL-to-edgir elaboration for a compiler in a different process / language. """ - -import builtins -import collections.abc -from .. import edgir -import google.protobuf.descriptor -import google.protobuf.internal.containers -import google.protobuf.message +from collections import abc as _abc +from edgir import elem_pb2 as _elem_pb2 +from edgir import lit_pb2 as _lit_pb2 +from edgir import ref_pb2 as _ref_pb2 +from edgir import schema_pb2 as _schema_pb2 +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf.internal import containers as _containers +import builtins as _builtins import sys -import typing - -if sys.version_info >= (3, 8): - import typing as typing_extensions +import typing as _typing +if sys.version_info >= (3, 10): + from typing import TypeAlias as _TypeAlias else: - import typing_extensions -DESCRIPTOR: google.protobuf.descriptor.FileDescriptor - -@typing_extensions.final -class Refinements(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Subclass(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - CLS_FIELD_NUMBER: builtins.int - REPLACEMENT_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - @property - def cls(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def replacement(self) -> edgir.ref_pb2.LibraryPath: ... - def __init__( - self, - *, - path: edgir.ref_pb2.LocalPath | None = ..., - cls: edgir.ref_pb2.LibraryPath | None = ..., - replacement: edgir.ref_pb2.LibraryPath | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "cls", b"cls", "path", b"path", "replacement", b"replacement", "source", b"source" - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "cls", b"cls", "path", b"path", "replacement", b"replacement", "source", b"source" - ], - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["source", b"source"] - ) -> typing_extensions.Literal["path", "cls"] | None: ... - - @typing_extensions.final - class Value(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class ClassParamPath(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - CLS_FIELD_NUMBER: builtins.int - PARAM_PATH_FIELD_NUMBER: builtins.int - - @property - def cls(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def param_path(self) -> edgir.ref_pb2.LocalPath: ... - def __init__( - self, *, cls: edgir.ref_pb2.LibraryPath | None = ..., param_path: edgir.ref_pb2.LocalPath | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["cls", b"cls", "param_path", b"param_path"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["cls", b"cls", "param_path", b"param_path"] - ) -> None: ... - - PATH_FIELD_NUMBER: builtins.int - CLS_PARAM_FIELD_NUMBER: builtins.int - EXPR_FIELD_NUMBER: builtins.int - PARAM_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - @property - def cls_param(self) -> global___Refinements.Value.ClassParamPath: ... - @property - def expr(self) -> edgir.lit_pb2.ValueLit: + from typing_extensions import TypeAlias as _TypeAlias +DESCRIPTOR: _descriptor.FileDescriptor + +@_typing.final +class Refinements(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Subclass(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + CLS_FIELD_NUMBER: _builtins.int + REPLACEMENT_FIELD_NUMBER: _builtins.int + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def cls(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def replacement(self) -> _ref_pb2.LibraryPath: + ... + + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., cls: _ref_pb2.LibraryPath | None=..., replacement: _ref_pb2.LibraryPath | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'path', b'path', 'replacement', b'replacement', 'source', b'source'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'path', b'path', 'replacement', b'replacement', 'source', b'source'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_source: _TypeAlias = _typing.Literal['path', 'cls'] + _WhichOneofArgType_source: _TypeAlias = _typing.Literal['source', b'source'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: + ... + + @_typing.final + class Value(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class ClassParamPath(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + CLS_FIELD_NUMBER: _builtins.int + PARAM_PATH_FIELD_NUMBER: _builtins.int + + @_builtins.property + def cls(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def param_path(self) -> _ref_pb2.LocalPath: + ... + + def __init__(self, *, cls: _ref_pb2.LibraryPath | None=..., param_path: _ref_pb2.LocalPath | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'param_path', b'param_path'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'param_path', b'param_path'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + PATH_FIELD_NUMBER: _builtins.int + CLS_PARAM_FIELD_NUMBER: _builtins.int + EXPR_FIELD_NUMBER: _builtins.int + PARAM_FIELD_NUMBER: _builtins.int + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def cls_param(self) -> Global___Refinements.Value.ClassParamPath: + ... + + @_builtins.property + def expr(self) -> _lit_pb2.ValueLit: """set to a specific value""" - @property - def param(self) -> edgir.ref_pb2.LocalPath: + @_builtins.property + def param(self) -> _ref_pb2.LocalPath: """set to a value of another parameter - invalid for classes for now""" - def __init__( - self, - *, - path: edgir.ref_pb2.LocalPath | None = ..., - cls_param: global___Refinements.Value.ClassParamPath | None = ..., - expr: edgir.lit_pb2.ValueLit | None = ..., - param: edgir.ref_pb2.LocalPath | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "cls_param", - b"cls_param", - "expr", - b"expr", - "param", - b"param", - "path", - b"path", - "source", - b"source", - "value", - b"value", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "cls_param", - b"cls_param", - "expr", - b"expr", - "param", - b"param", - "path", - b"path", - "source", - b"source", - "value", - b"value", - ], - ) -> None: ... - @typing.overload - def WhichOneof( - self, oneof_group: typing_extensions.Literal["source", b"source"] - ) -> typing_extensions.Literal["path", "cls_param"] | None: ... - @typing.overload - def WhichOneof( - self, oneof_group: typing_extensions.Literal["value", b"value"] - ) -> typing_extensions.Literal["expr", "param"] | None: ... - - SUBCLASSES_FIELD_NUMBER: builtins.int - VALUES_FIELD_NUMBER: builtins.int - - @property - def subclasses( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Refinements.Subclass]: ... - @property - def values( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Refinements.Value]: ... - def __init__( - self, - *, - subclasses: collections.abc.Iterable[global___Refinements.Subclass] | None = ..., - values: collections.abc.Iterable[global___Refinements.Value] | None = ..., - ) -> None: ... - def ClearField( - self, field_name: typing_extensions.Literal["subclasses", b"subclasses", "values", b"values"] - ) -> None: ... - -global___Refinements = Refinements - -@typing_extensions.final -class ModuleName(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NAME_FIELD_NUMBER: builtins.int - name: builtins.str - - def __init__(self, *, name: builtins.str = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["name", b"name"]) -> None: ... - -global___ModuleName = ModuleName - -@typing_extensions.final -class IndexResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - INDEXED_FIELD_NUMBER: builtins.int - - @property - def indexed( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[edgir.ref_pb2.LibraryPath]: ... - def __init__(self, *, indexed: collections.abc.Iterable[edgir.ref_pb2.LibraryPath] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["indexed", b"indexed"]) -> None: ... - -global___IndexResponse = IndexResponse - -@typing_extensions.final -class LibraryRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - ELEMENT_FIELD_NUMBER: builtins.int - - @property - def element(self) -> edgir.ref_pb2.LibraryPath: + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., cls_param: Global___Refinements.Value.ClassParamPath | None=..., expr: _lit_pb2.ValueLit | None=..., param: _ref_pb2.LocalPath | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['cls_param', b'cls_param', 'expr', b'expr', 'param', b'param', 'path', b'path', 'source', b'source', 'value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['cls_param', b'cls_param', 'expr', b'expr', 'param', b'param', 'path', b'path', 'source', b'source', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_source: _TypeAlias = _typing.Literal['path', 'cls_param'] + _WhichOneofArgType_source: _TypeAlias = _typing.Literal['source', b'source'] + _WhichOneofReturnType_value: _TypeAlias = _typing.Literal['expr', 'param'] + _WhichOneofArgType_value: _TypeAlias = _typing.Literal['value', b'value'] + + @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: + ... + + @_typing.overload + def WhichOneof(self, oneof_group: _WhichOneofArgType_value) -> _WhichOneofReturnType_value | None: + ... + SUBCLASSES_FIELD_NUMBER: _builtins.int + VALUES_FIELD_NUMBER: _builtins.int + + @_builtins.property + def subclasses(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Subclass]: + ... + + @_builtins.property + def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Value]: + ... + + def __init__(self, *, subclasses: _abc.Iterable[Global___Refinements.Subclass] | None=..., values: _abc.Iterable[Global___Refinements.Value] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['subclasses', b'subclasses', 'values', b'values'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___Refinements: _TypeAlias = Refinements + +@_typing.final +class ModuleName(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NAME_FIELD_NUMBER: _builtins.int + name: _builtins.str + + def __init__(self, *, name: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ModuleName: _TypeAlias = ModuleName + +@_typing.final +class IndexResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + INDEXED_FIELD_NUMBER: _builtins.int + + @_builtins.property + def indexed(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: + ... + + def __init__(self, *, indexed: _abc.Iterable[_ref_pb2.LibraryPath] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['indexed', b'indexed'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___IndexResponse: _TypeAlias = IndexResponse + +@_typing.final +class LibraryRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + ELEMENT_FIELD_NUMBER: _builtins.int + + @_builtins.property + def element(self) -> _ref_pb2.LibraryPath: """library element asked for""" - def __init__(self, *, element: edgir.ref_pb2.LibraryPath | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["element", b"element"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["element", b"element"]) -> None: ... + def __init__(self, *, element: _ref_pb2.LibraryPath | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] -global___LibraryRequest = LibraryRequest + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LibraryRequest: _TypeAlias = LibraryRequest -@typing_extensions.final -class LibraryResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - ELEMENT_FIELD_NUMBER: builtins.int - REFINEMENTS_FIELD_NUMBER: builtins.int +@_typing.final +class LibraryResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + ELEMENT_FIELD_NUMBER: _builtins.int + REFINEMENTS_FIELD_NUMBER: _builtins.int - @property - def element(self) -> edgir.schema_pb2.Library.NS.Val: ... - @property - def refinements(self) -> global___Refinements: + @_builtins.property + def element(self) -> _schema_pb2.Library.NS.Val: + ... + + @_builtins.property + def refinements(self) -> Global___Refinements: """only valid if element is a top-level block""" - def __init__( - self, *, element: edgir.schema_pb2.Library.NS.Val | None = ..., refinements: global___Refinements | None = ... - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["element", b"element", "refinements", b"refinements"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["element", b"element", "refinements", b"refinements"] - ) -> None: ... - -global___LibraryResponse = LibraryResponse - -@typing_extensions.final -class ExprValue(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: ... - @property - def value(self) -> edgir.lit_pb2.ValueLit: ... - def __init__( - self, *, path: edgir.ref_pb2.LocalPath | None = ..., value: edgir.lit_pb2.ValueLit | None = ... - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["path", b"path", "value", b"value"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["path", b"path", "value", b"value"]) -> None: ... - -global___ExprValue = ExprValue - -@typing_extensions.final -class GeneratorRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - ELEMENT_FIELD_NUMBER: builtins.int - VALUES_FIELD_NUMBER: builtins.int - - @property - def element(self) -> edgir.ref_pb2.LibraryPath: + def __init__(self, *, element: _schema_pb2.Library.NS.Val | None=..., refinements: Global___Refinements | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'refinements', b'refinements'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'refinements', b'refinements'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___LibraryResponse: _TypeAlias = LibraryResponse + +@_typing.final +class ExprValue(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: + ... + + @_builtins.property + def value(self) -> _lit_pb2.ValueLit: + ... + + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., value: _lit_pb2.ValueLit | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ExprValue: _TypeAlias = ExprValue + +@_typing.final +class GeneratorRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + ELEMENT_FIELD_NUMBER: _builtins.int + VALUES_FIELD_NUMBER: _builtins.int + + @_builtins.property + def element(self) -> _ref_pb2.LibraryPath: """path of library element containing the generator""" - @property - def values(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ExprValue]: ... - def __init__( - self, - *, - element: edgir.ref_pb2.LibraryPath | None = ..., - values: collections.abc.Iterable[global___ExprValue] | None = ..., - ) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["element", b"element"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["element", b"element", "values", b"values"]) -> None: ... - -global___GeneratorRequest = GeneratorRequest - -@typing_extensions.final -class GeneratorResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - GENERATED_FIELD_NUMBER: builtins.int - - @property - def generated(self) -> edgir.elem_pb2.HierarchyBlock: ... - def __init__(self, *, generated: edgir.elem_pb2.HierarchyBlock | None = ...) -> None: ... - def HasField(self, field_name: typing_extensions.Literal["generated", b"generated"]) -> builtins.bool: ... - def ClearField(self, field_name: typing_extensions.Literal["generated", b"generated"]) -> None: ... - -global___GeneratorResponse = GeneratorResponse - -@typing_extensions.final -class RefinementRequest(google.protobuf.message.Message): + @_builtins.property + def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: + ... + + def __init__(self, *, element: _ref_pb2.LibraryPath | None=..., values: _abc.Iterable[Global___ExprValue] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'values', b'values'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GeneratorRequest: _TypeAlias = GeneratorRequest + +@_typing.final +class GeneratorResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + GENERATED_FIELD_NUMBER: _builtins.int + + @_builtins.property + def generated(self) -> _elem_pb2.HierarchyBlock: + ... + + def __init__(self, *, generated: _elem_pb2.HierarchyBlock | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['generated', b'generated'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['generated', b'generated'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___GeneratorResponse: _TypeAlias = GeneratorResponse + +@_typing.final +class RefinementRequest(_message.Message): """Runs a refinement pass - something that takes a full design and solved values and generates additional values, eg for refdes assignment """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - REFINEMENT_PASS_FIELD_NUMBER: builtins.int - DESIGN_FIELD_NUMBER: builtins.int - SOLVEDVALUES_FIELD_NUMBER: builtins.int - - @property - def refinement_pass(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def design(self) -> edgir.schema_pb2.Design: ... - @property - def solvedValues( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ExprValue]: ... - def __init__( - self, - *, - refinement_pass: edgir.ref_pb2.LibraryPath | None = ..., - design: edgir.schema_pb2.Design | None = ..., - solvedValues: collections.abc.Iterable[global___ExprValue] | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["design", b"design", "refinement_pass", b"refinement_pass"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "design", b"design", "refinement_pass", b"refinement_pass", "solvedValues", b"solvedValues" - ], - ) -> None: ... - -global___RefinementRequest = RefinementRequest - -@typing_extensions.final -class RefinementResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - NEWVALUES_FIELD_NUMBER: builtins.int - - @property - def newValues(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ExprValue]: ... - def __init__(self, *, newValues: collections.abc.Iterable[global___ExprValue] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["newValues", b"newValues"]) -> None: ... - -global___RefinementResponse = RefinementResponse - -@typing_extensions.final -class BackendRequest(google.protobuf.message.Message): + DESCRIPTOR: _descriptor.Descriptor + REFINEMENT_PASS_FIELD_NUMBER: _builtins.int + DESIGN_FIELD_NUMBER: _builtins.int + SOLVEDVALUES_FIELD_NUMBER: _builtins.int + + @_builtins.property + def refinement_pass(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def design(self) -> _schema_pb2.Design: + ... + + @_builtins.property + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: + ... + + def __init__(self, *, refinement_pass: _ref_pb2.LibraryPath | None=..., design: _schema_pb2.Design | None=..., solvedValues: _abc.Iterable[Global___ExprValue] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinement_pass', b'refinement_pass'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinement_pass', b'refinement_pass', 'solvedValues', b'solvedValues'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___RefinementRequest: _TypeAlias = RefinementRequest + +@_typing.final +class RefinementResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + NEWVALUES_FIELD_NUMBER: _builtins.int + + @_builtins.property + def newValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: + ... + + def __init__(self, *, newValues: _abc.Iterable[Global___ExprValue] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['newValues', b'newValues'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___RefinementResponse: _TypeAlias = RefinementResponse + +@_typing.final +class BackendRequest(_message.Message): """Runs a backend - something that generates fabrication artifacts from a compiled design tree eg, generate KiCad netlist, or generate microcontroller firmware pinmap headers """ - - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class ArgumentsEntry(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - KEY_FIELD_NUMBER: builtins.int - VALUE_FIELD_NUMBER: builtins.int - key: builtins.str - value: builtins.str - - def __init__(self, *, key: builtins.str = ..., value: builtins.str = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["key", b"key", "value", b"value"]) -> None: ... - - BACKEND_FIELD_NUMBER: builtins.int - DESIGN_FIELD_NUMBER: builtins.int - SOLVEDVALUES_FIELD_NUMBER: builtins.int - ARGUMENTS_FIELD_NUMBER: builtins.int - - @property - def backend(self) -> edgir.ref_pb2.LibraryPath: ... - @property - def design(self) -> edgir.schema_pb2.Design: ... - @property - def solvedValues( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___ExprValue]: ... - @property - def arguments(self) -> google.protobuf.internal.containers.ScalarMap[builtins.str, builtins.str]: ... - def __init__( - self, - *, - backend: edgir.ref_pb2.LibraryPath | None = ..., - design: edgir.schema_pb2.Design | None = ..., - solvedValues: collections.abc.Iterable[global___ExprValue] | None = ..., - arguments: collections.abc.Mapping[builtins.str, builtins.str] | None = ..., - ) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["backend", b"backend", "design", b"design"] - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "arguments", b"arguments", "backend", b"backend", "design", b"design", "solvedValues", b"solvedValues" - ], - ) -> None: ... - -global___BackendRequest = BackendRequest - -@typing_extensions.final -class BackendResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - - @typing_extensions.final - class Result(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - PATH_FIELD_NUMBER: builtins.int - TEXT_FIELD_NUMBER: builtins.int - - @property - def path(self) -> edgir.ref_pb2.LocalPath: + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class ArgumentsEntry(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + KEY_FIELD_NUMBER: _builtins.int + VALUE_FIELD_NUMBER: _builtins.int + key: _builtins.str + value: _builtins.str + + def __init__(self, *, key: _builtins.str=..., value: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + BACKEND_FIELD_NUMBER: _builtins.int + DESIGN_FIELD_NUMBER: _builtins.int + SOLVEDVALUES_FIELD_NUMBER: _builtins.int + ARGUMENTS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def backend(self) -> _ref_pb2.LibraryPath: + ... + + @_builtins.property + def design(self) -> _schema_pb2.Design: + ... + + @_builtins.property + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: + ... + + @_builtins.property + def arguments(self) -> _containers.ScalarMap[_builtins.str, _builtins.str]: + ... + + def __init__(self, *, backend: _ref_pb2.LibraryPath | None=..., design: _schema_pb2.Design | None=..., solvedValues: _abc.Iterable[Global___ExprValue] | None=..., arguments: _abc.Mapping[_builtins.str, _builtins.str] | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['backend', b'backend', 'design', b'design'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['arguments', b'arguments', 'backend', b'backend', 'design', b'design', 'solvedValues', b'solvedValues'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BackendRequest: _TypeAlias = BackendRequest + +@_typing.final +class BackendResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + + @_typing.final + class Result(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + PATH_FIELD_NUMBER: _builtins.int + TEXT_FIELD_NUMBER: _builtins.int + text: _builtins.str + 'for now, only text supported, for KiCad netlisting' + + @_builtins.property + def path(self) -> _ref_pb2.LocalPath: """path of corresponding element in design tree""" - text: builtins.str - "for now, only text supported, for KiCad netlisting" - - def __init__(self, *, path: edgir.ref_pb2.LocalPath | None = ..., text: builtins.str = ...) -> None: ... - def HasField( - self, field_name: typing_extensions.Literal["path", b"path", "result", b"result", "text", b"text"] - ) -> builtins.bool: ... - def ClearField( - self, field_name: typing_extensions.Literal["path", b"path", "result", b"result", "text", b"text"] - ) -> None: ... - def WhichOneof( - self, oneof_group: typing_extensions.Literal["result", b"result"] - ) -> typing_extensions.Literal["text"] | None: ... - - RESULTS_FIELD_NUMBER: builtins.int - - @property - def results( - self, - ) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___BackendResponse.Result]: ... - def __init__(self, *, results: collections.abc.Iterable[global___BackendResponse.Result] | None = ...) -> None: ... - def ClearField(self, field_name: typing_extensions.Literal["results", b"results"]) -> None: ... - -global___BackendResponse = BackendResponse - -@typing_extensions.final -class ErrorResponse(google.protobuf.message.Message): - """catch all error response""" - DESCRIPTOR: google.protobuf.descriptor.Descriptor - ERROR_FIELD_NUMBER: builtins.int - TRACEBACK_FIELD_NUMBER: builtins.int - error: builtins.str - traceback: builtins.str - - def __init__(self, *, error: builtins.str = ..., traceback: builtins.str = ...) -> None: ... - def ClearField( - self, field_name: typing_extensions.Literal["error", b"error", "traceback", b"traceback"] - ) -> None: ... - -global___ErrorResponse = ErrorResponse - -@typing_extensions.final -class HdlRequest(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - INDEX_MODULE_FIELD_NUMBER: builtins.int - GET_LIBRARY_ELEMENT_FIELD_NUMBER: builtins.int - ELABORATE_GENERATOR_FIELD_NUMBER: builtins.int - RUN_REFINEMENT_FIELD_NUMBER: builtins.int - RUN_BACKEND_FIELD_NUMBER: builtins.int - GET_PROTO_VERSION_FIELD_NUMBER: builtins.int - - @property - def index_module(self) -> global___ModuleName: + def __init__(self, *, path: _ref_pb2.LocalPath | None=..., text: _builtins.str=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'result', b'result', 'text', b'text'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'result', b'result', 'text', b'text'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_result: _TypeAlias = _typing.Literal['text'] + _WhichOneofArgType_result: _TypeAlias = _typing.Literal['result', b'result'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_result) -> _WhichOneofReturnType_result | None: + ... + RESULTS_FIELD_NUMBER: _builtins.int + + @_builtins.property + def results(self) -> _containers.RepeatedCompositeFieldContainer[Global___BackendResponse.Result]: + ... + + def __init__(self, *, results: _abc.Iterable[Global___BackendResponse.Result] | None=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['results', b'results'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___BackendResponse: _TypeAlias = BackendResponse + +@_typing.final +class ErrorResponse(_message.Message): + """catch all error response""" + DESCRIPTOR: _descriptor.Descriptor + ERROR_FIELD_NUMBER: _builtins.int + TRACEBACK_FIELD_NUMBER: _builtins.int + error: _builtins.str + traceback: _builtins.str + + def __init__(self, *, error: _builtins.str=..., traceback: _builtins.str=...) -> None: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['error', b'error', 'traceback', b'traceback'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... +Global___ErrorResponse: _TypeAlias = ErrorResponse + +@_typing.final +class HdlRequest(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + INDEX_MODULE_FIELD_NUMBER: _builtins.int + GET_LIBRARY_ELEMENT_FIELD_NUMBER: _builtins.int + ELABORATE_GENERATOR_FIELD_NUMBER: _builtins.int + RUN_REFINEMENT_FIELD_NUMBER: _builtins.int + RUN_BACKEND_FIELD_NUMBER: _builtins.int + GET_PROTO_VERSION_FIELD_NUMBER: _builtins.int + get_proto_version: _builtins.int + 'no data' + + @_builtins.property + def index_module(self) -> Global___ModuleName: """returns an index of IR elements in a Python module""" - @property - def get_library_element(self) -> global___LibraryRequest: + @_builtins.property + def get_library_element(self) -> Global___LibraryRequest: """returns the IR for a library element""" - @property - def elaborate_generator(self) -> global___GeneratorRequest: + @_builtins.property + def elaborate_generator(self) -> Global___GeneratorRequest: """returns the elaborated IR""" - @property - def run_refinement(self) -> global___RefinementRequest: ... - @property - def run_backend(self) -> global___BackendRequest: ... - get_proto_version: builtins.int - "no data" - - def __init__( - self, - *, - index_module: global___ModuleName | None = ..., - get_library_element: global___LibraryRequest | None = ..., - elaborate_generator: global___GeneratorRequest | None = ..., - run_refinement: global___RefinementRequest | None = ..., - run_backend: global___BackendRequest | None = ..., - get_proto_version: builtins.int = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "elaborate_generator", - b"elaborate_generator", - "get_library_element", - b"get_library_element", - "get_proto_version", - b"get_proto_version", - "index_module", - b"index_module", - "request", - b"request", - "run_backend", - b"run_backend", - "run_refinement", - b"run_refinement", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "elaborate_generator", - b"elaborate_generator", - "get_library_element", - b"get_library_element", - "get_proto_version", - b"get_proto_version", - "index_module", - b"index_module", - "request", - b"request", - "run_backend", - b"run_backend", - "run_refinement", - b"run_refinement", - ], - ) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["request", b"request"]) -> ( - typing_extensions.Literal[ - "index_module", - "get_library_element", - "elaborate_generator", - "run_refinement", - "run_backend", - "get_proto_version", - ] - | None - ): ... - -global___HdlRequest = HdlRequest - -@typing_extensions.final -class HdlResponse(google.protobuf.message.Message): - DESCRIPTOR: google.protobuf.descriptor.Descriptor - INDEX_MODULE_FIELD_NUMBER: builtins.int - GET_LIBRARY_ELEMENT_FIELD_NUMBER: builtins.int - ELABORATE_GENERATOR_FIELD_NUMBER: builtins.int - RUN_REFINEMENT_FIELD_NUMBER: builtins.int - RUN_BACKEND_FIELD_NUMBER: builtins.int - GET_PROTO_VERSION_FIELD_NUMBER: builtins.int - ERROR_FIELD_NUMBER: builtins.int - - @property - def index_module(self) -> global___IndexResponse: + @_builtins.property + def run_refinement(self) -> Global___RefinementRequest: + ... + + @_builtins.property + def run_backend(self) -> Global___BackendRequest: + ... + + def __init__(self, *, index_module: Global___ModuleName | None=..., get_library_element: Global___LibraryRequest | None=..., elaborate_generator: Global___GeneratorRequest | None=..., run_refinement: Global___RefinementRequest | None=..., run_backend: Global___BackendRequest | None=..., get_proto_version: _builtins.int=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'request', b'request', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'request', b'request', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_request: _TypeAlias = _typing.Literal['index_module', 'get_library_element', 'elaborate_generator', 'run_refinement', 'run_backend', 'get_proto_version'] + _WhichOneofArgType_request: _TypeAlias = _typing.Literal['request', b'request'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_request) -> _WhichOneofReturnType_request | None: + ... +Global___HdlRequest: _TypeAlias = HdlRequest + +@_typing.final +class HdlResponse(_message.Message): + DESCRIPTOR: _descriptor.Descriptor + INDEX_MODULE_FIELD_NUMBER: _builtins.int + GET_LIBRARY_ELEMENT_FIELD_NUMBER: _builtins.int + ELABORATE_GENERATOR_FIELD_NUMBER: _builtins.int + RUN_REFINEMENT_FIELD_NUMBER: _builtins.int + RUN_BACKEND_FIELD_NUMBER: _builtins.int + GET_PROTO_VERSION_FIELD_NUMBER: _builtins.int + ERROR_FIELD_NUMBER: _builtins.int + get_proto_version: _builtins.int + + @_builtins.property + def index_module(self) -> Global___IndexResponse: """list of contained library elements""" - @property - def get_library_element(self) -> global___LibraryResponse: ... - @property - def elaborate_generator(self) -> global___GeneratorResponse: ... - @property - def run_refinement(self) -> global___RefinementResponse: ... - @property - def run_backend(self) -> global___BackendResponse: ... - get_proto_version: builtins.int - - @property - def error(self) -> global___ErrorResponse: ... - def __init__( - self, - *, - index_module: global___IndexResponse | None = ..., - get_library_element: global___LibraryResponse | None = ..., - elaborate_generator: global___GeneratorResponse | None = ..., - run_refinement: global___RefinementResponse | None = ..., - run_backend: global___BackendResponse | None = ..., - get_proto_version: builtins.int = ..., - error: global___ErrorResponse | None = ..., - ) -> None: ... - def HasField( - self, - field_name: typing_extensions.Literal[ - "elaborate_generator", - b"elaborate_generator", - "error", - b"error", - "get_library_element", - b"get_library_element", - "get_proto_version", - b"get_proto_version", - "index_module", - b"index_module", - "response", - b"response", - "run_backend", - b"run_backend", - "run_refinement", - b"run_refinement", - ], - ) -> builtins.bool: ... - def ClearField( - self, - field_name: typing_extensions.Literal[ - "elaborate_generator", - b"elaborate_generator", - "error", - b"error", - "get_library_element", - b"get_library_element", - "get_proto_version", - b"get_proto_version", - "index_module", - b"index_module", - "response", - b"response", - "run_backend", - b"run_backend", - "run_refinement", - b"run_refinement", - ], - ) -> None: ... - def WhichOneof(self, oneof_group: typing_extensions.Literal["response", b"response"]) -> ( - typing_extensions.Literal[ - "index_module", - "get_library_element", - "elaborate_generator", - "run_refinement", - "run_backend", - "get_proto_version", - "error", - ] - | None - ): ... - -global___HdlResponse = HdlResponse + @_builtins.property + def get_library_element(self) -> Global___LibraryResponse: + ... + + @_builtins.property + def elaborate_generator(self) -> Global___GeneratorResponse: + ... + + @_builtins.property + def run_refinement(self) -> Global___RefinementResponse: + ... + + @_builtins.property + def run_backend(self) -> Global___BackendResponse: + ... + + @_builtins.property + def error(self) -> Global___ErrorResponse: + ... + + def __init__(self, *, index_module: Global___IndexResponse | None=..., get_library_element: Global___LibraryResponse | None=..., elaborate_generator: Global___GeneratorResponse | None=..., run_refinement: Global___RefinementResponse | None=..., run_backend: Global___BackendResponse | None=..., get_proto_version: _builtins.int=..., error: Global___ErrorResponse | None=...) -> None: + ... + _HasFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'error', b'error', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'response', b'response', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: + ... + _ClearFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'error', b'error', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'response', b'response', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: + ... + _WhichOneofReturnType_response: _TypeAlias = _typing.Literal['index_module', 'get_library_element', 'elaborate_generator', 'run_refinement', 'run_backend', 'get_proto_version', 'error'] + _WhichOneofArgType_response: _TypeAlias = _typing.Literal['response', b'response'] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_response) -> _WhichOneofReturnType_response | None: + ... +Global___HdlResponse: _TypeAlias = HdlResponse \ No newline at end of file diff --git a/proto/README.md b/proto/README.md index aea69471e..8b60f20ef 100644 --- a/proto/README.md +++ b/proto/README.md @@ -2,6 +2,7 @@ IR definition in protocol buffer format. You will need [mypy-protobuf](https://github.com/dropbox/mypy-protobuf) (to generate type stubs) and protoletariat (post-processing to use relative imports) ```commandline +pip install grpcio-tools pip install mypy-protobuf pip install protoletariat ``` diff --git a/proto/edgir/elem.proto b/proto/edgir/elem.proto index de66e9d51..60d95e638 100644 --- a/proto/edgir/elem.proto +++ b/proto/edgir/elem.proto @@ -51,6 +51,7 @@ message NamedLinkLike { message Port { repeated NamedValInit params = 40; repeated NamedValueExpr constraints = 41; + repeated NamedPortLike ports = 42; edgir.ref.LibraryPath self_class = 20; repeated edgir.ref.LibraryPath superclasses = 21; // superclasses, may be empty @@ -60,18 +61,6 @@ message Port { edgir.common.Metadata meta = 127; } -message Bundle { - repeated NamedValInit params = 40; - repeated NamedPortLike ports = 41; - repeated NamedValueExpr constraints = 42; - - edgir.ref.LibraryPath self_class = 20; - repeated edgir.ref.LibraryPath superclasses = 21; // superclasses, may be empty - repeated edgir.ref.LibraryPath super_superclasses = 24; // all (recursive) superclasses above superclasses - - edgir.common.Metadata meta = 127; -} - message PortArray { message Ports { repeated NamedPortLike ports = 40; @@ -98,8 +87,6 @@ message PortLike { /** 'port' disallowed w/in the library */ Port port = 3; PortArray array = 4; - /** 'bundle' disallowed w/in the library */ - Bundle bundle = 6; } } diff --git a/proto/edgir/schema.proto b/proto/edgir/schema.proto index 2ad9be6c8..335aea670 100644 --- a/proto/edgir/schema.proto +++ b/proto/edgir/schema.proto @@ -28,7 +28,6 @@ message Library { message Val { oneof type { edgir.elem.Port port = 10; - edgir.elem.Bundle bundle = 11; edgir.elem.HierarchyBlock hierarchy_block = 13; edgir.elem.Link link = 14; NS namespace = 20; From bc70a589d803d7f18db58ebe5f4a8578a0ffa518 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 18:36:31 -0700 Subject: [PATCH 02/11] wip removing bundle --- edg/core/Array.py | 4 +- edg/core/Ports.py | 111 +++++++++-------------------- edg/core/TransformUtil.py | 4 +- edg/core/test_bundle.py | 2 +- edg/core/test_inner_link.py | 4 +- edg/core/test_simple_const_prop.py | 2 +- edg/edgir/__init__.py | 5 +- edg/hdl_server/__main__.py | 2 - 8 files changed, 40 insertions(+), 94 deletions(-) diff --git a/edg/core/Array.py b/edg/core/Array.py index 5b00fbfd8..6e3284a4b 100644 --- a/edg/core/Array.py +++ b/edg/core/Array.py @@ -27,7 +27,7 @@ from .ConstraintExpr import BoolExpr, ConstraintExpr, FloatExpr, RangeExpr, StringExpr, IntExpr, Binding from .Core import Refable, non_library from .HdlUserExceptions import EdgTypeError -from .Ports import BaseContainerPort, BasePort, Port +from .Ports import BasePort, Port from .. import edgir @@ -64,7 +64,7 @@ def populate_expr_proto(self, pb: edgir.ValueExpr, expr: ConstraintExpr, ref_map @non_library -class BaseVector(BaseContainerPort): +class BaseVector(BasePort): @abstractmethod def _get_elt_sample(self) -> BasePort: ... diff --git a/edg/core/Ports.py b/edg/core/Ports.py index 55142a83b..e8584af55 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -4,6 +4,7 @@ from abc import abstractmethod from typing import Generic, Optional, Dict, Hashable, List +from deprecated import deprecated from typing_extensions import TypeVar, override from .Binding import ParamBinding, IsConnectedBinding, NameBinding @@ -30,7 +31,7 @@ def __call__(cls, *args: Any, **kwargs: Any) -> Any: return obj -PortParentTypes = Union["BaseContainerPort", "BaseBlock"] +PortParentTypes = Union["Port", "BaseBlock"] @non_library @@ -114,11 +115,6 @@ def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr raise NotImplementedError -@non_library -class BaseContainerPort(BasePort): # TODO can this be removed? - pass - - PortLinkType = TypeVar("PortLinkType", bound="Link", covariant=True, default="Link") # TODO: this breaks w/ selftypes @@ -152,8 +148,8 @@ def __init__(self) -> None: self._bridge_instance: Optional[PortBridge] = None # internal only self._adapter_count: int = 0 - # TODO delete type ignore after https://github.com/python/mypy/issues/5374 self._parameters: SubElementDict[ConstraintExpr] = self.manager.new_dict(ConstraintExpr) + self._ports: SubElementDict[Port] = self.manager.new_dict(Port) self.manager_ignored.update(["_is_connected", "_name"]) self._is_connected = BoolExpr()._bind(IsConnectedBinding(self)) @@ -163,6 +159,9 @@ def _clear_initializers(self) -> None: self._parameters.finalize() for name, param in self._parameters.items(): param.initializer = None + self._ports.finalize() + for name, port in self._ports.items(): + port._clear_initializers() @override def _cloned_from(self: SelfType, other: SelfType) -> None: @@ -172,6 +171,11 @@ def _cloned_from(self: SelfType, other: SelfType) -> None: other_param = other._parameters[name] assert isinstance(other_param, type(param)) param.initializer = other_param.initializer + self._ports.finalize() + for name, port in self._ports.items(): + other_port = other._ports[name] + assert isinstance(other_port, type(port)) + port._cloned_from(other_port) def init_from(self: SelfType, other: SelfType) -> None: assert self._parent is not None, "may only init_from on an bound port" @@ -236,6 +240,8 @@ def _def_to_proto(self) -> edgir.PortTypes: for name, param in self._parameters.items(): param._populate_decl_proto(edgir.add_pair(pb.params, name)) + for name, port in self._ports.items(): + port._populate_portlike_proto(edgir.add_pair(pb.ports, name)) self._populate_metadata(pb.meta, self._metadata, IdentityDict()) # TODO use ref map @@ -252,17 +258,23 @@ def _build_ref_map(self, ref_map: Refable.RefMapType, prefix: edgir.LocalPath) - ref_map[self.name()] = edgir.localpath_concat(prefix, edgir.NAME) for name, param in self._parameters.items(): param._build_ref_map(ref_map, edgir.localpath_concat(prefix, name)) + for name, port in self._ports.items(): + port._build_ref_map(ref_map, edgir.localpath_concat(prefix, name)) if self._link_instance is not None: self._link_instance._build_ref_map(ref_map, edgir.localpath_concat(prefix, edgir.CONNECTED_LINK)) @override def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr, List[str], ConstraintExpr]]: self._parameters.finalize() - return [ + initializers: List[Tuple[ConstraintExpr, List[str], ConstraintExpr]] = [ (param, path_prefix + [name], param.initializer) for (name, param) in self._parameters.items() if param.initializer is not None ] + self._ports.finalize() + for (name, port) in self._ports.items(): + initializers.extend(port._get_initializers(path_prefix + [name])) + return initializers def is_connected(self) -> BoolExpr: return self._is_connected @@ -289,30 +301,22 @@ def Parameter(self, tpe: U) -> U: self._parameters.register(elt) return elt + T = TypeVar("T", bound="Port") + def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: + """Registers a field for this Bundle""" + if not isinstance(tpe, Port): + raise EdgTypeError(f"param to Port(...)", tpe, Port) -@non_library -class Bundle(Port[PortLinkType], BaseContainerPort, Generic[PortLinkType]): - SelfType = TypeVar("SelfType", bound="Bundle") - - def __init__(self) -> None: - super().__init__() + elt = tpe._bind(self) + self._ports.register(elt) - self._ports: SubElementDict[Port] = self.manager.new_dict(Port) + return elt - @override - def _clear_initializers(self) -> None: - super()._clear_initializers() - self._ports.finalize() - for name, port in self._ports.items(): - port._clear_initializers() - @override - def _cloned_from(self: SelfType, other: SelfType) -> None: - super()._cloned_from(other) - for name, port in self._ports.items(): - other_port = other._ports[name] - assert isinstance(other_port, type(port)) - port._cloned_from(other_port) +@non_library +@deprecated(reason="merged with Port") +class Bundle(Port[PortLinkType], Generic[PortLinkType]): + SelfType = TypeVar("SelfType", bound="Bundle") def with_elt_initializers(self: SelfType, replace_elts: dict[str, Port]) -> SelfType: """Clones model-typed self, except adding initializers to elements from the input dict. @@ -327,55 +331,4 @@ def with_elt_initializers(self: SelfType, replace_elts: dict[str, Port]) -> Self cloned_port._cloned_from(replace_port) return cloned - @override - def _def_to_proto(self) -> edgir.Bundle: - self._parameters.finalize() - self._ports.finalize() - - pb = edgir.Bundle() - - pb.self_class.target.name = self._get_def_name() - - direct_bases, indirect_bases = self._get_bases_of(Bundle) - for cls in direct_bases: - pb.superclasses.add().target.name = cls._static_def_name() - for cls in indirect_bases: - pb.super_superclasses.add().target.name = cls._static_def_name() - - for name, param in self._parameters.items(): - param._populate_decl_proto(edgir.add_pair(pb.params, name)) - for name, port in self._ports.items(): - port._populate_portlike_proto(edgir.add_pair(pb.ports, name)) - - self._populate_metadata(pb.meta, self._metadata, IdentityDict()) # TODO use ref map - - return pb - - @override - def _build_ref_map(self, ref_map: Refable.RefMapType, prefix: edgir.LocalPath) -> None: - super()._build_ref_map(ref_map, prefix) - for name, field in self._ports.items(): - field._build_ref_map(ref_map, edgir.localpath_concat(prefix, name)) - - @override - def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr, List[str], ConstraintExpr]]: - self_initializers = super()._get_initializers(path_prefix) - self._ports.finalize() - return list( - itertools.chain( - self_initializers, - *[port._get_initializers(path_prefix + [name]) for (name, port) in self._ports.items()], - ) - ) - - T = TypeVar("T", bound=Port) - - def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: - """Registers a field for this Bundle""" - if not isinstance(tpe, Port): - raise EdgTypeError(f"param to Field(...)", tpe, Port) - - elt = tpe._bind(self) - self._ports.register(elt) - return elt diff --git a/edg/core/TransformUtil.py b/edg/core/TransformUtil.py index a51e76c33..4ef279474 100644 --- a/edg/core/TransformUtil.py +++ b/edg/core/TransformUtil.py @@ -226,9 +226,7 @@ def _traverse_portlike(self, context: TransformContext, elt: edgir.PortLike) -> if elt.HasField("lib_elem"): raise ValueError(f"unresolved lib at {context}") elif elt.HasField("port"): - pass # nothing to recurse into - elif elt.HasField("bundle"): - for port_pair in elt.bundle.ports: + for port_pair in elt.port.ports: self._traverse_portlike(context.append_port(port_pair.name), port_pair.value) elif elt.HasField("array") and elt.array.HasField("ports"): for port_pair in elt.array.ports.ports: diff --git a/edg/core/test_bundle.py b/edg/core/test_bundle.py index 57e87b68d..c7498a917 100644 --- a/edg/core/test_bundle.py +++ b/edg/core/test_bundle.py @@ -6,7 +6,7 @@ from .test_elaboration_common import TestPortSink -class TestBundle(Bundle): +class TestBundle(Port): def __init__( self, float_param: FloatLike = FloatExpr(), diff --git a/edg/core/test_inner_link.py b/edg/core/test_inner_link.py index 0360080b8..d7cb92f85 100644 --- a/edg/core/test_inner_link.py +++ b/edg/core/test_inner_link.py @@ -18,7 +18,7 @@ def __init__(self) -> None: self.b_net = self.connect(self.source.b, self.sinks.map_extract(lambda x: x.b), flatten=True) -class TestBundleSource(Bundle[TestBundleLink]): +class TestBundleSource(Port[TestBundleLink]): link_type = TestBundleLink def __init__(self) -> None: @@ -28,7 +28,7 @@ def __init__(self) -> None: self.b = self.Port(TestPortSource()) -class TestBundleSink(Bundle[TestBundleLink]): +class TestBundleSink(Port[TestBundleLink]): link_type = TestBundleLink def __init__(self) -> None: diff --git a/edg/core/test_simple_const_prop.py b/edg/core/test_simple_const_prop.py index 0c6cf2eaa..fbcbc4db8 100644 --- a/edg/core/test_simple_const_prop.py +++ b/edg/core/test_simple_const_prop.py @@ -139,7 +139,7 @@ def __init__(self) -> None: self.elt2_link = self.connect(self.a.elt2, self.b.elt2) -class TestPortConstPropBundle(Bundle[TestPortConstPropBundleLink]): +class TestPortConstPropBundle(Port[TestPortConstPropBundleLink]): link_type = TestPortConstPropBundleLink def __init__(self) -> None: diff --git a/edg/edgir/__init__.py b/edg/edgir/__init__.py index 6a7c079d0..36e53df42 100644 --- a/edg/edgir/__init__.py +++ b/edg/edgir/__init__.py @@ -11,7 +11,6 @@ Port, PortArray, PortLike, - Bundle, HierarchyBlock, BlockLike, Link, @@ -43,7 +42,7 @@ # TODO this should be a separate util in edg_core from ..core.Range import Range -PortTypes = Union[Port, PortArray, Bundle] +PortTypes = Union[Port, PortArray] BlockTypes = HierarchyBlock BlockLikeTypes = Union[BlockTypes, Link] LinkTypes = Union[Link, LinkArray] # LinkArray is not block-like b/c it doesn't have a class and params @@ -71,8 +70,6 @@ def resolve_portlike(port: PortLike) -> PortTypes: return port.port elif port.HasField("array"): return port.array - elif port.HasField("bundle"): - return port.bundle else: raise ValueError(f"bad portlike {port}") diff --git a/edg/hdl_server/__main__.py b/edg/hdl_server/__main__.py index 638f5619f..fe70c7708 100644 --- a/edg/hdl_server/__main__.py +++ b/edg/hdl_server/__main__.py @@ -73,8 +73,6 @@ def elaborate_class(elt_cls: Type[LibraryElementType]) -> Tuple[LibraryElementTy link_proto = builder.elaborate_toplevel(obj) assert isinstance(link_proto, edgir.Link) # TODO this needs to be cleaned up return obj, edgir.Library.NS.Val(link=link_proto) - elif isinstance(obj, Bundle): # TODO: note Bundle extends Port, so this must come first - return obj, edgir.Library.NS.Val(bundle=obj._def_to_proto()) elif isinstance(obj, Port): return obj, edgir.Library.NS.Val(port=cast(edgir.Port, obj._def_to_proto())) else: From 7485b65ff86498b120e998361ea4b8aeff56e3a9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 19:01:01 -0700 Subject: [PATCH 03/11] clean --- edg/core/Ports.py | 30 +++++++++++------------ edg/core/TransformUtil.py | 4 +-- edg/electronics_model/NetlistGenerator.py | 3 +-- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/edg/core/Ports.py b/edg/core/Ports.py index e8584af55..0465deb97 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -17,6 +17,7 @@ if TYPE_CHECKING: from .Blocks import BaseBlock + from .Array import Vector from .Link import Link from .PortBlocks import PortBridge, PortAdapter @@ -31,7 +32,7 @@ def __call__(cls, *args: Any, **kwargs: Any) -> Any: return obj -PortParentTypes = Union["Port", "BaseBlock"] +PortParentTypes = Union["Port", "Vector[Any]", "BaseBlock"] @non_library @@ -276,6 +277,19 @@ def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr initializers.extend(port._get_initializers(path_prefix + [name])) return initializers + def with_elt_initializers(self: SelfType, replace_elts: dict[str, "Port"]) -> SelfType: + """Clones model-typed self, except adding initializers to elements from the input dict. + Those elements must be empty.""" + assert self._parent is None, "self must not be bound" + cloned = self._clone() + for name, replace_port in replace_elts.items(): + assert replace_port._parent is None, "replace_elts must not be bound" + cloned_port = cloned._ports[name] + assert isinstance(replace_port, type(cloned_port)) + assert not cloned_port._get_initializers([]), f"replace_elts sub-port {name} was not empty" + cloned_port._cloned_from(replace_port) + return cloned + def is_connected(self) -> BoolExpr: return self._is_connected @@ -318,17 +332,3 @@ def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: class Bundle(Port[PortLinkType], Generic[PortLinkType]): SelfType = TypeVar("SelfType", bound="Bundle") - def with_elt_initializers(self: SelfType, replace_elts: dict[str, Port]) -> SelfType: - """Clones model-typed self, except adding initializers to elements from the input dict. - Those elements must be empty.""" - assert self._parent is None, "self must not be bound" - cloned = self._clone() - for name, replace_port in replace_elts.items(): - assert replace_port._parent is None, "replace_elts must not be bound" - cloned_port = cloned._ports[name] - assert isinstance(replace_port, type(cloned_port)) - assert not cloned_port._get_initializers([]), f"replace_elts sub-port {name} was not empty" - cloned_port._cloned_from(replace_port) - return cloned - - diff --git a/edg/core/TransformUtil.py b/edg/core/TransformUtil.py index 4ef279474..095af7c37 100644 --- a/edg/core/TransformUtil.py +++ b/edg/core/TransformUtil.py @@ -115,11 +115,11 @@ def _follow_partial_steps( return None, (self, curr) elif steps[0].HasField("name"): name = steps[0].name - if isinstance(curr, (edgir.Port, edgir.Bundle, edgir.HierarchyBlock, edgir.Link)): + if isinstance(curr, (edgir.Port, edgir.HierarchyBlock, edgir.Link)): param_opt = edgir.pair_get_opt(curr.params, name) if param_opt is not None: return self.append_param(name)._follow_partial_steps(steps[1:], param_opt) - if isinstance(curr, (edgir.Bundle, edgir.Link, edgir.HierarchyBlock, edgir.LinkArray)): + if isinstance(curr, (edgir.Port, edgir.Link, edgir.HierarchyBlock, edgir.LinkArray)): port_opt = edgir.pair_get_opt(curr.ports, name) if port_opt is not None: return self.append_port(name)._follow_partial_steps(steps[1:], edgir.resolve_portlike(port_opt)) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index d03843359..2ac836700 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -227,7 +227,7 @@ def connect_ports( if isinstance(elt1[1], edgir.Port) and isinstance(elt2[1], edgir.Port): scope.edges.setdefault(elt1[0], []).append(elt2[0]) scope.edges.setdefault(elt2[0], []).append(elt1[0]) - elif isinstance(elt1[1], edgir.Bundle) and isinstance(elt2[1], edgir.Bundle): + elt1_names = list(map(lambda pair: pair.name, elt1[1].ports)) elt2_names = list(map(lambda pair: pair.name, elt2[1].ports)) assert elt1_names == elt2_names, f"mismatched bundle types {elt1}, {elt2}" @@ -237,7 +237,6 @@ def connect_ports( (elt1[0].append_port(key), edgir.resolve_portlike(edgir.pair_get(elt1[1].ports, key))), (elt2[0].append_port(key), edgir.resolve_portlike(edgir.pair_get(elt2[1].ports, key))), ) - # don't need to create the bundle connect, since Bundles can't be CircuitPorts else: raise ValueError(f"can't connect types {elt1}, {elt2}") From 8902033619b7029eeec1b988a51be404c7f4588b Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 19:13:49 -0700 Subject: [PATCH 04/11] Unify compiler --- compiler/src/main/scala/edg/ElemBuilder.scala | 23 ++---------- compiler/src/main/scala/edg/Wrappers.scala | 1 - .../main/scala/edg/compiler/Compiler.scala | 9 ++--- .../edg/compiler/DesignAssertionCheck.scala | 3 +- .../main/scala/edg/compiler/DesignMap.scala | 15 +++----- .../edg/compiler/DesignRefsValidate.scala | 6 +--- .../compiler/DesignStructuralValidate.scala | 15 ++++---- .../scala/edg/compiler/PythonInterface.scala | 2 -- .../edg/wir/BlockConnectivityAnalysis.scala | 1 - compiler/src/main/scala/edg/wir/Library.scala | 3 -- .../src/main/scala/edg/wir/PortLike.scala | 35 +++---------------- .../CompilerBundleExpansionTest.scala | 6 ++-- .../CompilerLinkPortArrayExpansionTest.scala | 4 +-- .../wir/LibraryConnectivityAnalysisTest.scala | 2 +- 14 files changed, 28 insertions(+), 97 deletions(-) diff --git a/compiler/src/main/scala/edg/ElemBuilder.scala b/compiler/src/main/scala/edg/ElemBuilder.scala index 1be87f4f9..e21780f8a 100644 --- a/compiler/src/main/scala/edg/ElemBuilder.scala +++ b/compiler/src/main/scala/edg/ElemBuilder.scala @@ -219,33 +219,18 @@ object ElemBuilder { ) def Port( - selfClass: String, - params: SeqMap[String, init.ValInit] = SeqMap(), - constraints: SeqMap[String, expr.ValueExpr] = SeqMap(), - ): elem.PortLike = elem.PortLike(`is` = - elem.PortLike.Is.Port(elem.Port( - params = params.toPb, - constraints = constraints.toPb, - selfClass = selfClass match { - case "" => None - case selfClass => Some(LibraryPath(selfClass)) - } - )) - ) - - def Bundle( selfClass: String, params: SeqMap[String, init.ValInit] = SeqMap(), ports: SeqMap[String, elem.PortLike] = SeqMap(), constraints: SeqMap[String, expr.ValueExpr] = SeqMap(), ): elem.PortLike = elem.PortLike(`is` = - elem.PortLike.Is.Bundle(elem.Bundle( + elem.PortLike.Is.Port(elem.Port( params = params.toPb, ports = ports.toPb, constraints = constraints.toPb, selfClass = selfClass match { case "" => None - case superclass => Some(LibraryPath(superclass)) + case selfClass => Some(LibraryPath(selfClass)) } )) ) @@ -306,10 +291,6 @@ object ElemBuilder { _.`is` match { case elem.PortLike.Is.Port(port) => port.getSelfClass.toFullString -> schema.Library.NS.Val(`type` = schema.Library.NS.Val.Type.Port(port)) - case elem.PortLike.Is.Bundle(bundle) => - bundle.getSelfClass.toFullString -> schema.Library.NS.Val(`type` = - schema.Library.NS.Val.Type.Bundle(bundle) - ) case port => throw new NotImplementedError(s"Unknown PortLike in library $port") } }.toMap diff --git a/compiler/src/main/scala/edg/Wrappers.scala b/compiler/src/main/scala/edg/Wrappers.scala index 2f45053e0..e54943a33 100644 --- a/compiler/src/main/scala/edg/Wrappers.scala +++ b/compiler/src/main/scala/edg/Wrappers.scala @@ -5,5 +5,4 @@ object IrPort { import edgir.elem.elem case class Port(pb: elem.Port) extends IrPort - case class Bundle(pb: elem.Bundle) extends IrPort } diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index 4b3d5d3c5..d7f404a75 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -289,7 +289,7 @@ class Compiler private ( // Add sub-ports to the elaboration dependency graph, as appropriate toLinkPort match { - case toLinkPort: wir.Bundle => + case toLinkPort: wir.Port => for (portName <- toLinkPort.getPorts.keys) { elaboratePending.addNode( ElaborateRecord.Connect( @@ -320,7 +320,7 @@ class Compiler private ( // Returns the deepest applicable postfix, starting from a port def resolveRecursive(portPath: DesignPath, port: wir.PortLike, postfix: Seq[String]): Seq[String] = { port match { - case _: wir.Port | _: wir.Bundle | _: wir.PortLibrary => // don't recurse into these + case _: wir.Port | _: wir.PortLibrary => // don't recurse into these // note that libraries in arrays may not yet have been elaborated Seq() case port: wir.PortArray => @@ -434,9 +434,6 @@ class Compiler private ( case port: wir.Port => constProp.addAssignValue(path.asIndirect + IndirectStep.Name, TextValue(path.toString), containerPath, "name") processParamDeclarations(path, port) - case port: wir.Bundle => - constProp.addAssignValue(path.asIndirect + IndirectStep.Name, TextValue(path.toString), containerPath, "name") - processParamDeclarations(path, port) for ((childPortName, childPort) <- port.getPorts) { elaboratePort(path + childPortName, containerPath, port, childPort) } @@ -1196,7 +1193,7 @@ class Compiler private ( // TODO refactor this out, ConnectedLink needs to be centralized def setConnectedLink(portPath: DesignPath, port: PortLike): Unit = (port: @unchecked) match { - case _: wir.Port | _: wir.Bundle => + case _: wir.Port => constProp.setConnectedLink(path, portPath) case port: wir.PortArray => port.getPorts.foreach { case (subPortName, subPort) => diff --git a/compiler/src/main/scala/edg/compiler/DesignAssertionCheck.scala b/compiler/src/main/scala/edg/compiler/DesignAssertionCheck.scala index cda7a897c..dd8505433 100644 --- a/compiler/src/main/scala/edg/compiler/DesignAssertionCheck.scala +++ b/compiler/src/main/scala/edg/compiler/DesignAssertionCheck.scala @@ -33,9 +33,8 @@ class DesignAssertionCheck(compiler: Compiler) } } - override def mapPort(path: DesignPath, port: elem.Port): Unit = {} + override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = {} override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = {} - override def mapBundle(path: DesignPath, port: elem.Bundle, ports: SeqMap[String, Unit]): Unit = {} override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = {} override def mapBlock( diff --git a/compiler/src/main/scala/edg/compiler/DesignMap.scala b/compiler/src/main/scala/edg/compiler/DesignMap.scala index 959d6e288..2ee89c2d1 100644 --- a/compiler/src/main/scala/edg/compiler/DesignMap.scala +++ b/compiler/src/main/scala/edg/compiler/DesignMap.scala @@ -16,15 +16,12 @@ trait DesignMap[PortType, BlockType, LinkType] { // These methods handle how nodes are processed must be overridden by the user where appropriate // (left default, they will exception out, which may be desired behavior on unexpected node types) - def mapPort(path: DesignPath, port: elem.Port): PortType = { + def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, PortType]): PortType = { throw new NotImplementedError(s"Undefined mapPort at $path") } def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, PortType]): PortType = { throw new NotImplementedError(s"Undefined mapPortArray at $path") } - def mapBundle(path: DesignPath, port: elem.Bundle, ports: SeqMap[String, PortType]): PortType = { - throw new NotImplementedError(s"Undefined mapBundle at $path") - } def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): PortType = { throw new NotImplementedError(s"Undefined mapPortLibrary at $path") } @@ -64,11 +61,11 @@ trait DesignMap[PortType, BlockType, LinkType] { // These methods provide default recursive processing functionality for child sub-tree elements, // and may be (but are not required to be) optionally overridden - def wrapBundle(path: DesignPath, port: elem.Bundle): PortType = { + def wrapPort(path: DesignPath, port: elem.Port): PortType = { val ports = port.ports.toSeqMap.map { case (name, elt) => name -> wrapPortlike(path + name, elt) } - mapBundle(path, port, ports) + mapPort(path, port, ports) } def wrapPortArray(path: DesignPath, port: elem.PortArray): PortType = { @@ -80,8 +77,7 @@ trait DesignMap[PortType, BlockType, LinkType] { def wrapPortlike(path: DesignPath, portLike: elem.PortLike): PortType = { portLike.is match { - case elem.PortLike.Is.Port(port) => mapPort(path, port) - case elem.PortLike.Is.Bundle(port) => wrapBundle(path, port) + case elem.PortLike.Is.Port(port) => wrapPort(path, port) case elem.PortLike.Is.Array(port) => wrapPortArray(path, port) case elem.PortLike.Is.LibElem(port) => mapPortLibrary(path, port) case block => throw new NotImplementedError(s"Unknown BlockLike type at $path: $block") @@ -150,9 +146,8 @@ trait DesignBlockMap[BlockType] extends DesignMap[Unit, BlockType, Unit] { // These methods handle how nodes are processed must be overridden by the user where appropriate // (left default, they will exception out, which may be desired behavior on unexpected node types) - final override def mapPort(path: DesignPath, port: elem.Port): Unit = {} + final override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = {} final override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = {} - final override def mapBundle(path: DesignPath, port: elem.Bundle, ports: SeqMap[String, Unit]): Unit = {} final override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = {} final override def mapBlock( diff --git a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala index 56fd35d14..55f61bfb8 100644 --- a/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala +++ b/compiler/src/main/scala/edg/compiler/DesignRefsValidate.scala @@ -144,17 +144,13 @@ class DesignRefsValidate extends DesignMap[Unit, Unit, Unit] { } } - override def mapPort(path: DesignPath, port: elem.Port): Unit = { + override def mapPort(path: DesignPath, port: elem.Port, ports: SeqMap[String, Unit]): Unit = { port.params.asPairs.foreach { case (name, _) => paramDefs.add(path + name) } portDefs.add(path) } override def mapPortArray(path: DesignPath, port: elem.PortArray, ports: SeqMap[String, Unit]): Unit = { // do nothing } - override def mapBundle(path: DesignPath, port: elem.Bundle, ports: SeqMap[String, Unit]): Unit = { - port.params.asPairs.foreach { case (name, _) => paramDefs.add(path + name) } - portDefs.add(path) - } override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Unit = { Seq(CompilerError.LibraryElement(path, port)) } diff --git a/compiler/src/main/scala/edg/compiler/DesignStructuralValidate.scala b/compiler/src/main/scala/edg/compiler/DesignStructuralValidate.scala index a21133372..67570a32b 100644 --- a/compiler/src/main/scala/edg/compiler/DesignStructuralValidate.scala +++ b/compiler/src/main/scala/edg/compiler/DesignStructuralValidate.scala @@ -12,8 +12,12 @@ import scala.collection.SeqMap * - unelaborated library elements */ class DesignStructuralValidate extends DesignMap[Seq[CompilerError], Seq[CompilerError], Seq[CompilerError]] { - override def mapPort(path: DesignPath, port: elem.Port): Seq[CompilerError] = { - Seq() + override def mapPort( + path: DesignPath, + port: elem.Port, + ports: SeqMap[String, Seq[CompilerError]] + ): Seq[CompilerError] = { + ports.values.flatten.toSeq } override def mapPortArray( path: DesignPath, @@ -27,13 +31,6 @@ class DesignStructuralValidate extends DesignMap[Seq[CompilerError], Seq[Compile } undefinedError ++ ports.values.flatten.toSeq } - override def mapBundle( - path: DesignPath, - port: elem.Bundle, - ports: SeqMap[String, Seq[CompilerError]] - ): Seq[CompilerError] = { - ports.values.flatten.toSeq - } override def mapPortLibrary(path: DesignPath, port: ref.LibraryPath): Seq[CompilerError] = { Seq(CompilerError.LibraryElement(path, port)) } diff --git a/compiler/src/main/scala/edg/compiler/PythonInterface.scala b/compiler/src/main/scala/edg/compiler/PythonInterface.scala index 3251c9682..661c6c3cb 100644 --- a/compiler/src/main/scala/edg/compiler/PythonInterface.scala +++ b/compiler/src/main/scala/edg/compiler/PythonInterface.scala @@ -395,7 +395,6 @@ class PythonInterfaceLibrary() extends Library { override def allPorts: Map[ref.LibraryPath, IrPort] = elts.collect { case (path, schema.Library.NS.Val.Type.Port(port)) => (path, IrPort.Port(port)) - case (path, schema.Library.NS.Val.Type.Bundle(port)) => (path, IrPort.Bundle(port)) }.toMap override def allLinks: Map[ref.LibraryPath, elem.Link] = elts.collect { @@ -420,7 +419,6 @@ class PythonInterfaceLibrary() extends Library { override def getPort(path: ref.LibraryPath): Errorable[IrPort] = { getLibraryPartialMapped(path, "port") { case schema.Library.NS.Val.Type.Port(member) => IrPort.Port(member) - case schema.Library.NS.Val.Type.Bundle(member) => IrPort.Bundle(member) } } diff --git a/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala b/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala index f65f45b62..e6ba1a7fb 100644 --- a/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala +++ b/compiler/src/main/scala/edg/wir/BlockConnectivityAnalysis.scala @@ -36,7 +36,6 @@ object BlockConnectivityAnalysis { def typeOfPortLike(portLike: elem.PortLike): ref.LibraryPath = portLike.is match { case elem.PortLike.Is.LibElem(lib) => lib case elem.PortLike.Is.Port(port) => port.getSelfClass - case elem.PortLike.Is.Bundle(port) => port.getSelfClass case elem.PortLike.Is.Array(port) => port.getSelfClass case other => throw new IllegalArgumentException(s"Unexpected PortLike ${other.getClass}") } diff --git a/compiler/src/main/scala/edg/wir/Library.scala b/compiler/src/main/scala/edg/wir/Library.scala index cec6e9bd3..fc1ae5aab 100644 --- a/compiler/src/main/scala/edg/wir/Library.scala +++ b/compiler/src/main/scala/edg/wir/Library.scala @@ -85,7 +85,6 @@ class EdgirLibrary(pb: schema.Library) extends Library { val libraryPath = ref.LibraryPath(target = Some(ref.LocalStep(step = ref.LocalStep.Step.Name(name)))) member.`type` match { case schema.Library.NS.Val.Type.Port(_) => libraryPath -> member.`type` - case schema.Library.NS.Val.Type.Bundle(_) => libraryPath -> member.`type` case schema.Library.NS.Val.Type.HierarchyBlock(_) => libraryPath -> member.`type` case schema.Library.NS.Val.Type.Link(_) => libraryPath -> member.`type` case schema.Library.NS.Val.Type.Namespace(_) => @@ -100,7 +99,6 @@ class EdgirLibrary(pb: schema.Library) extends Library { override def allPorts: Map[ref.LibraryPath, IrPort] = elts.collect { case (path, schema.Library.NS.Val.Type.Port(port)) => (path, IrPort.Port(port)) - case (path, schema.Library.NS.Val.Type.Bundle(port)) => (path, IrPort.Bundle(port)) } override def allLinks: Map[ref.LibraryPath, elem.Link] = elts.collect { @@ -123,7 +121,6 @@ class EdgirLibrary(pb: schema.Library) extends Library { override def getPort(path: ref.LibraryPath): Errorable[IrPort] = elts.get(path) match { case Some(schema.Library.NS.Val.Type.Port(member)) => Errorable.Success(IrPort.Port(member)) - case Some(schema.Library.NS.Val.Type.Bundle(member)) => Errorable.Success(IrPort.Bundle(member)) case Some(member) => Errorable.Error(s"Library element at $path not a port-like, got ${member.getClass}") case None => Errorable.Error(s"Library does not contain $path") } diff --git a/compiler/src/main/scala/edg/wir/PortLike.scala b/compiler/src/main/scala/edg/wir/PortLike.scala index 882d30530..cdb2a8f18 100644 --- a/compiler/src/main/scala/edg/wir/PortLike.scala +++ b/compiler/src/main/scala/edg/wir/PortLike.scala @@ -18,7 +18,6 @@ object PortLike { import edg.IrPort def fromIrPort(irPort: IrPort): PortLike = irPort match { case IrPort.Port(port) => new Port(port) - case IrPort.Bundle(bundle) => new Bundle(bundle) case irPort => throw new NotImplementedError(s"Can't construct PortLike from $irPort") } @@ -30,37 +29,11 @@ object PortLike { } class Port(pb: elem.Port) extends PortLike - with HasParams { - override def cloned: Port = this // immutable - - override def isElaborated: Boolean = true - - override def getSelfClass: LibraryPath = pb.getSelfClass - override def getDirectSuperclasses: Seq[LibraryPath] = pb.superclasses - override def getAllClasses: Seq[LibraryPath] = Seq(pb.selfClass, pb.superclasses, pb.superSuperclasses).flatten - - override def getParams: SeqMap[String, init.ValInit] = pb.params.toSeqMap - - override def resolve(suffix: Seq[String]): Pathable = suffix match { - case Seq() => this - case suffix => throw new InvalidPathException(s"No elements (of $suffix) in Port") - } - - def toEltPb: elem.Port = { - pb - } - - def toPb: elem.PortLike = { - elem.PortLike(`is` = elem.PortLike.Is.Port(toEltPb)) - } -} - -class Bundle(pb: elem.Bundle) extends PortLike with HasMutablePorts with HasParams { override protected val ports: mutable.SeqMap[String, PortLike] = parsePorts(pb.ports) - override def cloned: Bundle = { - val cloned = new Bundle(pb) + override def cloned: Port = { + val cloned = new Port(pb) cloned.ports.clear() cloned.ports.addAll(ports.map { case (name, port) => name -> port.cloned }) cloned @@ -84,14 +57,14 @@ class Bundle(pb: elem.Bundle) extends PortLike } } - def toEltPb: elem.Bundle = { + def toEltPb: elem.Port = { pb.copy( ports = ports.view.mapValues(_.toPb).to(SeqMap).toPb, ) } def toPb: elem.PortLike = { - elem.PortLike(`is` = elem.PortLike.Is.Bundle(toEltPb)) + elem.PortLike(`is` = elem.PortLike.Is.Port(toEltPb)) } } diff --git a/compiler/src/test/scala/edg/compiler/CompilerBundleExpansionTest.scala b/compiler/src/test/scala/edg/compiler/CompilerBundleExpansionTest.scala index 2a5afbd73..984db6c8c 100644 --- a/compiler/src/test/scala/edg/compiler/CompilerBundleExpansionTest.scala +++ b/compiler/src/test/scala/edg/compiler/CompilerBundleExpansionTest.scala @@ -21,7 +21,7 @@ class CompilerBundleExpansionTest extends AnyFlatSpec with CompilerTestUtil { "param" -> ValInit.Integer, ), ), - Port.Bundle( + Port.Port( selfClass = "outerPort", params = SeqMap( "param" -> ValInit.Integer, @@ -104,7 +104,7 @@ class CompilerBundleExpansionTest extends AnyFlatSpec with CompilerTestUtil { "outerParam" -> ValInit.Integer, ), ports = SeqMap( - "port" -> Port.Bundle( + "port" -> Port.Port( selfClass = "outerPort", params = SeqMap( "param" -> ValInit.Integer, @@ -132,7 +132,7 @@ class CompilerBundleExpansionTest extends AnyFlatSpec with CompilerTestUtil { "outerParam" -> ValInit.Integer, ), ports = SeqMap( - "outerPort" -> Port.Bundle( + "outerPort" -> Port.Port( selfClass = "outerPort", params = SeqMap( "param" -> ValInit.Integer, diff --git a/compiler/src/test/scala/edg/compiler/CompilerLinkPortArrayExpansionTest.scala b/compiler/src/test/scala/edg/compiler/CompilerLinkPortArrayExpansionTest.scala index aa883ec99..030b4c5db 100644 --- a/compiler/src/test/scala/edg/compiler/CompilerLinkPortArrayExpansionTest.scala +++ b/compiler/src/test/scala/edg/compiler/CompilerLinkPortArrayExpansionTest.scala @@ -18,14 +18,14 @@ class CompilerLinkPortArrayExpansionTest extends AnyFlatSpec with CompilerTestUt ports = Seq( Port.Port("sourcePort"), Port.Port("sinkPort"), - Port.Bundle( + Port.Port( "outerSourcePort", ports = SeqMap( "a" -> Port.Library("sourcePort"), "b" -> Port.Library("sourcePort"), ) ), - Port.Bundle( + Port.Port( "outerSinkPort", ports = SeqMap( "a" -> Port.Library("sinkPort"), diff --git a/compiler/src/test/scala/edg/wir/LibraryConnectivityAnalysisTest.scala b/compiler/src/test/scala/edg/wir/LibraryConnectivityAnalysisTest.scala index 612e22730..16ec860b6 100644 --- a/compiler/src/test/scala/edg/wir/LibraryConnectivityAnalysisTest.scala +++ b/compiler/src/test/scala/edg/wir/LibraryConnectivityAnalysisTest.scala @@ -15,7 +15,7 @@ class LibraryConnectivityAnalysisTest extends AnyFlatSpec { ports = Seq( Port.Port("innerSource"), Port.Port("innerSink"), - Port.Bundle( + Port.Port( "outerPort", ports = SeqMap( "inner" -> Port.Library("innerPort"), From 3fdfee840c049d881a9e2c4979719478f9fa57ec Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 19:41:33 -0700 Subject: [PATCH 05/11] refactor core compiler --- compiler/src/main/scala/edg/Wrappers.scala | 8 -------- .../main/scala/edg/compiler/Compiler.scala | 13 ++++++------- .../scala/edg/compiler/PythonInterface.scala | 9 ++++----- compiler/src/main/scala/edg/wir/Library.scala | 13 ++++++------- .../src/main/scala/edg/wir/PortLike.scala | 8 +------- .../resources/edg-compiler-precompiled.jar | Bin 13166522 -> 13118174 bytes edg/hdl_server/__main__.py | 2 +- 7 files changed, 18 insertions(+), 35 deletions(-) delete mode 100644 compiler/src/main/scala/edg/Wrappers.scala diff --git a/compiler/src/main/scala/edg/Wrappers.scala b/compiler/src/main/scala/edg/Wrappers.scala deleted file mode 100644 index e54943a33..000000000 --- a/compiler/src/main/scala/edg/Wrappers.scala +++ /dev/null @@ -1,8 +0,0 @@ -package edg - -sealed trait IrPort // to box Port-like types because of lack of union types in SScala -object IrPort { - import edgir.elem.elem - - case class Port(pb: elem.Port) extends IrPort -} diff --git a/compiler/src/main/scala/edg/compiler/Compiler.scala b/compiler/src/main/scala/edg/compiler/Compiler.scala index d7f404a75..eb613cdd7 100644 --- a/compiler/src/main/scala/edg/compiler/Compiler.scala +++ b/compiler/src/main/scala/edg/compiler/Compiler.scala @@ -117,7 +117,7 @@ class AssignNamer() { } object Compiler { - final val kExpectedProtoVersion = 7 + final val kExpectedProtoVersion = 8 } /** Compiler for a particular design, with an associated library to elaborate references from. @@ -416,12 +416,11 @@ class Compiler private ( val portPb = library.getPort(libraryPath) match { case Errorable.Success(portPb) => portPb case Errorable.Error(err) => - import edg.IrPort import edgir.elem.elem errors += CompilerError.LibraryError(path, libraryPath, err) - IrPort.Port(elem.Port()) + elem.Port() } - val newPort = wir.PortLike.fromIrPort(portPb) + val newPort = new wir.Port(portPb) container.elaborate(path.lastString, newPort) newPort case port: wir.PortArray => port // no instantiation needed @@ -1132,7 +1131,7 @@ class Compiler private ( case connects => throw new IllegalArgumentException(s"invalid connections to array $connects") } - case _ => // non-array, eg Port or Bundle + case _ => // non-array, eg Port connectedConstraints.connectionsByLinkPort(portPostfix, false) match { case PortConnections.ArrayConnect(constrName, constr) => constr.expr match { case expr.ValueExpr.Expr.ConnectedArray(connected) => @@ -1401,7 +1400,7 @@ class Compiler private ( link.getModelPorts(portPostfix(1)) match { case _: wir.PortArray => (portPostfix.init, (constrName, constr)) // drop the array index - case _ => // non-array like Port and Bundle + case _ => // non-array like Port (portPostfix, (constrName, constr)) } }.groupBy(_._1).foreach { case (portPostfix, elts) => // actually resolve (delayed if array) @@ -1417,7 +1416,7 @@ class Compiler private ( ElaborateRecord.ElaboratePortArray(path ++ portPostfix) ) ) - case _ => // non-array like Port and Bundle + case _ => // non-array like Port val Seq((constrName, constr)) = constrNamesConstrs // can only be one element resolvePortConnectivity(path, portPostfix, Some(constrName, constr)) } diff --git a/compiler/src/main/scala/edg/compiler/PythonInterface.scala b/compiler/src/main/scala/edg/compiler/PythonInterface.scala index 661c6c3cb..0224edeff 100644 --- a/compiler/src/main/scala/edg/compiler/PythonInterface.scala +++ b/compiler/src/main/scala/edg/compiler/PythonInterface.scala @@ -1,7 +1,6 @@ package edg.compiler import edg.EdgirUtils.SimpleLibraryPath -import edg.IrPort import edg.util.{Errorable, QueueStream, timeExec} import edg.wir.{DesignPath, IndirectDesignPath, Library} import edgir.elem.elem @@ -393,8 +392,8 @@ class PythonInterfaceLibrary() extends Library { case (path, schema.Library.NS.Val.Type.HierarchyBlock(block)) => (path, block) }.toMap - override def allPorts: Map[ref.LibraryPath, IrPort] = elts.collect { - case (path, schema.Library.NS.Val.Type.Port(port)) => (path, IrPort.Port(port)) + override def allPorts: Map[ref.LibraryPath, elem.Port] = elts.collect { + case (path, schema.Library.NS.Val.Type.Port(port)) => (path, port) }.toMap override def allLinks: Map[ref.LibraryPath, elem.Link] = elts.collect { @@ -416,9 +415,9 @@ class PythonInterfaceLibrary() extends Library { case schema.Library.NS.Val.Type.Link(member) => member } } - override def getPort(path: ref.LibraryPath): Errorable[IrPort] = { + override def getPort(path: ref.LibraryPath): Errorable[elem.Port] = { getLibraryPartialMapped(path, "port") { - case schema.Library.NS.Val.Type.Port(member) => IrPort.Port(member) + case schema.Library.NS.Val.Type.Port(member) => member } } diff --git a/compiler/src/main/scala/edg/wir/Library.scala b/compiler/src/main/scala/edg/wir/Library.scala index fc1ae5aab..d89c8f5f1 100644 --- a/compiler/src/main/scala/edg/wir/Library.scala +++ b/compiler/src/main/scala/edg/wir/Library.scala @@ -1,7 +1,6 @@ package edg.wir import edg.EdgirUtils.SimpleLibraryPath -import edg.IrPort import edg.compiler.ExprValue import edg.util.Errorable import edg.wir.ProtoUtil.{ @@ -30,11 +29,11 @@ trait Library { // subclass relations def getBlock(path: ref.LibraryPath, ignoreRefinements: Boolean = false): Errorable[elem.HierarchyBlock] def getLink(path: ref.LibraryPath): Errorable[elem.Link] - def getPort(path: ref.LibraryPath): Errorable[IrPort] + def getPort(path: ref.LibraryPath): Errorable[elem.Port] // Returns all elements of the specified type and their path. // If the library has a mutable backing, this may change over time. - def allPorts: Map[ref.LibraryPath, IrPort] + def allPorts: Map[ref.LibraryPath, elem.Port] def allBlocks: Map[ref.LibraryPath, elem.HierarchyBlock] def allLinks: Map[ref.LibraryPath, elem.Link] @@ -97,8 +96,8 @@ class EdgirLibrary(pb: schema.Library) extends Library { case (path, schema.Library.NS.Val.Type.HierarchyBlock(block)) => (path, block) } - override def allPorts: Map[ref.LibraryPath, IrPort] = elts.collect { - case (path, schema.Library.NS.Val.Type.Port(port)) => (path, IrPort.Port(port)) + override def allPorts: Map[ref.LibraryPath, elem.Port] = elts.collect { + case (path, schema.Library.NS.Val.Type.Port(port)) => (path, port) } override def allLinks: Map[ref.LibraryPath, elem.Link] = elts.collect { @@ -119,8 +118,8 @@ class EdgirLibrary(pb: schema.Library) extends Library { case None => Errorable.Error(s"Library does not contain $path") } - override def getPort(path: ref.LibraryPath): Errorable[IrPort] = elts.get(path) match { - case Some(schema.Library.NS.Val.Type.Port(member)) => Errorable.Success(IrPort.Port(member)) + override def getPort(path: ref.LibraryPath): Errorable[elem.Port] = elts.get(path) match { + case Some(schema.Library.NS.Val.Type.Port(member)) => Errorable.Success(member) case Some(member) => Errorable.Error(s"Library element at $path not a port-like, got ${member.getClass}") case None => Errorable.Error(s"Library does not contain $path") } diff --git a/compiler/src/main/scala/edg/wir/PortLike.scala b/compiler/src/main/scala/edg/wir/PortLike.scala index cdb2a8f18..a2d1f0d61 100644 --- a/compiler/src/main/scala/edg/wir/PortLike.scala +++ b/compiler/src/main/scala/edg/wir/PortLike.scala @@ -15,12 +15,6 @@ sealed trait PortLike extends Pathable { } object PortLike { - import edg.IrPort - def fromIrPort(irPort: IrPort): PortLike = irPort match { - case IrPort.Port(port) => new Port(port) - case irPort => throw new NotImplementedError(s"Can't construct PortLike from $irPort") - } - def fromLibraryPb(portLike: elem.PortLike): PortLike = portLike.`is` match { case elem.PortLike.Is.LibElem(like) => PortLibrary(like) case elem.PortLike.Is.Array(like) => new PortArray(like) @@ -53,7 +47,7 @@ class Port(pb: elem.Port) extends PortLike if (ports.contains(subname)) { ports(subname).resolve(tail) } else { - throw new InvalidPathException(s"No elements $subname (of $suffix) in Bundle ${pb.getSelfClass.toSimpleString}") + throw new InvalidPathException(s"No elements $subname (of $suffix) in Port ${pb.getSelfClass.toSimpleString}") } } diff --git a/edg/core/resources/edg-compiler-precompiled.jar b/edg/core/resources/edg-compiler-precompiled.jar index 7a6949e5d3556ab31b072337b9762f6987755b44..15a0eb4595dc3cf88ad5398884890e60a1bc0402 100644 GIT binary patch delta 504239 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 cZl_l|uSP-c9Wh)<2PwOEAQcxTXh>FVY%o-~ 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 delta 551962 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

CQ`hDdo!0Jo z`&4JsR6xZJp$A>oBWx9FGPps)%6K6}{#%C+77Zd9_Eaf#xV#(tY!n6(Vd>z`P+svX zI~>{gc{cBkW3iFaX3A}NA}$%+!c#0HUu0Y=`u4M~ULuv4Th<+CldxLk)Kgy@lw&8^ zb|0pQW}G;H5&agJf=0U@S=#B#!=V%8>zJ_jJMF#R=77~d*bX8N*|({|g2-!|1pHO) z%i>{-pI+L$$$@oSEku$$qq0DmbYX5v4%GVZ(;gX;mM)rjs%8n%TJsEKm8PHCK`LEm{7cxkRuBi zSBSDD_!?5CwC6fFEpwrgQeZ4zQQ@mEIlF6IcL5McS4>2QA| z-(pl)MS+B_0^TV-EmLDgS&kd>--#86Y@Nn?J%<@~##-MK>n>Sehk6DVH+_fYN4X|v zTaBf^7-Onf--cQ^kJ9zg@MHnZtU_Jm;SfJq-mr{P(cGAR$_QR3i$z>5x~G#AfKBw4 zT-(^V9-^>ooxN86Jvq|325R6F8z<&bXc`aU`h?2kKrZQ4PfV0n_)cV7m?FIm+gq{$ z-@Z1kn5>>!WPkSxk0Vrz?Z(3hbSqb{9po%EUg(9HTADbFpGwoj@IwN&dU*?k4z~3C zMHj|j=9P9|zOg_+p4}uu1?H$KaHHxU{>$}D{gT6AJkiu?)@V}C>_Q6*ze=j|at66` zJTiq<*E~+U$9qFZPr+|Z{9ducL6rp-O2_9BR!k`C7MT>%4s+}(W_4z*qQX#OKE~R; zreUma_%VNFXm3ZL`}6}elcN4b~JO+a+#OUQ3X)qg~1*bRw)=CP`(ffrL3W7v9maS>|Y_ z=53x(!!UP#;q^psO14G^ku&FM-V8t^$-Ueo3vn*wT3@{pb3_3i&%Cv^1*F%U!Jp(H z`E$GCXVFTv2R9jkXlTVlR+uGpk1 zlI3*SG90sc*`8biaS8({44Ui>E6XqKHP#g6{#{HKAvG)F#xEQgL!>6Zhj&6@NQH;3@tiOGqrJkqhK=LD|4bw;28^42rN-IE}`tM3p#vxK&mO=ZC>a5jUe~m)&{kCtE~$!r|J~#w`4N^lG&E>Lmb-Q5}$9{B~Xy0Ua@|_so8V zwa|T)ZuA@TJ)-=6YSgDF>S9Du%R2uG)#-rG9sn~Ue_3;ZnJ(9gXvNj-l&A3AALNamVX^vqKs9A6V;Rq#1k!u4dvUIjB;d2JBY+g9&`y`NHp&LFo)z# zBBzF>3IhR>;R|~U)EE#_78pwO%$1w24}8rHkHw95hB4R&XSkzEArdy>J1<;w3|RYHt9F!~I@!}YC%Bjn+92ayZ3ea8}vRs7^*!TgQqmNv_)$MzfNxHuIBng$fp40pm zZ3s~C!~H7u7u}w<#HoB>vQDNaD84DQJ!y?nD#uQU z@!$qj3D|S}OsgVTgpB@;NXO!B+J(-?&mf_Mf3^Nh!w~@KM6vFLy!GX{zOoE zBg_vP?#`0iFef^?fjnTZb_`3j6)x4H3Giy(@%Q2_Y3E;=9Q?`-K}DyUihUIORKXgS zA5q!oyOfXw|LNAVEjZ!e4pY*E3`{-mWu>Pg-5&l;^F*;fNoiaI@8f%5C%>(Yu?P6i zGq6}P^1{P`fe`@7p>Y16XOII*sI$oePW432^h8RxGLiCT(7bCa>>e}SULHTYyPh)t zalGjsFg{4_?Q$c-ajo;XcGFYkW;CS#I9|n4t;XVJ4k z##~eVYF}mHDls^&F-IxRrpozRA#;i8Lv6$9S%yvS$s44}&cC(qkSP|g+}Qx8+2G-1 zOP+fQnKl#!T(<+kHD0}?+J?J!386iGhs6aqh~cfVs^G}pPfs)iGYG%mccKRc@I=-X z@xiTPPJZN2L-PkfWo#vfMNcl3o@#CTl5(8&+;NNaae??FYE!2LgcVCU)dVlGxY-x6T|fP?agY7vw^`;97+;Nq-&xBl<5Gjt0hLy47 z=t~m>%^d1-l%H}}nfeko}Ip)krOnPso~5M z6-X3M8G0A$Cj6KJ@B>{hEsCK$G+uS24h(0kgt+}Nio#uoiZAlgRv4WpJ~5jrKWc1O2ADA&HlD^1+E3qiil(nuJ+DmGtFJY2HW3NdGPsWc}wUjEB6_pf(c)UT#<2 zAPJwY?#ZYO8~XRCg#eRzxHzA0T-8ApAyTWs=U25>v~Q~fAQIxuvnfh!%MO)J=TB$2 zVAV2`Ld~HrJtVQ6Yo@lT;0He|Pl`@|9F$x0yK75J)}8;a0;l;UIi&3X`1dq1`?*@A zD+&vxmSygzVxp_=2o8k-%?p@{Syr>nUgLsfF)YoXkeYv>Z*af1pLrTL@`YtZGppK1 zrQ&bS>?z_LfZDD|(ZPz4u%aDv;y%?OytVLV=)jK+|2OXv)4v!2QHiCy(?<1eL6O68 zY_w)7Qyp4%a9LaR)beG%Cc6W0mbayT_3$EGeU_E5d)lY$+vsjp6|gdElH}TI<%WE2 zH!O(ltqm8J-)Ik+w4eNb1m&nz=8?n!>#gwmZ`)K0V9OeNEo~=C)_5QPFmNEMdjuz( zCO=@7+5cIXrcn3}>xjlIpf2w>+a~V%P+>0*OV|xD$|$63pe-R#V!NB!AmASC1~yVy z%=?EoVFS5PeheFuNCNpSt7RS?9KDXlif%W)>dL}1A^B&7a|EFuK7Brbg6ISBqmkhP zd9A|$KqwByPy^!Uh#5V0LH_-=)rd_r=urbRy2xh^Db!*w_uRFrZD=t{!B)ZyMwHY#MX?he{w`C*}B;PWZ?r z*@fzwf3ItztW2ixs9InnB6E7!&!T-S>|}KYfQkq&qzJCHMDpd#wK|jIPE15M%$%{J zE#~$U4{y`=z1A>R<3F3Xs<6(2VqN{t{f+RX9zPHn6W01sc)XfSFu^N{xYaQVceN4` z`nne&Xc-&P*DmvthVe)V0%FVZXlDS{K5LA#1wE7mACOVR2fdWc2^%_6lTRxbxPTGT z@1wVmeHsc^8-(dUre@(-It`N%UW80m!`h?dg z-%W|qh(hg|URs%dc#IA!fyO`7^_e%P@%i*Ony|32pL*_*7M!$Zl zFyqWH?~tw3kpRCjK?ovxXeSt&Ln+`C%u@L^G}X^!^Q#z;hviXXX?4dRFvrzC9LE_D zrT&_|>2SKF_~gx!Qg7+|=BI5#w^zC=-}80`S7g67!WO*%nlq{Cb@=si$@C`>eyr+bSal8(dZ+N7!No@3Yp^745J?o z3m>P$MqA$p)s|J?Rg*Ja<{G{1yudzQ@bsGf(s9buTMKef6K8<-T8{o!2Q6oXKa zCXr58_1*YpZ~U1-WlOV48MF-D>8QP?H99Q6v8OAfonUp199>*VzsH1`S??+obdJQ! z;>9sYERy;xx(UA;{A(;8Jm@$}Ndxqh0o3s9Vb7_LEd%%L*Drtki&+`f@Xa4U$_mpu zDyrktiH({mxLo~SKCF&rxI&I?jOJZfqB>$?Lf)k=~<2}H0XxR&(x-IT`)nq>8#=oU-;A5 z5XsX2+T(bmOqZLdT;f_!)vo#zvHEy>2-4?#yXipNd-iC?L3Nana4yaU0X zSj@Oi^#|T|^)%FlRAl9IZ=@7ur`iu*ZYo+uFR#3bQJKUOmIfh*x1_JTtxe$L?ldrU z1|~T9oT1D1wArSnPxe&5Am)HcZijBel%(yk5oO!&6eMx}*$Jh;6Qum3?GlWKtQNM8 zSf?nt61Iij@2)2c!utS`#b#^|v%Uw%qEwoFPz8O|@3Y7>bRjm8JaoBR@_HDGd$$JA zn9)2eJJj0ss`B9lrqnNuh1AJP<8IXW^o4o!-BWTPfixJkwD3A?o5)hD5jp8ae@TX; z0t=F)+e#CAaFx+YA!4U^9>$)%b2 zxOHT$ypQ7dl?lj$g!X|zh`?xOMH2gDkdpO2QJtYm6xLWc6B>ogH1j1&4|mC5 z0w6B*`Fr28eZ ziagRFGnXtdhu~2-c$O_tuI{mbR;BK-U)5DxE@JaC7;Moq&?cU?)kKu&u&280DyGM> z{aP4v7HkoA2}+ykvf^$>6yX_?h)*D29-gUBz)qA@!Gux+4yb~E`DyI|@UPHiyapDD zb(bzqD*$cZ2d4EgMCG1yq8VWm^fPzY7TIC<5K<^4FMAv{fB?H5p}4Bn_>nI%cps8{b#B z%__`EtWQ<~;Zfb)4f|i>tuLsBHeK)$Yj7^OA#k6p6+!5?IMk_h^E7#$^R` ztdzVvmQ%dujE>YF^xAg#wjt|Lw%43eXJlVpzMMS>J{Fzgn~M8;7UY5{{@1T}h-G(M z{~4lyr>HDtcrdVN?EgFago6Xtnz6ZoqXVhT*{Hx{fO6(+i~!9b!ur;1`jw)3Q+Zm> zLsm8Vjryvh@-%tf`rWbJ!ltI35v%x}G4}QPAAQ8^N*#YXIJgtXY|$XL4*yN+7C4m` zUE`7`VwtoIWLR5UJcha5@AMWKTEiWX4{Vm5Ib560MGrk182%-l?$L|Kn_?2~OMHhG zstzV9&+wLRw*hPbyN-Wzurw6YIH!9lbrghbU&b>6afpjJGA>Cdy=H5^vpjerTiN9B zQZX5G5h#}8JHbX8#ei8)Z!Sv2W_86$t_8yL%!EC#T?j*Y{Tp^Y?gW5WK`Rvs5F37!6C*{whg_YsXj|Qs&X>dn%QNK8KLDaq$X6+~Lu(LG(ZC3w6OD{~ z!IV9SU1_|}1hEwL1`#sn&zw?hzCXb6!{zy@P~E(~iW6Sk9j(D1uzt@<9WwAiy|!9njAPVYw(SN=N(oz|Dr|yHW4>;d zuzSZtCjh#&q+;L2+kD*Pb=J#V;tiQlqx-?gnQ4O6!2BI1_P8<0vU3d1jLSCCVVRMk zL~u?lgLL;c;fiD#;R(3JH9fa4 z6I3Hg?x&PHYVo1Yb%4}vwt6S=Xp*eFy3-AjTcG*_A=(MccqvYKL#>*G&1vsC)P!bNuDki`>^$yfFhQSms@6#ufe*S(z`5OT!_g3qb1sCMt1+Li_C zM3Ey&{Bc87fS4R8Yi&R9HDGHp_e{$7Sz1I)D7nAQX3$L6%H`TDPsb_RyK4OR7iKT> zi@aPqNn6EPD0o%G6I7|s8P>(TBb-vp)c|zZZscCiV>5k=C|=eCOtBR^`lszK7(}TX zJQwLl?85(r1Bvo1e^o;QBX)95YDB-`r^FL*^#HR0MtR+HC>+f* zOV?uNem)chrmc^m-^c$;kc5bV@p!bOfm2+-Nu%V&)B^$h)j+y&p)09K&I&@eRtc`5 zaG$>qBKkOL&)M0fi}ZiZ&sBsx0V1Ii_{i6MeIZcvW?gq;s*Q4GCWo(%IjfSnP&uma zp;$`$NBPO?&+tw+=u=X*{*po>St;lV3C_npIq}SUjr(%)d` zOX=X)&XvdJQ#k{liSL1%OCh;;AzI|&VF>K({nw7KJBGy?2(z2r$U-{90PSgE`P8(? zd|TN6r34}FwM!96PT`qeOPBGr5;+d@9%~Ao^U2R|*8YLMi3rUKz3}%5rsqs_`%UUC z+1z@|!Y`}XhtFUc(S^9u%wSop9bshVy*ejZZt0B~SBkzksIE%qJu17hw1XL#haJa3 za!Fx|-Y#V--5AwYe?(UF;?EXsyPnS5j)bP&rn+ACZl-%6_=2)}6IJ!6 zHFM(HZSWl(d9r_S%z2(Sh3AZ({S(`?&ho||Qw}TLZKnIt*wbDXi^l2IPV#nnrrH63 z`MMH`mNe-N4w@2$mVI0fD>*-5?MK6TBi2-nW>zKMmh;xY(M|^}%dBRcU>^l7BJI~9 z?1IzQCPlj{Pb@?2O-=pa-r^KSLYDbo#-q^|SWxlZX!69WK><19$B~HlBIu?Rku+>G zsuaYA5b%4-hHFj9Hd{D+IS#YGIECB*8%F7$lO?HX>Z6sdb6xs)o2JZEvvGxDmjH&m z0`2YX9*4OkjAN%Q`ovp^&5H0d)#Qp8H;7$vq#YSDBiiQ)IfTWiRI!%I<*E+ghR--B zRJ@g!MmJh@E?q9|PDz(@o9lS#YwV5^?wva8JjYRM74xQ|XHkaJxKLFrijX$>89ox2TTYqd@9revQ=iV{y`${3RFN){$ofPK75QXU0Zl^|O)IWhp5BToK54}l-MmrRsGx6ujcdB-&K1y>rlBO zIHf?m+E+lkIq(g7V!TSpbHh_`TYDorp^0QiD(jmBLtmev!{pV>l224|!s`(^BVRWM zucAO1ROcLb0fT*<;%zyR1sbMmd=DOHcsY;+%nUUg43nNP-I5!EJsWXlV`HQC!qUEy zL^&&yUXWJv>nr8B7aZEMN||uK=}pMOOA zFDSV9pRjCr*KBeStA7c89y(Z8p@+qZWJ{9c#GT`Seub3mnRq`f;BSbEH5n@HzDfgb z4GGETOt_<8xcSB$P)|@aLH=gLGhJ!xoJh+}BN+!C3L?_<#LaTMTlr@1M`L(3V2b7# zx&(JTBgZqv3jOrvFOrx6ZPs#a9H(qp|CRXj@JA|KUi?QhezU|6FfRi;-sS?2J+ib{ z!5Hr!5g8*#EEW3-by5(@qb;}npK-?F83xsLkt|gi9FRz%-8gXcTATF7Nob?yN%h1( ze%ymp?zASAEy7*t4&`K)#UKxU@6pkXoG8aYq%G(Y5e1YXY0V3My-9z#)D&zotf0%_ z2O^9JlsWQKs5Qf?(C{oB1Sowc%)A0CqMnfdqw}T>ry%;jnLkATWB&ZV9}^A0#s&Qw zE26-pkG8;Bt%opJY!vVaMhYpCsf1{k_{%#ng^p&QlgBRI-u>Vjsvj2+!RCJgPh3%G zwuB39K_JNe1@TGx2I@Csj=w<#BPw{w^Pcl^-!<#CP+8JZjl{!gv;@Vk*PhWP_xTx>keV-djLWAJ*Nm2 zw#!%MI6m-=G6ESNq$GyELQaG%<>~#ihObe3Z!n(og(+Y$ap1gEY;$-1!6&2wk zDwQFG0&935zr z54ce!@u;PD6^ihnQm-t*2IY%U>8>DZ_nL%vG|CMH@Mb6+QNjVgU;!+-A7Sq-0|>EU6HL2Nc@J1gTIB@^||nC`u@oA{bPnv=^N(0$DuA}b4gy6 zRjsNHJ4mX$;lasXUO?SHoNDtWjH!{RZU0h$wS$ThW;2f6(}5YE(TI zB+75)T=|XYSle(sm+UD_m<=W^lbJkUolf^>f?>1PF1SxPJ5bxxV85WX1!g*7-IfA* zESuj$kxH1^XwbN0$S3ZS`p)Dm((bcMmUhW1$?drK&tL!{Y}0UBapX~$fuFNZ6mtUK zqp?z50~S|uboW$QkM%`*8#Zr05kDQRpIM*IEy}t{3M6OD>r>{+Cq_p;Br&P5k}r5j zFXOmp)f?)70@;H7YU&b3Szh##>yD(_ZdHxpCjD(;)l>n)7JLP91I~}%X5y<&W~`4* z&9;r^ey{-NBI=3yYA1n!)x`ZTBA8nxBhF~3+*p~9Duxfkxvz*g0H#I6TIDo)40s5Lc0!mHpRl3{=$ zUzm$W?6C0@kb!@{2=MMKcRk7>0JsYYkY5rsA$Wjh@3PprT&eJ{0dCF7e=lg1`wW78 z9M?$B`)Tz7OraR7^{0Rw8SW_LKlvMkgOXDV&n|?**)|MA2NcLja=$rnDLya}m!Pjt zZ!gQKrLy6iP4E5V=EnxjnfAh~8IoXxC{qO=FNOG&Z>Z1J0y6$O*SWrHk<&@RU(AEp zpzi@j1qaHMV3NfP-a~$dUX!gRfC;gG;G7|D`k!7@dg{|HlFam!s7(4GwBF**g4eeC z)`sUp8`Pp;^^;xu5UvZGbr%8yOEf0!_#G?V<%7U~IY17*rC25&YwUfu>=WM$mj-|vPz32(Fpx4-36Kc*&{-1b!`$@Ry!(qd2+6Vm+$2v z?1WR(dmS|Tl%UkAQ1^4bfJic=Kwp5n1#jZyzf#W?i*}yzTk3JACz`Obq$h;1prkvv zupk2z?>))1r7>2a2sp#x$Q+a}QNUUbevKmirfZ2NY?anM)yf!49%K8(PNqOp>{^Vk zZzX%CVD$}kVoJ;m3CgDoaou@&zOe-42{^E0C2=U+8v}B;r+i+ve74(xnGdzu{zQGT zudTwBIWrV0D|$0y=kCAKUr?g0O3a98e%Ax+=tBA`$9-ictzkQjct^5waI(hvTGE`U z*nvNqF0X_BI3rA6z6_PXwO4H~=JJGW?1(3`!X_$xiX7p+{qOJ0juBPPyV_nhiGPxeV=vI{H>5}LQz!GJg0>x4<$5^ZQo>I(8O^!Uy2s9I; zxM20%^5y9=y!tk>!B!cF9hT(qIRyY*XQwGag|y|F zxE5*NHCRgB*n#viGud@dP5vYjG~d}R-)$M?np9V{nu<1sy!@YHBpDu`{MA6Ou)ghi zV^F7Xup7lZL32!kEvhqVLl3r&C4x_!i|vWQzdXOOn)R4`OgD+fkKF?8?kc|32-5Qr z&E>UCCCts;pJ09gx5IbnPM;mA8bl}E*q*@GB_og6BYz$qj-_dRJ7*M_DUSzVQw4g{ zY}P-N?{wZYj$Du#`+^DN44lBhwXjU7dzm6S`!pXPvQtLbc@0-ePfR{YPPG|t)HkeO z8*GAITs%Law-dTjx=6D`5JCZUM4e=oqCPO7F)1>}wq6dGPb$9~rn=aSb$J3~`8VNa zeQcJz@a>VwW9DIa=V;w})Q|n;5z5xcQC99J=cm-}nlwf{#iztr;v!i_ZaKlU^c9AS z0?;PS;JpH??=}M3A`-iQBbmTCP@{4LEw^9Xw=#!dU1GQWxTg1Wvbg~yt!y(o{t?Qj zyT;N=o+n%dfMqwk)4`Ww_Z;xxb}iK!Q^mZHsK+fXM8Q?Ssn|f^;@U#9bfWc-`OZAk zor<8HmsAQn@SicOb9U&wVc&m zQVmzeY;(VoLfOd6<=i!Q?ENno!8k=JML?2#yN=p!4gAQIHPREH64<=n^u2S(*jH!c z`yg{zc{~c2i=hW=K=aPcxeJd7bH^0zcv8BJ$3PcoV?n{T zGjd?;3%_GLE>iL)A}BiMoNWs@*<|`o|JNyvsd!=O)1LE?DQ=Ij8E$ zJM~HJdAOEkjCEfhQ@zOJ9^)s%Wwz=;zfnxk(BULm7eE~9m0}U;BTlcboWikt2F0*H z${@w#UVHS5uJTI!99n?HBgV?*QP{*zj>YV#L$A{6ubvCQ98srz=HG~l(|qY=$2nX5 z-pZyVj;4fvTS{?oQ@imnWJxTevE)bWru^ZIxsar@!Ib1JTNi=3s$X+P@O`#rc~21q z8j~k(JvGEXRJG|9y=4og5~VARN*}kvY+O{Fe^{Gac`xxB)i<}ZogS}a8rZ8t)T6E* zKnecKS=|ERl*B)JikOYPml;&D_S-Rz?;drIjy!S=ZjusbQ8bS8er^> z@;x^k5O(mB{fusVQs!?7*n769?~LH%rigB96sO%Mg!i;S^}tMI8qgZZC#y18)|@I? z!{vU*ax4-T2!)1-dfg=xq$|b~I<}+TR~7eddAuLPWxq)(GkpQvPCu1DpgJs2VPx(KJ|te%C1xYh^$eKE-~iuQu~jToVVzU zT8OWS9~isNDe%g?(bB5USl1^|e`y=bO{y*!bUOI|%{kQoQaTPOse(o)3B*u+W7GLx zcESJY3qJ7HOt3*m{L?`eTHpUPua0h3z@s(UIy7b^<-Z_P3lYO1r0CG(rk%e!#7Wo% z0Qu7Dsv{mo^}VcW4RV$mU9_dkssut@UU^mps!#N)^A)>P?pWgvWpavmZur~VrHNGuQ>Js-zuM(l+?$0e_AZF`}OKZ}1{|6%$m8 zmH&d~bIMFXTUppp?$}V*sAPvtY1!LwrY+u7VG0D1w*oK9SC(QM{EZ94M)*2*3;hb~ z3t~>fZ=spy(2yNz(RA`=kbBZ~@*4cF`=1X8&`C0HYfPT1(LMh+7a}!}(iLFn+tJlU zH>2;-4@IG|kkQ^+N>*5Ret;xj7cy`r6u2OoC*-Qlgr3w`nFeYYhHcy{EO2X9`H#3Z z+7_)}=>M{Ea5!%A*HApZIxO2$GW-e>w8!fPL*7Z(#uN!meNrn^g3u``^j=z|s;jV{ zq8k9KBs}1uzQF@;F~ikv-2t#)RbAtOb)x^_QL$1bZY5-j#nA?i4@;g;Jh{hNSq4$n zX~;}kzN9~x$Klq55^K(r&G9r~aHcA^E?Bhwqz*_%J5LSAI;AC!h+u(_+!kROm zh2eh&QLc!9tumBR8s

1h&fIuzkF=cX+1vb_xm;Kum*q?k8qW>#>{M#Sa~wY9K(k;&})mrW#`K+hM3@pdiUQ#tT1BWxFT+}5VmVF zV@*E{Dr_+P$n%RVMhdF6$mkO2&K7)^-^!3fiq9=^rsJPq-AUH@Iq6@+gaXXu-q>mE z6VA=z@8}IbsZ!+x3k0~x6=$$fJvN**czC|{)yrj^zEc?H@O0y~?9a2TkVxM(9Emf} zb*pV=tM`UQFVI_`_P4-r@Jk@g7%0~V^F9>2=AWuqh!#AAgz2vl_AB_N97qQ<)ygf6 zXM`C%j@$WI)5WJnm(;_?8I4Z;TD1wwQAVd*{^4nE({XmKu()WmO(x;)Oh?=C@>Kw&M1YWpNrEP z+w(dOHe_Z3!NyaigD0%?_&1JQb{9u^5Z=D07Vkf4-rQzJ%~@Sa#M}WX^aXC(*};XQ zVNpF~6UveCX8^ZJbG7F@!{W*GlW$G90#aBLr$}jK$a=CClSj5Ji_9SHA-U^WQ(wkk zk=66E^**uzxXQ<)>aNaoan>I+lMS)IARx1ho$72`1ss|$;tF#Wo4JBSXdmb5oWXQ0 zBu^@H(6@Z`5D9Ya0WPwCOnZb-N%=)R{1M(rS`8cKSVNmFW}}@F-Wu z#w!@+S^zAiO$Rv>=)G}M&d8Yt+Kbq;iG5L!sTqOHbb0%ua^^j*eZR+aC2DfTtq+op zZXq1nUGV&aawUE*YS?AToVZDMHhit^$fyxN@`mSO{&zbNf-FZZv;45V~_9feqJB+zAI~ze>VO7n(u79 z=~%&LhudKrcjl|_sF#fpe@xA|#mIMmcQNz9TEpC9xRCA1OLwW88G-0Lzr*l zP#!SgpUE&`Fqu5e8G?z%!M@AO)g!U4AqZe{FAb{S)&Dqy5=4X7s1v}93Z;|k4!mgC z;tTb|M35uRRxuxmS2VVex$;I1r^AV&Egv}mggu*9-7)FZ6cE@{?VeI%{5mIQafg+V z%O238BY@X*^o3I_CByKg!fKCIgm#3zum_OvRY$rcgU)F|&Ki`8F8}4j;q!+MJ+ND0 z9w<2LRUQtyT^>z~Ze6*#JQkG=Cx%n;v=ewQe0j#qLDu*HP2U7tbr zLg9C8hr9~~iIm8sw308P9p7x*`6^p)sKU8RX-3XOd-X~_3Q*_0MXvc&)us-T374YF z6stwUrcRmOM;OI!d)7U_AQO@G1sM9~{*99A*hBp2^YJhg3}bcVNVi^t(^(*+{QbiqENuFrt+va>x0Xp{sZ6{`_j zE`xik%RSB6#nBR(iT2xYq*z)wZzvQNabCqtxTj^`POUYf|7k&2;P~sF0pRCDmfoLN zP(!2JceBW}Zqq0nfN1i;ktjq~@goYc*|o@voQ3Zw+5<^gy$R)`01{yz$zqDnaexhi#tE%pyp8TPHVRQh#SFDmR_ zJeHRvDy+?BON~?gH7g#`yTtspIaKZ^nCdEQCglmvH@wkjU5A6X?wnT{KhC!@x;c}G zWN=7}VNuNx3)F!?zrBnrbx-`>XWQC)Yxlm3@rte8C(|t?@2@JDef=xTl*|IXIA_v{ zJi6__aP={@dD4G9?TZsWTFWt!NiY8s4v2VK>$_u&3qojY_g=ue<*T(bT?XTX*=AzZ zAa#KK>!muDOf5tXb|b6*zokEw@no4|---kHzd-t}?+@Jcgd`TY^t=!jjBlC|z9#0^ z%qeSH0YyXPBApd_c!fyAe%VZ@5|Cr8evy|ZPNW40Wr-_mVv%$g!^&ozjir;f30uU) zg!tk-E=#m9R|c;IKOn0e4G<&N>0!g0Ok^+7e+r(t6MVn?%y!s07P|R&MGO+RHwy;Y z-J(;q@$DTiW$%w0B~M$Y0qm;TtEzeoR;zT@>zK^r%TT~HC+yYPnhX9DWB*QMr+vrR zE4I6iJ;Tg%thLl<>#8IF>momqqaVRDeg0q-V8#Ql7o zyCxq~x@%Uk7zdLjdq4-7G+e{&V@{gPREe=YZ^`qOQ8Cvr%>h5f^^8VGI+5R3AfQCG zl@n2<>{-cf9cw;gthP8bs=cQ9djGPQt8u0gPPg;t+$6-6)*;dce&P>kSDJHsFIRec z3+S@ScUE|LGgkhB4h*L)mqMQ^De3D`(q${@DbdZ5Rn0|_YWjyM)hUQ9+i{RoFuZOB z>cktit4Na5j1S1UhS^j_Dh|FJz3_E-<|YlhBdL?GT%De@$i`h63jF`*Gy)3QVZX$()d`TU&54zGVPax_3xIKl4d!wqF-Q?3TVJA}^b^47$ z>TZlwi6ekDlA=Vl4f#bjvlIf#yHR4;WXfiGOX}CLn|-4@XOV}QHeBi5UkY<&s(|Vz zwJF%42DipNIR2Ci`Fvz2)_7(LCoDq>RDr1M(BsCQggzz)ID*MgYd~A;XmKkw1X73( zkimCns~y69UzTC{+CrWKp^-{=Rg;Y2yqjSiHW)zYrV{3@5%yL&m*fdI$!}bLt|4zk zk&?~Gu;_=_!Cp^R=Rsr9(1~cpsxPTQ;A0nZW{ldDc{Aumm2c5%@3E?|OBD*=Micu7 ztaDIRI+W6}R--aiPkL>tILzEU_~$f{Vm{O2#t3E0lLBSn(Y8@Y^VL5O_tq-tZbLpM z{xd*tzme^a88v>{H|!I0YzS7}nJx^bgLa6OJN}D~O2hJ3-sE+M8Zc;=ZULGm#_k9Q z+d=qO^EvqACJv1c;Ttv>g`CO8oR$f;o34H|JXm75Jwv3fmcquD#@?qUzzqCg_KN0r z#6R`4r`N{da27Ue%r8rs!~rR6UaVb9aStHbmSigF-JTrx48x1+{8Wfgi}7sS%l^^P zx3`I<%FfVyFYBNDJo#`UJ#-7t>E8>+KB>Df6=u6keTA2Pg{fF+z+bqGeRvW>09xcw zQ{Pg>7igL{rC`itMezI~ghEC4SnP$k{v0sjK-Oyn4wZ@3^nZFqlCIKtw5)X9*~ZoJH!5RY7OdBeL6&`2yvd_Gssx7uWN5+1ugj9lH(Hk~^2(YWm9d%NNA#YJLdBu0i97=E8|X zNenVN($v|Xq;dWVczUT{`;wXYePpQ7NoW%CgKI3Ji$0c0}$*#m;kb* z0JT&zJR=)cy}t1OnFvZy^#-Tk+Ff4{K5PQ8oyJLe!f)PlT^;s8{QF?Wwy5t!CH7kV z8NzP)(ygLc$ROu`kvkWrCq%K311`yiq;AZqs2bD%Y9-!xwKn)}X8LMTT~7h1i`B6GJ9IQW(ptTW}I%#UisZG}&l1C;uC zzqEIYM$`?689p*`zIgQ7Vi#`nfu63fgk5(UnL{vQn;u=F){A$XM|cZ_+8|Is5U5Wb zv@Zn>Rs6mj*NhQP-AX?Bcvhlp8viM!(uZ?ga=WfF> zhF$WIBH6D?Y*vE%lc>JjqUrxZnOH{3E~cTl2a&q!-hA;HWa4zOB8)3IN`V(%syehjjzT!L3fw&HW;MK`BXx((Zh z#Jth`0PngDV1Sj?mvv&qt~sh)?JYn)6->6;pi(tT4CkSKzifPI?QMJ!JXzJ<`2;b- z?)kMwYGHwf>nB)R){uDWLN#AjbhhDY5Iq5a=aHT)!LVbp!dW=842KzUBsDXqP?y2+ znpQbJ5_6ttLZCH?l?f}BI`8jFtH;p4a9SF<=TX1DlqO79kbzZSFh{eRRBHNjjq&0y z^8>B0!?-wwr~O^nfmw>64F^JxZ?>Hdh`V2t+T zAovsEvJQDBzMpvcA&G?GM!nd8&uSk)Tr-h3M zb_tV@`T|Xomz*DoQ4n2Zm zvR6R2m-zI(0qc3bw@r!lxpLVss?GKq$qkBC45SmpLDNq+3LEV(cg-A)db#V|A=S+x zWiTLyYWcq=S^ngVONaNS{MlC34oiqF+wy@$1obq7Cgq&XxJHzmVV6z7;g2x4>vGDV zw__;UO!y;o8{JM?N%>3MP3~P^GBGVq#LOyI221yt`-~Fmx>qxv}{}yMERC#sttQm=c-G*OR$kl=5IGJ;8ypP+FrrOd!*|b%Z-l}`AvDiKXKgbQjoTf$jY07TNr;HUU4+;Cp#sbqj zr6UwZqHQ^beC)M=6HUli!6l~-sRwXxTH7K4GU?gT&Mwp&c?PjA$RYc@=E+fuE3Smo zd&v)>`~$MM7XRRE$jf45L(q6JUq}SKVI$D;)Ff2Ndx1EDYQR1(Rhw_a7w#LzZI?+= zz!_Maq4@O#wgJMPQF*d3TbQ?C5U zd`x--k03B8J+fQT7Af(LJ1vZ1H&Nq+2g$ z)}#8-Xz>{n3dd%~*XewSs;g5uCxD2VXWaa(<*Bqm@ZmCI0Qq!uZ9IBT&O` z*-#vwJ}=TZ-d5k?M_}EKnCa%eKRieg3SC6WP+ov$4Q4i7YYABBZiTcGREEP~^}YnP zEVqDd_v~A@l$WWq;=4}WYbP3ouel)A$DH31j!Fa4Bzn3@zu=8u>pA=p`E-Fb#)cPe zT`z8ta>%~{kbvcZS(sXoIVG?;qgAj*i!MAF5WGQSv=G=&3ku63yP)p;xYOFgp}pBS z-VKbt6N)FaFT8MXRB0`kz~W142N1 z{znLzyHka3^-p5qfds6ppo?G#WQQi8JnOs1{LW(q>yM3?D6!O{NTMSOFY50fm&=la z$o&L;!uEXyDQs%n_+DbvXi1jeJ+ z&2i7sarN2Qed7A@V~cUm(VX!lVER$`Eny0g0!d==aNo#ynK42{O=tHjmyGm35R^{01v?AIVC7X162L8=i5u|b-~-FX9|%g7qPaeySebHj60#}9As z4{%ht66Ij+K7fs?n#FO;l6=c{y?G4}*P5ydFS1h+hX|M&HB`CK`5Pl}^)*)jEYg*Fumnjpp9s=t^D#9 z6ZzA-bswl4%j2qJo_*Uiixz$8BBrW{+^@FB}sghD#$F-$3=IfdX zG>@l6bG8an8eJaEEFE__7E$&YSlOv2HHxq%MHu#IMNcw|2l0>%rkT$CunOk zQc-*@^8iG;ER9)2nG^yCHp81ptp<_ZY)zE%zvL^^sE)6Hu@qn7R_Hfb63F}!ryoq` z0A()~gQbVkH}@T0SVZEq`LP?*^U=acM!D`{JHs5wPTC%fg288sF zK;au3_i>K=`mxKH$kOs-7ZD#CID|@4XPY35X3$V-wOI7N&Azoz@}6;Rm3e)2@!Zi< z0<>AA)HhgYssi zdX>*el#>(s(~kVrhJqCxkrMl0&n_hb9XojsqT1d$!v4qJ(F$U_7w^^4%3v=?9F#pe z^@B+qY)veB=m^#goH87DnRf(`Aw7CZ|Lm&p6R{ic)zSx|?pfa>$tJG&{ik5G!Bt z(7VfieG3f*8ZR$P^^ovq;U!|~Wa>Uy3cP2#OfULIrN?A}-qF$CR)CMl3b62L&cST% z;u#tsreJ%NuZNzp_$C1JNu<*39BjZ$-AU#L>cLVsukSL}-~YlkHiXG8G8@C#Nkns4zwf7Dvdfo=Y-{5Dzy=zd9LeoFK0FPv}51U>Z zqJv+SUj=v751rei!Q1{$Z-d^DrmsOe`e5r7FytVs^uYs0fENO4q)}PE$skYe?eD{& zTz2VO&V_4pFt0pKHl!#z@Q$72&bfW7;G3Wh@J+gquPA?y!whNxp)}ry;(5WlT|mIr zjoWIZf|Ijm-!ycs$LjJ}%1tsQZ5_%zZ(eqWL5(8HidVNY4a9AG7^tA~+CJeeb6G)n z<>gD~pVO2UNbu{PUGuUXdgISTlBL@8qh=25Y^7d=-QO^O^S%lqo-P7skkmm5YIsM* zSh(RFUy;>C`I5Pj`w!NT2Hny8<`e*YEsGaH?npLQuEu<5EiQyj2L_0*j?G}*P_vy| z1pwn_8dU<`zLw85)SDOiqZ+h@whOD_1!e5ZHcMLC% zJGRhAk4IW_a1Bp@_y+B69XEj6krL-(6YsTpCx`X(i5bLS@{9HxPAl}SQkm}af9Tp@ z*4{uoj7@hERy!+_4F&6rOWf3FA0y8XbJjdLJQz-qZ1K|D&@Z;~Po*oewsh$2c((=l zPI>l=-SFG#e(<1IZ*ih(dmKzr<;Z3!9S%Y(v`9itDiFC;Z*rp=jG6-qObCZ}&o@X~ z*l$XJpiF=D@Mrb)Y8d7aIdril2~@YB1k=NdCffTyo9Ul(FLemYblv4`rd!VHO83@o zo&L4g5B8wqti?(mDY4QGZ069R_{fngH8+Lb1+PSER^6u*E>ijO$?_3=%fBZJ}Sm|=Rrk?jJlrTVv7AKfHt-%e}Ug{mR$ zYQ4$&ggtIn2;@K&xEk6P_E$AvXD?X|@v8Ig{uiL@Wff7azT1~&cXt(P3o*aKjGwt9;LcfPOmkiAsJ!t#O&|Q05bkDk zd&%9`hSf2`ds8$}{)6*qpVtAAi&BG8*Kzz~BMgK^t3CtH8J-2F<}Zy~{;p%>V7QkM zVyDd^XfCByw5TSgRvkE!Yii|trFuih-!IQU=|En%9;&H)x^}HtX>p6BojHRwNTIO1mTn&N8cZQW= z73!!e*dhN9hNITWF;XbIP)PE*8+?GDjEk%AmNVOsfYOX!i#de@l4u zs*&Tuh!D&mO&pc^BEi4Iqr;rUbjUC|zwXuW7~v2t)w z<O($@LYR(xD|+>F`>zo&7;u`e_ZRtF|*@Mrx?$Zmc1i% zZAgG%|C^R?8=N@mhY^D9AF%Yg!|Yz-p?NetI#gKYBJ=sKA`oBw=53zkVnbc)`>umF8!l(( z8$`CuIMrDrKAVinEnd`eEQxR%zL}U>Ea69&lZ?@-Ct!4HY$bM-v-(myWkcJe%Kl(z?R4ZCJly>f z&t>VEBwI{mn^6zHEwa~m{Tsa1_Ub*Sr~qldiw_-V$J=gKuL#;cKk9@XS80$y?qags z?2{m*4)$sLe7#%Dq)rFjeU#iv=N2A>QPc_4NAC-TfCv0O@e=78pLP-<@oCNF11xah zx-;l1J1zBkj-6`h9TDxmg(^G667b-lVM<>kBdYA3u9LW4f-Rq=nK2^H&A@3x_^+}f zgGp~FH8SqIjbD6piivD;uAE-!`uu3BZQO8k2D0~__L$>P**n5ByxQO&zdf(!Y%4AL z**pGgsPOW58JhCXPvUJ=K(3V~0@w(wqefTBx~3am#9x)KT=)bg6duqqBQ3x>Sn};K z5LJV{R=$p#ea+3s4PQRvo3Mp*1UgmK`W0<(7+y&9oaPLVzO2{VMb`HOh9LE?c|D2@VZXmg14`9d&Q4?GQ+oE&t<$t# z_O?Uei}hSt7`3?2k)*gs=S7hakBi<``THB?{-Nrfi zk|-enFgx+tBMMDn!0*J30<-LVLeL$~S-l;G06E&I&cAmDmQ6uE5w5gyuG>;%%&T61kc0CET! z|3VRG2JyU665#TyZ?NOn*ct+V^U|0}U_yK?RP2&|JAdE!pgO31r{Jvc)9M(PI#I>a zaiJ#Ymh`0(cwq7u;M8dDLSHHPoqp?jOwa-G2G0Pv*-~-BzO&{t<#x3p=6TYP;|x9e z9^_wZ2*(*=f!X11_9FIg#*AJ#al_5p=6+3Yx`j^L_NhbU03)9A6%UVpWOX^<*D_o8 zNgWD82Solx0jnoD&+umHo*wtu2?`_D-vfWle&=>8w6uhOycL)0e>N96p?uA9=dSf}yC7Fq zhlA+@ISHF*5V_+%FO@{izmP!%U!MEH6fWMYeZDZ{|)? zHX)?CH$CHj`T8PUTHGe+H7KVU6}l&EV018Z+w%THCo-d?MbW0Fh7EA9j9nhh2k(P% zKMuP4Tgl76tg+qRw%RPNm5^^&zY8c(&lUhG&v&UF8e2n1pe1F7YT~;9%RD0*QVZGv z{RUS^Nm>00#m^>0=un-^Y8OyW zFlk_CyDbvJ(k`B~zyV??ol@h)EwYkRo!>$IC&_jY%}$U=u4^>kP^_!GsEN zv=RaHk8*I2o<4cRPNoQ`d-mlY-W9kc#}m@6nNtnRgcD(2aj!Gq{ycsH>yawl z3$GblrFah4G0zUI?}Pc@vM?VNa7<*tBLJp!oq1)b#+ z+sZRoo7)_jNmM0E?J|e1gP)$+H+Xs{2W46voq=ELL|eCIRHm&_rXL#PGJQYO2riJ z-!Ft~vUHXgpe|mU&y6a-;28!TwyyTRKs^YAKG7o^w=V*OZ3dU5RlgwK zZ86B}3 zzFbye=90~)L?^D@_4$xb63o8w#izf_pclyFEMk45If;-S8GCzcl?SOQ5l>UDb2B1` z;;G0RVGRu#@DLTL$m=ctg?fEviSvZhg%XQt7%GgJ<5NK0~qoP;p9FiFlg#hIun3Hh^w z15OY@95W0^7W^PbWfsoyqD^dOG4d@KN^g!wi5L~dZjSSXYLXnlc7(a0(Y9ArA)5vX zZ0DwQOY1}zG^D|ce)~XM7nU{*BwLJD&Sl0^pcqsIpI?f;wY4O}3P*)9&a?2l%B;^{ zp`TNt=3J5(@1f*!H5SCkUSLTi-43ZG1U?v!KW_ji7o3hZ7Ds??M;pMPE4S}=MqS-0 z2u#i0p4_OJ0@y2f1X4KiVWp3->+Y~1BZDUgiKc6owA}+u&+a%=<-$Hn=N0?KMs>?nq6w8VsEtTN<}GgFZoiB4DLPQNz;^?bB@vA_<5#2i8_mk>!#dDRkUb`v!R9K zJ%Dv3vi$lOh!z$p>1Z?f&pS_sYan`Dm~rCBV=fvl=kG>0r$_>j`Xv4Eq#Up-WHIW% zH8PgHc~fuG&qll=l0+nMbb76jq!O@d{DQH7D;gH5hs*)Dc!@;|? z=h7YmB*l?^)gECo)IX7AZGZZ+@`_rNC;^c%s{7-$R#L9O9(E|Y#0whK=21PTB;9Q- zDYQRDVyym$Du(vik2m^ze;r-v2(r6q60PR283Zu~<=?m_1noE}(E<}sdP|E69c9z1 zWXT#+)N}!bMeQM2h%qC=CM?}~L%MZLGk?Sasvvw>UBiQlWBZv^$VvgnDrWZG!GL^E z%Ndlv*uwc^A51HS8mw7j>K9O_KRz4R+FZ?!%w>4tvG{DKUnrgFEg3n9qvdanWmlLJ zfyP1Ay~+(>x_S@-&GNcq`H|X6g|0}B&`R20nvt8ZvZF?@^o-W=3Ke z^IJAj<%L_BgU99nu~Tu?c4@Q99%A-wPdQwY;K4~+B$eh5RDzHlga|8 zwr&*GKh_bbq-d{76_QP77&usVU=>r|L&?xNS1K*&G(C|=-#TMyG)c@klmLn*?vwk4 z7&BSx(IdMM>&*R4*2pw4U%mmQzP-t4nk$uH>XKyhf7Ts47T@!&zaMwakzf5lYPPr! z>P->s__C!fh2n=K2H=fYqz{9QfJdn*W8ife_tB~iD+TJOOr`VjKMTETX|*vW*curT z9xMO#vx+7*8s}+6`sx{O1JWQV?xkhg0z(u!-R(f`g+yV65_E7|ju5s#h=qHg3=MS4 zxM{H3jw$ZN^>E*i^;L)HjF`^>L5VbF#N>NL=0Ax*_&-YROV`tr#x#xfppV&ZH(H>A z-=PqYh#rSE+8lQRKm7v9l}>capihNdThi2TESZLO#*Nk*62y8e06*>vz4E?VArsn* z-H{>V2+nqpivd!RY)`TlLE4yX?(Ike@wDajjO2;AK`A5D(f8K!~Oe@j6ic0 zs9dCe!h*;|xkjSrVrRo`!{OxV*wkK7nrFen9E!!xF3wA|5|(V?q7towMWdGoF0V($ z9*l>l!qdo$W9MO2#3liP6|h3gUnRN{^mJ1Zu$T1jld;)ZT@?T{U-xId*lzsVy%^OH;@>`$8(Ffetn&d-M13pQlIE42?hx82Mq>^p#R>d+uDD+*Vq*t9-yu6A@SdKA?9Xthf*OWN2|V>FWa1sktS0#U0Ffbp_U3 zwY6JPqWgeR3?JBabg18FLAFM*ZHx}lVVMrn{fzFRdlh&(Sa4vSpvl1~3h^CA57QBB z=}5trIzWFe7%k=UI7Ub5F>K));DTp?&@@d+vtUNU@dRKBwD0DY0Y;D06IkvfC6%VO zQXG}hjkHxJ96beWD0w;p6tdhJ6Hs&$ZNs9IjBciWd}Ir!Zo%KDp_3dAcgh!D zfTo*ww~RvJ3qC*abrT#qr(?96_Fw}5wG)}4Udw;eoKp_lkPNRrsH4qR)ShV@es0DX~Ouh0wh29R-Ca7y$hN;;d1 zHDCcLqj7qRLT{$GQnJiybf9q<<2M|EEk%%^6+_c-o5^%ezm(`RG?}WksQU_wVHHam z?Nxu|zLV%(ndbEU#G;dASgz*g(snd`E-+1lT5M$7K!MLolWvUm(yd5@F9dO#yMQxd zjM43M2NrutQ7X}8*2jt#`gfLEjP9gY;c)LRVNsxn>M2^tMo2Llph4{ERlpPr>=jWm zQFLh)o0X!Ao6xMiDv$xe>TekmFTHYM*U=*V^J{^nCC3KOWqds0@B5}up| zX*|W~4?t4`HRy+o&eH|__#+h0&&Q{qm^apPB)&u+0Syw_!0vc#4$S{%d)v(2vJ zk&E-;Z6^w2)Tq!Gnw=eqBtgmMVDt)olH>3s2e2s3XGO_+JDghZP)_6=9zr+?d1wsm zwn+>zwBVtmjFUM9cs-|rYHSi)jB{x;!Ic3!&z|RYlQc=sioINATm^sUh8g8NFrG?y z2I%MqJcM%90NqSHwm2We00t`#Uqnx0+zPG+fnRCjMj5TmCvmlAFP!NMiX?8e%++yg zU`d%QK9kOeSoA7Tq=AyP^YIw&W^1NNz=~U<=@_@PCUUGqYo=6Wq;^ve^XKCl5xeV9 zN_-lhngQGrgpS0m2mF6W68&@Y$%~q$e4KF`xmJbSz-`hD*@eYOJdD=yaqMR^=LfOO z!R$LgT!6Ym$!-fJ)GTGKX3#=TGOm;B!fv+!|FIH9R_?emjTTeB2)`+Uz&t4uw-x5s z3gtQpY?rxh+zuddZINY~W876h{_ySUyl?G{3+mtc^1gL2u3vxuwma`zC*$_&-v;u& zbun&G|29O)eFar}jT-*N-!-Yo?ML=-Aa^F(^{r_;2`h1jbECVm3&4~e!E7IeifB_e zDsxAnUQEATXi)1p0{z)8@a#u4S((m1?@dh%`@(4VAgTBakqnzpr2q|96g(lb9WRrf?--D?oN|tVK1dD)X;Bm z&r-R&xMzbo$vqpa+A|F;w=-J^1MbFZ}8$~6Lw zxL3o{J{!IWs^4q5MU{IEcQ3mC^Nt}H!$1OTZ?;-$DOjz-?f{h6bNAt>-T)-^#tQB} z4-rriTx;J^dxo9FE{WpPm@f>PCChm$_cny~?Eru6JG22WwTTMuUAS*_S#Vpkulqej zx8E4|8Sb+(_i65Plqi`+ z2$p}uP~K_-23|Iq3ivT%N>&wM-Y}Tb5CwxU?MI|S63<0YBk#AiCQ4I63*H6Kz7?pG|mPk%VFl1ZXw~xd3B;5C!?{I?Dq7J@+M4A4NXgD6Y$#fF1p@ca3il`O{{f4#X0qnEYs~`qt4!|U{stH{T#cR9 z+_^}{+&{P{p<|xtfsmOs8;r$f!y#R%m3R(ycfW$kX<*UjVmfs;lXsxKJfLa%yi?&N zUPgO)9<>KbT8lW>vfA3lc$H_^go}R?y2;6x=QLo!BJ&$?V*?(L1<9EHF_+McRv5pG zufnoG;VZHgdXtsPui#oi^WtmJeU?>-l56v^UxKw^$(r(@Lk9%Eim%1K>nN#jZpmXV zsfb36zreEL*C^x&l#mPZ{z!r#q0tJXWG@5_}w4^ zv-bIct?_$heh)u@K~XqVj3cyS8^;+x$PXz*;D^!iT|vo~C2-&z=nevt=MRAd+0-13 zCF|3wPK%Qt$?~WVK+7|s*+6_|5f$G43zK184)RAe7ox`Zjw$>oe+_@Mrh_vaN=}~E z4;JyqZAPQjJE`y|`0=#d*F%3@;Z&${><9+%Im7AD>D7gq0N6)q^@5T$Lj~0aL&GzE z>Jjgi^Qh@*;D-|jQ!$$dFJWmU?RS@303~ym(qxeh{zCm#r16s8vXC?$Vwr7VFQ;+jX|T7a1|dW8lP{17l7KAGBcIB0ZqPVeYE=+9{; zXfX+957UVvR9^t~#XU~^MgDq3#tpzWZ=_`C()+SB;rN?9MCNb7rG6ojz>s09JsMc) zxA9LyeBF-rj9m}FNsUbk4V$~dfLX9O^uwI%3-3&13>{4?2bq7C31?vZo%DK@yPLnu z*e*{p{@L^%gy%VwY{<-$P3M`(V*K;yUl5(o2Xwx`Lljh}mGh?P@$Ql~f%0P1VWM8l zzeMF;!@sm7h)f=Zxq^o7QWtq~f_gcBH)7xwfPs6`V)n}PZcSpZ@(`7OwL({;m%tS^ zA04J-v@luNkcxl7JvG-t=0iGE4oOJR&&^e4f7BS1#NP)5pA5x;%FLRU<=!FxM*d9- z{|5feMw$@Q?!Lso755Ky7Y8N&JkDfl#}tH@KCKFkzny=F%D;_&Cy1`t#2LoF8>}Sq z9R7ZEJ0@lr|6Wju$us%)QL@VxQFhTp7Cv;8aUW2~DF1&!V1{~(1jdneTUrIS8)tjs zvGWG}5AYvWxDEVA^v$nG?vXo*e^Af7p7#Y*kB=LnwE5pOCFGMb{|Ww63jYai4F70* zDtqCH{~Z22h5J?4Qrk6#3I0^HW-$bPmcOC!ALG9X+`8Ek#YU-bDWrja$b4orbxu;^zhm}8 zrQd5)^F5jWF8_VtoYV2x+<;-R)awMQ|FjBVW&98LA1YAuVWv+<9n-T(Vz$pOrXgi0l- zZ@RMhD^zS(QnGSUM{@n5X$zqqIZVBi|4oiYnYG$}tMHHWzr#3nOVdOv^Mpcf;qgpf zBAhf#*(Qq>X{ogGf8_t9(4X;tri7WtC-HwVP7>K1_tqxzZ!)=;|9fso59TB?d=5|I z#8iJP0^xt>yV+D@f%I!Ra9kWvyK;lRR8ll0+&P z?VvfLOOT0zDlml91(24dExRiRfu&p&Dm=s`xMA9njuNQV2$f)N@{bA2FbJ@an_rI| z5UOSJa$z~t;69{sw_)ty3LE@(XklHsCHD}-7PDbqGdid%R{ z(n5nmT7y#GtFjXHmz;_Cb3OR!`-&CMEAH0o4^}mwPjK@X_8M%7T>lJcQ z*Z^eyw05O1ygLVY6o5+MTVjYybmH45-=_p+$g6aEGR*_Q!vw z!lrl)p$mNsKNGfqE@6CKdRK^fbQlOdLN7M9)x@*(P&=?%GCWJzjy}`9yq@2`BaMC3@jI;N(g%FjYK&yY=0eJ>t zq}}so+UO{xIa{@N97(~UPd`S>CI+JV(I2nHbf&vZ&uCO3|0~2Saz$hnl>|_{8BC%U zlZOj{2?@SY5#j@NVr+JMS&J>#f^WXO_W@!GlKuG~sVmrbe!ZVSI z?gYC7Ff{-wTRa+?HKFoZntxn)Hq75_dSBI8-um-oCi}vgBD0E7ic!PLlR!r5PZX$R zh2bF2g!K)jPG?`YWP>eNQQsR0!^g?f7xl2s<9UZc-}w}GvE-vGwhe#l=Tz8)ey+~I zkfcw?1Trh6&eWOT3^LPaJ9KzJXy21L+hM%Z2>n&E@Jiv;72MCw;RSYcgWC(+mZIb3 zt&4kw*P(LsdQgt;tDt+ey~m|Dmr@5eYwF;eJfvKBGf0~Ar}4Z=L-X;xVtH`9Rd|~M z1Aluu5Sxk9dd`^G(4;=63VZ2{R$-7b- z$R6F7Jj5-0xg;<<(~i5+jie%&PQ^S3UlG2FgZUZ^=IbVTRYKhg;hUGa5_QAuTOQ&O z9s(g81zw-#R`tcO3TxIDVWzY1YS^5oaD^oc*A9a_Q>ix?y`4TCaq>e`jCs(+N+sb( zituA}Q99-#7jS=nL-;AZ9$pEL=rLGEXNL+Qv$UqK1 zGbx;G$^g6i66-j^oM?Vuet)|H5e{5%>sMmDl zf9znQ6SQ;qDCd9dWTL9qWceSvm{_KNEYJVAg^6w*AW#0sZYD0{zltBLC@mcMU&_hh ze|3oaQ}1&vwe)ez%1dg>&b=!xSA@sJ6-@XZPz&M2l}vbv@KSuL&5qLQki^ws9_2?M zCJrw~kHCKqNvub`EOy~Y%!oEZ4dA%hOJ=;^#>573ts;6wpLV>i1plPXHoLe^5!Z-K z@CReY$`+&M?wPorAHrTX;P>BR^cbv)O;(Rzh zY3vt@ok;DEiCvVqwGSg%U%U0MJ&MpmKZ57?Uxt5}1E%sC`dWP20lX|Hm9x%wOq;&L zm#}YEzym2>C0>nP2g)5{&_gPPhcGloRk%km96_E*&d)lOu^;x<`+R2l2et!{Q-R%8*PlNl6?r=jq6NKn^Y*mBl0C zD2#sw_x1NKB^^kC9GKe}`G`2CK+DJVm^1Ay6HjvYDC9%pxXRszyT*mX_LGu$9T1go zE)rc#=zldI(~{4cWi@(WJ^?d5Ax^4dNSv}GGLtL(IYl&A`-#8otwJjrofh#Fw0Ih5 zG(yS6e-dz(I+}RaLzaoNfJod_7Bvq#6Jvk+!k(vO&!tgQZjw_VrjLnnB&LKy9u&vz z=BzWl=^>uek#ruAbiqTaM6{?Z>vR>5SWV`v;9SLDyg|GXJG%)wyV(>@Y+bxUyw&!*SXL`s>B|}Vn2B#pqxWjIYpm^M=gLoH!_$&`uj%|pE`PqL+ z(wyEZrTmM}6`!Zj3*z%N8`FM=FO#%K+u{>nh)}!;{^0on>nZBaEUS~3w7-+ZQVX&2 zmx`J^c{z;u?xhNf?9QyG;vNrKA-)oi$EbSbX!_uO1f|<+U=aYDey!b{^iXn5Nq(c8 zxT+G;oWtN>C%zsBe;*9~4Jo($Wj23WA-+l55G~by6W`(?HR4;*+4$cI35jn{XGNUS zJ^OO%*Mug@bZZUhqRe=oHu)-y7yHBKQ-_?&O|OvYV1~qymd{IXT61aXaf9N7Zgo}X zl5HwiW5s+ttTz`-Il^3vQKJJqxDNs>8a{6rZw|d5N`xsb1D6s`Uow$ScVK@LJ>cShNWaUq?!0>Eo4Rfj77+YmR4WnN zL;I#F1YeZJFNj}K#4mtJ2Y*iBpK<)7MSJXpC-Lj>M>pxN$DjX&2AuZcA^h-nFw4M} zfuG-{bj82?xb45*7O^!TzOR3X{~`XjDQG~SyB}IcjA(?S*ZYwoJ}mwi{vfBVv$`QA zJ2LVTc%Rl=34Hbu@n^_teh#eW7g}WGrS@gbMgGS_R*H{OvS~>UB@IcxQpjHMap2JO z?FzYCd|V+3-0OB|I}sBGN65#pzLTmi=(5~ZDu*y)WtX<}t1K5b2B?2!-#b$@>M~tY z3z-u`dL?(>XG#2vE^3BjQ{h>oLni)>f0H8qRs1^!Olzqb^`tWH<{bQvGVw_Vfuato zkbQ`cApSXrNKp;KjsZwjHYd!qL_b6m((zq$wOmq1os(^T#lPGFLpPjCpp{>5754&vfSZVmOA%a zO3eyKwTG-i=O%7Fj-*X#M-5Kpe#c5J!d6S~zqP27-_{4j9JP)*oX6Fd;d9i}&{_E$ z9p#RC5J3(vp2|RHmVt3(Il+>h-?p5SIo3LSh>S)`)>u!h>70M+RM82}kVOyladhcN$F-M0ecfQ3)0-WjnhJ@?^2d$bbwZHhMvU=J1Fty$2R4; zW$ZIDNpAazSRP~o9y-dOIhr@i;FnN9>-pUX8_>Y zm)?Fav3ct`9`caYj$wUQ0J$F^|A3DCg9XOeu@vK}fR$f-#D^Vt_QP=mMtrms+v7+kTs5LjC;DUhDFH8a3~s@3CAVJaV`5-s-*R)9Zi4YJ5DN&6OM6Ep6oE#NlBvU zVC-Qj37wX_@|5E`L}&;Q3d`1Kl{PE4QiWrxlpx3@LTf!A(;iaqm@ywY%w60j!~NDP z0@G#DXT*UCU>s)wowKFHs$L#I);NoLh}RL*Sai}vip;T~ujF_Ebhf9_$s9?|=j>R7 zv7Gae2GoBFDiVtmdQ?U_0spee{2{<=UnxU0pZCzLNBT^9C-!-hWhk(I!(s-&TeJXT z$E^V1Z631LCV*J0)sd<7bbVOQfLeEWh))2^@L}X`c2zUZJIAv$lfvaZ7&|u3KeYnNhw>N6^cm?%f{Jg!Asn zDs31KIT<8u?z%ig0B88aMJC3?3qGo^k_Q1FAM=nFTqQCB zq-jl>p;6-C3YbZsbbJb-`g9SfOuVLW#;t$ic76$j@L9*_aNz#|1OI#}rbZFRg5?x{ z(L>fdzC=kmVl+#xY`+ArU26VEnd3hlUqOt175~JGpmj@TvcI8E_BUb7|K%YYaQpQ& zc%GuJQ2n0NnZF`9&avIUwYr zLpC{nO$nRLy4bfW6-JzMsd0@hIhv(vx}xRmrN5%bs4GJd>GuT^3Z}{G3CI5-ZvFtc z`J-mH6suC<_;VKdWqPwl%wIgD&GCO%tAy+@+SJ8YlH>1~7NJlPO<{OacKkyk>D$Bd zu;-H`4sUI;`;3i9f-Lcp2z)si+nvgx+-t!NIelp6lRHc6@&r)@{ zLt5@3n^Ac#SheGFg^Y<>i>_p8rL+p6s|D!lE>*}BAy{dRhxn!XR4UiJvvkI#xEduj z$mG@1T7Bax1I9qqI0q>;!eZ9Dm;(^nf{_{c1~l4);Vtt`4s>m8>LnS%5TCV76pGaH-ofUk=99mRFMt-lRjBD8C#4dol*xT5jh>1)tq*? z4XND)k$R!KUL*K&Z4sHEGq6evTtkB)i;K@Yb2am#*R1O~UE|tk#=nt!LLnz5JeZb< zEygFqOxmfxx{7gM!;F+Cr2urJZ33k7!_*^Fu1{TZSdYh%>-7_diO7FcIQ_vX^)YUS zUaycAsh^VD3cL1;=8no3LYG!apUXW88IksC{C+8i?^7A8c~#n{a2uq-)QLK)o+xpr zkGy22%D?29LW;Awq`jxey!Tty)Aocug0ng&9ag!AP**c$zd_1n(osx)Fei;-y7nhP zA(O6A$e%F{k~e4HF}Htp6r*=P^}D~}0tcz=zcJ~AbP{>rIPkt}QwY3-hAO1%G^gTI zJWOleI^iMh(j-{YbD??jVLPi7n)$wW5NKg(8s=S^p`=M8AnTKCz=jN8gU(YUGFd5| zQOHW+R!W)+R6HD>PTd%;*PN5d8Y!xfHCVGK0d;6WGEWr&EJ%NGB!C1EK(cs9mfaMb z^NA-~7-h{EY`2=s!RxSy-sUDC~ZOozVG zZp91?M7pg6%ydz5;qqzjQZaYCga;v{X8`8zpk(B-0kOvHogUID-DMXc@(&w**`+s9A$>3_JNHuP<^d1cB7NAnZ49H; zrH^8|`MZCl2TMRod%nF^;!G7>WZCX{>EqHT5JR5?41KCXxJ8TCza;9gM8Ib~q+9wN z*v=T5-%@PECQH@o{+FBx>XPCsq%TNc#PNLz#`k3p>A^5%hknN*lfJ4?#@8sRD|i4v zlD>iI0+Oi^BKzwVFgSuq|0R7(mA)xGRKk!uGedv=K+zR&NwlzJL7E;&i5UKlgl=7q0f;rc8S->I95$Zq65#8xM@0mp4Y-+n z_?myLG^PB`zf>;2Nz00wNW4utjDOy3kzF~rJj%JdE_Z!cLvl&d@psbik$9c};`u*H zPCqq}S(C{hJ!G5oClCyd)rdV%Al4Vfo=H4B|I&0qTkI9t&?~|3`B&+0h|9kNF8@(1 zpyi6gXNhAc@sRCKO3CVwu?D6Fz~s1aB!+*h%xv4s^BIkG%cVi6-8-YzF(*f|yi3zc z+L{ErPjWgjb4$T8Xqq_{*(p2K(k>jgxc)$Nx)f-j%xdGqd}7d9f!s8t{6A*Da)=&)5Upq6vFbA=9`;X{8@ z7nyUlc8`;D4b)7p9%CBJp$G>p5R{u**mlY-k>~U}8-U!MYs(!@Us^q0N)r{%b=od# zLBOo(y4gc^I9pWiHq_iac>@Q%d8YIrhs(snMkk)rc5VVZwB_s0CH8AQOuvWhbhhJB zp;%PANs&1_xmFmqv&*r_QLnePYyHjb}%&#?~?3JB8&aIRP$ry(Cnyw&7$5Lkw z-ZAHP=MIJ5?A!^Ovc6)99)GVE%CqpcjTj01A;XJH3_c=!x_cZC1_;l1r z#A-2W$$3mOx=IFcdp`bBm;71fCpERBA5qX^%=NQy$CuP?W)W&99JX(;2LwS8=k+_4 z&?k!BG3T{fK$`QE9xaxMb=QC40)24=CEOG`ii<`1Y%c`3JzUH=fj8hj?wrzZ?@NnO z{fLmyl9uz5gl#RMnC1112*9*+1_6kGXiJlEG<+VZw{A)+TAz%~*UyD6*5kDer$gt$ zT8hbp(>a@4r(HW4l&vBir=$}2z~ot91oZl89c9>hS$4tPwmLKlFUWsHQ(fS}CSUS& z1P^b{!?^0>>FhjC=OQI5>?R<$&rVBN+jENn*X1wZ>n4+?YJZO`4i?IH14KEOOzEq+2J71PQ#+#m!yrFfa&yrYe6PH4CIAiUM2IxIFpjWA4 zh)*KY-Km2dHfN&pHVH-|n3p;$DLtuh-m6H@alTHwy-_bmTz z&U)Nx0+zDCRmyC{n{Po&JX0>Rd2FV`!8V)St*$xaz22h z_F-5%AJI|>7jJ*nTBUr@Ljul^!Lq~~H*(;j10m{p0O2mPQSHS&y1}`;UD83V{NCfl;D4v%$>&0Z#f@ATlm}gX9aT& zxdP4TYV&s$GUohV-c{kb?PyZFOCc}8djJYtXWL%vHWpiNONqD3j%KpnB3@nTgFRRb zWI-~PPN1u8+c|%#T?FiWgwbyO>E}-Fg|_i@seTF$5?Jx!%N(TT-Qe10qt2#1=`4(s zi}6I{oJM~{r|r2(D!ff&;+GZFj|I?t4n<~}^EX4|&>DajQuW9Q?cd5n_M{kdD4EeaMScCDheK_GkNN(H)GrlnObx`6D+4#bLFtpEm= zGk$-X$1GZM4J8rlg?q`gZ8J4GOP5zEsmA*xWRa$1wMy@e5 zBOf_FyN&#)nXZ_;O-sEfZ!alDG8mA9h0MG>N2yJkinIg7Wy(gZiEsQJ%s}i(JkZV=>x5<4e-@6Sk$L*5)%Kcb$xR$ zV0TkVA?#YYs{u53PS!FUZ7P$QiGEVq&UWe4qOrIFCbIR#)$&P&`;$D5ehmdCuGt{H z7N>lj9cqAI+)xNLh3KXL4=(izJX3!%IBnUK=U@vK*1WD?Xd?jzGYt#|mi>%fWUp(6|XDK=Rl)+_b9m-J;>6c@66wsL=J|m4D)Zsp^kOyVZ9Xa&W zuCdsAO5Z^@kbnU$%I6gFDfv8--U_^5&1msdG?qMNx;|LG-bg5(Z?L3dKJ?&6q4&#gVDf+6@+*){yb0LE zo1v{{TM#Scw^DNTrHwaR%D>%1cFXTT-Br)7Jfmffi~H~n_-H~?wmVC^{V?YQto$zd z-3pBMe%mSQ)XBNiwm?TZz_MA48J(uOj!G>Pa6{$&clS6ncNN{B0)wN&GX`{x04) zdJRmYHX1Bz*jnk|=6m|mZ50@CcfPi)dwQ|qY*%)N^`4`IzT9|fI|c}EgI|*k|DR>*mj55#p=?v$X!frPmF2%#4_5OLNb)~y2CIF>&J-fcPbw4!3wAd= z@r>)oVLz#e#oe1ryDnLg6uwn)rZ&xNq?!E;gIrS-h17p3DkVO<<9PMSSbZwQ(y6#o z;V;(b7c~Tw%VfDyK?yzOR6MYXhP1Nd`$K4qCwr9fjKWY*`E3r3>AA^{m% z&j;pxeFygU1&-)2tdPk=N)4zSP)fVQfRe@LqD>UCR|=Xkg~qT-sl_qWrSA08^g>rU zY88qm%)fsPf1BO%?xkd`kZ;kvurJ|Q6)ySiRBF~zlmsNhMup5N>&&}qxq^PPi8~hJ zxG3Pa6l%y&?Yj$=Y1hm26e`o9m+383rZX)8+I7SfY_Usgv3+x)GF$XA{sQw0MdC}? ze@xBN<)vyH)eire)e01P)mAC=Qqr(9^BqYicrkyy30JZ^J-vlxCPAj`P!rz|hbEU?}~&^b8GINgJHX zUfT-^F7t5jaUH0A3b{=gL~CjdC2JzlbD`NtiZiDmMAodma4P#Tj2lQ|HnnG&V9G%} zqj-OxawwIAI`d^j|8fLW5&jw`KP>+UbTH*uxkI_8LTRC-wSWd;={r$Qc*tJmB>Ka3 zZm;nc%(SQJ(QXOWsDNyR2G=hpsdBw zCt&nRP070g9KS+2=OO#Vw=$(!X~EVnLhILi$RJnElnwf;o8Z;W9x}vLE9B|QAX8fP z_fLcOw|mGi7H!jC-2tzj=^^{kEObt$$?aK4Zf{YZ%@n^*Y0rgn&-0K2%1Nel>Q#SV z2(Mn`AqTOwE&8jM!mF2g$RTX4$&O?Az}U~6qS5B;6*763au4n`#FF)CCgxOLg{ukV za9wIOnHZRPExlGD?@^J>^JX18 zz`WO~V@QVDq4%58Z1cUBg)9z`d{6%;h^%6pGoxDS#gq^`5}uo%)eeM9p~S&ZBo1Ww zA#PD24=N87NEvMkvbz1BE`}{U;>t&qk0SX!2utB(lq8>en5^0RCp_e^^2vV!h%*J) zz4YIJ7_3nFY2`DB%FhBSKbHytUScB^%I7^~1QF4ce^SAEHsJlV!=^o8v`%e3v{5T~Yd$LN+Ow z1lnMTx}-ZCp4O678E)pBjJSWt3rpVbDBo3xqI|EAF5jEKKb7TYvD`2yHq;WlQDC`< z7*+3Q%GZ>yBSHTN2>QoMNGoHHPs^qMQx7?!JfhH>G3${%UFw!udwU_A^`x_yU2*2H z6xU^WmX8rhRKqB&tg0-NX2=lWrKEQ~UdW_*T=_McG{3>yF*h;gzm-gY{{zB^N#pq?Ve(w@gg+6!Hkv}7oC z#_^;=Hmjr%5<1eWuG65A4yOE7!L!h+Sng0ACN+F1-CIqQ>hzFfs$2*hP_$lf<>CeN zna-uTj5NG-7J}Pwdvt#kD$|~~EZdEy+nLH~3r4L3lrQs;Yk-(lRb}{UIlNj?ECTsT zr1w@=ddQf%im7GVDpKp9h+hgfd{tT#V(s`(O6oT%$Pk0oef$8OJpE7E!0ESc!v|9d()?50XkFhVAP+ z!o9d7oO2!)zwUo1HOSxEfvN6Q2XL(WC{YuO6PYko$@qo$qvUkU)cwLU75cb(!2YTb zQ;LPq6~>R%j2%)B<0wX8#*P#_ZBasx)(dvjL#|bi+0#P1Wyo@ueFc3Vq1`&DS-+>n zxIqykC?1x-t;GWyVlFLWr|heDr&W*wQ1ogZTid-gtCN2iLP9$|W7lGjes;V6g1#fD zi8iLr@M{$EhMBq~-^D`R$+n0=eBA|#=&?g6PV8oSOP=D@VYl@InpjBl->P@Q z4Bq7-*C{8NI;}b7)#t#g=Xyv8eeAZ^`E1TRhIvWzV8uUPpuP~ncoBf{;=;R)DPNBI zQV*FB9%AZEx=MF9RDFeqOmfvsy+wcZDtPs351D_$SGVb}?uA#c^N=vUx?O+u26**G z51B?{wnKAQDQ6oldl%1+muKz_QQxLH6xFu_%nbqKrtaRO3*z@e zcklC%(>Zf6Mc)D#NHyC=$)>DkwYAoYjTBsQm&4Q!PT>GYeU5D!%0M|D?0GC6zWvgE>pqk zUFjY4O9(x-ye4BbrQftG;$Km}DK~)1#PF%6H$~vZgbDp09W*_m8 zv&eZ=lS;$XU+CJ*FER7RfOQfz^--0(OMMK4D4uy^>f_q!SoPPsRPD_=TVb(IbuoY6 zvAI~e_FRG0ZtVgt+{)%s=5|S!8G&)}TkboE#XkZT|KuUFDD{4?YV`LPc=gu`^$8D| zL&3)b!vJ-ya8@BG1L~UkBqNHml2J<56e%n*9ys=5R15Cada$`k4KK2@zDZ5H;*N>T zp)i4ga=6*DRO*_aqv@`W#o@_FGRA*onKm;8w{Q|#wlZ_vx6K_m8brq#{LiI8G$g6#x@_aTjg^eU+?Ip=;SPsl-fwvw&F#%ghGYpP26(w5AxbTU*StmXZ7%xi~2ne$ryO$z@QYrucxfw@+M z`HYS>aG%1zfi)Jnf6Cfy+ft-f$EET@+be@IdWNy`+e^5bpk3S6z09DYOURIl*Ib+O zw`(%oobDYAR?@B#g><5m+>@Ie9%hoYvQ5AVSZBF|b$Lh>FCSQ@DK)yYczAI(895xD zPMFUB6dPgAcBR9))ElhnZDJt6o;Wsb~_ZZh3&+<&@SW;d%N^O9CiSP z9rTbGa=)TL05Kl9jIDwKv*^i9xsMaqgA=zEC$2mz{XT-<&vqmDg8=@Jhs@(;97VzJ zPUrSrY66Tae-p!T?Ie-bxL-f_n7U3N?{|BqsBTYp6kYVT1F^k00O@~aR3SUru}pT7 zVJ%AmV`KDfNT$b2$cW!z+OM|H5RgwH$F=*9&FQ9%18^OkCG-jk;ai$7Y2Zs|S()7H zm%2+>X3o2$4fAQu+(Bq;hN z)%}GpTmfCcCb*%5SqFd0ctdjuOYomc6jrR5UB^PmtYW~d=JPjx{zVD)S=>VwSfT_( zcWc||SCS|TGsd#iCXGImhPPuNp*j881*Em7vx_AFzNM6V>z~>i0Y*!>z`%4zM_R-}LDQZw%tL`;_FKO=iP z^l(+fGC&r0)1@NlN`R>`=ercLojof@U+7@$8SD<6$mhaDK97*u>(5_OX=lc3kq^SXbyCgi*ZyDv{Zv zW9%MapJ2GYvXp=8986c=yzbv@+N{{utJ!Oi>R$^~e{Z1>kbe@y){Eu!9+G7DrOpKF zTif{=^8H$-+Pn^ykP08<=;}hr+*A5>m+Ex$NsQ~yZh?}@%!vChOolanD6w}iVGuJC z&a-!cVAjr0Yf0D`yPtm(zJ3oAen4mN>3yIMY6alq2k3wG3OB+&h__JaIolX}K!5jP zgy17g_`dMpIDHQ)B*fl@f8NI&o%*{^GGz^RnqZ%1jvF=CG5f4S&f(8j>OViPkQ?!q z+VZU2aM;b4Fb(jH?8}Tl!?)nmSMU&RN=MI62F9G@>}y!=>x_Fo_X2GEn~Wy0|1<1c zOzM@k;=6xuGwGmo2%o;oq_;?K#i#Ex>DSV4@aYG*Z_-3b(_|>xl&nu9w|*)-9|raj zoxIo@i_TuG*QHCnll=%38p|mKS~KDQC)ltDXy*KBD3xv)vs5_Q&tO$s9bdPYNkfAC zLSa8;ztr7&BgxR@*(34LB&hrK%`GRg8cKairJ8?a>{0fZ!rsY#g{Q!?D|?#@*F~N9 z*X%dg_5VWctn>nyBq$b38j1bDEIhBdFsIUh8{6rH@dR?40w7hEBd6rODW9F?g$O1; zv*yXO$?2K}#KEkkw(WS97O_2-6Kv0CUpd)7g0TzXsiR1am?VF<7L9{c3VlSb4=Y5# zJOh6#?FS*Tzvx>9z`>IG1y2nYiG6ZT3o!OK_IHK-mHk8IUc+r-&a-%Wk#o^M_ z&}^Ak#3gvhqD!QtCY(A3uq#dFdtmxb`y`iycShNMNB^`-mR(Mlf>#bdUx6ovSy60w zxJJCLGKFk(m7CM!Xvyx=+b1r!b`iVF1K@vGddNAhTBUE{Uz%GXvy^z5Ih3bT-{~>U3FfNR(%!l1a@*<5w6jL{Sj# z?Y!BUz)9N4oL_f-1D~#D&WD{Cui^?a=cCTY@M#xw{y(QiV7r;~NoNe7_A;5u96s%1 zvQK|E#N>5y6F%){@)7wcJ{@H8ggk$VPluVjpg$d9@(W~)JaLUO`6cp8@#z`>KtR90 zCcj_)06raO^2cSog3@)8$)A^TtJifclfN!&@Lk8$1{KeAx+a*~t@km-)G-}`X{Mgg z-<@XaxZd&^roKf*ap{_6>izoHC{sV9eionRnfj3aF3!~Nso%$^BvXH^zdOg&|5N{e zfKL|~Yts9;p0O6T9-nSx>;OB6Pd77ml8xijt&GjFC_X)nu^ZTp`1Ewf?q-;M$#n-~ zZ(?u8r#qSRPUl_t^epClg%fWMa6N}P-|BoDK0S}g$K-49=><&bQF`&|MNE0WqG9MI zO!*(>QG9wCQ!DhRyP4XqcHq-JOx>k__T$s5n0i6Ih)=I!>NE6K?q%w`^>VLg>Ic;i z;nN$K`f>f~O-%if{`D=4EwXd?^fty`%wB>|?_kcTj)QkGXI!V8`#m=H`X_T7Mi&^Q~={?UBA?rnVWx9}mTn}JY zPmttjJIzz_VvDYZ!^zXJsl6f0Ihybd#bRd{=L<(iWL3n=Vz!+q+-w%~#`iw3@%*=GfhT^968CKGF#bPv?*S)8kp+yu3f(Q zNs53 zcj!Fz%$eX~`Gk2(=3(JuPCxyOv)$8|5%i!KirqTY=QJj&p&4=dLTuZJ(@!}AZC1*` z=0i*1AW?w~qY7EXib<6$VWo8M#5&Wx3p_`LHaTU1vRHwsY+A|!Gq%tVhS->?3v|W;s)$kaI6Fzb z&(og4t4W!cr9De%qylUfJDFbY`Zo6z4jD8!Olo-&-w=2(>t*}j4ftMG{}J(WVon`Eh~<)3!-dga%;5v4BGVI%ZuroZ^8L42eW>*{*_La%7?>KVUSFx)P z3wv!c>^qMfb|1D*!}bsU^~n(LsXzF7u3w8l`mq~QP|!`uKsKhNpaJaW6fG!Eez~T> z7Tkh=$FN&d0J$R>NNs~aZo_We$?gI{Ku!Y#l=0rKq!vbhm$Bk1c7HY7!l8~mT*)4b zvZ`uUtA0IM%~0CJYY7s{w?j5OLp8NOzgLlp-YOB8^EUo^ zw~D<#wp0;+SCs9lVjq=8*(aF&NtAtw$-S7|8)f_OmHnkPJOEJ5!yJmEJfnses9#Mu zL}XDVZxQ9KOBIPavb2h~N1WlUW0ZG}@@^_sM8A4XE{%6*C}iRF6%=`|LI7UFF1-%9 z@CM|;PNd{Fp)tG#t>A4ag?FGgyo*!eJ(vI=z{&7`6Pyh{!%FxCu7O_(9o@03tzZ%R z0MQ|^L@Do$$X3F1oi`Ng*z>G2p=}+BQ63wD=Wz(SsJX%Wcp_pvSnjCRve(Nh`G6=t zhOUF@I*hI(={ly0k53+>mwjUtqXou~^JK_KU9LqfpNP<>MEO*@PN(Zkx}H?UXCDr3 z3lHvp96nc5@o4Nk9gkXER8qsw)Wem`ng8%nYPyG>bbhMR4JdUQKPyJ5{1lBQekx@0 z(+EwA*?F2$muU9XmuQBcQ&ht*Qnjv%&y~^c&|gNR#8+4It7%phSMzHy!Pg|sC1yYq zW_#?c3AEsA^$hCkr*^&s8?ugHs~hqS_Qt}0`@A9~&Kslr<~qK9Y-u&WondS4VNk<2 z#oEPJMx-N)ifeeK%6g1LX~b}h?fi*yXzLht{E3L^m{GosUR34kbh%2tWAdXFAn1;j ziL~eN+8FpDm<6T<+=4k^@%0v8iPu=SS|N103gagj+mmS#UcU6jM$F7o$oG(b+V`B*mZn2<_4nti#on15_Ez)V2Klq z@~`Xow~>%aeP0J3N5W2cJM1fmNjSHE5nF5p&TKWNSkq4>QT}@+|060`tq^6hN*Kkp z!Ya#Qe^iNJaa5$|h|H+SaYA^BiUJ}9(KsraX^h$xU?N`gta8}wwIt2KZk9V~x+Uo< zMJ>s2GPc7{<#3*pQ3pRoG9857GLltP>|{kn`>4PQJJpCDIB23Lkyvq+h(xk~>o?ZP z#-DC7b$iqO?d=~G$JB4{OX%ax>%)-4wJi7WEvpnG9Xl$D^4h@5@k=jmDY-BWsY5cC1ySyn;WPqW*vfuAWh8;w%p=tEWQh8$lvkCEWR6W z7T;s>Z!P#3;5RjqI0RD_HdGoKeC)zf1@4E;!xexdtS?p`OI!>2hlS|=`*-0UfN@x= z2{=apJ66FFAi!lgcS3taejf;;6`02+Ky#El)7d0Al^qWY*a>hh%DI()Yzkb$%HU4S zdkCLL(fIn2O=r1m25ZD-vUco5b`(1aEzMbMEauH%)7U9&HrvQfWt-S(EXwAwm(V(S znJr*nV%{%oHV3wdhuG;ngPp+(*_pg8JBznti}^8_Hy)o&WJ~!{Hi6jPdC2TW!YSfJ zlr1*p$2qr6-Q@}*+7n1g~pkIxr# z(H=Gx=ZmpQei467DZi9@9VG~-)Eih%XbJKvvC%ZaUqi|EI{v+(*s1!)juxkvA|F=# zx2Py87DmMx#idcPxLPdbP!5LN;^rs9k^<|xdtt#_h05O>9u0$1!_f%0jMPYyMuhPYotjWx4_*US!LHcF|O z21SjUO%1wR+~YQXNREdPG{QPoI+6sA*jNs)qO=hkm5hmsO_7k&NS#o%co>yPT+o+8`lwyh!U<)?PRPls5>-)A zJGmBGmDP$T%PPfRqvCILeTJ?(==vO8U!d#DbbY-_yjdlG-mZYm7#mAdY%CJ46z@CX zsQ70jyA+x4Cr);?_)>tAT><@7i?COF%OOMcYOmt|70`|Vd|l?U)^Cut=7@cYVIw!j z9u-uH{ZB^%N?WRhi^@bUC@^xj3ltOmo!mNcAd(kj+?C>>V%ieQildTM zNnVm8MVvo>qu9%fN+ZUm5r|S`$`A-DGWkaiBp-p`g>S2oL62NYoctP@O$6hsKy~^` z)yln*0+d%WuN;PW70E`bBIsDAo;ajKRm;Xmg|cN_B3H>a*noEN1|VP;Df1C2vVE=W zSXK+?mc=1f$&yNWRF&*bnx^a(m3?C^O2W77uLWd(4By_Iyg^B$A&{;aDE==#wb)wX zu57I(Hd=BxYEWy4JD#x3f>Nq-2pl5PH4>ThW2P04oA~)Cc6(7v-^=pZ-A|s{};9icCZIv zCwmZo-of(!V4LB4wuR-ehgn>Eyo5c=yR#i=NIl0#;C&qC%|s)3 z7JGr%#F;q12O=9BAdiL&m0 z!BjwT29H;-bR88cMJz_~>Xl-)9I6-)rZ(Ukl9)}FRBntI!x74IX6gtDZS+n;A%N5i z>r10@JZbf?ryK^NRu6kftCtfaR*X~~D=Mc%<+M71e0_-eHByJRo{#Tu}kV6r!%DSHb| zyuU+N_BQlq@4x`|E*y<{BiKJ+6h0rz-bc&fLpY7?g7erv;WG9ST+Tj*)tGl3+YLA1 z^PAbHG*kl+D@~!ZJXM|s%0zKfw!)Kt$J^J-QJS}}CjrYTZ?v3;?R74+V&6TWc*b+Avd{-``N60GHW%8>2LrRuW0N}h+NMQ8{7 z6>S34mti;B7a`J@ccUl>?|}O&<%P(4z_$|PY&sZReC$wtcpO_ChyG^*3>@glEQokk|VgPF*k+)n4I6m>e^$=d;Y zRiE-ypNOwwpZ>1y)Tc&H{tozmn<|j63OJ5K1s+y+D$p2vJR#oGM%3uW^?KUqa6OH` zggvc*adB`2$bFswuJPf(#a}us;tptPIS^^$G*PxuQ$k!*g}9~~afMEyqLxC9xMnIv zh->aN)6~*T;iZMsLQ_i%jhB{Ab4@MHRe@GcD@`q}bb;0lQcFu}f9raGoo;!!PRCzr zu+woqfXuzwA-D;$wfunHwD5s!!Ge93T&&Cr*scCorqUYs3d~|#4`H!??=394mHiIm ze+TaVkA@2W6&TtfZ$p!MpyGlHezHXC)G*-yjQSl|0?0$iM(h;e@WEPW({Me$3J)|` zVXW)_Eu56dXt3qPp5KOl9ynlokv)F}o!QrLBHriW{bIad$-aSd_AT7O_Q9j*Td)NnQl^$m=k#F`Eg`%j+@Kh-I-BWS8aeZTPNw+M3^j@2aOQ`AGPHo;Fpo zAtq=$m9@lMKqKA~TJcs;%G-FdvJ}$f zJ7_2>_j$yVkdc^@0ugzObd9u#Trb}xD=8w&u?x~Q*W}HAK4nGTf`9ArubjH`9xv5i z;1ccT=W+`qcxZVupP!e<{Jbg#)0Mc^=a8c`MwwTH+Wf9M`4O2EFDt#|V|DqoTB4bv z>@00l1(i(|QvSC`>*QYL%d3E`iu(r1rdqEGtX4LdvZ>PJHWdL(kC|0+Z&{_>7nR@9 z^?SPRr|S=Ybp4U8KhyPBx*nkGL3K44T_s&Dx(4Z*M%PTb=Fm02%5Z$PSdeTnyGS<& z^)91H)F_N(Ia%b!9OPsvAEpwzK2Kan*Apj)$2@V^@4Q;0d70d1v~_ZwyegwZ1@w&j z%d*H{)<_i*s)$<|mGYXBMNL74V+V9cZNuoe%_!-AnXgi%s-^;!>Y{2QFnRe3PJz=X z5lAKhLAzGJ@2C{L-&m#S{U%D-pfEJL#S%SZi9W8_asPK0r=mtg39_a|PSc_)qhHh* zfFy4WMtjQ`!XeKohwNIuyNtS2WemkWV~0_sBD4`G49g+EmaRbGP9afGl`*;ka%zpS z{;Y9-By)`k<*=pFn57 zjSx8WlopW=u9h;Zthh~;vBl{S*FwCN2_6FH5cG$TE77$555cG;^AE{o#5;6Cw9dmIWt{k#Aw7u~G-WBi_P}ty0 z>Ye1*^o=x`z@B?dk(=3 zQ1oAdB>%Gp8oRCldc=ogIg&0LpacGY>;XaE3!3xZFp&3w6LgsKitY(H$BYkD(}UEe1fk@i;xheoJ zLd2vYsz#MWjqMRh;$K!9&u~zF4lVXgCH5`HQexlOp-l4%xKxRKlf?di0##r&ndm6? zgK@DhmCSWzzOkdM(s(IqyiC_u==v&MU!&_AblpkUx9IvdUEiVWdsW5^02WIjOuo2T0nEx2R51!(i;4}UJPOi;xh;L;%yq0z0PvIo1BUNuYGL;fA zjPH&8NP;6_DiM4TO^qSsOq1{!tf!|2JO$SnKNvqk2q!@k<0mA4qp+fb7#U$olMx$b zJZ1cxKt{$>L`J_DziKkd#h25uXfcw}!TuRXu*_8v{28* z97%J@V;Pc%X*gjgt=bHb{7oTW>ygQU!;{IgNG8uAnLH0A`~^4)@7?)}NG>lUxx9kp z@*Ap{`~*GC zkRlTnfYxT%Oe4nOS!9@s5lpf1o0*f<7$*Rrf9IDM$XpE3E7RjlLa-v>M&REwNu}YACvdnghtcpqyU?;7%dJ7H) zQCW$4FPX~5mK9TV!78(}qO{|zqUzr(F~zk`2G1E5BC0_2)q5S?lOnwm$UFtFevXrhNA53V=6 z;#0L2SK--zjuoEmSYZq^yCtG{7@@d(%(`RqaP*XO_666vLv2$!lJKW=#72k*)DcZ& zgJ#t1sd`)iX*wzeZ*3eIHTzVX{TRrTEWbhTxY~*Oge~z zXt|I@tO zb48thv1<%c{3kW$rQYILjd=yFj3EWCDJm|hG1vNVR)Q!SOHWF%;EnnTX56G+yw!&p zml7K*&xYI#wv0kcSqoj|cIYer2BVGk-m0t(laQnT2psxCE9#%}Jk0R=HzP&7r`m$4 z>8c0Pm2zp+y3s+#fiaclor&vqQFDWGikcgLqh^I_{e!hIn7HZYYV%<=$M1|tm91!` zw8o6ax}}D^Ms@7zSWaow{2L+VB^`xUQmP8QhHt;F3jRHgk=Luuw;5p3T`^X|9y|oaHa~Rq6^LM%Ei-BbtF3g*urd+9h$kx-XEMTbYAh$d7+YhtB!ct6TWyrm zWVI`+wAA8@L$f|=b*{3y7Ux*qVj9UyZ(aLnq@_=#Q4^ zc;gNzGwy=L#zt6X+y@sM_ruLb1>9n6f?JJ^9yU8cvDJfcI38@Pr`3z7^mehq>P`N! z`#fykmjat=x30$K2yB?b<{fU|tp0?wOUj{jECc@r;@_YgYj8a3$z3*%zc8(T4mys} zIRm{Mq-1L-MMRXw5)oPU9E2x3atD-DKnPJT#@-4oU8yp$OjV?SmMA!-Rn~~8HG1-+ zaV$0idDI~o3$8iRN}9)??EF{Nhz z9Ug}7u=-l#JPccX3B%*9<8(a635egOID6J2y;>7>cpwUvYHJb$%$i(nl_3SfZg1uE z*K+o#61u;Vu(qZ~EOMAwYFWn8%Q7gmcfbQGER2?AY?Y#AnV@6ufNRu$s*9~wU6k)p zt-35%cUpA`t3bn3RDqx>pnQ+2z;WtM1=78Vq?-Galdb~T>P@If2C^b-y_133T6&E& z2d9g5ngCZC?oC>KQLTO6Yi*|2+AQVK+fr#Qa5AITLUJXl#@wRr*qA-~1#&FXQc{j; zbFP!Cmy&XIoAaEk9WbST(mKP*idtt%%RI#IdYjgG9gE@H@ikX2mbIuj#} zlUmp~bqky57B+Dj*H~93v@u<`NW}wITI*5~mUVs9Lhne0)WeW_2)=QH zGhh)=V4GUc`ZeVe4nWevO%)V0@Fuwb;s8>EasO8Vc6Nh+c<@)$;SZ>Nz%<1#ffhK| zo`W>wMQCfh1bvN{VXW~APUn~53cTNi_XmtuVT-(cRqjQ3cH@iOa&_lbC) zf%mhGf3S0m_t|ZK#s}Gn4b{Su=AB{ac-`L9?<160Z_?k~KzTnf0 zKlp5ud9ie_L!osyt=T*PgDvHmNQWz6fwh4&|J%T^?!{CAn*lQ@FAw^%yJ>yK;`uPh z+Njoccz_?bGD?bjT@s-y7Vh$~sto33x)*`!qsYqrwo2&;kLoY;jqXM#T zQ|#tJm)*qm4VCi~-X2OxW@GWmR+M%%iol-KriD^5tsSu(G~ul0kc}Iqj!|R1qOxCC z@^fdkg}Owv(xj%clrmv`?xQ_lh_)Gouo;33GYs9)+!=1>!ii=9EHfQg zW0rX8e;C$(5jHpqz*DU+NcathiPo2-^q&a*tUYWHc77SOwf0(H(Sp@&9+SQevG#Q` z*1oa6)k^2%2ttX$2?}fbG}bWrooe^5@y=`O%KDANSSpHtzpE8zd_(M2$U<#EMf;)g znyhK&s~XH6*xBCD+#CeO=3qG59OB9JFbvflEQa=f0l|*O4jv6T0crIn4QYbcnF&_k zfRWUhfElp#`qp3dZiK0ofiSX}Xdt65kTtq8kRJ^+rr(8ieB~H2tOG5IYXU{s)Ic#s z=#MEu9Wl^N$K97y2YNCnN2Yh^t;#@O+N}~eIvO}O?y(62{{tsLAj{$_J5e{ADe^O? zLz;PiA{3f)pqn`t2AX%l2=gQuZQkSUfk=Zffx&?xXciPg|G-eR!j!nSQeEz9g{fwC) zy&#i+N-E}E=G}U|v%lV5p(BmV4as#p;M?|pWqWnl?CikQ*e=dMS%S(HnAQ;VK=L+9 zb8~9wff+vN(>3(K41zxE$lJc<2%wiGLO^xs+YE8snUPUjS)ljADIS9e#70&l@nMdebN8Qp;DUQPoXyTh_{L2oMAIG zf-RW6*;89HpdG3H5}y?EPXp%=gF7aFaJI(fF>E2WoauQGI6E^_?Fz-#FaPhb^Kb%o z&h=yGT!Md|hnlhoHfM^OF!1IG;Lj0ngGM=&h$idJ%0t+2byJA8tcsdf-AoMlK|PEB@bq)609< z>3?AMdw)tV7sco$aIqg97eQv=V%2({`ER1*g9LP}^rK@Xq2rRkr5d0LgjdBHQJ8Vy zG8JYVSREBPMQ)UFGU$K$KsO4k!rpkGR}ttd0&6trod}vRU81D+4(P0~N?{8|C3~zW z8n_y1E^tjOJPoDdjR4WWEeW1~PMLt|z90`lTQJGXwp=N$N`IEaz1XSxPjoa?nty0^ zK{osoHG*B<&}2iaz6hg0rAcckT7~1fE zQ$>thq7)wh{0dT;B80(+T2z5g5Rbc&xIaZX^BIhS&tV*V0aM^hm#*!i@QJ5r_J;|7flY{68}+a`gm(*JO{Hxi0hBGvXmTjpxyvOnN~vkWD0Q2E zEYvutsd5{Q#RGu{Jzuk_mXBbGW2hCL9WVg#x__Y%7J0HwLa7;YT{&kCgZSo`fTZ>)p1|O&$ zQ{mLbKt6i58+4{G!l+U{9BF2X8hZtN97?@Z?btC z-ZqK-_AiYFqNw_R2cFXY&mvSdpTZ@TJDf9jW@)E2#;xH?MlaTX_6F(e^}rjRL1U5`I8x8` z-tJsiLNz|uNth_f8k@Mq^|v3Un3g0_`X@`2KX7Us#OyzRJcA}1+!Ze6|7z(?nvvc> zjtuO?0cVs-U|?#fc6#zg_#*CCO=jX|;|kinWlW3=p>v1ZVcHTD@eC0^%B0w1Xz z%9Q#z@MR)0KSE@FOwHR9*z2Qp1!9;Nc8yI$GT*A&r|+Lv$;;f(r=(!(q@q!|CdsI0 z?XczT(FW)MnXDr;VnxuLl|Wm}@60;+dN9oE!7#6X2g3qi@w4jp;42!exA{A|2N!9h z{U}mTTa~!{b8LzBElTAzRf`{Te3d+JtET0W`lQ@8Nrhz*uYKuIK)W&o6hJzK&8oS0 z6p^bp@JOc6IPi7g8_nBs&}i=6TTK33wYN+u5glAFq1q*;emd??wLMS$3@Y6k|H>ig zVtlKAe!jOH#yf`cE||)jSmOE+`L{X<-utZtgBg{Mo8kKY*jhB4ZHyfYz1R>KfcInAP#DjK!OeItXM=o0dat!v zi^Y3s2N9#xe6<%;52>};-9tpXDYHc{(OVCH>1I8oBiyAj@hPgl{vH-5bXQgfeqwN# z4vPu#`AhB>HWGqt6cn)0(1wkHK5VSVt%7iL;Ac6M26%+Wo=14wb4J8=v%-kLkC^9= znpV4513xPA6rDwvdZ&p*txJ;m$aMc{B7t85zsAYw7n-QQ1%B6XK0>6b_0&n4l@E%4 zYpO0QNA1ikatu<*%AuuW7Dp_1l?9c8^a{vOO9x}iwI;izAzce~fj%g~jaf>u@>Epy zLzJQli}&9_3}nA0NH?|;nj$iW=?%6n+wT$hgS6GAP#idjT9ab?lL7~jfPhl}!aPQ) z1h#(wk@zo9Z$0#1nW1`5tu{k#@Xc3$8x(wXFrc2Vop83Qb^j~qJc=E#%vFC;6*FD+ z*R~>7r5&uaGvt%}+cM#p6YK1(sGS$J8=+!cT!Lzu-MAb&x~%kqGL?h6mR*?4JV~m$ z+f|e{jRRx1JWT9FI}nH9RBvkp4ozG&vn@3)sQu>n1;!d2jw_)jy9(#$)o?0*TL{AUE!zSz zZHa#dp|s6^H)PuqhODiB$l4P8c6NIWzgCB8^mn9MB-;T+>f{g_GfSmV3tp>6Mj0Pl zQCr6GDNVq$SziovNz!Q8HYj9&)zC$^OW`jE3hhpaH4By09J{l-pAuEG7}omR9b(Fy z-O=4oiK!yHi>u7p#n>mQRXD;QN=LgR{uSY0vFf92BAeFJMI@juB6%_odD^dw*hl$v z5&I~Db+^37Go)RATe>=kC~Eg8uC{w~NCL=P_|&F!uT$xES8oN`Rh#U8t^~eX)}#a< zh^7YLvH|dY|wqT zET>)wmSa^wY@_Sya=6idjkQu6UB%-O+l%NcQOA4yf4Uch_)rosRl#_uKCGue_qYmyhE^VL2R(Uv7|lDtiM%7chUuM{zf0p@*+-pp z2(ksE;Zln4veAlaWKYCAC7yrwi05aQHdRW#qxJ^*bVfy`@*N_7fl2o9{}UfbvG#!! zCHO$R{mB1UeIWYqkt6hh@S!01FzCUDLw`O3M)8p_j*o&Vd^AkuW8fq{7FP0ca2e)b ziO<(z*_-&#|Huat8;iT_6ZBZzRnMHWPl(BNb!4objt?SGa=FHj%CToU(mfu>K2bUQ z>{*B`L||zge{>FiPl@le9NOlcWH|AYK=N4-<|jispA8v&4)ozCc`8bRo7ZdhV7p9j zz#eQ*mF^)NgY9Wb>G$(&?2286e^c>q8g=Ppd$#V<0v+n*6i4mTkV7gqScG$>w8lP@ zg8!1v1mh?A+T?g`a_l*Z;ZW)XEk_)$O^!X6C&`gH;I>PDwP`N3>8x0r*d|1?67B~p zjmgFC_8ug4`|LW{9<`Ud;l?kPqliIdmMAjDhcgpTEGlt_Y^ZjFWFvlxbL>@kL&11O z)V?}doUQPQvuyhkt$=6Sm(nS=TAW>iRa{C{T+vW}73&(V;-Z8quJNi^>#yP(tYR&Z z<+b*8x{9q>h0>n-X|1~`S?fj(&Z1yjW%emex%4oaGHGy~lQcMv+AzNoI`cK2Xvu~` zaxN&nH;1fKH8uKq1J%#t2L0^owL7jKxpWisUNtn=$K1NcJ;nyzsli&q$W#&TMHFix zhE&Oal4Pu1@55RqRSA^3L0LvItf@+FAgtYJ-}L_wYnu^kTM%oT{|&6&>|yN|3Y1k( zFHXkV&Dfz^JVCJDF4vu!s;RAAd=B4EbNEhL>T$8C&y{g!vLBaU_;A_IzE$J0oqd}h zm$zcoG+1VqnXRjxr_Ua3UukcsWRIcrxi2n%iLgR*Lvcxs{SYZRQTx%v0}}=R92{M@ z>-K2xp`$&uf>G)&Y(;`3R4uuS5KwuSp3RF4?h#_sM(GBGLbOF>8T>H1agT2VaxUVspIx_50BQ?Mo77U->tTv zt#{O>2>WOv+BtgrbZpXe$IYg!~PTjsQEQT&#$5N=GWzPkPVvoXO_9s%(3d^ zM^X84n=1R2l=l8%=H96I+-s){T9F2SO+`Ai5E;-$WI~b1g03PPdWu}=hxwyKnr}|_ zv0v45va|hK;4zw$Q@qYjv0uMurdUNsxMDmN?oP6EZ3kd82ibw)jrx7u* z9wM$(=F4`YPPv?{I-^dh$0jN}gcCHl--_Dr_*bY9NW=qTdqC7?dE-DiG;xA|b;f~6 z2qD-CLMUp#m!KMdT~=lPBaXjm%3(D~FFE;_Rn@Z9m9b^3-g+0VuK=h3L${1tvoh;H z_c=X9BM`!YV$m1|;eEJh0%wY*uoCa9MIjBw1ahZzv)|W)(b4|E{tyRaGL%xD4YQy% z*>@#@=PemKV-Mo}uP>D+(3JDUBK(>-a95 z=Ssc$d~3t80QqWXtADaA_n24)SoRkvxYcxRWq)LUNeyjfe{AoGv(k^SLA01)@3p^j z8zcHbn$n=yU&-aYgKfp(b=#w;#pt5^@oFQR98Zgyu)m!3c5D?XtIniF`747w8kBT3tAchk7_NX?O|;mYRo;n6>gWK~oHNv&;*K*@H6-(Y z*^sXBm}B?EPj&ho{8|ow=@f<>Oji=oS0ECo3}(fTE>(Up`*Wo}2XkCqI2tU7WMP@g zU}Gl>=V`E611kb6Ang#m0O^*!8wmzto5n5J?H+iuUmbV@yJOM3{2*LHo7R7&(`_uC zjnmJ9v_E+r7+wyc1T_5xV{?!KeZ_gm6wim&;sO{bE`-T=KUJ)MfYZfAuvlCS*W&#~ zu@W}p{c+5H0n5B5R>9|3?mLvezlh7>fLP5OaXBj#SFrAQ?=LQ66T~VuMO?*B5*M)9 z;u^L<+{l*U{akSqyHwo5D#UvBggDPzp*|H(4mPLo-tTlO6Z)|B6s#L!mqOQI3p5o2 ztOC-5Eish^+3a3_noh_SSUIg8S!#~NCKjf?PM%m_tBDnC6>P0%`2~7Gq#e!jf>L#0 z1+q_B3yaEdrdI{qA7-XEj?Z+`?8HXM5cff2vC%i z)*;xjek33@DM@1y5BehkgGC4~rm+Nz2vqTZ2&%*ns)Rs)l^!vu#}hzx@`LI`pgRAD zpt|@$bs_G$+Di~ZVGdSnN0Jb*GLhxFszRDdeP0LLBk78X7So=JG>>T_S58-c zj7%p}xfx7CKYh378F>vRLLzz$*rd9_%tlrNZoyM ztI#Q|fUHE09%)pnd?Jm!h0U0H9%)7oGQ3dzNOMpvlQ-cTf9 zr6KgvnxWG%HF`TVgkF8#t+tkfW0bWV9OplOHMTj4?^OeVQ{moncA}aJ_tG&p!3mLK zbvr&%Qfu!ns|ubFDRqjS(wg85-@furs3$mooua{6kp@Jyt@#c{u_Q-V;J`=B0G3#$|soZ_0`1@V2UPDxGh;@D4XXY3;e zh{BbTu7tv_^-!p5KgzAW-cYC-E=#OoP0AWZN9brm$2}6NYpUaLE7+wP&6~>MU4`a< zO_A6TC4FfV$tC8rQpl?$_@& zf>@sbVsxYrf#^g1>z%THaIf0w9=uJT*0nfA!xMbD*!nx-jssn_`;=;oP>qp4ZFDMX zzmur_Zbj``Nz@K+sr|dI0O;%V-42g`mP2o+Zyh`u>F4x|2JeaVSGNt30Yz#u^4(>$ zwX(l6ph})sWekl5H@a|$ec}6$>-Qgz9PJz(4c-?SsBZU1j!AfbpmR*p`$IIk`VzWw zRcUqLbnJ1e>AOjFsBdzIM1l(;?AH9nRn(EdMrH~!Dv0hrK6bqZ96|0!Je za7*kh3;f5uZGK2OWRCP@bxH}F%@4o_w5756?_hGZskz?~0e~a^=T_B^H*wpSb%fv# zp-!3BU|Fr<@zdcpB*P9+D2kwen<$2eD1kwu6h?|pXqk0}RiX=AC60m(c;ABeD$x~Q z#q=(`?-AYL2hoFtMNhQIda;(GH)|`AY^)f_W{6|hiDD31 zYR96bb~IZghN6`=f?Y30vYW*ywqA^8w~I0C0lYsX#r^9}uUDfLJ8L;tY|F_X4p%bPy9n zu~;HTiB95pu}mx$=ZN!v#d5J$oGaFg^TcLxt9V4*CY}@??^lUW%}wGn z^Lf0#BtAFa7GIcuU*LVO_|giBkF6|GY~_m%bUfMpPy}1R2tJ@T%EB(4Duf^4ZAvv_ zVR+Kq7nlmoSRrh&#$u{DI~T?WAG9i<1-l-41vdu_XbG#>5VG3~co3m%!FSv9mdv75 z8-5ksL2q>6-|IIzvQOAh+O*pmPU8E?WX^$8`B!As=Zf=x*?{0fXoHoCwX8V!Fhc1h z*0YwuNAPK9v6-a@w_;uw$zWUXQA`~ryTfI{O6zOrDsP6?R7W?lfQ=1~$EU?&F&h?~ zh^Z3!K0HN`d&+NNGePcUbc0jq-QLDB{caz*6P^oRiBEeNUqUC!i^< z`7Ev0piH+ zp8XEK_0>Ypms%KW7p8Q(pfJ`h%!{hXk%rn8rFEfy6U~!!yS|`kP=LwW^*toj8UT6y zQy>3oJ9d#{7Nb7-0(K(!GKU5{Y-Hn)j4uIDh$;%ErlJkB7Hy%oXpj7~wdZAS4ef)k z&|!JKAv+iizKX&y8+v=o0G+&LfXN_*z%hC)_`1f$ zsR&Mgxflv)E#A7m7CMzN9HFY<+cFyT1>Tc`Npi5HfNW{{KDSa3d;@6plg+ zH+85*0nuQrEx|W%Ja*#Wo9*p~N$ALzEcsDu6n>v8Ft=wv3xnB_V=)mnsA;+RgL zCip2pH29elINTugiaT1|LHGj);UKiZ3EN$N+R#h<;f2Puft+AV+NhEZZDZ~|XhM@p zp?+}iL+y+i>^b-c6ACD@B)H4o6YuVaKn{ND_Act~=SS*Yk=Y5}l`s6>l`ja?m%%+Q zDESQHtuelRnq$z1#`y8c9~xt8BjLDrB^39rq&Z>rB>)wN&Mq%;(nK`4&;1hE=5qCa zAu4xOMrq3#%Ep8$^>MI!>DvHkV`iz_@sVux?Xv9Z;CBq7yj#p5LiOFrDRt6nfM<)MtIN zN<9muk>ey;C_{Cp^QqH$RQ!lcl>Eb+D8Yo;wL^XSWs3W4Fs)Cnh^v&b<+`;>_r$BK z8$&JrT^Q4ghq?!h{OQXHN^etF<;^(4HpCI=0 zX~Nx>ratJh7S@oekpmlH38@;na2DK8DoGYBhr386$!4h1kb;rNK7|g%_ZqRUpd~SK z2fFbNq)eni4j)d+Lbg8$OIbGqK#l#gPogv3@CCAO+UES1zc2Bp>@WXD7NM@Izz&{8Wu zcu?yW`R>8_I+`Q+2UdJACZ|H&lT**rVO#)%w4Cblr*bM#6AB)IlJ@L@aF;qWmfjt^R_m*Y|OI1ZZ0 z3D8PTM7&IbQJ6kno&ZzicrS9I8AM3Ew-7f&2_q_yb*`r}&GjOGC+2z>nHx&;VI&qg zK^RFRjHDm2+%EIW?NEkKZig}mRAx+Wn>QgHwZtw@LAk9y+ard!pY1{H>d*F|+)j(j z?QmRfr#opRrj^{jsl-Vqi9u^5D5T$WGL?|daIBKCvtuqA&MVhGFV0R^H zyjnP-48aY=tD3slyo9qF- zWKTF+_JZMmvNz0?ePFTd2j`ow5w}$*J&z zoCZJ1=`2moV0m&XYbSf7x^oiiE@!dc@?=zZW}~VzhfS7q*;LG%BTr+?JkX?)Sn=!8f-+NG=$zGJb*c-AZdrK~1AIh_TIg?AdEtm0pc@C;Q%Xw3IE^i^v z<45Ct22Bu1cfdG!FyW892HYI)ZK6CpAGfG3XgFoO;Q<1j4ZTL7V#a0A@+epdtx+BtQ%#y?AWBkhnuGk#kk$mS#I~-Jh#)paZ1G;V7G_bBs=E(gGRAEp{}8B zUi80v;F{XnDx#sDNuNoQcl-3@fY*e8r#1yb-FrUR;Co=zFINv zc$i3iv;nF@qy8*dxKmP~zO2NaJO-U)r7tMBX=t?e24;uG=s^9xUN8EFhU#AQ4Gq)Y zf55)=f`UUsu|LDypkM?uJTyZ0X^-yH!V=mx6g%0#aX0zIPBw@iWspV7#KqCjc;8+i zb)rE_$5cV-6cS43C5EOXPR~@kbaTM=9Z_&B%j9kS%KyV4d`{79y72QNyynU2y}e3y^Up9{n?>Q5A%~Rr4I88o$Q7A_49@Kg-(twu7qZX=IF)@#HNtXA{LfhyzEvA= z(kh^Nsw10`gaQ;mX6cY^$EpdP6*D|TOT5_Z&@z8)c6I0+vPTO4BrbeVxT=J z@)ev$ufjI@8aypuhganr@Qr+pG5IEIE8k+>)F*}ezK|YLn_96&o?S}kwquLs)ha$!N04T#2+|yN(m6$tf951akmfqMiBXZ+ zMATXCN{I5eSyjP=&$#2vN)fY2PqO|bX0c&e%rYTe(QH=iWD+mH|J#3yZkzvm5M0{r z75i*n(o6J-nN+VO2N31`C$D>PLa2*dNdRK=XDsR{AV0$S^D!!spFn@SkHNngm_8ft zEAYNW?#4Ow8OxWSf3wE&3)V({$vVhAYyjQ|$*<8rv+LcEP>ROZ=cNAyAk8hoDyZe?ifSqM^%TA?!vu4pbq& z{S}(JDCc(Ych%I>CaSGOGjWY&ak^TpF<)r9VMlJY z06M5K{YYL_PR?NJf-whYJ~l(eNfgRwp&Qy;z2tLnw0s^-$QNL)d=XBUFTqOrGF*k) z(Vg;b*dX75N9DWlxO@+)lbodZawS#>#)Oaq>bL10$2|GqTtZMmGD&$YH-3x!g2zc-Y9|g+_q4 zFdFfJ@_9Z?KF3EIP54BkDL>OFKy@h9 zPG?=oiJ1*6S#w$&&Vj2~9tF7N!kvs$fLk7G4Hr^qT0Xl_ho%+4Og4xdo0%||^(Dt< z7Tc$T)Ee=5Iv}kHKT`*!HHB_`Gr2Cqki%ahlQam0d^?$>A;n_7HRP{Cm+Lj;uR^Q! ze;V>vt_e@&9!m0ig)T?qZMAl9P_R>IQ%HY11FH4m3PZHH+AZ~-=Q?8-`6pF~SLoqX zev1^wYVv{P@^7dmJOjPu-+a!ScAk0K)H6?qc;@L4>LH_4%y~1U-iBeXceG(R^hipt zo~-ZHGm27s^*o!nzE_VdVb`m-^?&5me|zFT^y(Syp{daU+8G^Tkp6Pp5qb5z-i-^k zN#W6Ow>_eXS*3gTfR2Y7<3F<~exySD<74hAMxk2drzPI$HKi&QdeVP{O^Q=rjZq+t z(U5P9ffmMCXlabYK8^Buu*P`p9~0W9+dn2$tt0BjgldvbQV4CsajM3@8tTnce_n4M z(!Dt@)*IE667O`LSpO1wREIq(O*n`tC-m1p>(NB)(Io8A@zBON0oodqVW=_D*Q4XS z9v$cP=s2%O$AzA5s7FszkNy^VMz1$qqtExMj;%M0OLZ`y6Cf{S7qpi2xuH)Ml_-b6 ztN3Q)i1{f1y0;Z=JQ{hx&8Z0oT!+FLGSY^zF%ZwA@ z4$Rwv&mJ*`dj@?D3?g=`mL7T&yA8mp$Yj2va}3mXVq)V|9eURMp2n$~e@2W`Y6pFm zN0qxcnejdg?x^kXJZFFRc*X-bLDj?@qIpI)%`?_S4DxY`3DM9yu8BLp%*{|57HTo# zw?E?)y^}e`Y{)j|Ah(zcy^YzvGxpns-o@4%Nh~);jYAU8b=Negne2O^f9Rg<&>l~J zjB0`iG3tCCPrtkKgFllXf4!1Bf|Amh4@JfT=w;0F+?_=}cW2wshgzOA3GFg|cH>jy zC!cwp8ytF{KFz3}CWi*opuO)&%YPoRJXzX+JlWQ;JlW>SlaD;wxJ`ekA;A+)Qp8ZQ z!-&g{&yG-bBzwY*B}frxLnmX2j~beiv{2OG_kYLQ-j^cXliTh(e__pc%y%_6`l~ts z0gKeS$6~+($<&~a#Rz?=TtLcbbhpIPr~A~&819zXp!Pn6oKT|khjefigl<0Q1Y~vS zEAE|xtbC@#q>qHf0ZXiIfn!J(J*&1qTxU!voaiVGNa*)Tj7*i*1Amp%&rRO?SM)6E0!Un zVMp8z$M~{DG+e0856x1aplqvrsx-k>P@Ox$b7*#DJ2^PDDj+{`O(KJ4uyQoJujQ%~ zy_Sb6NWe4ebDg{-vp&%pPyDdQdum0Y+>KGdsS`7Je`%Vn(f{k&b+Nl|@o=T++uflh z^z`@mibL*^zo%IMPW(NGpvRxLOBw8e`h{Xs!u`VQB{=mjg;HY`9BW(#qm0X8x^V?+ zIcwky<4QQoxC)jUSHmTEzXJ2hvCQqpwQQ(y9XrKX#TMw6?!;rd8XBg7i-AQK{hKplo7!tDR48w3q((r_fAyXkOOefETOT(RXr_RQP zD5SM>c~RFgR#Z|IKFa;oy^Iy(udbfQH|etk#!l4Q--L9$XB%%}(|7uGr*`4aIugBI zf4B>#R1@2gjTh5D!kw`}U1Ii~HO-o?8#PUTOFc*L-csMP4)+3xhWjQ9m^XaZSWdW` zt}%z|W|ZopL!omLc5H>aVcoiZHxfSF&x%6qz-{-tT)8e9dLmM)!biJUNN&I`9|7f3 z_dE&bcIzx_F~q(DBiv8BsMASRw`#(Je^YkqL;rVR!UJ`uvZw>z6d33=d`Nhxu3(kJMFUQ)LRH*$G=0!Xt6OhI#!S7ap%GJV6soe>#1v zy0m1wv8%pjZ*m{4_zrRpAE!P{OQ{L;9aBt^j-N1rj>D=a#PodYQLED9Z$k4oYh981 z4dcWQ7$<)sGAn_!!vX}sW`+~`G*e|zT_=TS>AJ4b-+OAWXSzBeY^b|aGkgkp-oo>Gn(9MUd1k^6 z7`NUgp804)v+(@z0vy|X$YKk_3$c-f5Dc6zZy+f4-tNw@>5^ z3M(h$-)xW67KKmOEuO7+|7I0AQUz#+&(@!{PTKKnHumlK&GN=Mi`u~`b+YD6S=0_S z1+v^j&9whPQGvfLE=7cwhL`EKjMkFf132AZe-G{>U}HOZ9}PV>b3RS(3a4`D5YAXkkQsv+x=5d zqd|B7vhd})MU!#dg`RruZmE8nbgoK0B_cjdIN{X+!<~BJEA&PwCz0E%#(J-ak%0BR zwO`kJie_&eyeVIjhzTXGu8)6=I=LBre9h<(zFJd82WpUNhPyecb6SK;+xeG)Sphlo(_(>t|lHYSy7=2&E#b#g2f!x>Q9h62&> z?NQ!MZGv}{=7!_8F-6>V;t{YOZXMf2E??tf({{0$5|xR{Ut8rP9p~B#uu^?=u)c$| zuP?UAMAg9@3dQCy=!qB~hw09;28-Y8$5xA4^&gp4#*dXEk=9u#{e1Etig_sCGctm1iPJ)=&6d0n#!~?$X+l4o& z4EmH(NuX56D9k`u&D5FMKkH-SAoUyt^=3a)T+=*v%thD;X?Y%1+LQvn!av6CCM-ShJ@eO30>RnAdy&{*Z1 zNPdx%9}T~$N|yKvX6Sx<{JUhCk6S?4}n!i@)GB ztqOmsHp)3oqv5Zk;qRQnr?=9|a3y~t{E(hXe@{WPLomW!R0(8RFcW9>ObgCbZU#9V z=Tq4ew$419K_tHhSvVfY(^vRR6!l}nTj^so?O|B>d)5=h)&J@2TA;KjuJpbA zcUQmuazL5DNEAg77#JN9pX-V`8VQ(HL~$W21bMi?5)nj#ybcc?z$i>Wa3Fv{e^6mS zR&*W=0TfXN#jHqTqU^!AaF&gaH3uXzi-f(m|L*4R`l}_8bNIjhx_kQG>aOaps(b6+ zO1L;U>cP`+ez4Dn*P)Hqj`m478g3O~1zevQYBU8t3Ip*P+Sd|GpL$s-ZV;qUXnN-wWxvah>~}fyun3_d^RXa1DM))ta5MFU^Im$BNRfwfJ^v zw_5y3X<01}qrP=5j-VHFEq+ki+OEZsG|p)*-HOu&P$%~^HOtV?$-1K!e;?w+*Y)^l zowaC-Bz+pC2vS~`ZkB$Xl(qPa(yh>KKxw^fQH#$MTh&liR)g0uu@{%*VI|sXS7Q7(?av74c_0|Sma?#C_{`~UInZL3pmI(vS^TySiMwso~ z%$)JXD$VT+R5mSoS(KL5e;GxM@=6XJ)YgDntS)5*x5ysU$0n76jVt1 zaw^^Rq(+_mht~|cd2hZPe|9ebJPoIEor~;AJF}ki8XNu4HV)DQ3Laa3_DP1>^i_SF zD&P}PMAfkv=0aPTM@@eg^-rFqr(O;Bz$$9Nzk*S)9;iXmnJ>X|f7lE=pcX!dI+D_e zMX(jSLlafUS+PBqo@lgMg|eC zh5x*D6*UZ7?&J!W{W_>h7uZz)TVOZ(e;NHRrwV(5usi*~imDgl8hJymdXd^rF!(!% zV>6YQG>Y`=@qjWme}P4L369T+7ulQ>sZCp<+O!p_Ol9_oSFEeju zQsyzOpxYa)j;f#;2|-b6P%lmm>U~RU(9F{qABWqAffuoFEGS0{)O_>3ZC&(PQLy(qr7W z>5;I^gEiNdDJ9wy-^nQ5kLFG$(*20LML+$W9HNoiCPi)(KFE*b3u;A#Q*L`A*u%lTcEM}+ZJW```onGhI>D5z~@j~7*UNJANd5_je+N!S{u_QlU zP+M3jlM8Cae6c_;cZ^2v8!2)lPia5)lrF54e@Rbiu{h<%K2#_+^f3OG8>@H|L!LLW z*d+cvt@b~xk=09I`(yu08T((#*#A;0{+FQfzZ6?j3Ort;#L$!iH^d+8Wom(A_eilz zys3Yp6Eu=WraaMxxF$uuioW8j2#T+w*q2hki5juv&sIRi;}7yZ{*H+M(HC%%M$*ib ze*%WyAz@K-y~xki0w%me>|*U}Wpd$bCE=doXxuaG^X<0!B23j3VWqwZu?K}8drQPz!(vTlk|*8aWy zhqUHBtMFcmlKkc!n>S@_Rg|%LQ^w{^fB83w@KkD!7;~FixrQF%buIR^hMPIQi zf?`*+Pukz;Bkj+5b2~-xb1I69Rpiv*<-z?dayEpv$D%+NGuYag z2pkm_x`zI52=xly*zQO-wPRSN>D&)a8B+C+$FfmI@BATEGNU(WGJ1QB-qtid7HT@E zol`ofQBZOj2PMzzpen)AK^H82f2a3GnjX(+^yu`R^hgFr2TgEvzoUO?dVN`<(Iln5 zL=j(UE7GJW3N%JrVW2TO`k7K+^bueEvTxI?TGL;=Qm_3zfdY?o^azd5Dn@q@T)b*8gi&`HmW2}N=jfB03}0%StQ)$d5&^KD{Nb(#YDC(pi2YY5~zIQQEpaY5~eBQP8ateL3ZcuF-V1x}0^` zr9RQTm6W^vCjAp#tLcdKK5J(=T0`e6s{%n?75HA7+!r)*@BTaF?nslHTf6s3%8gy8 zxv`I&t&?7OW8)=7*{RuSe_BB`nhrvlUQpaA^AuMv$anQxo?VevWjAWNKq=$9xC zw;mb0^+?672Q+RyvZZ!(u&J=PP?JA8aK`414xF*UrCRIlEiY?&3N`wvFZ{QBdkZOy zfj5|Jr&aP5jgl`Vl$?~WkYr-}`5{A~$Hi#3_I@sTi@FK$Y&;dFU zc7iU{s$A$6T(>1$7Gimb-9zjV;?*Hu8{+jL-VoxAA>I_?Eg{|-;txXX6=LrY?+Edq z;4bJ(`t&2bhp<24e|>}l2ssegzrY}>qu& ztxC9r@L9s8gv$t*6Rse9j&K#>8dwX@6TV2ejHFB>XesQNm+{#|i&Jc!IE*@Fd|kgny-4 ziNeJUp-GKRf6$fu zgk8Xud$`?Dhv#iVpDI4L9(z1E@*Qe}8(@lI(xCh+Y{rxL4W7c2Ic~HvikTb5As?e0 zpJGf4j!z5u^TrDSe<9=>jZFdH6!LAxj)3n7`A5cqe}Esz@ywN(9?Ua6LOwMqFH@!P zWl3(j3NKQ4JM$vu=0(iSmFBO^wEqhvELt-ctwY{5DNj_0TZ7}bhP;pR_x%+CS~Lg8 zn{(W5lRR!;sPMt|5a#xfkWWx}rNWomzYO>7>3+N2e2Wr&Gww6@I64SHSPe)puuse^V9ks_^($<$AjmzBiwnE8X61ALeeK z+;MkIe);M6i|+d1`1OnCRak`ir4dW4BW)8|F=*Z}moFn}07o)203jf3^R-sP6%4mJMp#M#=g+G(;iHBb^_haO1gtff2|5@ zlsm?nL|?lnt!ny)9l>U!m9v%JF1wt)#uS;6t>pQ#z3h~knyJbxlils(bSF<|R~a8= zuB31BHu~=Fb9>XJZs1^WXQSd(B17e zAzSp3)94{5bVE+*f;?G;oF)i4Q4w+u9ptnz$RW{@ZPCav*pVlX(0$L{hisomPE3fL zH4%9>5WQ=?>yYOs(LG2Cxu3e9q1WEK1dY|k8gvdiA0xY#q4Ou_Q)J&Sf8?0t$P-1# z;Z%{QZjeJfA_r$g4y%Y95D__s6S5T)IcOB}j0bYWYh>#+a%^g3<1=!6XJqRza_B5% zdo6MpMC7>|ejj=DH1fh` zWJ?+H5@cjU7qU+-@;X`M6}-qxOOcnYBCowfUI&W2C=%H^h3-8hoV}aSeZU=x?0$sq zeeORa&sL-RFzSYasi&p)-Z#@)9iM^LU$m^kyr!LU= zfF4ig@=Q6J&zY;xf81g=qWPxz7Mkyxzd`p#w`XerJ`_gS|Z-B;aOWJex!H`9X(Tus@X8I57aaImkluLnmsHsDqG zAmAt*4R`}CM7$2?qv&BC0As$f0K}BcF%Zk>C-Yop6^Ns>e}%W=PIPW}dVzhH-51P{ z=w$2H);6%dwoX9in#{F`D{v*?TeusH>+n7>`eHwD9>B%mjBp+VV;nvP&X2`&;0&Q3 zv66nU8xDfZhz#jcPA8i`G<$>5!RUzQD04Jqp2$=J-iV74Z^osFm(fLW9F7P33;TZo zXW?wXN}L1uKqUSgjJ?LY;C$|Uf#xFf88AOI%D{fnUI%y$jzJuY52Gj&Er6r$qkNaf zT^Y-O{|8V@2MC-(3lg-w0024$0++$TE+e-~STQp0e@DHG+`Zg+l&qsvf(a*-9-*lj z3SFROf_{R-fXPw100e@cdW4n=W@_CS@0b)@bz=oxKVRBb$+138RPwPU&sVg0wLZS`(NlaaQHnoR<5j)IHNZB1R=gj%@aTJQLuEFAZXx|$XjtW$@1V-x zq4Kgbf5KB$LJjdX(ahp$8J~gE>RGKSU#D`j$~#yU?I>{IFA3PW3-#M9h^8qk zlm;|Q7_WmZiMB$xMm#kE)Xg-FwgbpJXf?IaW@@FKw2LlAoVgLwJ%ph03f|uY65gS9 z0Pz9|*ACL?a`NyO_=|w;?Eu#!gp(R(}E|d zenE=wKTR(+s7|26py@C_9+un%H&>UnjLgff69y+ zyrh&_@;c{u#=y0toIxsgNmrREyah{T$4LjbN-xbqK>&fzq-yFyG~W;RIRJMFONCTJ z{&H%Raan9v_ws9iJjtim0dJO1ZvgyuY#md?ufcy_$L|gJiX#4J(otKjgNx$oK4tEJ zIh+zCOZ~;RyFimy@zstdmpFqgx-X@{O^5Q-j?Nezw%_wn0X9$cgHNq;-XEX`<@?&-KTedVy*G;Px(ZCbZ!+B9jC-c6gf zX`8f7+<9+-B`GdIQlgu${rCazz1^AlXXeeDH}8R8`qA^B1AzVbDFnARbFnoPkIsLG zBU+;Mn3fD*jQNvEEs+YxW5GEsbXf*O_{QKR^@`dWQDYZdPflObLaD=pCY(d+eAi$y zq(;=%#9}NJj%uxe_%&^2A{HhF{Y5Aqi4Z@DZw*JIiz#(FqP31`3tg)P2GgCML?WK> z7%K7M;qI*!)_oYE=w<_Dupn$RH&TBFD?+82w_3Pf2s<-w&}Nx}tz&F7M&xR0F`*Hj zG<`j#B~kjIRg#)#Fd!G=kRPWlC<>yr9}6UF9Nh{QO4h5aEt0H<1-H^uAz3G=)wWC4 zBpdIN@tWx>~47$Y*|AO0HfQo4Av;-|eH}Th~MM|O6BVx5v7YyAVN{88!5iIiXfaruDj%NQKN1{0CI|i1z1t;sO~Aj$Ddu-p z3{Od7VR4CD7;R6D?M#2kO|HXXXIcLN^x_Gz!F6?b(zmGj>}Ogk6|uZK>BjLor{rua z4q$z`=)&68%J$izS|>J@33A)Y%h$=}fR~@14!XM;3oHYv)Ldt8?VSfTu5n zMRy0Q8!%sBcDb>Y>*?$zJ!eEGUK_4DOnMzVQ|)iJORlbR475j292|H1&o$Hh?X5$h zVO|?`_^T(q3-0dHzE-C%8JzV5{COR*5Xo(3a;qEMtepxt{n1I9&uyhnVd79SY%Qs8 zJ$pp4_wPlQ-zR_A{rA=t-sN*DBVF|aeX?-5(W#z1j`rT}nckLjZHr^wsqz3Gxgxn- zr<{Z7f+L#=zaBKF@i=vMD;7xR^-xq`}$ zS+Z}A>`RHA;qv?{rvFUYu*)~C&3Z=teSV8r;vd1Y7QcU>1XVw4rDhZZepze^yWOhA zu1GyjZxAiow*7U}e!tRQ>vk>#{drQenwDePmcR3W;5^`vPdYp1ds{qh)&2fL@uFLn!U(F+BWatPan+8UR0p{HG}a-X1h_a=L*2kVu|Lo;W{ zkA=i{k@$Z`tc>qSv0vxwD3rv-c%xmM4)`mbC_5L9qxEcUsv|aqMHJsUf7^*VCNDYK z;H+^M3SFc}b4HIICa>A420EtIwi6d)+wHcXB$ask{dMB5zzDjm%pa78itT7oI%`mj zj`?(b2S{JZ>ITjmpf&r<7{nE5bi3YI2k_>KV!tnB#RTudqZu47lnP&0-OIK z(xbO=ds{L%Fxa;z;1uSh8cVf68PVdD$RB%L{YiFhhLkqSpV!FVj0N~qyjia#5V(@xHJ z+g%9GHRLk5NwX|Gx-vwrkrw*bX*IH_F{OVz>`Mj@f-5VH47CUr*3(^-Ly|{^2HMYg z7olby;y^g2Ca%k{mt3Lu5$ZR@Gp3OTTM-mvs5>ziXaDT@oEGbeBsCe@5Nyk1gxYm@ z2g4~Xp^}>q&>W`+2-WLwjcT(p96}JOgWy?*dO~*wtA{3ZU({`cgS(;|A#cL)M9qJ4 z{T7a0iC@-QhqTmOe5Oy0%|x`MXD}YWyhx$sr^v`nDnpRwMyDr;OgvMpnHQC$yclH> zx37LsS3Vh<)1qpo(aXfc4Qoqif|=njDbz>;MNeOSma_WrCPh2o1Pt0ih9Q!jnhPfp z_LzxYUA>YS228|!gB+`cd+$3$rEI%hMtTAJ2H+6?hz@7=d&@A|k7 zh(VlLP5Ei}di?46-~)ZWHyGQTBm0Ca)0y|_I5!Y(KhASPJKzdjW!7Iai}PhxibwuZd}VOt$X5o< z?ayOQI0w859$VHnA^MzFqTSCxo&8)w$dVX^xLbG^Q<%=jMr_o%*|cUQMiAF;;|IjMBeG^D8dPTqb{WV10#rQLAa0Z+q{4T|9znymV@t461I z&IV7x^ArvVZ8oWgL(cnRHV2=9&)T2@K8J8&3+!40*U!#R)2x3Usg3Uyw-#j>D0suVp;158GdWkZMiN< zhTpmQw%pKDhTmnH>V+Oc^TumPa+cY~#$VBjjIOG~Pi(dhU+Xdb?tr6S+bU^YCV`Xf zCz5UsEwTET!q$J4RY58)qRYpy4Hl{C158e<7q>*z=1ne0Pvu~EI>E02+HxsEtD1k( z)ch5bvOULp+Qy?sS^wxQmGxOYxA_uVns!G9o>c+^-tHoF+}WEQu_i!fnYmEUyLWxBd_4aXPfBU;no0RL&D zI`O{>t?+-}G%fWx$&27eA^=G23u#K$TsjV_(dij=NK2`+YA6*?T$fRxOsGauE1n@d zu+kklt~SjIlq`(n*XOmv=W}~G%@9;0k+E=!W(X}P*-%7lp%rC{YIS}-a^0wdH}C6= zyN)l$crbVgLP1+GdCN|FU)ETWF`wdUHln8ZHGh9i{TexDhbb(?B0CnKlPaaGqEE&` z+R6E(j3s1Wip8@7%iue9EX8dIGfryBRzh}M%fKc&SSSgV^=M++>cSu!?I z#O8lq#q$GzB!up>J+bFESMGBBM$v!kzyRNjFi7e6STXG|cKtxK;-c^V&0h4q zDsi!i>(s40Nd5l_4p&xJ$v9xc6D&f?Z;lZCR+hqKNDq@?3X_w?)UoS_E&cv5oo#d8 z2%Bd{le9mI2N=@$hEI{V7kDNb^kN^=;0(h2tDFr@z`O7W13%}${kkJ25#IabKWBfM z+$(<*{+#J|!2w@~KVv=BC~nrQBpE{pmWkp1@#Xu7wad+c8qO*>gBKCbZqaRondV=E zKVkY_LYUmT%N{eJm*Ec?P;|q;2I;p|W}?0Vzt2QbsVaH&AL6a-H*a=Mv0U578pq0G zgp7*_!UcLSMiz+ui$k?)#iV|*XYB09q=A_F9UiV$&K+_@q*RolMHZMrqj-@ znX}%s^4nu}SBY=3frJkbmxo>aQu(<(>#rWffN#OK+Cj#*vD4X%M(Hf9M#A@K`f-Q2 zJ4_BVV;QO$oy`1)m|d&mPbWRL3?bt?*pH3zc#0iN=lS}3)z3~QV%IrHy$gTeZNqos zdnhHp7r`01*$fB1A0H|P5kEjv8H~?p?BEcNX~T=rX)Q6%_7QfO8z*O+R*8qk>4!zS z7N^t%1prmr6m0opDK&JN<|a*|82^M!f!804X^CJ&rA>!OZDaApL`XXxW^}Gm-OH!L z$uKecW3hNjW$T6rivk%J>v(_ksF44IbAK#CdiK*X1|cu=FVEnnGqVI#tkS2L{n$b$ zVmI~spr7LPLp1Ucg+Q&fvFTYDeu8=e-e6;*0?5Y?)Au%=0#3py0Nxvb5vqGW!VcMV z4uv8j9)+>A$Q}@Z9lhnoroGR?S#z1YbrM6S4C8Q)zn5VG&Jzcdt_XkhxQHGwgh`k( zMNn@AVcHBK1T&@x;mspxaA`Gy#t|+<#1vs+^9WH$tVW1(ge0U)5w33@VG-_Gjj+fO zUIX`ksvF?59L#gsUW6*2;!>92F`wOK ze+eGH0Xtpx7vXWA!{u0lpF5auDa(HZ`l_!HB!*9#*Wf|(Y=WEEh_7#6Yd<6!fU@aZWP$fg948JGC z<1}kO0O1wNX?A}TN{Q$Ivc1*i0PGPOgzwXQ^FSGf68bKsfGGnHCChgD1fZN!WI5ao z6%eQASHJ~tCeGi0?Ns6HfbUTIU8q7U?8HiHtH6bIP=<}Ln+IGsNqd=izX-nu1w>T} zzfQbGEQ&HgNWJ&#K}fw1z?WE(rrrnPH_2}gvoMDD@vwi)7m2WlNQ&qs3r(tv(!t-( zoXli>nqQSJhdLUejz*{>WywD7fos=wn$euTg)HMcy>uS`fYpe{5*|M;Wa% z2w&wWRDs?q%6Su%KQ%|8y8Kps^9?iKP{p6t`ZL6ArFQa3_}jfp@J~zdFH7+6jZM#^ z1K>F<7T|wHEPW2ksQ|D%hdU6SME4TbJcsq{P2+R8kF{+s$@FDAYxgc^FB>;`AMN&S zMnDm^q57nu`lP;-@E&&%?|qAU7T)_d^`x}Z{(>7=CK>w;bK1A)^KE7WFXPIq6EbLKnT5fI*l+%&SLJeHL?xLvV?b< zgXn)wwHY8b1H@)H)n+)=mUgPSGf9CiJey5{^S7eFeVbKae-+?O`l#!a4n z66bPRZSHfk4S+zthT$~G7-`0Ivooug@N$1v6n!(Z8z^=I#cph7_Vi}9b`vAamoZ|F z8M{Ty>Gd(cf^k!4F5IFs*H#)uF7`8U8suTpSEjaoug~JLd=cDirQGu(eAy?l-fLfk zIv<^BU6RYXgs(RWObaV8AyZjWqWmG$f{a&m?FzU?`{>&X4Y1ExX2np7Z=ecGqRM~G z#w#oqmF<{FYu=8@wC3%Y!Z)Th&lfRKR79_eFvYZIzZ<;z+IQ3UQPRG96WZUGUHkhC z?T7w1v}du?PullwLi_u(Yk$A4J-vP!Ge^pS^o>VBW7E^{aN{%h=Ei67?VmP6R97UQ z01N1QYv}w@PxOt{Hqp45dM$LI*hj6G+IDL9 zQ+trw4r)88^-nv^K1zQNx@fb= zBVT_2gFt-0AASh0Ap1XxSM)LV+%!IAjNeDD`yuw=Df|RU_!P1=PD>V9W(;rWiALU>B&H9Ws*;g=!& zW{O{0@OuS*^yha;{JIA}$s$q`;C}!PP)i30X4IUWU=;uWn?aW$fKMZrN?0)pmmd%_ z2A7|e!VZ7MSnE?8*A+i^S69nQDUlC|ClDpyUZ2BOzZ{))FjeLJZa!x6UPhf!SwU`jkR9?Jtw_) z;w7=6gJ;pi%s^|zDQfbd+B&=^kx)>dZt#CeL=D=g&@^~Q)?+c!A~yQR`u(F@@5u43 z7_mh+cYLc0t+IXe@UUTeRubB}yi1)n!67%bw`5w!7GqIcP<`NWP%;!G(Z1};vMs2^ z8(hR2(kR&?^Kx93H^!1{%ky>Nr?R-vCE$FYgQ`P8UFbPT1rxiOR$1%|&8fOm5hZ_` zZ+?&1x>h2I8MnhJOj2!Wz<)2cKGi;2Zx@5Q-b#Z}zesFe9}(_trGmDg?rN_WmzGs^ zu}+XS6Ww7^7)!}ZTIgxy#lwiL$#vt7>@*sPpWG0fa`HH{e%DLWjweBK(@BqVJ`x>H z&)|!W*zZMKR9o&! z#O}z4aZ!l()1|?5`)GQ;zOyCMKIWjI@h&aeyR&`QDY>bz&>itE^)||4;AzUM`|P6n zK-P&Ta`1e);ER&pX3hg*kt7H)gBz9vEHUiP&tZj3l-e7HfsKf0wmwi$o_g%yXd zWnpu&QKHc%B_<9@L{g=g7-6GAg^l;`%34AcKAg1s)o?4WKl&8$2RCWI-ni(GY#BS; zFM|7yBDtT8*N3?8I?IkhRac-8W?MIFL|D+f7l{KJ9jYNL|v zI)>)ES-kS7r?cY&d>*m%OyD@s*i0R=suRIZ175E{?b|AGX)bEdv(bNzzk@gis9nZU zZJ?6atZ{tjAm-__i0QA#cd~2CalKQef{&)XOEz5B#c`xOj;d<+N@>TvU`!BN4;wVX z<_AOGu&5IwIOrXWQl?)EZVVp!Zx==fxL-OOqO)3qI4`Ge=?d~*=Db}7j+*9EUF$yY z18Ni3(5%?~Vsk+0dboc%_=&es?hyt_-s_jwHHL3LWPV&&iEPaDwhiTDbBWnof=9SZ zHwD}`3hoHYHzWcn}zu}RlNU5FYNJqc*oc` z(&pD}%E;-t?Y$GetXPn@v-_-Erm~svigC!mLT3v<7SGPYUMhc2z;=Mxtd=qi0(L&) z{kkGq0(#GnO-F$Sc*h9>_y`0pbPNGsH8KP`F5^SMe=a2gCpFbLQ6_PvkV|ED%TLa! z@le?>K1{Dd)_jNo?K!&y=k~(@n;Rz3SdAZ-Ip~0P7((4 z(+P_F=-T@X+YbJ*u=t~@JIP&Pl|byGWV#}*0;4d-w#0uuZ2T@*N?_uxt(9dT%b);m zy0dv=tuWJN$}9+vvbh2}b*=`*i$P%&SpmW;0+I#Klj4eUy>$&jH$H<6=Eh9|-~11|p|^ify?@$IWmuo|Rc)K2ny_Q-l+Ikc zMF{<|8=DK#@w)9%jW)xnCW{?k2@DzThtFz|Z47_vI>A~sPdc`o!1Jrc=GwLt*o8fo z2dQdjBZnpMT@6V5XlZdtt#etfES~FM)+n-<9Jv>US1IR2AbEB7Uf-$$SvX*UKCIRO zyul{$L#^oize4V|-23Kuv+eWERDb$`0>|d@@-e>Ybh7s&oZ4}5e(-iQmQ7-};6^B8 z@hE@2W#k^~TdaR*NMw=Ns-8=+-_}jff>GGZCLifJJ#7?>93BXA>0gxC^sHo$a@)p( z6r1Z`HYKg5@+n-bWir`<&U}H3-29)L@eE2a;+dT+)~n*bJM9ETP{6u@t$L$J1_fMr z=QI5E2yFNVP}ke{ZvSg&{06TD_$hwdaXx>*Z{c(N?ltE?Jv0IED>pRr=XKzL7F@xu zyx<2BzQAj*4eC7}oaEtuUi=XDevXfsQ3J^^z`*y=zWzPjSZ}!b8g4aoeG8$!Z{gi< z;l0-|{I3cozbj)BfDwyHpu{9lViK^J{EQ>Caz-w(oDI6*4&1d|FpX2$JB)-bcnyD% zN)LR+?RJ<`N*<6(b|r)y#}$^9a@~ZzfLWTKp=R-v=1Hdc{R=h!zRdP{nwf1==>+E> z3q|{=@&nMSs(kSG3QK>uRAm%q&Z>-ZmH7H(SsBI;gCGo_lwpz*ds4zAWtbN0C}%wj z@#^WhSV{Yjm!@YF9$M)+S1mo6fH{9I0$+fvP)*{;c3OmK;XDzh1!7q+gYl?5?JO%O zZ3&jEOIxj!_NOaITf3SxeA&3Jw6!YIeo|f9Iy|kKYadoB`|}lYt;&uva}7KG>*m^c zwOmu+xrMif^z1k)EFgZHpT36e%3|;rZf44ySE8rSt$^*~LT1c~r2Mw;pwR}EoW3sOdmN+>}oSY?2&Jri5#mNk9 zl5=aM)p((^4A`-pwSh}0jtf?UjhM4au5y%UIS}(fTDjrQnE)Zd#3pP;tr~?iNe#6IZt@5QuyDlAUuB^;n<*E zS9tzH;f3>sADy$QPbyXaNr+|&$DhEL#A3$Kq)v+&CK{)S^K z7LLi6;ZVZ46*q(kU-GdIe$F=wHfQ*8a}=jlt>M&j`#EVHGcejX8a67rHqSal`vOXeLaz<&WyO9u$>w7kKe z3IG7pm$5;XA(x-gG9G^icpJyDo;lzE9takI6(T7K6vd`OkyHgG*#JdRtP({PQz9)N z$rA+$1V{i>x1C};b`qyK%_&ZCx|7&(5-O6C*s|lqNgSug>CK7LdoNDj?Cs&u4j?J% z#r7xc-R|t{%s(@`v%AO7{pZ3b0bs4L0ijeGpJ*BjO-}g(O1OV%n-cL)1pDMED^+%+$0sy$Yc)wayA=gaTcf z)sZndAR{d9RUewd%HaS}H4U=2L86hPGhu}oiKC~YN(8NDiztp9mWA9>w<%BZT186- zx+Pf>Ejy{iT+x4WGb?d{%WK`HWru$!YBx`;-qSo?A~lDXp*VhM zy}3MpxHVEDdY!VjRoR)31Iv8*?fb=&mUhG{x8xU=Z^I=e;wh)w=NWHrv6uP0jwPZ? zQdTc%Jltn#_Aam3c+~H#cA`x(wUu)J!77zjmIoJY6bjbatp$5GM*O>74#`>P5F3A-9d2JWie~>ZG&M{qyK71dM_Q%a zk_vQTjUajLodp$=si5(g1B)!CqU)t*`TBK{B56qMMoULefA5LD%7#&YHOaS!7m%Pb_zMb4vu#y|s8p6Iz4qKJ)SZsy3g}Z7(ad zn0$Xtqhpq8-!c)+&0@8$j>;}eySM%zjc4iciUWtbYs$N-Jfo57h5@@E;}%N;hAKTX z6F&EJudCHpA!41++q}fo;5w0Cx#4iFrbIj7y*I$0$(*X4`C zkuB>aB)N{Zip|~~BO9mur@P&9MWK-AExLa$??CHBk>sD~NAn(kcke`Sk;SzCwB)EB zZk`tRMLY9`TT3J{w|?hh(UMz=d0wYzsi0D>l1xi>_qyGS8z@><9LZm_;jp8`zYm-7 zkZF^@EU${;JYLf8@{B5nYg*g`Th2I28Wd{pBsx}}b?3?D4zE=>)98?=Za}kAy0(AL zhu3Z{%9C8~rGnj6TU^)V@|<>CYI0ViNH`XE1czG!4Xe6}96qnbv_jfc?am=PwlO=+P4uP|w!b`#F7+USOS zi$$mr_d2ILy>64$H{jk)?JkOYcYzJf(ohYWCI>yk)-i9ruywi1F`d(3lA3>eCV~~B zrLC6iQcm;6HC^cPdL5=_hJPK&YhS)|r1^A1gXCJ~E)sghzM=t|$8sB0JLZ@o1B|}T zop-8ax?41xmI*X}#QTw*Y6Y?WPx2au{t7G!+SvRIwipvWvW|DidXuwW1I*J84)Djvuue(N=Vqtd+}^FrNPT(|UYSiOkR^%V~k5S>TUClqG-Y%#gP%>AGwce%~g;I1Y=I-`I4k)ZmKf0}TZ z7F*74n5@`9{c3i*d%W9C73~9Vr^M|e*Eq;NQlnQK8`@gQa0&D6 zhMifGk)xhG1rd2ureasT{L8679KR57s1rU#&Tz)(=^|f0l*lUZzeb%ps}};4*c1`_=z2KOLk?z zCPv7ftf`heChHW+=M*$wRY~T45JS%jpSF zp7rkvE8~=YklLXW-bf@gMo0}J*b`f=uoodWfrNycl&7fJQQvF4)oJVHI!4BhD3fxm z;LU9fM%xv!CVIqAR_wR+vjWX@xf4p1MXeHKfmqEMCi$B_nW}0K^AJqgAPCbm(Vhs)Q);zt-4s#g z;$~=*2t=7pX2^56nRCdx%)tqqeOaAo&fyssW0!w2Pf-U}sDWhFMnu>;KfN+Bw!>Mt zk!f=iLa`AivZ66Fg!KyR(K&oSzOA&XxJZ| z@Xh!G;|ew2Y64(OxMj0H=#SD|X|C^T*k^~^;SL+z1}`S(+#94I_Xm~nr5Z#_<>=BJ zcqxB%BCk|};|Qzjds9b9f+lHDLg;1ia>o4?DLpj=v-f-z>vZcaB<+|#!vx;=AUN*NcWIjA}S z_tJMG*r=8-!erO!E3+%-vp}Otx&R16^MmO!#<9bF@P1~-4`?f!5krK~RS{reMxs4H zS(1@BcW$8v5ehWBQ5Hl?1q;7}mt&@|a#;PRu~C~04U(Tc9zuIIQ0B?j4zqBM;s1ZJ zco-RVMQB^_XvuI^Qht)=^BO(J^b?xXu@#rlyzk1KK4k^Z=#&d@FrEWPd46G0OPUPD z0Bu>cq(I9(?z*hpt8`RfRbMav|N~$?L-U#cm+f_>VJT z9$QK|Px1u7nz^rj9-%N+6Q2MIQmTLK@Fb6}FCuJSc>E-bQ$_pzba9d*=&Rh_m`)_k z?N=5+jLX%E4s$@=zgsoo5T@qmM^{eV`#d9L6|s!)&MWtUIdZdwIf6Y=K7^V11AZ07u)~kxY32(*G0Gj|gCT#s_iD-a zKk$l0X*Vy4#e75@aWv%uJqEx1dk~B^Ij`s8FmOPf&iy3&O^QF-zR|I@8a#t?>86op-!JJyH3m1pk14@k@9E z?pAn~ABv>8k$-Y>CMu5x6y|?W#OfaSuMPf#fY4b#7j=VyG-+q;#IqO$8~g)Je0Qsz zz*iVa6YGK^T5M2+R)pF)w$fTvAxbpw)yTn6@bFBqCc%4}5xN)VK3uFlGgASjrL7_P z)sDGnCj(<%fd%ss7T0GbFT_H&G>hy9$pmSKmA&%h=(yacMCHTsSTuhWK4ryX3OqRw zO{hb-EfIw*N1|=%^FgMLs;eE$4zAXrT@C~W{ZWOqFU2w&mS8z)??Sj{LBPha**+6g z&E3pS_^`rB&`|PUmcbjWxEP_iKCQ2T`*cMqt0eE-ITc|?qPR2{m!O;AWbTl74sux= zF{ACi;gph>G~68fuz7!Swc~QEWqwyT$J}ekFL7?k8PhK}Y7LG_({D^@>_%K+gSEJl zl3G1%cTO?P*_45+bD;&BQctY($fO7?Pm0X=7}T^Zs}Sm42}#h3Ynk@z$nVw{;#!2F z`c!vXqq@^3Ck2{EKg{P+T5&V&9Ve9N&TvN{LKFS+RDW7y4EldoyvBxG@LC&eU~^(7 zHCpW0&ZmWKBw&Y=9x4<3Ai%CU5Dr|q*Rcx|W2eiR(wa&2#BmXP^LLj_?Cscty-dA6 zN+UA&MDQ$htVGWg*cthf4DO&^6_F?dxZ4KT;2>?GkIR7>(y%;3A0pn1`)tsQ`$=vC zB5mzuWJ5OS!~=h{h05lRD&?>ZI&dVB(kS0yl!t84jW?*7*Rf#eL~yBoX}dH^Dyzv3 zj*{XYD#v5Fh<3bj!&N=rF!UMk<=u58T?D1w5GPYx(Qm_}EOv^M7iU$=W;+IW+)Ps3 z1f5{QN;^D4ISBQcRxe{NBL_+U)PQD&e2lOpBx-|PmR5flNkdV5f=hFfq&ejTGn3{~ zF3s7?&4|)IT_9l`coP%mW*Zb{5~kITFW|zwkc7F#2_lz8GJ^bbP7NMl0TRj?)pt(UQE>992KoFuE5^{*Z!1dIi4H2IcrF ziePp_xEOz5jj%LxM>XWtaDS~0-1s_!JNZOPE8dM@rKQLxM-)50ktPXz1HOr7?a>4( z_JwNJ@w7`z?Ih<4Zxhw?3gcBJHpsj$5Hs1NxU?rnIYe-Eqzyp7r`a?whpcAZm&?O$4Tw&0~PXjWi zj|pcW^9;1CT8$v18-5}^O^PE&#(0Rs`!KW)=IWC_@Ycv}P@{ij6z(%qkmuJAMJ5Wa@p< zD6@akd(JzvijS3OG`GR@mGmW*I_-Vc2DSJ#<8(@mMK;NO!v;R{2{zmCY5Zx@ z*ZzF7YsH^2B66BvaH3x_R5N|_!%j}{*Ajp1!QYTeB~e-NcL)W^Jyr5QNcemFBc*C_ zK6d;wN;azgOTxiT+(uUX8~e~_DlkLYZN1?q1qOz-<3I49HvBvOi^ayIKR6SqnFuQ~ z?Qm<9lTjrYq3i=;t-Rfhf(I$%E43JJ&W(MOd&&;1O~Oef8s@8bV&42}Eh`5c1gB zlt;)f4F{l@wt_-Q%voDv53Ss5 zTX@kLt6m#>SVs>v>|+%6-CxGps$qX0Tb9O^h!Xb80sm=*9}iKV4F(55gE6XcPG&rP zEz$ncWhNN)PsR?Mw#A3A3T~F@g+kFtG|W!s?)o2`H5stYe()qL6KZTiwXnRvBGe){ z0;y`)g?eGB6Kp~QnV>y1uCVy^2bKPr$x$V|hnbhTYly(uCsQAK*D4FS6uW=qFu63v z7lo;$|0xhn41-a5>=;=`Be!=2gG#tPAV(q!k=h1BGvP61yPvhWc5{^X`6GTJ_6CEY zsLXtf2n&5Ni1~O_RiOUaQCE-_7^N$CI7Dkr><^JFG>?G@?7uaI5?lvEAP6hy%|rD9 zm6pa8=itx-^dtx?**mSf0C|7HDt0l+Dc}IypmMOlL68B3)$}Y0aG|*_ z5WNVu3|)lVhMX@t2QP8nISa2OwO&07uRjNGd?;n?;)JoQbiJzdv8%MPxrQ%@VX2Kz zTD}S1tZBIm%=AA%4r#gS9K1bM%~Ex!Moy!vnWGPtLmcl_0nUMY;2oqD8_Z!&QurQK z>9@dJHKi3&+MJ~HyO@8{@5!okS%M^)l;)CDX_9dD-x)JOf;0rdd*OY?5PUEd0@pks zxPN{S+z0Q^2*HOK1Ru@{!J>IUaK8Zr4;Vx65%{Q~ub)pvpmH9*ej$^u&%(KkzW#Bh z^Cz?FTs040zo7g2#dKeP2p-n7JVGojRN9%LU1pbf4nC8r>QaAoxUHN{SJkc$XNODh zxC*hIL##eMLQiJ(=}~$TRUup!9f(Vs13W_i9#uj46g;MZa*9B)B!Tid2FepzL8(iS z(ioJOlvTQvRl1Z_nv@)}&#Kavh(?kUd|$}mBwtEJu3=6mxn$%dmsC8S%;F?pVR(Ek zD;|w=I?1I3C;5MJqLW-wwfs7KL(_7Y#%F7pjXTLX_)e;#tJJ~Paw=U>n?9Hgo`UbH z;M;WYZ7SsE7}PQ4pVHvwPVr6nmIgvd6C!0*_(4_>S`*|l1|cR_qEm3WI56Lf&0Hz6 z5kNnLA7ujQr>Ov~n+HJ8Tn<1#hNm+Eq^=;p$O=%~JOF=sCM!Tc%M8#jGsMYnQqkEm zXPi7`6emxq2>fcU$@KSG5!gCsoII5fC%;XMlc!WI{{Vk9)bg*XTDH$)$+$n$lJO__ zv!-Q4Tbt`1gnzG`MVv+REYd=K0jmJcW3>PeniRa;i=7a>$rrL2EY1FANnpFw@ zR;O!Ur^|m-r^&>%|6AHpg3GYRNPDbL)xLWk+TWW&dvO8JNxPWZ{ zv*>*oHq4?g4oGJjAa73xqzBeOzYfTn1VB7GARb*zk0z!H2sWexvIDye0qIW#WMD2p zup4)#0fOBsAU)X20l^+}`aB}JNNDWwm|f;e(0hM3RJhC!L$614iL-c}hc+87%Xzq& zwgc}56C>%=NIE@Mmvt5odI&F9&UyH2oTNh|>F`J{X%?^d(Cp^2oyYn(Nw-GQ?a6iJ z&Z6w0G{R*+59c{aQWzHDm==dcsL+$koD`BKVGaEjLe8^LOCW3!mZ<-$cr8*F_1*M4 z2n~O*2YO*I&360XRj^;ha0hj$B)hQ;-vZaDPxn*iIjTP0OTV|OPZuZ|A)s`tUevL^ zsA0{mx+}q|3~#dPVVp1w^5dyiJvfgg|M5&qegvYLn}1Qu%O<#+AB+3+RDw_Q#_%l8 z%;Is@cqZQHG4s|NXYqNn_vPb5Ompkxf>G5)h8ZR%# zmuSfToJ5tVJW1Hx#p7kM=EjS8yu2nBFURAa?!FrqGZHtCm)G-nnZ-Ashc8{Ov)g~c z%$>bds7?gmPYNF;M?VHTA)v3%%)uFy%)#^U9()TqIBB6neo_bGqy_|s{N;(xe1{78 zTk&m%kiRn(@~L^O%iqngF0=b04f3~XnMo)2$oIyb`GaZBe1F_sKa%Lo++EMZcf9$haHt{8mVb7N|mXF$)+PaPI){(ngLyp_%D~YlHgleN)v}-ncfQGkHxqT&r z?$fZA1jlC{#-9^(^z^HT;TnIB^H%zz@ZR?A=>Z=Vq8_q zs-A^SWW%Qu9d8?{(?QkSbjNejmfa#))v2vY$f5O@EqL2?ci4_U)RfweKN6%Qcc7+1 z{E@0qE3O4p6e>DrLD7Fh3incV&-|ef z$}&PhO))3}&yhmIB=!hZ4=+HW^2`dA>k6G%fI{V&6uNWa3LPS`Z=mW!85Me2W`zWo zfkJ{yRp~f#_dQ20H%(%Psd{<=E?1G+ zU~tU(|ZR! zvHqP@?x3=pO2(&`%04Q0!T{~~U9{WZ2m1*megI_>TGY}av@%pkQ7iq+i4ehBRl!_b z1QxVm0Xoo$Mf88m-dk`3ZdBhlYVF&T+HDw0c|V=xj>e&A)9BB%}vPS8CeV<%Y2X}F~~fK zUk0;_W`2{x?s)he0=ur@*KF*9j~}VC!+m~s%uccS87fdauI1OT?8cYhO|n~2eqF_G z#`pmRI}70(YPNUhCzI?Dl<)Z1=92Gc*w%?>>uh7d&+yoBAwRrg=VU0XXE7%V@PANC z2MDzeKGTjH004=XK|Y`zm%xS!1efo-FAbL;5HkjspO(T5mx=5$9DiL`6IT@7Hz64k zf<(lRP!(-sn*f^P2et`fA!5Y_P{Fj?4?83Sj810aWTLh&{T==SUwp8x7FO$8EqzgI zSN~7@(2sp*CMlRGcF9`Iy>st5`|PvtId}5x?;n2xa2$68j%nrPOv$QLbwjf=XSABW zY+llqYDLx1%c`R#lYgpdnM-vud8@H9qCf~dEYwP>p=Rv5>F5@NhhB-Zf)0Vcc7G5G!UB6*RXXD03Jh$a zrh2P zd@Qx89vY|HP=9`eIlHg4OeW^C|V>p0=Q4HWsf!W-=5k?*h&$T|lq8qKI1<4yGJoWUDTcgEfN{hx)GF2?W?3Q_c6<^`-=i#aLN1s_D>}6}u~nb8yXEP=ZF92UCROqKG>&e1U6Gmf9kVyxnzjvVYAXyvjusLjwI0n1_>0ZF%>livq!v zce;8MAzWvP<>le2rc;#d!2`-$We(l*j#|1gqgEGWIaAXDg_^Bb7B$;n=`C0!SX6m2 z^W9&J%rmCy)NRh=Gn%tvmH8=CD;jTS9(!!sG&MVKsI{8L*Pbb}WLP!bT=q;^O7m9T zE`MofbvNd`RAAaP7<$@Vve?7!3Y$DY@~ljb{n&v%&JBJD0@xYvm2J&=2-~GN2%^F- z#9oB?WdfX`Y$y?WjFm)a6>qKMP&O=QsdWrym4|pYp{(L~wlmTB3r6o^IMKO|(QG6U zS;hO(I6C+pa;rFjiB6T+#pOo zk0A697SKiB3I-H>3b^AT1%nDcS1`&s@FxO+KhPV1MW6jN0iF=yDfZ%5-pS8!6~8g7 zr>Nq0{sZI8?liN$gn8aey~JJMEKK{0T)XTdI4I&{_jBoR{SzuCXZvu4s@-(8dw&Bq z$4G$Nac;yZAj{Sh5GoxyICc-s9)65a$9?A3ale@vYw$00%4|H=yAX0&2gou^)}0)? ze73u|N}wj6Zl90G;!BrBNJtj(2{OoYQ8GBiQ94Ejht@H$iqd`8UPcSM**w{R9%-US zNWIK`A60cx6VQCrb4(y86L3+7SAVhmpe^hH&#DO<^^~DqHu@yhaj88p2 z^n@IK9vu1}xxqEu__nEE5F-47RN~E;aksRasqBu&X%OS~7NG;@}Ur4Rx1pok*3zt&r4IGyc z(K-j0U`jFymmd%_2A7|f!V;HX@-hg2+0|;1SOF3SEDUyph0SG%@PPr_iNM6>G6sAE zZ0al^Y{fc256JPOw&ON&nl`=f`@Zk{ZhEBOytk{BfRzB- zX}>?L-M9PR%x{i2Z)O&M@|i~;1Aq;Jgs>_wez;*Q8lDV>0*(Q5-^iPj#Ib-n83mY(>S8d4i#(~(3l9B62Zo(PQZ zjRa}Il3#3VMJSldSOyD1u{m=YtO(2J%TUibAgoNX3QUBERKp+}4bo&aF&zsKH)-@_ zA`nOGH>{GhZUWnKOEB#3_vE5~BviLep@Qu~VMo7Jw6r5yJN=53BMVN4vqGwOx;+wB z`=t?2bH5Eo(Z1RzwFzs`FIG<3+ATe3lRKTF*XHnvSmY6RI*Wo5R$!mAs8hxY=TT>o zFNdxtoaMG=#CDHZ=%4baRihmTpL_vyPYK4g03MYn)T!4z%sq z7LprQG))9*Y)-FVnCM(thH8g^%{HOJljF=2Pxd?2ooGFrr|hU7lEn6tPSxYwd|hSn z26=UxtFqVKI9P#-T`FpStni4dCl0UKa=3nvZ^~l}#wtajdaKRT-+gf7wCGls?V{@q z{WhOf61*r4`NCzJquqJlDu%08ni9wS%QuEM+Hi*`GzO&R{`!@zqaBTPYuo&#tHf&e z@w~F8i5&wy$9El+#G`(fN7%D55wzDH=^b7l_c(*GwSAY_B{f!m;TLL;skBa(gx2df z+I%}jVXIGaPc^J)u}de1y?z~M-d^8yf1A^j(=Ul)#N}CCxH&M`RoCQLnfBhQ&cf-J zIS3Q=sH3=DYp_71lci{)aYs#LZV+B&5jeqm4d zfZ`NJHphc5T37CW6bk*y+J>Q~j_%U3<$kewG++(wsOI#8{q^qV?T1>*cJ__0_O~}qj_mSQ_3iORy4#%o zqa`_F?Sxq2FD}RvM+QAuk|#K(Tqh!BtydJ<`X{_-=?@ftd-wMaOJeh}LRBqljSseL zS=)y7tDHqA*9bmTMYo&u-7+0$b2`Jrvd~fE^f`u6>K?UJ^@+lGca2S5=NHLude%0G zLa@W$sn)uij&&Ee=k$$W&H<|>=V)2WbhX2`zP?Pd4%MT>(}$93_2%TYi_sF4r|MCh zI@IOOX~*V&=@pW#stsEbqO*EO{cuyR)LB>3=5LKjPCT}&yj5^-ROI}R)9O)ku#AuW6=jbp6`==Xl})YfnyvaHRt+CzpE!W~Z{8 z_BKC?vU{R(JFYKu*sA>wL0(&|TwUXC77B?^Uw>Hg%_nOQdZNz`&+G{(y$lj}Rt-Vs%*>52_Ejk@` zRdbv+Npd-_l0|Vxzu)7r3ssWa(@?r0SC)zf)`_A}CpjuqF-fO-G+3cv#X;Yc)cD+{ z@QPf2rB~{3`F8kMi8tEZQo9&lg|ah;;>M<}jDDVwYa2fv8QR3~c6tf#7Q!nGZkz~M zmu+?&*xEj{t*nXcaU-ppDiAF~8?95XLAis`KhR=xNJVk-hx0dyMJhSori8dPSmG$J z2p`HjxT9u8W4yhqXXk2CRFAY#tPq-YG~{ktTKc*tJmAx(~d z)GL*=!>%L3RR-Y>PIxLwc$Q?>Nnr~~woI3-ZmlMnEu0Lg10JWd-{0$T+uYS2uduAe z2nnb`F@2|>O0cC#^anC@OMfM_r7)IR*P5?7smW9p?Hnk zIaR2LD;(GF&l}ko?(V81pqt|q(ueGSRu#q8Tos3TNSDPn|8BAGsK?`}&b3L7;{LrT zAI{spf89YJxsGEWbDbKiw8k&!Aq}B=*4f#v-*m)c(U`X`lCq5aRIV3r@vc`so^=Kmm|35Kd0n@mebsbr=?t3D0yYLj8YMPi%_+|WD++*xlCYOhSdl*V~9|hN}Ym{ zW6`65hTcHpNOXLs8W|4-;@+NrX!Phb3A~16%RW_xDg>)GA0c;4o#PaUzO*7{}xUwpfotWQJSkQj7>E_~FCTR(~khRFcQq)NmS7%klMX*)C4{b~} z?Fh@vXi+VZi5!B1f!s}hc>S@MdJ>_1aau4|m@6W07FCk|z{N?Qm7M~e(8Uzcjj$ri zQUoOlD-=9R7H?a;tUa{ATvWa_dpJEuI(ZU$_~M1m#8-iS7+^9F($SWAC2ec&grVrz zQDZkQ#CK;fKqukYk&}Fxxzy6AM$&GOCwZ^AIC&T5tH2NpGpP@MAY8W4dfgs;pxJwo zzRg!;Hn?px`Cj*PgTux9c~;g6s4&W;A2ajw)Kcn&oXl);hL{%ObZkkI zB;>w}6EYJo1%hxblaJUHo3GMs%I=pIuZ$I0;*~My;_aA~odT0E#pH~c*)g?Lk5}x$ zlHwIxkR@J)^w(*By1X>;DjQz~PQXbf^L1wN%2MR_`O%r!+W06lv;ip1s(|IFns!m|VoF4G_xb)K6T097cp?T$Jj+6hZFo+rGD_ zgB)p9PuAHa;LG6^Hh3Al5}~0g8$dHpS`T;IY3-{hy_=`p&IFwSq}{$r%JyG_u%>E0 z1rwqLa1UikMnyME(_SA!-_mp)3rz5TJyF8Pr&iDMLK5O$c)gwM`i6Wfypd|gs>QA> zfH#Q%Ah92RM5vfo@${(S(Q%dP9(6(;OGINQWq2D|Sq&x9o*~?pu9z%!m6?zk7VbGY z8E8F_UElhGb~O|l3{r}&z&qfbc6d9yixhD`P18?86KrGmy{8RjQc|&9{V#pdt@xonkCZcAya`5!iVf|4jw}&$?&m4 zhVvxg-d&x05ZoERXejVuc+v(>z(-g>Ir z%moNPC+E(nC>ef9N}Y(t0_qqYhs#W2$UX&r4Zq2SU%_wLS$!)L>i1^HQQBEA!ygeu zb(|DjWOgVGEAVIdOD_Bg{%V%~a(AYTFg&YT?_O%PKHoodk77IJ#HFIP#pKY){B@Ln zv6fgB9Z$ua`2Z;#hEvU&MV7L9nDrn)G z38j21T3zITZr5#tX9kgQB z4&q&^v<>9ZHc$m^pw%uA*#^oTGt&OJf@|pD##Oi$q4$Cg?hK!B$g@kZnoe(jtg*u~ zb{w1FY)s)?r{Sz8oDD9pFr4|xdB#p>`H|M~Ikbe1&jmRroV^4b{#VX4FR5cFW!z-P zCgw4-5+mO3N^_WI%@8eQh*lR!@N-(kykq{NH0xcVExM8x`CVXT)>Fc>T3F*tZDC!Q z)gHT4Z2niKb7zDq;|@FSWTseuHP;kcLodyUU79_*$sRo}kdw!z)`HSEQ%>@eZnA%x z`AgM;wa&qdBCus{CnfE>HSZLyhYd`eK?Lu@X|i@A?zMvpNuRRL6rna5-l)__1l3S7 z)iurH@oF5RDiVjO)XQ3uvK|Z`q_CY}fltBbz*lo|1P>uNbZ)W0cwmBm@&T11TFQSe$;)IWqr7w8e2WgO#^rg*y?#l`F*8O_!#^0Kn-~36N9%!@k@_@zhLL(cLc#3* zFY9(HsSYq3inKlGVS24D;|tRoD=7#vzKHg_cQQ0hTeYgntY2q>Tfvv$OYQh#d>MjW zjVHVCl;~BZ=9~296?_H0lC8T-|N9>Ec{09==yFgxvZie9)~pPFUxTl;pQgG-rn*K2AJuepPJtJ~olF}anqx^VhfIRo zVD^@1m1Ia;lIu3oF09gY_Ypft_)&V{WreqwiieC}?bw2k;m319#!pawu!y!ZoyDI* zShJY#YT6O~85@2YKZ~$o5e1S-7FmC-y|!qR~)5r31dWYB(LP{+zbNcksJ* z{5F11!G|>3KTz-y?e0ekp2jom?k5U9u08vif=_7AexcxpwYy(2{~Qm*12Iapg4YGK z?=@Z?l;(YZCmBr68rPlf5-l8AsS7va&(fP+t2#P9}}|KzXahQ z@Q-%k3RM`_3CQ1eF$3b$0Q7VnjqB%(8{l$d?4xnxtZ^gJp;CbS>mT%_g`Np?wbs<0f#wI<9Q-F6 z(=330oAF=tTdd8Xxvc>FZX;|VivMO`7m)@9G|%eH2V5ZeI7ll zHzjh*Tq4iUN~8g9H6e1_Tq3t+B=UTE)@VxPj=4l`&q{<6ADzfKQm9PVu2XQ=x*2$X z^?7)0ZQY~rK7h0E0Rhg#LoE_LKiy(=Tb}^$J>aUDfwOLD1|Hvk3O>631MdWpo_s9r z2~iXA8TxgA@Ct^8VGw`h$ z_+CxzqwotR-tPn;|3rQvgx6t4bm7Qd+KBX|tM zR{F<8Mn)ewy&CO-K@SajsKrBm_b>Q2kWc z+WXSiM0YvL|iY^CdZO%s=;G*PK*LVHm)gS9hQ$6omK7jyM; zKk4NGj%b@k(m=G{K(tcytLB^ zJcCgR=GhKmyFuP=NNYEhmY8hEe@UImAubB~mPO*P~qK=th`q83cds1qp6;3>5g`8N9(bb}SrQe=ZYz25-#B zMLY6x4KBF`mt5n>%hiv(`9~e`d>U^u=XuKo^6Xuh=cn;jQ)Ry3!jx%}!xXsLU%MKD zNy#((&LI}0US2bUcN4$YoyIrJ<@ciWGaPRtF2L_@r`(O7;dlqWQRn9nX+idETy{;|+B!7PsXoe<)|$^quGN{uYUtzq^*X^2>QX^B&4T&*6KA+?Lb$;Ny@? zJ}FxN8!AA?JJZqKZ5Y5sOg})F*!FI~H|u(7z_;jnX~4JQsT9sP7ZlK|0(>jS`OveC z^WFtFNkv{GtLb4#IE|G15LqdPt9vmJE!3 zXu{~;42&Mm%qSJ)JQ*1M*o4vj85qrEW|WFj>oPFjqSFg9nkP|e6L)1`^lKAFk7r=?WM+xT)5EdU$1_;V*LqpGQd#%{Wn(zOg$!YZo`Jany~v6t>D z>FrvmrqJQme>*cG%hl+bBWURx(o6(<9C8Kr=G8QOfW&$o+y`%lx4>KJR~!Ere#*x` z)y62#8GGl9FP}5sGH2X2XWW|{<6j^Ly?8lsxDU5r8@>6lz*PG*A@;Eh0oe{hb_OGJ zab(#Ivh9m32Sj$nA#+J&hX^vCK^Bye85LQ|hAgOPY2l7{TlrTFUWM?+3@>_kdxIzF zylurhkh~(}eF|P5^4g!5qrBMWSuXG9@f@4?)OZ=eyGy(e%G?O6_bWS&&kZ}J3G(&%rnot+du#Q^>+Xl@rA&7xxP^}-Nu$>ORqR9 zeQU$1242$)nx0{=8n(4=e*`j{H5}KeH=S%L0U_{x#WxMxD0)pNuo|*BRr3SSFoRo$ z7g&Zp-*n8ta-E3^(Jim&$-4ekteR(d4{sU4X1VfQ;+b$T=XtJ|y)EmOBOB5Qs?C~d z8@{jO<;im8p7E7YwA^AUN>_sx^B| zp zGupf+Fu3P}e*~s!WXqq`7jbgT+0kMQ;6f1!0WaZQE9e8|rT zW;7&O(oE?E$B|xG5D7Zxn6~R%&PMB1fmGFPdZwJWbk3?$ZNagbdcmo?w6l(&MET<^ zvHT|DI9|tLj;k!X5e%ST)eVmO)g{+GuQ>ZS`qarGiWNS6$7fZmOC#g4!Y?>I7<-0% z1V7-|e{bl$%g6|SV^8qTVC*R_Z~uho=*Tl%i(s3JqPWAB9{7tTC4rd;R&}Bn+bf*C z%2eZ=x`K}wImHMQVG{4@FGGou>m;m3Z()k0Ki1UW#9j8u2&Xfg$Pk1U=7i!~XRqLo zj4Ug=CI&A3aa1ubotcqx<81|*bnjF*0|b}P!?9rqEO~g&9K1d3gaJ8O9u$ht5P1*m+cQT zUw<$d#9>=l7y$-W7%xV6*^C4>U@#W=!bh9|4Ir!wN!W`w>vo%Mo1{n19!axp(onaS>5-mk>!wZbD?PW}wCUZZ{ob2lY?+a`yiI@2&p+usy?O8Zf7kntF`xd@ zOP>UQ9@0UeS&Pkg&8Cx?ctXo|4Qjdge1B>xpIx5KFK5-nc{LG_sd-HVLg4dbi|P%v zE1{<5yC!B9wb^|Cn8oRFHFJC{H>)O8e3D4uws<<#6;CFY^Xg1O>zdM*ju)Pb7?YuF zHl6Js=>Kw_9_S}f@vxjC*a+;kmQ@5hfqlgk*U6Z{4F*?PZH{u)HAR0-;Sm+LYk!C- z%&g?K9I>VBg3vKT!geE$9e&QE+&v(L!~J?*_+mwVDJlT{bf-u@e!JvQI&?OhzP z`!A03Tv?-_1d~^Km!`T8w@gGx1%K~uJ(;}3krp@c@uI}HOvgRMZs*#C)?j)%n2a3q zEb(?u6wB)!S{3S*83?w9li)BnSVbwCEv{osTGz zN-9E`Ym@n^CdK6xJWZ7<*Ee&rQ@+`8N#MsDD}(B}BiU-n7vTl2ZmQYivwz#TGI1aw zcGdUJX?yns(hVWby)-)CS>OL;s}M(;Zo)UlYut^k8Ew+vO&s1nPqpMHL2`umkXrY? zqaI3<Ah+$OxOy}_(dJQICy4X1-4kku0*Xtuqtsaq6 ziRNqdIBIJ1GtQ@`0yFC}j>+Jm0?NJ|TILg-qPqmC+4d!xT*U9qB zM56piSB}LlOa_%$L*I?$4End*rf?(SsIQTZGWvaQ=42Pe+&1bS1dtJ(Tb5^n`MeIY!sTcS$QvJ_+fL zuG95Ux^;>-7=KVjrzk8d!-_CI6}nQx{Hm!n*v6~Gi*|dAj`k($cl7zmw)*Z|WOQu! zAXm->gk}!y;-Yp5hZVk>h^m`Fpm;d+D>J!#R-Mg<6Y1IOBFF^litiSojDWk~2!YlT z)W_m8Sv9*dl+cn|3S+E?Kw04$fsPXA&!uA8Ts)=4&VQt{c_o`wS45~HP`PoPz++oV zbAG>?N~h+QQ~sa`H3XXQR6N_IAvgM$Nzorkr}An%l@q~Bz*}^m2=xRU>zfJiNi~Dq z1jh6ex!DCRsjd$?Tm7vY^DF^-j6Eb^LkfNZ!+|2Xw||?YW$;0h3q&}GwDSvbWU|GI z^hRwVSAPwqzz8^RX4Oo1ITcH21YW0ed^5gI@r;^ZSm*Y>>h$f_O0Z?{2pv$p1YGy2 zqe3p0RLCx1WjG8SR6(5ts;p=cs4YegF9c=s0Y{8%O$+7;Yeke5P(|r4?@s!Xa5D73 zQL2E)3DlQ3NADa z{3HR1IiVixhPNi~a9qO}H@mRHj#*1B%;+SYCV7DII!P4r{O*J-h9$#UI7j6>kIjtrDZ{38zP)&5o+uHo%ssoeV@Ws}F2fZn=T$2^ z-al%@E4r|)ctsDCh*t^Y@dLViH1Vnwt_-sfqcUq&@ya|&Kuqc(l)%{5qcb9wZmN;+ z;v*!tNsmroe~I&_;|aeAc%{VgiNSMYLw~4vUnxAgAN7}nlmrP#W3OJCIT4nu?hg|T zT`F0S?zf>8-6=P6ijdSrwqSzKJu0x{4>%aseeu-%uHUNc+T;SQ1F$%C%$mjYp+IYK z;mishZTl3gIH3Vm}O(cT7ccfmKq zJ22Ym+sIF37?UV1Eu>Uhiw! zrJxnsrV+tgG@PITlJ|SF`EB)PyNOYseI!W#7Xwt85&4ZvOCY-KE55n<(vOs2!`S>H{@ilP8|DRC1zF>CN7-A$9Xo-#EzS1TW z;S(5w;Z& z94PsA&bl1j7y}7`A9Vspcmm7+8?I*&g}(^@L^-e%$h^k!%zpy>3-AvVT$15cT@fw< z@A~rBu@;=(ffp%%Wiq^=b6P=Q`cbuR7I+_lk5ZI91g<>7_gEG{d03`Ed$;^P-FS^? zL23cwl$4jf;h`l0sds`v8Ze*w>AM#{X5ymnVetUjNA|lwBnJrCBI%e$%Rx-cr-ehK3FzP<<;5i2x4rPM^Y&* zYgPx&sq}JoRyz@=&%Be%seC-CosZ|@xLHZ1(s`9Ckro5&PlrZQSOaS#skt<^U+aHN z1U}$E01PDn(17DU*pI4c!e1eL!r^FdYkv{^AH^9*4u8_$xC@|+`0;zMz5|-!5CEGU zfEFO68Rr7Q9~HPc0IdeeA>i>JfY{c4_(kZlrg=c$V$u|$4IX39MQDd0o}knv4wox% zfg*In5le*Logf^uLg=IFut0cn`w0E;xjQ08hjOj_d>&6cy{_O zR8P0#;@94Rw;&gH;2S>-lFm-Z=CyUK!8-}2j(=}kh3{B{_jB+vd|(YeOkfRukp5si z^Q47w!!-|ykYxf?f(^fGK*m<98S0<|8kjIW$VCVE;fLUd*^a0wR@4+Ls$W7jy9qyn z)cHHqk z_#2#wxbHdmTX+SjJPQf)rUCvQXHKeP(^RjRrg}w>y==z(h0R{VnT^fv;(tsq z47tV(SuL0mn)=X7__@oB`s$8+N!iqwBE@`3PZC(!8nACcA~a<5Zr7C7S8de1|47p0 ztk>kMR}cAYwywHfrZAhq?LRVZJvK8~-!zql&49u6s|aVu@fN!2zpuf6(Lh&@^Z#b^ z!Ye^<&W0-?c!iw_yfGp=fUm86D1RhQVnCcik35GZ#RaC40pzz2(?1P~R5`ay<=irr zb4$-wY__hPTLsGb=c3A?z1j{u>C&d2G*!%#5WYe|T+Skqt`gf$QuXSFR9&IK7l~jX zTtUrI-8m7V!)se5qBV%_eohm_X@WRS4LeN@I}Ht6YZe*!0&x^$z_}9!E`M&9fme&@ zSl&s|_>hhx4B-xO8wd-=&60Hyy}~Lfw}u(e_n9!V2_u{FQ8tB?&G;xA@v(SZM221{ zBC=;Ewf;jQw=;x~kV*sL46;QTb5N02NtHE(UOqTX2!{#bFv|yrQ9f)e8xSy0s;vQQ zb^>^8bHD{sYpKJ!o#-%U)qgKx3yqP7A{@bAbgR^MhcvdmNPHi&#E|t(28Nvkn4AK* zp&SWH7(L5j502G1?!~c|apJ+ctN|MBk`ab@(#l2$X~WTlG$s5vbKoNFxbSvDn_S8p z>vNfNv+9XmB$jfS^;u2HZa2$^EYPqV!-5(Ms7!~flxOB+r8e_TRw)FsZjLovtovn+ z5$j!8d%^lu)>4wg$Q3Ve@IO#X2MDz-^YIH1003Z@L3;!pmQpwfhu$AEhu$AFx85H$ zKO2A9Zqq;%J(JBznl1?~OG{T=xs;4#B8Z?-L0cDlmjfpr+jP&T5L9X5ru zqeeH7F7NeB1B_wf#QES@p5wQzgT@JWLj!+FhN;8T@L2jaKjcBnae1ZZI-bK|>>WIR zQ-5JHtknN2#ui0*_li4B9_%@7;qIJ1QlgdLDI!;#s28i9)C0am(iKDcaM2I#vIyg_1cx1hp?bl75e2aTvGq z(&;ScVB$W*+;AZVR&|?ed89B(J=lMhO`3!8y72ja)M@bGwQ^-B)g=)fIe}33*qF0L z+jqh!pmW}qQQ&e_a>CmxYR#uX;x)e|8PeK<4Vsk{eGLiRQA0$hX*EK$XK2l11Pl-9 zru@`X{DQ>WON?D$qKK;tl+MV=P^NVZN##JG5+-P8xPi$SUZ$PVo-Ez`q@#b8bp&O4 zh6=5P>({uYH89*JJqZo1#L(0^<_EDmeb`itwY1MP*%q)Eb8N&M#yM8LVQr9Rw~xm7 zjb@2#S**ud^hqgw9N;MZMM^?_p)uBqvFY_oJUANw7yH2J7@Wi-?Ug3=z%2cN(yE}k zG&(n?*tI-{P1TzpP)i30Mt%c-uy>c9JvCT=Mx&90I3#h&2J8WG8cYCV4A|b4xXgWs z!@^)Xk_M2GG(v}MHr`}6+2&3*cjDZ)b8Idr#=Gk#*|h1EZqqwy(<437J4u^1ZQ7>E z_WfoA2oTuqALa9rH1plC3iG&H15T z$tm>+*D71w1^gshih9?j<3bPTsFn+Q44hG7b{{r7gmUz>xCKtAMy|)5V?*PApd|A| zU)1Opou0cxk7#tekYaR)PB$?{ z-_b+yaF6qgSfiG8$NFYZb>vikv|U*mJ5iTg-W3}tE;}>Mb9Iw~yCt&FvF>ectR3&c z20pibATrOPWR@LLFV+f&$g2X!ExB#DGAeR`db3pP=92@)UYZtFwk<2CbFMXAYVAo(HO^JJ%WZ;ts?g)EXccmQ2bH|bXrHS* zQIb2~mN;rWTM~6vJ`yT6IAqZg86GPu9b0Hm4VD*PY;txlEB4B{(fO9EzA2ZZwjUp! zF=M+$;5@c2n>1)Q^J4!M8`_P0PJ>0pg09%oRFdqtT6rhdG#_bO9<8z2h8&z&J5@+} zPvr>ZIj3r{)+V$&W-GCOE=M@W7fU_e>Of^uV0PL6*J69(Pl#;M@@MFSo}QJ+>CBPvklqY?C8@7m@d#pSH;tQJ68F zDy8`PJ1vr2f3#znk4QZy=ev^Lu91QKp;L)rqwC^mxkI72&*hhOSFg;N-DGCD#N(7B zN2PqBd}PJrt_(Q@TcHO}xANs!8u6X>j~90TaX(^z?P!`utGA2U>r4z!HP$w}xu9ydws4E*Qj_PC;t6MWXk|*0)rxbE z5S|FvhJ@2Cn4N^K{LvsfBpI74JKgz)LF5eeCD`9}weR$efu@R%<=SFvt?F!_?3wEA zXzs^le#Uum+}9BsoDI%JX4?EpUazj7v$!iSbxp5X!q@VD=DQ=q_C~vWoZ=}6Hox1= z1(qtT<&`mm z1ADttgXbGBs72khpW!)@D`s+4a&Dd=oU5dDIVS~al5i4n*v$1V*~*vnow(R^xotW$ z)L7EAfO#uZu4^YNy7l`q8|OUNcp-nWJ4HCZ*yQVfC>Dei$9vqzc`@E1Nw(6Xg4@P< z+*SOFO?Fd!2a5|!rQS1FL!NCvC|<^8W#~q2hF`T(uCI7~NT4|RYvi74Ri1U7$*JgC z?m2CBS03p~EDe?Qk1w|QFL4$ru+W{N=NIbdyOxz2>%hsQ=a-dPo6Tl58+}5=u|7h2 zx?8J%++uxVY3fF8Q^l#Y|5eK?BV+3diHUFcm`KOYhaPwqJNh#iBT#+NLDMbz{aS?J53bQeYkc(i{xe%&%#)?q% zs=B5$k18}R1TVj*iv^f-sq>{2ftTcOnm35jrPThy)?8uHEw4zXSrTaXISwji$mdPLj z&LiZ;C0#2dNz<(>s4UB=aMIO=P+3=hf2^IpFVg{NtA3EV-6g_Fg4F1E@61S_ z>yQZTmg=^`i=f2}&CqIv6VPaXp{rAeF1M97WP2s!F}4cw@%SFn*=<<$lYLr-6;4A3 z)82Wg_7=)!QnfD*R_KPaO#B>~U%Q}Tc~o8r1w3?YK;Y}@2d(fBJj__!Rw#mEGjPy@ zU`VcpD8p(VC>-6IrggAtLp&lqeC}GOEN(__BqBm4owa zw=*KFP>rqA(H`?R4=7Q8B~BO)j_Mjoy%qcrvcM`_A*>(b2%(d72bsI|hlQ9SYm7Om zBG~o;PlR<^PblFIhpy6k5-?zaI3yA3vae?w?S0n+ik7S*T%|6OrXCN5l%NTyg&EJX z6g|)IzCR(^Dj$ItTi_bpU;vnB{=J0i&I4jfgvSudwyH+9I9efp0xz?`i7P_^yUnnvpx1PsqZn;MFWxuc4}wjYEXj5vBrRHKErSTJsy= zNejFl-bf+8CWn&!YTOEMW_2eHZy_ygKfPMp-YIETcpKZ3$KmY=mK_G_=ymg%g@nB{ zS<&+Top6)!zYD>CtXvNzXXS8;cJ@8GnfH?EAi*cDZqRDeSL8<^wh|CHu!pAId3vM7ZPN?CHh#HTrQt=I|fwe?4 z+j82KCEDGqwCPJr3^z+lCu18X_yj^#-R@>^5STv2EIdVjxT7^Ek_jt(hK21GeD=Vl zP%ko249RmOyyof+h$b)!J@vycQg}vo(X?*2X@)y+moSxnBbACKLlLFfqh41MQ>o}Q z-H7lEt>3R+pH@Ap8dl`!zRgP0N#i~E1q(b2Um_HSf(j{1(!SJWMp%D`)?L4!WQDK5 za~AUFs|b02spxKtMcH&vbNVIt8Z-FIG^A~ZWvidl=JwX@Z%&?6D9l>Q?v2RO#kLr! z%f@z5m}Wk3jfz$2K|&(@1_3r0ij$*ioPy9$_rUh7@SE@r3p@|MMH_RNTY0-xBJ^az z^6u&6exn)d2P^l}vTvaIzsz#XQcj4y8;!-4BpYOZb7I>2QtiaTa)6490lq~Y;c)FD z{1L&8_P#F?OH$JRF%0Cux8YBy{vIOeBB~nIzeV^n%9@iV_;VUW4v`rPg(;Q(51rgUFAyo#g+dgO4}OLGq`?#J*S7WjAgPg>l6QR|Xpu`s#k z*q+Y&Q&BDSEyVlZ@KZaj`)8Ec5t)wB)ph%Sn6d?sV1ooUqsX}SbzW~ zv{UQY8}Y4bg@tU_^H>WR)R2cI7A(S2HuIlls*g}Bq5vvULRZs$(6vi7#i$I+nX(Fh z!U}cAlRMqfgvTj!ld3LY#Y(b8j8(h->7qXru^NGEN|~^h{YFe!&rTtlZzotox^zG% z#U`qxc#<9UqgO+5H5#F|M5E)@9HbpMM&%g!`66s#ywpgs+k|xTGey>PRrk-Rt)m&9 z#tsIEGutg#FPSb8yLMV|n#QUGo;72CH_}PYGU1!PFg`Znp1xqhhe&*vdm_3Cnl#Q? zu?L>ZK@aw_qjt8G*j4Wd+1PI(3j-7Z{mGabRmhz|GBJ`t(VQ7J;}DLpv12_YhZ9yD zWBt{Dbd2L;Y)m_ot(HAdcgIPbVt#wsXr-C;sx)079q5FsY^d9N+T9kM!;2PwoJAkO zLKhsBlY!Mf_U1;!O9#vb+TJf(Z~-q9?)Q&3!5Ny%M5J?)VPU|BOOjAcgCR1qx*p;pB_3r z$x&@`$$D(j_xY7{Lcmwi9@ZVk^%^>c;%f=^R0$@wM-4(Y-Lu@>T@ToQ)VIyFRR;2Q z4}xq2+mmh|hL5lvc#9Q254YLX+jhVIOyiUK5FLuPkAQk>bs=zM7x=#}ebdM(FxEx`_XM#}S zP0E2a+W9n#buda$>ghG!kUNsdDC~V**oK5Lbo((1FpsBc{Q8g(u01#t=XDh_I z4I<@h|KT5uhRL_V=(0+kW$SHi&R)I_Vt%jOyJ+*XS2ld39al=SacLf1#O*N`bZyw`)FEW#Wc zN3sZy?iC)+YPlT7vItM?6&}qhOl3cduy?QUVpd@Zrn3mo?iIeARk#Y~vIzV33NK|9 zu7>$6`@OhVSUzySFA=Q{E@x39?^O~wP{|U}{18YhIY$(Kj={BI6P8bG!rJHeC{i>< z#X3`ZDeNi;VT#1ZnR=v~0%DFpG##9I;5Ff6q&2n)sdqu{J-FtxZ`_4Pze2Q^Zo(7K z!7G^4Jbr?G0~TsV^MFm}t5h9APzY-ot2nkD$5(DA))KkJp4IDiUb_iz(y!h+$E@g< z-mwYqp3}*H@7qZWJCz}T7#Uip>o~z8kzuTU+t~Zz$+WTlw6RiM*N66+*omA)i`I28 z!A6G8Qe9_(lQqqB_#dLpVb6;0!7U&AG~9)c+dp|1KD`N_+nd7|GL#j;M_Fy$+JKKj z0qLa{oYs3L?Q7m`c>2iG@a0YT#i!v{_9`6AP?!gQUtq;|OW_wZg*5)96?Ua@Vr(Fg z{Pte7&1HbZ2)_=$qk+T-Ux(jKgT%}cxqt`^D38GJ(Y}*f{xpb?Lss8K>;A)rrf1+! z5pIImbPMwD!FPQ2zqk#5a~J;p4)it<$3H#`F91A)JO|IA@GM%`O)dv_V2~bT{!K7D z&~^)dj1F|%f#HUGSmbkH@m+K_Y~s;PJmx@&zBkcz2Syw2!Sg=xOIYLMPk4O>2iAFg zf&&}8J|pRB^xnnhE@8`~n@(X9+q#TR4s3r0J2~hQZ{v9<8G85`?Bie)FLar1;?G<_9kZ^FZWPSbNZ+hul|H*uaGc3CuT=B)ik3jPEmJvM~{Q_+`|Q*({vY?zH%Ftxke{NA`Ik0oH?1g0~55gJl|csdI!7>wDRkl z_~JV-+o0hVUvdY0#PGOJzkU2RzJl@G#aG{fMS8I6ODEG^eBB+8Kfj%$n_zi?rHu%G zoQO3dMn(8GAliTjKc?D z0&Y>4xeZhBHSofBVHz7@3Qxm0b`jiv``{uDQFj`pCUcQ`MSx0vlq$Chetd#{Ur7a+ zc3Mk|DXIfMg+_cmB`kZV{Up8tpQPlt4Nu@3i6)Z8FW{RfX#|!DTQ!!h{(zpMcJ+09 zGfOVI`X;3rpDyLUuccNlPmFqMeN)TY@52w$S=*X!5vGQx@vT$__U7$CMgcH?WvM9a z?Mzx#ds)lu za1}%B8HVr!)M9>!W}cv zAw!`kt^}9X7RRJe+NKp1w{GobG9U6mmtqw{(Js^3w|^mLo|2d3B@dH1)Al5DPLk)m z=f9bgo#+a+lv-tN7=?|N1uon1bIB7-YFZRM7WSUFD**tn&XfWM|aQfB!g@{RI@4WzA^4=HKI&MRC-Nz(?TB%YR= zkS3jqe}Zz!O_7F(9plhH)99Zp9c}gpiPSF%Lf=l11RI5>=WfEyWHbI%S#}5cmQZCm zvOkq)!G|YFE=f3>(oVU#{G!{HX!ePGUuZ>EJWjqv{N%Lx#bh>PmxG9#4Q}?Ij{9Sw zB<5+%KT}O6hTU?TmzU(Cg8osvtBiB01QMdJDyt87-aZQM9u07IPB&$jit7p8Z~ zyS)p;kP`-B7{ka;sHs~*>eB|;D15W({-O1wX3&6tkDn5ku)K=^KNuN_UC9k7yt zRpEf|5$JfQ4U?{Fg?Lph=FH(g!Q%_Vk3~DLYO1k-wSXS%x?ma}IAIcIa9&q6e|AYNGq4$pJ)-fzGm^aOQcuVri<^L)9 zeN*xW1R4yzc8LWUeqRK6;e}wiCBhM1Wsr)S1SbMZ|yw? zqzJf6v|M3Jtf(HV$n&VIW7CDge|JuSdZ$I!tt27Fb=YWxHAtIXd*j9dTUe9@X54nJ z9wHa)z^)Uv;VFU6`(Qd?55rWX6{A+4k#kMr^f+5#I7_O zUMUvQ(jC4#AnO9j?63pCl4+{ByHRF1La?jz*dnXnIJ0{8r3eL3ad@hle=$)v=7J-$ ztqM?dK?}5++0rmhcTG75l<>>qw2X;yLD?+s6F_Ghu(s<#AxZq-Cy>57Vc%g&-#uQ3 zb_sm^|LVLw)9*KdgUhPp3nvKh2?6o?lL|AtsOOM0Z5j07C`C)#G+Sh5m{pC{=1u*? zy{aRkU5Y8jef_XC#qdKef44!)^qAqt9EQ!grB}-b?2&5TcWu^&fQW})~AJ{y314G$dfG5plRW5cHp%-2O1*5CsOz|Zi+ zi}poO;5ocNWQYVZ@Db7)ZV#T}%dC#}4@k`!yI|V91ooki|2>TQYKVUaEj^z?gonU{%dF;-EIqE5cdEB_#DK@g`o$ApbtjyZwv?CAR>-f zhyy6yfV(QZvSPPTM{KSroFd|%<60oNX~hk`yYXqlA4O`q$nk%&oHLEut&@p!IQTD6O9u#{y#;{G2LJ$Dml4(z9hcB?F%g&0Jv9oK8L+|> zw+dV}dINtTzy<<*0a4h5HPj~h5Ric-08bi%Wu#g6q6X0$K)^g<7>z5CK%>jOd(RzA zXMP4L{R@2lk;adnfZ!kDgCF37UM1u`Y!G3EdoCWca!)^I2A&f>&M;s@0G_zX6ZfZ^ zf!6}qLK`n|@E1@^2ME3Ez0BnU008s_002-+0|b|NRSg!FUNI4u&^GZcQ|*!M!O6ZKkA=i2vd5d?=fwzv)*&y52jWUlx} zUKnz>U-&D)5VFU&;lOjNZYca7x5d-I=0lF~pf)uMzUU2w9Tr*>)N=YR4=<g?_OQ8%iInov(k za9PR?)+?B1S);gR>~}J%QGR5}bYL~Q|eaeJ8u7Aqm95uL4O8RNG3ss83Z{TI03?D z?SI=yB~SmGni5sKu0YUgjw>3`s3ZKhyfYLNwnsf{bKjYN;5+AhT~NEb$K2;5K`o~% zBwJqO+v2q|i5tzx4V{r_JAp$7EZ6lyK9MJ)HvI!tcSuTAx91@we*X$EL85m}2GXQw z64nVlr(L2ww)x}>%zh?Ig7gFv3qXSmt@nO0V2&_MtrW~te1U8Qr$C16^r%8)AP-Ix z!~;mcA~{qNggaGOBFGd8egaTS2MEhN0%4c2Vl_#Bd1k<+x2<2ZI~C$Y2CO`IUx&yEsVvL!i7o3fOyl$Js%Z5g(qKq*jYLvd)r zlC}&pFfGGUVA#q`fnn`13~Pb5bMAf5vQ|53q5nVqS@*sB?mhS1bG~!Fd+&SU%P*e$ z8~|*8V0R*vYhx1)qmjv}U`UHL>^c=c5(#&Q<63k)FsjLb2!%%j#{&(aKzO2I=g3iQ zG%kaLP@L9uU2HTE3LsSUii?J*HXfq34TJn{FgOto#Al*fJA!HCR9uUpyxeRutremx1@&{g9g5wwT*6f**5lsfm{!r`G<8ZNeqS9rIvoxh z$vMn?jt<`@k~3t%4wSC(lblLaBxR__XW1Pa*m|P>;F?IVr07WfP}6v^;_|OX)7asE zjd@E84mQV%P1VkTuUXq!fQ=o9F1OO{_iV*w#ik*r+wUFgXtI_1efDK0m!hp(Q8V6W z?soK-w~uROw$}PGMe>=BI((fbsk7VRkcz!i!7WAmcV0C=p5zJ?^&f1Rxpuc>cc)72 z(YM=YVLo=PGCgut^NhRabXTOjZd~hs?>*69Ze@c$mwRpR(gLY|z>PL5Q}%jDPm?rU z?{utkdSi!sY?b*3n;j+%i~K&@6{KJ(~-TTJ&=bKqev7gIX=8%V? zMcsLhlPWr?lI?_06VtvF0ITXAc#;@(^BW3e4&d)(;sSf%CG-R`pHBZED?Zuj6SskCuN zW#4dPEata%k+saFPRz$WC?DA3*>C6iwphpgShdTo_&gqo?QStO;*Q~FZAV$J+qbty z%I{lU)v&DXNU?%zJ*Z3#HyQGJYD*gqe>KO01CBs#sUkHG?{H&jfu!t>l@?T(%q=CD z@7|4;9Zhxn*Oj%+NP$xm1$$aXHFMF@U3;6O$4bh#M|QV`15I^Z4Q1B6`r|S4Dz;9> zJjJxizn)4g^)c`G#J;gEdnc-j|KN{R2=;hJC<*5Y>c>C#t)cj9tT=fQ%k%wz$%Y+lAjt@n5DgId)+v^iJ3Mn zTkH3=MwTe9?K^#Je@D|EUhj~#M$3AMoorDWr`6@{M-O}RR=E#fQ6L5PxC1LLXR_PV zMdO^lrbY>@$Gq|GiXuy7$do5Zf4i#!65(-ee1HAH=18#L7GMWc=WXA{0+OBZwm;9u zOxDJ+^0sY5=Ask*!;LdLDrzUzm3c=9uT`~IZ92ZA-?M!+t78SG%aH7&aQjf4DGrn! z6d3ZPd2D~fRbGd^#ag|}EwhztT#o6E8cA-k%4D|=skOV&?Y3++tqIJ8e}@_;-DZ!a zpp&_!4yq3*OH6C3O@+(7H1E1A>wV6t;gZqPzM-~Q$3WeQ>awH`F&;5 ziJ;r)g!bM5dE(Ah?18fy+T$2xk-<#j7oO&%^dSnBR-p6pOh zS2noX$L%HY{e-)j!#zd&>WACMCk8wt?tqPLH5E%_7weo|igmjb9rhOO+gYCE2fwv7 zvYc>cu9y6NUu7w^t40gOP4C3It6Im02l7fLhrP^oS-i5gqOGH&f8gN$zVhZ`dC2NA zOL=TxqmJiJb9pP_S(7GDP4w?=kE|)#P}+a6IlRN`vD6NEMUiJu=y)BM`Wfm)A-XD_JLXu&8^F&nk7PrCy4gT;e6S)ef7iO&gVJt&T$7Uhi9aXy~aqK~(fm&18tyciqN#~Uejo4m(| zduk`@m$i)_D2aF3_cq2S27Hd`Uf&gxWDP1b-~P*Jz7Ea@*PzSi>yTXT{gcBjM~3}w z$MkMr=Q7iD>4?v_ZCGveRbS;jy3@OL+8yu|k{^^Bl;ek+e>Pm1Usg9V#BtM^*Duv7 zu9|?wp-{l?9yFPx2J5CSRC|VEnujiCLbTd&f6=O9;ifVyLon;@5!`8ww~vJe zwCNcw7WWvX3>65joXuodNft70^jR$|kBqb$!7_J;uwn5oouR-8IVP@kX<>~@?%1{D z*vxu_=EcQzX>r5Qogr;f3)3X35gZxS2#psdY*#cAkL=T;v0x-DLmh%WtrDSraY5bT zG3{hue`IWi!?OXwnpA;Mx43|TnXut&8JZB(`Fn(hi|Rh0jR(VqMOqN@Q>qYFXA?3H zKm%TFdPL=DD1%pcU%x}}T!c)5%w-5l;uc}!#q`RCnkx{hFRHJeJ^TnQ7t=foqPFIM zVwSF{_}P}jTj?EB@Uk6Y-NkfD#z;>Nd}ryCe+-OX%0~0soM8BPfTH)pr$ohA8hVT-|e+;X-}q` ze|T_G>pZD(^@k}*_U+udx3`lNE$Yo|(r$yp@EQdU0c{M6XuJ&Bg)mByYf$V^!}(e}Snzso7vW8Vpag=jyoU)RfkKAk%==nH@R; zq0nG3&SyUb(<($DO0y@XHwC7qLZn{fq9)Zrxosvq8YefbCrLAK+(}kBLF`(U@p!Jo zo|&nT)+Ab=QpxLAC-AL5k>NA~JKSi4*TSd@*TU-v;D?($lcPPJ7=?;dRo!EQe>cE& z{Mj1`7{*b;OqfHe!5=xP#VBz1(2Wc?P~VZr$vu(YNO%HaNmWm>EqEmP9_D zdKbK#&;C6s*ts?Cp7g1VdvQ&HMvAJeDKm(Xe8+_p9(h z_%Ooq6GsS7D=CQM)PCg@kK~od^-%V%w7^Hm3j{&I-St(O*ssp0GR7pue?A5e@=-pn zA6Vs_f(#Fl*))9(oSJcrL2PgaKB>aP@Cdml9?@%UFv}}H2xrs0I;WYK=c6j9aE^3e zaGn%}flzR4<(%s+@EKAms)^7mUnu=hI*n@69Nh>=L}rc}3tH?Z4A7+b>Dq!0B&WoW z1Y<_K+!0PJ6HH!+Rb}-?e^%O)0=zsy+TwQ z7k|c5V^<)4gcyf&j(O71E`6b{Yuz8Vach1vXL;;64=v3XJh!BAgS;NReDM4lo) zdWeVvWOffNHb{EDcE zXQltmr$B33XpC&>fRFq3OYF2cWw9`q1{OLpFhZ$e=M?w! z=5!;^uj6APb8Hc66=hFf1)(&%HZEw_>_YCm)IP7moNe$tfBc!k8uN&V(^{wcTShZ& zq;>Iw5lW(HQBmOwg!EIE)P5crt;Qx~fkr%|V!nblEKt$LlVeR)%3KynjOb8NMki(c zL}E;J8PAOeE-`1N>bOXL#3C%_hAgq0u@qs~D;+CKjzpJ}1}M{0S+4%`SrW@t=)~m< zILOG8xPm-Of9sOOS>${;$AEy_fRTx)pGhHG#wZ(2zYGZH3N z+u#Lwk(;k}A*>{l=ZZzlN13~KZi`IGbd=Y)at5D_>nZ(3!kMQeiFn_#V7gj>R{8={ zBC$-r0s$F|o(MIcPm~Fab)KAx?&E8JBbk}SMj*y5f4Yc<2&)&E{(Pz*cqL}YMFsc2 z%BIPhX>~E24E3MwK{7#f^vEfHC^CA?FsMt*jgZ~12qD=S<3q1DXkMOaY}ka&Ja{kD z-wPxMX1bwdyqxEkg^wiWj(O0B;7KI(oW|$5JwX@7X+q|nH8D>ccHma7ZYQPcZH2g% z9|NQ(f80iqaJ!u#@jX?=!nT&Nm$q7yfhmMF>E|4c*=A&r z86MSkPQ_##psgTnI<;vV?t!0KaS-=XzeOxf#JiuUBHa!d%>?xhDR?Dbm9d#=w&6kA zuF$h#gr2O7oO?CB2xA{s@d|v+#W|QZRl}D^f2ip)7NhSG9Oal8BTOU`-76X`8-Y(a zArFtxoHGeLNkS5ZA63DJ#};(<9EndN*oef9Cv!WVMS|Cc5u8#nj0CM#Y~vP)Eex6j z2fG)w0mW4$oN{EoE5P3!7DUr3Y@%7>4UIf9ceN}_|9LjL?q%*F7EGB9CrIE{Ef$;z ze=m|PjU7X>?(@2xepPhK*c#4h<%njQeR46CGS++gP%oFge*1SCZ{8HNrw&G`$wj&A zl8>8S4kBpLH6~i}Gwev{xHcx9#cX&&-)CK)8O!s2N^s+ct-{$Y_Q?mI3?VUcOqPwof7^w1aX&& zH{m-LwgeHwp-W8F8Pi>i8ScS*xvAetrv3+n!N0+9*{I>&PB7zp_yQtBon#S7-0(gX z`tTnY_WK+;+=rlqwG(q-{2=^H#Sh?z7B+6PSXSj+N2R~N!4KmD+)y7OLw&Rme;;sy zyx7`_P$1(ctoRUL2$kv$Jt2+8rsk2bektP_T6*{9cq*{^h=QNQPa)*-???5wmqv4K z+Gxy=_wX!!TBVkciuF_D^(npgxfAzM%SMq;(h*Qdn!JK-_K#3rb|CBe@r#PVzlxM z{*asgKgjg|dFkhc8DnMRlpi@k!5?QmFHHLsP7um}sjvfoDqcpYzut<@k#n zHX?#(%^-;E-{WPn#jo%=KL7uw`Tx2QpL2qWJvO{nPo%$H2xGaA0n@BPY2L%%Y}(*T z7*a^=pH!&l@0_!Kl{JU&f4}5<;hKc)7Zm&}zNq3~`BC-d88+CS@lDwxSY)Vzn=w85 z7Wi04W_dKJ6VV{wV^l0KE*HzpOtvx;vj}1gjM?Bi8^4mJ0UV#eh znLVjn6GzozhuEU4Q-vC~gj6`Wo)1=<<5)^&CHyOoCL3ESzVcu$f8z1%`C4Yn^bcLL zu1jRLT+n-OFiwt6Y=J|;xcC!o=vljstzavytem+s-xVi>d1SUa%Nx4+=Nt`ejlw)^ zt;#(7n569@Qd&+JRI99l)sUUV(Ji+NU;5-a$s>*z?e^&(d@RkyZ?xr3jlLvDHuKYn z#g8+Dc1TEfpGq@5phs^Ogwbq=4WMRwDrS6GVTagj z5G*tuQEg)*Y$c!1C~cOhzSY=&tx!6W|*L?M~Ty; zos4T?{lmr$e;4;1R~lKdAUmoOG>&lu<=hY@fwLuBdQ9hRfy{^s&1_1AGVWIH>OG{b zjm7wvMP-a^QF)OBOIwfhHAKdzp8RM?s?rBOsX`t*Mc}2CSxk!t1EJv6n*OPxNAP;a zCxU}>t;Y0b*-o~Jlv6*y)0=LcA3|o=if`~D@mM^{f45+Fz6#$xW)ZvaN097w?DZ;p zEqjCA%&tRlgwm&BW7o6OPO!2YD06j0#wh>h55~zgwD8=+SD-v)P%i49nHgte_uEpi3d2(@OQBOITPzLsmd)p0L0@m3w)0$0H-+~>8Q2X*K?d~nG5p|kLS z^P{uy3735qK1Jm$eEKY$e@G~x4mm%|Z)h44yP1A_Kz<2Yz$DY;0c5xqfV~6?$cYLW zf7Eb2W1gfYOwc>&Pw~0D!Wb78|u$KA)Tn_{ACNklz5P>(tX)0d_x4~U-JDKb@ zcognnZ=zP)Nzigw3ZH||lW9HRfD7;#n5j=bJPuFL?_K1SFTg*69eUw}XlEhG)1n<8 z=Lz^C{4))HD_t`JBu!%-n%y!y_`ky1vyS94MDqG8|~;4kSODj1DTly1v!wQn?TFUHOkeH}_%w1?bkj z^JDHE`w;iXFXnuhFMQa}TXlE~U4`6-j)V_?$$j`7`L34!oWJJIbYyd;X#77Ze~tfl zzEQ%-2f35GgimGo6ZhX!Nv>AXs*@bP8Ei=pv$_3p-R(7?((hdqAMbz(co&4>-2{U7 zz+0(&JG>V@0`G&Tsr)v)U%37tjoVn+rWyZ*Q2@Q;v8?s^Bw{5kv%eowLa z8n{>VP-%>}i5^z&U>yYF>R;gxe}D!YzRcdtKT1ccEF@$+4}aDJ8LGu&g2==CN9a?c zS0p4M{006>&kPBF5fWa27jLnplVM6BPTrT~O>2hh| zZ-yoG`1dunvuHYx^3ZuyhHB5EdIs&YSa=qfB=C#N{vP-xz&-|@_d=bkf8YXidhG;S ztne0c{0fPMv*_VJRV0+Kd_S~vG#3aoujG9?ybg}l`@BvLP?wWnOIW-gmKcy-f;Hk^ z^5)mna`@Y3u}+lpcnyH%B^cE4ij9OlLSq_Uld6;O+5`DX4^#09I$%AlS0>u$pxr_+ z1Nb=QiHAt+!vwX5pd3C4e=*8XSHn5D1J1)osr)#6hM@Ra_y(2VBKZA;fcI;7T)2H4 z_&4WsK=vnqd{#{KvAL`~6bSo|fse!5egS+U zNn?m7X-egeS&YuZf8TDv-_GIh*2Mchn2=UA$r(IszU@r0Y^mwYA+_B_F@WzH)lfl#3f~WJeid3>4r-RuM_$%Ze_4MH-<%PbZ=J=rpT)bqW)YX>bNF68E-fw#k4uXYW@5Q}eXAd|ne~)1y ze4XyUi4OQBI^oY$zJNt&!xH+hRN&`oioShD3@b2f#IQ<4SV{PKjB>*-jTkP1R>}jv z!^a6Me>c(EkN2=quDD(F$fvP&LbG!q&EXNt=WtF}*WnX9j_B%*6wPyV@dkq~IO6d- z`g@~5=NIvx4Rqd4mMEca6&#)adLEz3hR(02q0^Oj2ERRv-#v>z@X7+8@;Us8j!(s< zaC|C>6_FxVL;{~`i8TYCiomBO0qA@k&;_o1e~wQAY`LDN zptLYstHppi!08=VQfgd9KwV8h^$<|kKpj@WI;z`*HE;*6hr4Oz_8>OF!}RwAZh)uh zfBxH)(VruD{FTa=unh}n;jk3j1z7oZ;YtInDjYVzYJ~>{SbtC9@tgtHVp55N^$(=n zEe2TgX_cmfwSa;{2Wuh6RRXLPbIFsg=D=E^gH>F8iLUYt*#3)vts{>o)H&GVm!PoF z#s4v_K_!PMR(LM1s(A!yW9p_wb^VZZe-{6I249*b2r%hUMm)x!KFVwe+===Q%PE#! zHxRGhNJ`!S6>zgKflZf(e-s;GgMa>5$cOzdk+eSS5gL}I4!fQLh814quy@n2_t3C+ z)3EPMB0ytUe#P=>t%`G`LJCj?DZ&3yKyD>!xDrJdsl+3s#HUD!M@WgYIh1hFfATs- z35QUk1GgGVJU~jAsO+lgtNS9f)$s^srTulYtn30S_vW2v6(XC|8`;E__b6M1z;|G* za+Xz{Wwj3(X`qg0fkcq0z+Rx80EL0Ba~TZ;w2mr;Z_-xaTd=GH=NO5o`=fQGzYVlB~C$wX@B_dX;dG zVZEMg*1HGq&27Dn+B)wI34LeO$TA?JCZit1~qtfjJ^f68@KuBWn*%4RAz zP`Q!HRw_49rrS*Yw@`UG_4m;g@83aXK9!wRayea8ayi{paydJwtlZsQ-7zE)MgkX|>_4{X1?{R7JJ^HZ= zxAS}Y)t`^2J-;>WfBC!8o_`D<6weoHTxh)-_+l zXX)9k_%8eydn?W8Msj5t=P%?GfP5)|oY;{QEAn7R9yrK>i#$OiPj<+YjgB>O%p%@m zh_i8V*eDK;#3_$B6%_}YV!tc4mSXQLHm_pMEw+X1Z9MW#5DfkgP)i30TzP%ULm&VE z1DBD=VjY)&UNRAvK#w&be=#m&Y+-YAwO3hF6jvBMceZxMF$@M5T#1f4fI5Ok4WJPb zBZe&wU^FqN87|P;(>>|#Q8D|zFI9QVAMnKoV_nh-Bx97pbUw;R10N)Ahl@n9hyj>_7rgXByGv2gqfAv|ObSCw@>^H_8 z-I+eI&#wg4}1^n-gIa1%FR#9f<8CQZ9bSwkLhN5WTq%Pk9IEbc}c&bXHDIj z%H}-Bu%>EpMKAQ@f3Gy`Y)(4FY+TpJP1z~1qb6z^A_5K7Txf_1tXZJrUf-#}_8P?2 z5EoeK*>n1g3vA6aKaN&s5-X9U*)r5MJSDL4F-96v0%2MTY+GJN4NudWlQOU6;-_J) zKt#<1cGVbf4UJr*W&-QWff;t>gq%!wJC1#|+jZ?c9d8mye?IzF!xl>Th>1YT^eLPDc^^3B=NNiE&{3`)i01^JJx7ESfVzPOs?_-2TkGyqwF@xpZmkYLL`q?CQU}qd591=Ldb?G_%(@QlZ zX?pG%IcZq3AT7@oNE1&PY2G$X>66PAN}j68>?z%y9?*-#_Z&JBNPsk(mb2DyL|{eU zwmjXixWk&vV#3YmlXxD-5;%%(iZ(EGVzj@P>9(PNf2nLGh8~=VV>5aMR?V~0@Pa_y z{FT0WUmT}!S|C0py%F8vm33U{2^EEHF3fpS(d@@S0{by2ux<$>4Z{RXSA%*%E(~YT zOOrT*Tmmm)L?H1$2Z5c{q^On-V>p{2_LqaYS}uKkw&&wmhgYbCUt#GW5!3Bu&b~Uu z@$9H|f7!CHS|<%@PUNK8>jGX&aOFi7bC+Qm-cf(F&DkaV?1}xSC*txh}A}S}Q(OEqFCF@g#O3qa42@kjd0^b~KMMJehJ@ zy`Ml7AFvVh*p}<*mPh0zmSd#Hp5U-5=jr*&>_sE0F{$Q20S8Nkap?q4R{I4#rt@&) ze|_*Uo-?K_-77hqrv@ZZOz``KbxtG(Om5w0P1;OJ{|Va2I?AI{oNj@h}Zxdup|6=$uDUuLMFEAM@@n z#App%XzhqJM($ytF*1v`yV&0mRkMS4f3cw>*76e$&!Vd_I*a2!VApM&yp0#t-OwyX zXL0T~G@NUU-Nvi4c>NA0W-)#124Xi5-rf2O3L)I$24Q@{YZJo%Vh9=mYS^Q(di-I( zM!5JJp%6Z$)mnmtxQDQ~k5=&jLmWqW|C#@V9K~uJg9V$jO*n`m-XIB5fCJb6e|ETl z7I>ttX00fZ{^!03&G>?2JjB;2zDQ9C=3t=2SH5;Yrgd=7Jv8kJWQfd>kND)Hk(*^| z;hPmwDTE)AS((W{3rU0sehW!7aoib@pbV&E_fjMxYR?MvOaQ$M_?izmDiq*UH^Cm` zLk0E-$B^RE(s~z!`sPjFUhNxGf5d}*)|QPb-s70TTYMjQo$@KTJICXA1$pv<8aFzeE4HU&oD%6 z2`Z_|o+&?_D^zx*QZ)aPH|-olzDYebu4l5usdOFIppi#W9oF-H17{m!HR{CQN-}ZA z9*jc*s{-A__}U*=;2Vyc`THuW7zm}6x@3fkg}Pi7_*U)pA5cpN2tq5(j2V}|i8Yo3 z1^Vo_Sc)~V1OyTn+K!hEk2RD6f1$Uek2R+R1oW;TjhB#_HB*aN(vI#tUx zN_uu|sp2|X-ksGP*U-%KRV(irwlxx{%~#8&J~T2-mxhyd^rH70IGNSlmEmBkl3&qF zT20iVn3+p2Xl8nTwX6@14mXbJE6zH0p_+GTN!wf69W86v**V>RVVuT2ZOPP!1-ctb zM?plOy&i;um_Wxi5|4SH0*4!5T0vZ(sm8Lvp-gWOe%>}s-E*HcN~NkR-DNLn<>4fn zkrZf^=u?igOOIErf(&N2K;q@Hf|Nka-xFwgMc?1uBM^}zfv&flf`U$g{cliGuvZ{V zO+V|mov4ES^esn!0zC~@fPxQbBS!+625so*LxHF_6gbwXRgF&C^fzkbQ+h-oRq^U$ zL3b)VyDL-Y1jNNCf**lqtz0%&FFTWFg_#`BY$@wn?ba%9aJbhmT~o7`vzM1{u_9Qu z_eaJCbMK6X?Mx zn_K zJMG;SgV)%Z>Hqo45MuY%j^ItVqbb-$M&+DdG%UR^#&lY@by4p%fvcH!(I67JqaN*C z7k88R2G9 zH3T8BYr?iFu4cIlewRfi>;lEEIakZy=3_K3UnN%QG*4otT3XVbV5M!^W>yOtuR_j) z#rT}DY-w)Q;W%|kr_TakTCJqhFN-EQWm&p2VQQ6%&S}e}l{f8*VJ-WreB0*is*~5x z8=lX9IZ4};WzzMORkYa_-UG`xYXTuhBUMbFPjtFaCACm32(qfgMjs5Y%* zVjbrnKSb;y!dr3Tn>YzI@f6(>C$WL( z8D1DRzjKJaz$6p}AqBioXW)s`3c7&55emJ)7@D{2$_J;W@j|k)Z8wB6HQEp%7e62@ ze&mhw6Yg{T9oH{-N_*&d9!=Cbi7QwjgZI3(t4QKnuojmb;wvnAPuv4!xg)&MNBEk5 zUL248W2jKZL)=brBgLa&xA;eaUuY1c9POJKcm{PKV2#J(u^){*@@aW>Gpa^CN;fyd zk2cxbkJxjlK1E&skez?g$yt{qYD?B3X5GcCM}n+787afq%w{ym#?RqfFNdg*Ii$uI z{|zq6_|H;G!}!s@4GgVe=@DxD#v~ViThQa1=yBXcp8EmnO%Jsng#h&evk6lsJkFc+?78615ir`2<6G~ZJGrD0QZ++DFYps zKwBLImkot44VOTVH6WMRvceDxy;u2n8&?(no+Wvg{+Trzf0bhzmu)OP+Y^sw+|kIy z0SYCwlzk~(V#;0!OMo;q4ox{we&QVdBYuGJy_xYU)z*P?@Hw9Q=FNR~`R?+r{_*cy ze*thDe-=0)3-g)0U0gCu>0~BX+y&bjwOr}U>3NwoW*yyGNu_klw&u!KYF@enrk!6* zb!!j;FJ()4f8EqGPT6veqRjNqmRv{AyOX-(8oGI=Y~@|Uw)(PEVmO&nenA%Xb+Rse zJeQi*&D7M&lI#r_r74U4W5keT$}g;VYI{%jX3y)(dd9FbIq6V^aZ#T&Wv{^fHCdt| zEO4-z2o3cDhj#e?kSA2&z8XN%5EW=x2T0(Nbl{95f9JgafNxTF7kX#f)yGWPHO$Pg zDog5b>4*kJfr>dqQdWAd%d@$6WFf z#MG_%e~e)*+lw+YCK>X=h;9{3SxRMXd$GKvfqL)VomImF0`)$>K%(R&+_ZE`%*C^# zLjvOQ2!cN{rtC74iUwqBNH`|_0b|~>9r=`;Gb~w@mRm}7Q|1gsEiw41V~p%BSt!t` zFD;oX6V9+%BJ|_w+6&b$xAnT}?rqO*A~7+0e_rNYiZ}ZDyL) zLSLWSoEqq6M`%|>pzZ=)*9vk@FPknCV_7%L^rZBkF#~`bxuQ;Q8!9M zp29*ukvf#F1igJGj&V%HFosDs%ygCLCh(NNof|j9mPArHIF_y@g{xgG+cGKVI)*h* zXQyyBMi-}>>hZCi1_ewBoC~pxBI?1rf2pmaGP8PdwxF{mI>`4ERg+QklkKI4^v42 zGD*PZnCFgswrn_3WyDMcXZv&<3ov5L_VcWS9p$LO6nLOoB2{iFomL}?u-T@Hf3i5M zI$rBuMauiZT`*W3C;w~r1=?$FMZ8NZS{%Fm?nY|(jKI;_n`k>5wYZ=vZAB&bX9beg zy6A~2xYp8t<2Z)nO7It$Jt-f(yLRU6K-n-0($VlGRX1sdq|dMn_cZZNkE)=*fEQ!9 zgs(8@gtV(5OT2WtTzjdt0beCMf74Q01%a+~Wj$0@X`qg_eI4IWa=%HrJLVk?-&XMN z*!8;Yccb_Yz9;b5Zo^gk&Z8Am5oIOu{TOAv!Uo{lK7(&z9IxSA3{7}lpt-fEue4gW z+q$4H%T{NzOE+MZ(;iO-XWmd}F5!m)Lp9ZB@62uvOmpB$`{4g1h6sMjf2%%4c$-bPc=NEZ5PN|Dh-SQ0b zcvlngWrEk0^l(it@MQc3c)Y1qn} zc8O^CtOBu|U3T*FjG=@j2G)W0KdTct6`)beq&1_~9Ghjt+u?0r$CO~dMi__Djt;K> zz}l@tXCkSl53ZAH9`Pt=15yolsAhl=uJP?QsYW{4*%NLK{|#-Ie{rfg{2tnRBF&LC z^!C(WM}NoL7+l3clHoOsl0317Cs(0`uOJ-ixP^IO4U5h7*RCLRwDTP-)p@c*c#F?r zL~c`^rlC$li^gW}kv0t%AT*pBGJ$&AgX=@MK^m>& z=LA0_h!Hz6d_O+U17Xrc=XjTgP$Ybno`$Y&_{h%sFaBVo-M*pwxvvbZqfz?`P$j)ye>t#CYIH+t6c_RNO{o_> zsmJhKAa#U>spcN@q#j+v7q3+n+v;;|h>Zne)yl^$!0V!qSE5;sWr30>d04SN_%1G; zOMdw#UP^v#4d1$sm;Kavbq$yKp8NqHYxvPl3syY~;=Twx?^zJI^L!$~?HBOlKvRiS zMdonl-}(8ke;u7SFx=5{1A`r1H}FKqP5kVwjTq6U`fb5!6tD2->}JML%!a>*z2Xtx zN|jHYw^9WZ@@&}`LKkhx(EDzBAH&b_CfSuu2T0XHjfL@hcw4II*7zJ?{x&hSl8AZ| z!Sz9g@GibLb9I=sg{u$LM{$I-mG5m_-N*I)#3D_4Mw6$)jKaPkb3^!(M;q`C>D^rA ziDM2=V+PMKb!YHfn)5Vnsrun8T(1J<(?N_O>_5O`Oa^&e162MDTHvO3e3 z(4jSUe^f~vNKin&B#HnWoaQ(bShQT zl5Xbol2>-@3EPwIyit^SbIvu~rBuqW9eciRf2S6tHzsT5f<5C@Q&|l{;PZT~Xjn$Z zt=pbik(uGSn&%ot@3i51reU3^+eOcG?4djrnQo?5EX#_~9GVKI3aMGcO3f@)u$A}DVHq&c}~uowya3os|_CGfBu4T$;g;a zf2JT^nq$6X%vo|!;PJMs*3coayOjtHQGxFJ@Osi0DzLu|P&LE^;;R7_$fg_ax^mus z8hcM0UU{%rt!3(-X=TP;*KvJE;^;(NVDA>-YSmDwD5VY)=S_kr&}mew*3z^)Zq*3HRQmhYMKd+COb9^glzYI0^I%cAO4gFxtVRzNGsd82N5e+<(l z!>ZG#$I`u9Rc#ytctS@Ho{VEZQZa<^l)zzfrJ6veHtI#v@@lK9Tp&e#fvrWyvZQZq zrc(D*fn-h^weqAeT8ECqaXgL#O5-yE`?liK@MG2mt5mtQ9;v3{>8fI;k{kwg z`~*V+dazP(D$M+2>>}wF@lrVae^keD3=2HCaVOI-%ESo-PC2$Ji*X`9IX!kJKhDC~ zo?o>_p+CdP7*1eq4t2V#i}B&j4rGE|f030r)m8Ux)gpLScx96kkG9i)H@c!wOmExGP+-@(CM)pB z=7wr`btN)E8_@7NQ88;{zUQT3_Ktz}+kEdi9z>Vp_$_{?vq@bO=xWvHkF<(>8z)2@ z2a#5S-x3&2w{^5_b|;x-cT5NQ^{$Qx-eWTwb?lmF*xqb#9CVC2eMrTTq@;l*-qDPTq>)UH_=IgschoX! zHObGN<95+Wf&ys5wy1i-o>zJA&mc=cB0Tgpgz+HuVjt-b zcnt{Q(L|Rzp-6YBe{+Ll1iKW5-1#Bz3D5I8&e>1;bCG1^EA(8)wPfTTdUDZZbQzhP z*7rHG%lHw8Bg;6NizQ=U;rMkVld*d^p3{^1GDhxUEZ3Rryn);egm2?iGPaD<*Rl65 z#?IcxnPmj;^ZxrccTl>41b5!W{Mlse4$Loe+wNlVY*I^Zf4c+w7MBM4{{=6ETQn_< zKk$7F+P7@Rx`vR3JsN8l{@A18HBwjT?19jPhOuw49nrPB6cB%;j01?#<(mkL&v-BU zJ9@=Ga7x^QNBWAm&FFuI54rv)Utbg>1gDNmyrW(rNQ&BqBx-mOmnoK@VF@q!_pMLR zhnESuqWbX)J@tL$!{3XKImSX{%FGAoe&3aC)iqlN= zuc@6b1P<)rymBB!Lw7U`eSnwxr!^XX_poOfzrTqlJW=Jq8mX}rsWDu|8{bL2>PtO{ zHyct<(y*{H*q1u6jJI#K6uU3jwIWt;h*ea8TLZ7F4ZH*^^PPs05=X_}-Tz*q=ynB0=j||ICR) z978_CF6`vfML>3w>gKqI)DNRE7T#_=#P1$bk1$XE!rdM8YkMOX!psddZo{V>d-&Tk zqMQ?|8rADfp>jjLrUb4lUH=DAO9u$2>@A(91^@u*lYx32mtbWP1eg76G7XnNk2N5d zIH@&90~?&Uw}PoP{{sn@&|5h+1ONbem+?TmA(#DZG7XnNk2N5d9JIm@f1OrcbJIo? zJ!@N5>=@#tf#LuSEe^3sz;#Rca6;N7gkoy)QHN0Ir(&-YQCZ5!GDG@L`U6^Ccz~BM zEi)Z>?SE>gXC);m#05<~W8J%}yXT&J_w3q#{{8zO04`ut;G%49lp0QZ%e16hTHf|H z9lL6K(rpKiND3Tzt<>{AsKDt6{m_vTf6&8T2$Tz9fv#-% z-!N?1@HVH4eobA^v`P!E>$rXm8T2C~Ft}fCey(db6}7_x>HTRPS%GBmPGI0)@xj}7 z1QG#>(YN$i$5DafZwS(HOd!t4pa*Z;FCE93TX_QG5%*Wedt9SDfkMPJO!U5h=DPyt zqpsR*C)Z3yT@$qQe~du3f4;2Emta$LFdYqgD5kF)!FiaeA8-jb*{|ARa8bG_OMJT zH)YG{T2zttz_7Zk=~$r{=9iXi2M_;LW>CgQX^i7z>T=q&e@$;jAXn%eTwKfG6I@JV z7?%V_dSC|I1TL?}kyZ{8aRbVN;>ooljX+Oj#zeVmN0 z$>Kd;hP~Rwe|hmRgBot75yP^;P%p7w>ajG6%rlt8IR(7RyPy!IZ`^BtoK5}=8EwhD)I+9ff7{ZXw~S6layYPHH!P=P+8aSA zull;vbsO@!>F2DgwpDG5sjGI&p`8609*!7`Sc1O*gnzu`?3!&%M`s!k$~Z#nal zHbuKKQAy+yFERczj^`3DFkaDe+72#MlFu=GH3fcW zySct+f0$7rlM}z;S`1GJ8pn5hW{~&`r^#hBHX6hCoEbubx8g5|i(h$rK0=lL5B~oP z4LPK-fa^$N+V?(3pQ48wsQQ=b3QD-ia+LQWzFMlJD}RL}Xv1b+PStAzV~!hNq2e~yvxVG3p_;Me0$w!?;Jw&}h+Hu;nk2<-7 z+fRDJo(iJ&VACP2@`6r=9b5`KD0o`d!X#HXQmnMI&v5VQ8)$2L_!{ou>wVgHvRQ^V zTR6DMiUznpL$t%RM`&aIl0m#n0gP~bg5F8mQF^D6DSSYCn&UBgLyQ@xJwn^$sssx- z6v`kD>DxZEXixG#r>3e9O7iMa7fKfDu_&;ia{dEQO9u!YG4ROAm(iP5A(!ylIS7|e zvNb1v3w#_`b@w@Uc6KzoD``ivWUXG-%6dP&k{!t_zjh^Ami4w|*|IG=BWWb9z1o#_ zSGE=B!K0xmj|K{a2Kt~RkN_zSF35>Z69XZ%l$JthN=u;yO6h|>(ozbvknh}?(RwAV zR&t#0`+dnzJ2Q9gJ@50s=iWR1(l4$*2LQW&Sqx#PHZ{{Y8J?RD1hq)x;8JWh9O@3m zw8*qNsr3dXB5Gtw0z`10S1+oKK{YhfI52Tun~X^yAY}64mjaQ-cvlf2XAPN#=%gA{ z5sG{Do5qMX9V7yc!~AJDFcVT^ixI62L7Z5MX;GA$t)jd*fh@BaW&e=sK#}?U3u-!l zwzKSVpCnk$AX>ZK8DiRArlc#S!db=Tld#$+?l0Y|WZ(qavWKJzzb}pVQwv0!uoKbc zZkL5hpHk|U5iR9%sVd8gxSwJ5kSNsp7ToT1lm*#kX}7Sm=$74To}4L)7A!?J<=(3- zWRM(Ur-kVDqarFp+r%`XNAM|r--uFwB)dpFw_xueI?Y7KHkM9wPBOP#?rtGE>1kN1 zu<6onWuX|eShlDrJH#|G6Mc&87nLGq32D5z)3@MLtu$WgX6+WCl;r3nIWy&YMsf%Z z?!E3IiR6&SOMTYrdjh5R&NO7VF7_PVy?t)1xo_CEEw68Uzg=8f%EI=h`P2S?-mZpx zuU$Z!$DQ9iE1|0ieOWc6U9`LdD{@3nw%hNWYHxCE_hU|l=#sUD9W~Q^e#KqUE3p&R zif{S|TEZ3E^8A=rCl;wW{Vwl>HtkSxa8G#nSgd2G&!vdnY^cf}=uJE{>UGTZp znSmW$1>)W^KNfj~qQHsFv!2O+vD^{2Zy=lHq~F_>ai)1HP(ktwY=2nZi#223Kmd+F zale7plGctTodx0&jdS~jbme4UzLmruR@5Q1_GInb-ajr1_WQFuY-G=*X5E(OJnmT> z@+%AS_B25mjk?|0HJM`d70vIf7$^|ca=)*#U2wTt(@!^t+AEYH+lVN*58D^ee;hw3 zuzpvC;<1mSP}D!{#^cpCajY#@#kz^H8s07n&F8ayIJ$qKr$$jPjFKEpWv!Xr=;YUd z4jFIGiyX~pF)ZBsLUL1 zvWZ2GN>w0xSHw=#pJ@&U`W?74f4^mM=4kCqeL?H=>D*XXxJY3|MRhae$BDp!ZLQT~ zO@W?K*^|*pd^`>rMWOuk#e2wqt>i!VXl7B%wB~bTxcI>RMY4P{Q)JPeJ+fy&V2kad z$9H7Bbv|&`G%c`-G)xVAL~rA=lz}tH>OC6ouR)3Yl`Z8-?ky++gK|&u0-U+{%#O zCy0A}Ib41%qhtG^(lX!G;8>VA)g10Q>gWm=dOO-PI!>f_qo7XLmAc(l#je=)ma39X z61AaDv<#}pdN1`C$`(yre^iLBvrS&Y+8u3ybKYJp<7{)Z&sun*9xV&e`*#l47uiLj zM;;S8S-CLK?Qy&96{1o--B8dbXN!BXO5Hvm6OSt@?k}GdUD&uoVU^>(U6}>z@+nsq zk7o^~5xub7ZM6!_EAAHrzpq%hq9Xb&>`=Xu?shAJFk~k?DD0@uf8{H8XOY}R!<|0M zz`0``+xyS#RwTtXR^HB7e@>Rit+d{wxMg`-XeT-PD6n>i-8t^;p&nmRcDlT`!p7t! zxp%f!W~bqmHN#o?v8!u1Eq=jrcI6IIw~`B_ne=}u(wcr=ZIoXmfO-y&(waZ zbfT-Yt}C77o)+sZf0LNaX3JfQ(w|Lkx^ju~Z(_XEqYU*+KDKD{uv2?tUDj#ag6IpqE)IWR=^&mTOzUe{s*$3G2QS^@6}MtozGV zU(NJn4as*boA9zvV;*F=R?kqVu=(OxuB8dbeZ6F#?wTD;sywzWkL=2Fit4&DS8#yz zEU}8#oqk`NaH&c3`+diDpfps4!a_UwK|Q>CI?&Wp**ETqM*a56%(HtY#_qC9nd8k` zts-~Vy6bb&f5rOTp_9J5N#8)NTEC+2Nw*@8mAUK1Oz}R}PICFlFGJg9^2>Ox>Tj7) z{k=1xd|B!iwdrcLj{HA2+UZLhYCl?**WhaDy5KGBYCPQ4-p+3wSE{l}LJ$|e(&(}$IHsmkw&fUG8;%BkDyQb8w?yr@_oNYtras?qwxZyr1SO_;f zK zs=Kkc^+=DmuCme9Hm@D?C<{gYY;nM+y4C7@v;-`E=Fe$HX`ulvm)e`^PR@;^BXD5K zf1F1x74=po?D7$cNdA19FLG&~JtlOjml|BnUD|;l`L8M3ezZ5O$Hj3?>8AQb*f)pi zKGnf8J-tReGlYgMlyYTdYA76l{ylh=LB*P?z&w9TyH*h`)e4>)#hVe z2zh+$Vk{7B?2JUh5p^P{mFag96d+`+e=9)|Rn__mNqgk(v?-*^D624MOQAT}RcR1b0zy zx-phjoAf5)dr2jJhfukN{v%8CWQKh-hTkES-&&CcLKnjqw8lP-qG{@g8k!1f(X!rf z_`)K2|2v(y%k=KGTe+q(9bG0@Z4)WDnARKC(Ta59jX*{AvXZzH7TCvS; z+G$_!8s8d94XUx(w%#pj-FARj?WWFUD~VIKQQ~mfk7?6^kT$1|llCBuZ>He?StHr*zYbAcU7GWI-s|OdN!=s_Lx(#`!IDdz~P|0UgjO z1A}pd@z;Uv#yH@BE`!tE2rq1j)BooX;DByJp-BX1T%kA;>{`>bDHb@O2YNZZ8A^`% zrE_K40)kStnr`(df~V^C2=g(*QfH57w)sc6}X??M6`v)K!mtk zs!mmpI^YfPMjH`)e-nbuATu21h1V~U&-MjEf!G0roT~M9;6vX6zifjC;UNbE;5?V* ztt9ap{UvxiReb9Fe2|3MR+Yrk4)|4g*beW2chclB84kr%9YvEeB~^Y6-py5c4}#rb z)gKONWVc7il)VWpx~+a)hWEjvq)J4KE(T*%E+_MJacY-Rf6%Ur7z({xghpl~;Y&v4 z{o6(zy&*9PeupO6$)Ki2MhL3S`hlD@%7N=NH{yp0c{jrn37#OU>SP@7QFz=2Pr}DI zAn6pI;+d@9eS(ZK6(DMnDV^06DVu5ntv*F&H3x7&<#fr?a@kxUv>4SBcyBVlYz%(G zvk_VbnG@Bgf8f)c;xa8klTb-UcU_Yco+10hmrARYEAy18Q|f$-t2w@fI>A8VO_4Ea z%wC5Z+`ym7w89@C_^a-iq!XSO06^qFNQL;i;=Na$o0w9mgjXq$sP?24&F3kW)L<;3 z4dE?`mQArlNHq6wjGQ#nw$VU+YCWCWJ?4ORTCxuZe`4I(Uw{{F@B)01EcAy|N2UzB zHTl(~gTj}x$P|A}5j-6TQu=g<27@|m?x|YWeG65H1O5d5ltl5* z?`+_PhsZiKsj0!J1Af3~2MhcIB}UNTc#K|YQ8L*-!MC}g{+Ub|o;dG-f8iwD@UQXt z)5u*3{+(v#a~=o$2k-C-{3m~Ga=?EXk3Z&Bf4069udS-yvZ@aF3H;OsE$}m9Kfg#b z(e5oG;2Kl>FZ`UF;ui=NNiDY?S180GXZ606As^LG!PM2vR+cO&YUH)TBSV2e6D^rm z6cOsGZey?$C4}KS7I!VucsSCaoJEjpqvB{f9MNbh;g!m|jxz|s*zYg4H6R0 zbJRPPa(Y}pGni$lL1e`y8$rfnDJthXWVv;4G3xGQ_@uv~tk*8jlU&-Av9Tu2k!gsr z1HQ$9f?=@}9wvNBk~ynv$oRlODMnh*x7HgNxzeX$M*YO#(hTTjY1=q2TAq~ye12sInYmps{>yn0-QX=>)!|_oJF$zvlYdi$kQ+A_El|wP+5$1_#-lds*+XlxRANckM}2M*w%9s6;J7P2cxe^&@SckIo^?g*zvp0hy~_e9#tsT#uZ*Ed!;Rh^HM z^Jz+jHK#T}|B>4sw545EB`_1B*?HAAzc|5Pr{Nidj;%%XsZ_Or9_?psuno^S(1rON zqExD@WO*ZYeQrqeNo3}wOE|7we#ZcGEIn5oM zMexktAksf_2Q**HChlv_9jm@-qJ*j3+M+`@qZPDyocAJL3M%zifM6^ zudKW9UX0PY3-2Syk5?Osf4<=b)I0Bd9kPiFH{X$2Q=&Y8Z{Yd=Mk-O>#5cchlYkR{ z2_gD_U9IFL&Rep;g1<~F%{e}$RVG=>B(G+E1>ef6nYZa@Sh{=oTA^e!)u~)fo**et zkc?W#9t*GNJAtqx^^&@c*A7EAaBu`GPEA|F_uBChUTL^Dt1k7Tf8y6=*o}`OWa@j> ziBMm#GR4kMG#(FK2!$_&4hOX0)UXyKn|%O(!$u>26JcM~ra`z786)F<+XjvJ!T6UL z$>o*sL*|b4hFx@h9+&Yk{O~$`JPv#UG#kBpa?@&bSg)c!fFI-CKfaFCZU_FZLFyCh z-tBSV(_|QW_eq55e>G=5oAFHAd)3p1Cj5OHc<@t%{=K&jGurgiq9*;fS^wRw|L%#` znMue|!4V9rQ->qrxrF#ENx4$d52mEx%5Iw_5)KpoJS}gx=Tj*x}Tz!yCT#<>W1wcNrHCzX%t!gikh1vQ!n9 z8D9Zd`F9C=f4|FRv_LIPRfDbcCjVt5?u+o@+t+R?_!k4gDJ>%5Kl8(iQht=!ZKU77 z+VF??ZxocK+9g~uVo;*SO49HZ;=*?oLNuw=C*3*UfD^^Tf8vig?f+UcGReN@`jP+5 zNB)E`s$@mA625~=68((UQn9cx!h!#b6};!qDQV2je;}@YPST~W#6U0Cr(?-dkb;Ua zCfFG=%epgBkHoAz=D^M*mbPMfLZdXJOfy~9N=VIfZZ}I$opa4=_JTLwWg=c7b&j0M z{pKc=3}4hDmm+}}y(~#%*`#bqAXKuBMH2X;auVCV=9qScGmi!4vOyioH@;s? z`k9}^e+m)ulhwicYd(vyVwn}O9X3|PCs^;g{IIjoS)&dRvSbafB&*Dq<<_aX#B7{RfR>21O*CAH&bow9GjpFn&c(gS~VO@e`DiWkjAD-oA|#nq`YVkPig#n8cNFkMPAa3 za4+*iQ;s2{DvhUSv(aftM37I}MD+trrs=~mb@Bp*rP;;N9ijzNdr*x=`NG;Z9A1n} zYKH^-o$Huk<6dhOW@7mFgDUb}?12*Og$nGaHS+)*pldG<=<3$cpc1100r(9)>PF&gLG=3%VH|gU882+zdxde>dgUT!W7+!^cUP-{qHU@OyN*W$_Ho3`ao1W}GMB!6$n~A_O z524Pzm=X!_G}!SBWa3#+@NURQ6?WnTtr=(HNvMz+zY1T|BceHOf0$;t%F}Tr60Yhd zcnQ94Mnbz8WSK@7{N+vf5DE6pwK01kA=)zIv@_vl`0IGI{rL)ymvtWBf^Qo<@a-gA zI=y`kF2nb4!hWyy2Dryu)@$(hPd@9gQ|e-uu*q?_ROrn%CV;ook;D_+?pzX%6h@-qDBCbW2M{O-SR!WFMw zXYR5s!~ZP9t0!Fcn%e7VC%a>&&Xd0|*jkA*Ctvs|q;v9xUWd!U#kqmXm`l2bS0@x-Jte{p7c@kt;L3n@mJepiHhiHj}(7U%+`3tRx|;>02zHR#1QGmX0SNe!TY zJMIQ#jNvsrxQy*r@yIgvK8wd#f-L+yJHUr1Ki-;Liu;KC@J8gbIQiqL$-kY* zKfEFN5h6dj5qT#ke=;@scMQbH{4P^pPZNo=RYo6=##RicNSmn<(YH!RAMl-83sgjL#7_;FYo3 zx@)+!F?!;a4bihQ0X^%M@qP}UH9WN+;z|8>#$oj7GcY6;Wcfxk-Te;A>N`v5-7r!t7eO%aPnVGJ+gJL6Hf zm>7i@b;G<1f6a`-uaE#%x}M|Z$_;27<0)q3)iS>O1~{kz-}5ZKkHJlR@8Gq{< z{tneOy;t!g%lOeg{qj`5e)&BrZ}|19SG)n9vAX(Nm&GMs!%yFGW ze}pfla0qtbGgJW!RA_9+XQ|BsgOudg$#T5< zIu}or&yWob+&E^=$Hj!cpS_M>;uF-L-h{?w{A$g0{3iF;Uo%)+41P5s(2C>MEym~Y zTk)x%T;z1R_=41A^-U6o2iRadxOimof7#Qb&z`UF$a)d#czFHjCgypqE^Ccf8v7zR zC|+KKj3@Z~s0WxRJoN;~#?)!KRm9YS^;KwtG@1ly-jnbO@C(1o6|Ii(I`p3)oi{ull;nPz5M^n>M{3pHS zGV+6(oz%ct)?%H>vcn7^XU(&We{iMtSw@LOCD2+1Z%Sa`#8+u<=KneMaw5*)RoyOudH9|yf*z>@3r5+yfIgrOLj>vo6CNUHF&Lj z4MzCqvMw{v`^|-h%W|Eye-Lsoukng!Ft2)7Fur~j#Lt1{Rhr@*`qJzbJw+MiYm1(> z4-)cA?127zh%eZpuX1B-p)YlaQuySVYd*d6ieYnk{^D1uB>Wo97cap>_;sps4HTOO z{tdK8M^gz7LbZ;jX|&FF>u4&&0Id-@n%W5I6dg_Nv}mq35h4>Fe`0OqBnz>AfbFA- zm}A9b@#uTZz>1Xs=ZX6reZlgU_`2|ZGfocGTx0&4XV~GItE}fL8(e0?H{r=o!`U^@ z>YC>%z7$@yW;dpggEWO4BBgy$g?^emJK&(XiDE?8Ap^RdF8)tP)*)4G-81a?Gwk%* z_?%dUR4b5Zi$kJqe`83ru`_JkR65%%?xdRQYzFk|lsK>u{l1@GI`n6SAlkS(&1;r< z-DX~M&1;@{%{Q-wG%@WU=eg-xO4l-|fJ&=O&|X0RAyZaYlM7wYNUm?9>u$R4q4pNK zYo%u|UEAn+KiwUmafiT9i&qy5b8CRa=ILrD1=8qGrnMJaf1rj(XuuzlnVyB`2mwC} zpQB%TMno&7@n`zw&m~xnmHKm~`Mwc7`m@J;eltF(KR;;pe-Xc^KY!7D|1y3kKrZ;b95t8kr$j?`3I!5koIC$jWFa}YRGr9jBPx9#b6ZhynfZ!3c>j%CSOZ@P7bMO9u#3B@=dkAOHX$hXKf=6 zh!xw~A(_DFFvFUeSg}w28T|#m_+VdfwOy-=zWC7h{(=6B_Q7`F$ryn|U@gm9nRDmd zbNAh6pL6f<$ID-S18@PRz?5EH&VFY&*-6u`JeaaAORspwL&IAyTAI1;8g4qRS+-TH zTWQUIG=l&)Z9ZPF*sE)GPfzC*2!TIKZbdV-tW&oFAHvg2#ep*7a$Q((*AjF}4+9v=GEQ zdd>fpY);N<-pbgUCtCKLkf^@bu(M^|Az$Nvv9@IDV*;o5m6n2tKvz2m1u=oXH>!Ki zhZh*wvknU40w;D?N5KJs)Ei?I92AJi5h?AClva=wi26f;%pSo3U%jf}9f5fBRUqm5 zS}f>}OPOxXTow@5q6q#34rps@=K4)%+H`e+(ag5?cvb3GD(A)qw-oQ@(tU2i68%tr zDCY8S-&d0aX+fXJ%olSlJPOh|KbhmIL1_d+k8%P^Rj+Av(-Tm)vQf~-fO`z+%Ct#9 z#Q;tw(2rA;YbS37r{&u7D&B7dWmuJmk~({aXgjlNO7AD7VhF@3pRzz z2QZ0g_Il-YulMay4W2zqTV>&nw6-VbycNS0m@fSfH!|T4Z9ho@oh^rnq8sjiWxZxt zdbP;vcJ4TRgNvk-dHaJUagMf=mVWU_#ZAm65W@U+VVcMLV!Oic<6=KIU3xAnvbPozoYAaM+~Q8o9N0b zDP;pA`Ho+ay_4$Lz=s>SByB<3=yQDf>a2jObx3@!5~?zbHXb5K_>u z@U;2ni~<$-8=(*?jOvE`mK3;VoR`l87mQ<$?^XZ*n<#xf_zYLkfg_xm!8JdA5uY;> z{-_t%nXeq3zzycC`#OWj_l9Yj68p!ZH7f6_a;Tt0_kQxaxrzC#n(a6(A zPT{A`Y?27SM5>X3`p-`GA#yuL_9@!FfPFW;+@i^JAYj_y_l3_dDkQ&Tk=*9!l-$N? z<-+*T@Fw~vm3bctSxMR zBdQ6T2w>%?A#WgSIgnM5@M5sZCB8{k(V^$~=BHg~N1OOj+{L}uwC^U93}5EUNksfm zuy86rFo$Dtjt;R4;`|zR;wZIV;cSG&5NH~P;oA<}r|lK8$YduE#claGE~L)#F)Q#u zV*dwFO9u!yrd?DvL~9W(99lX2U!^onOZHN2Ig zrI{Vn~;Lnm<(M&DtG%U|p(zC^R z*K@RrH?29Ip_$hk7GZ6x5V*}W>ZX3FPA0wk9n-PWzfxn~I{9noD;dzW>wyZnkYdq8DO?^b*fAp@x zQV(x5CUD}d;$HOO1^VBa1_g0}<2$RPV2?oRtv(9&3Pj|Hly*i+D@Y1N{h`3w zcQ`kzLa!?LK%i^mO(5y|O3dnxOOftPO$dmaQ3QVid$fApT)E>+nyxM|l-W`o8;Rb~ zI5#q|DRp<|A5$SF=*L1amw*4Ne;Ol58~SKwrkHEvQIL}}V>#{`kVYW1oD)#0dQEGX zo`AZUje-+&ctnSuOosqe^y6d#eKnAHDRHb|ScW$$a5d8|;%;UJW>s9n zXaZS$%HX!;R6&u_`sFBaro#~(Q#X!@Js86zi(YRP{qddC!Va{wB_{Addzo_0TQppO ziPHOD%S79^wV?#M+j@#ke`vT9dd;x(YLPka-qwTza{`l@_wO%>bFh=HoEOU~?qE8B z5N5XO((3XnowB}*`$0u7j!59I{ItGPRh9{BEp1alUXtNVvueIhAc}7UPVE9fU@zxg zPqVz)W~WBR?JCXQvZqy^+|ueZ^1HwiEK&2@jiq_r31$xXy)motf6nB4Fc~i!3zp_J z9FCK>bZ^nF^5eq_B12Y+Izibk=A`K=kSN;?r=njs{4>i^vMI~t z(Nk8&M-BLw_p>gIfzQ<|j2J?|r&9E3RK{4ghHs$>k#B8Wr%x*c?DhOhGE?0 zd)5CRC(5~Ae2yFF!U5)T3O9ZKIebA+_@iUE#dziDIBqj$f8CG#C~CCv5SNo&NKyt? zX&}Q7+#q542X9|^jnsu8a!TSy9*w+c#uR?hiYAHh8>E^csQ+wdA0pSoWS^ov5wJhR zSsu}1+8;1&^83=~7Zs9UvPf=sIVrhaqm>)u=LXl&w}yK!e1Cab%#U+3dc1`mM;WtR z4^YcKYA@~wf2cPYMwm9?qn=;GgVm0(eNC?xY$AY_qo%xptmQyfLBeyvAy@e(Sw+vi z!nZGXpdD@DNAVDk{-^ygnWXyyUrr+8yMl>R`I*@ti*vM(RS@S_u^R`e^&(dzB!)oK zFbv;z;W6zoA(KpYvMKJ%#}OfQmXB$HCldQVP)i3025}?3D+mRb505nZb-NEq?@-rbIeF~WpbXY4|#iZ*E4l%N8TQi)SW4^BQwJ?#{6NY zX}G#ObZ|oP?OGzzS$sQ!8dFK}Z`Lxm9`iy$Kjv?MBO)>1T`PudZ~0>r3Q1#+$Qlrn6xTqJOH z1=29$0t;u+2jiwaV_Yje`M67iaV0?*%cpRs=moB;gzN9PMj#}gD1h>TrQ0J((>~&i z8p%GxJLqJ0>UP#La+Jdv&2z`K0ylqDCk^9zfkvNRAf8h`9W>k=&A6|3n}FEWfZ`ts zH7D;GuE48OH9g6wiur!rt&bVn27#v3v@B`QHSH17EYQctt%-hjyOlEpwkK)^x9{kw zkZh;xr&0SehbRV7@9per-&_l-nw6fFTbYN}tf_U&ff$mwHHs+6_L@p@9mZ`Gs;__B zzSMS2U}dFz(U>8(V^f6X>kfg%$^}|c7mW1zRQgYs!DfDe|>b*;+fJ%Q=bUL|W*o$J%e_56W$!f8*wk~@D_mv85^<5}HfQQBBD z#R4KX1`A^{nQW=To(1R!+e*kgXtKTayaKioSY4}D3M?rzDEnabU11zyFEVr6jA7F@ zvR$6Q@}Oirz>at-ESv3~2cH=weI{fK@5Xzg zScdn;uogGVrulvbc>rk`9}tLW3_p6_ILuQ|VD&7|oe$ze3-A~|Ocw@-+1Irw3Jt{7(R{9 zM7is;zGS!kZ;mQI>JqUDpO?+_3yh;2-It5ui_#y9@g;$qt0a8U4{8kKE6l@0<>-)u zIw5>j2F2H8^Y4~V=VY0xzN<#3o{XXy--zL)-Y^84WCpXns)N;kg>y*VDauLL;IiQ z4s{~!wJl21YY#h2bG3qYMtlPkB}}bWVl{5$^KW^=sKc6glf1t0xk*-J&Ji|nHX>5~ zj&Ens2zdwWYug-ZeH!amgbLX3I5u6zlKqpovw%)D-lfKE7qD{@eW7R3zrViq5)2@H z1tWh2j27UWJA?XlZ5MI44(AA1kKc1-y8av8lJwcN}X2xS*lRS&vAZ;Qx|q?evrCkIZOCuZM&r^w@ffGg4ofKMHCaO@^74VL8fv~>)q9xd95mr9= z_AA=$xNo=k3Rz@JOnlLoP2!=p0v;*geYD@B7x59_l{4AhKg%|!O13$Tj~2BclT&~3 zI2R-nR_r2^yEsdLW-@8@nM~qS1$-`$%>#-}%-?}02#zTeJ)wa2mZX1yWKx@VdS>W;b4KW1yn^OhTQ1@GIXfotoeOx8zc~stt9&|* zMYPox&RtZ-;XG}(6D7Nyz>{=!BOlUP9T_^jwyUW$(8sw4>YB#S~RIy4HfmiCR}M|hb8Qh=qLC25#e z`wf($e8FEhwo=tP^}d8@vxKP>VJI~7ycod>&MO-uxDGd972p0!st}`bVKG&c>+v@= zUxmMO?&LR}zJEOi@doV20gnFrg*orfl-_?yj6r^X2LB+!I$lJtl3^iaWD6O2%8Wu5 zJ2{*XvQ)@{_o;tMq5lg|O9u!}ev%eB$Oqzww0vVB!C1L63J1aYMISW!jQ?#GCK>TDjv18R;@?t zQMKN-T2W~%O99(rJ&N_dt@l;$^AFIE-}h#-Id*n8em?z}W8S$79VgO z!y4<@qJF(~!;TN=4uvpo)sm*(A#lZlWDTH3pvey+fI5NIB@MPg!3$ho(X;^s$->X9 z0xhwU`nJrmQb!o|2ve&PbhPm1;V$*Zl>`AS zo5r1{7r3+(uD9c2fg1Tne*tFPYgmWvaXr3EcMsU99h#Lg^$g{($FtmViNLDzqybze zQ0LJLL^8^!!@8598Hake3W%Mx$p4TqYDjc=f~aJgdS}dXe^FOfqE^S zHYfX>ZDvLn*cMx0I!uRTJ6%76+Lt^?F^GCgXIJ~?N>JS-DcZXwe>T|FUc{wSE)I6L zGlg2@AW(Ib8U<4NsFpR|Frv63h$>tqu#sG&v`n;2`AEu7y_s%h9$K@a)-C(Oh+|_2 zA&~9GrQ$k(t0~m3zO6%vZBc=hrSc`p40%4T4YJ@}C(xi=5Y6i%J+(GAolqmTY3j-b zabsd4>&j$j<{u)!e+#fVM1YPWfK3dfSW!mafGv{zg+=5P`I2e!bTU3!J8Ryp}9b*LGGn5;Z{ zCN2w5p^DBVR~UOR5Mp2tHq>EAAQoHT#t3ezX340P4>rTKMO7%FO(atqYmqj}Mq@jZ z0o*LGSTo&OYXZk-TdYj2^XYh{HV#gv^^Tj%J0icKM>EXC9u>-)Br|VU5_|gdXGNZ+q;34WN zbGv&cefl}&$vxImT!_Osflr6H?K7Te8~-;?e-)qDiP(sT<(XiLfs~>DGGRO-9nyeP z0#}wP9C=5mX8@;}h_TY)As_0Xb4EtRS$T%(mT#Yz)wcYu3I~qILukemVZ6obu3unR zd9slQ?37%$!uU9DlIvgL`ct%Z%)do^wUIPW^Ws%T;oXKwAAg;9uX43lQYrU-Gl*~C ze_I0Amd<@&fP|5m*6lkXJc{oMT)%+c=+m}ahFR8Q9@Gy)sKpOy03H@I`Rk_cogAX` z>QlaBPhU#)lt<=&Jy<>W6z7p{onaBcPnfhx+jiwWm=~ja{tw3xAJ__KlAqz{A^a4- zV3hol{lc8DMi{@wGmWUmZ+O?F`7^F&f4Re&nPp|G>9JEB77e)C$T-{SpmZaTtqC@c z-Pwtx?&Mb*Rb&rq#N<4`7#uLhEX~b2e2;h%_iGMICMyApdRTS*9#hLOwF$b-8Zqq* zt>KXhga+)aGoo)dBv_<-+R)x-xkDYSdo7dF^jf1f(_F2foe^KlLVSI0tC7EN8=MZ)xQa;Ps1=R5u*x$Cfru7kQSW%P1ru)!)4omh<;rbjp z)$>O6+2rm(B#G4$=NZaoVf7&woy9L967&tu8vS_zRuW<~88OjhCKgQ#BLb_TEH zD|uAo_k1#g|BWGvdRrC#zD!7wOC78DIl>PSD$9P(56>#nDgpvcZM&tQS1DC%Yfezi z>JxJXY?u*nF{+h-RZ2ilux8GPQxK;qFOFnhDmXd#8VK8H7-^o3pHQ59fAd06@8*)DIh z$pIlMcE_tAFupTS2xr_N@VnPZ!~3$}SHK9<*lOzw_ExFDIZ zoadR`$Wa0`lS!+`WD1|kf8n#fY+S`A?Crn<1jn?A9#Fu03erDGGAYe5#xJG+Tn@Q& zcy#YMG&8#I&EcGSK6V=CXUFxIX2tcF&!f50mb3WUyd6{c_Gx^NfAbXZg56hVWxNLjozlQjU@|K&$;0N>NVm z7nQrUN+B=>8~ESIaBiZK%Q>##xUw#YOR);8Ir}TAY8Z`+@>yJszp3#e{GDSbziIUS zOE8R=VlVdb>CL}5I&XfVF#i=XhWY&h{y~KGylh`2!$Qc&7Bcdb8HKEb@^P1tWkNn~ z7xa4r0 z)U503bhbcpQd?@x`7N0IxS`nFnZk4BrIONr6=N$^v@Olp%H%S~x6b^Zt=+(KZd5Z< zMb)B0?Uk~rs~Lft=Sn09pTKZ8h#&$2SI>0wjsq`n{k^^i5h6u5&jpf+GxJZnKDCx+ zBIrd#Alh&wmQ}04=+l)40^+eB?vFsE#j~dDsPVMGP^V`Cy-K~V@2y))dP5bMNt~#E z<-78{Gbl|V|6#0eK4*Hwc$Lkk=Pu9$3*6lSn@g1P=?(!|87wWNxhp9L0nhHVK(MOT zl%{So=i@Shh;hO9%zZe~MR^1tVJwVMToJf@hTtHsN{HzQuD8~HLf=p45JdbWGtbYh z2!`-M2p%K^0$I(_?3}>8M5m1NM3Uuy2qrKY#yF+~22QyW#2o>@Q%QkaT`0OH|0&YF zNP+hCs=Ia5veoJnwI&cdvv^FswUVvP6C@i;z-Mo34S~hNg)bfA_n+)Pfx(Uzq+G4> zK&@$pTFtZKgQt2n`JF&6ae;P}03+Q@WL)ecVucQ+U+YFmb4H!aSitE#LZK#kv6Ir1K zYf)Dk4VAA0OGZUE8_cA&R3Kb`G@DjMUDh1VqBL>E&`G^w)J(R#6G57$`FY<3IgX+q z1DqFl19}kU8RRMC+>b%&FT7ag+mCz?a-5x<^Tm8`F&^_B;^QM+oAb-rjU(Kg3;d4p zXEFc8FG$7$uW|d}CwQkOf5VIi2i)q#8lSA!-4Wf;u$yi zIQC7h-F^$dZ=VXi`zN*abZQGwTaT;l5;+La*3swcXtCdS*!@DXNAqOPF({eubCerH z6O%_6Jw$%rSua@vP8P?1(L-(Y5azMK?=I@RgF1{w7xfVZN{L|yb?OjH2VG&WwN|xZ z!!E3xwajx(n|DnUJO;}yNr7XFWa?KWCtl<6&ux;hqj!f@I*aHbzH*6VTeXQEMrEf( zsj}#N6b=wrtrDL;M*3V!y?E-3Jt%X$!vAIYr8psNkdF}|ZI+J{tiU%C<6lrq2M9+R ziBMJq007ySvEmgSm*5XW2bb*yHzt2pZBrXn6n<_L0tu*#Us{v6+ zsYb(#rl9z~NiJbwv&n2WSpJAJ{RMv2ab}s38DGBopLBfgCM{Z%G&{TZ+vUwAb-bt8=FcmwVB4~0+N*A@U6+ox{-h$Cp4D(PtO;B?$CW(Sa%yXB%dSdS!^0s~ zH`6ejE@XC9F1)W}9Um}8JC1yR(qtyd>fE#InTz2=CXU%`N~bEYm@dA^%UtMVioO-G zp~yFx6AW_@Vu7*rzqbU7gl^+w9btU(f{{);d5Mw7%E%6lc#V#d&ZPgph1gH=nZoV~ zjQ4USh{qQ?^7xWPV_RjmsDY^-ZU(hE(K`c~oc&VhoVZt3kk~s=r8CukzXnybW(mwU zs;rk}(Q@QwyIz*=W3#OK(S?#{R*p8zW_O+{HrRA`P1jQM?&9c%^bQ);ZPPXD(vvPt zCJJmPZg4G*MoNeDzy@;Go6tC}MxnPYqhg z2%f;BDf$HZ62W!Mvb!zg2KJD~F)}!$W`%l#3}53LV(xMFEliSZ2U3}#s|QjA!zu=- z1|e0_bx6kPh;l@5GRkmWc^>5~M-|G*%~R~F_=f%yUu8Mb0dyI|u=%}9ghrcsG){dS z7x*SAjq;2sj$<4t$2m@LoaAWmsR!&4I2=d#47mA6lml6oe#ge5(8#FxU6-z#E)Fw`Y=F`OctJxVx+UKW3?6F0PC!uZ>} z8$+CMrK?;FrwQg^VZxb?E+O=$y=Gwhgsa`t$64tMymH`6cY|ZkWW(G!!rib!Y@rWH z!l__Wvbj4aC`g)ZL`A*svLK*JNZ%x!4mB=#uFapNYg~-d;_NrYM?8I!#RIfL z0)H7~+Rtz@?BbjWsx+ib}H&v6|O5kF+yG^*BIWV^tE6-T8 z(1{6K?2Z8opAya;Aro@kH86&Igo%?~v%AN0rV~YoY~51JIN|b}^AN*>1kU3_gRkl| zA$63pYsa~^*%hv7CXD-$fhgv9*w1)tHh*EDC|!G@S*zIova+kpsAgFa{9)vC8yPRl z4OawBpZ8|T4mQ2DCE<&j&7*~9OtKt^>hqGQx7ic(Y6#6ZqR~(z$S8YFziQ7(MH?uq zpyyqO4bQvl9)CDA23I)DD7ei)W=f4H{*Q{{3_mHxKIYRHLt@yI`e2(u1oOQ1YJb$P zc*1KUB;zd3F(j2dJ}J>6tLkCczYAkE_Y*GVM|UuMw3gwJv#mw#F0gZ?cNevrPqo}f ztQCkym~1k^WR?+JZ5#ZSRYn*N<^M$NN94D6F}Au3Yc>B86Q9A zTsa@=*mq?JpP<0>(1EmeAWDoh&3|cTo@Asl{*<+;7?QdCANXRF-!d{%|m=-q%EB?%OnVwP`P! z0n_AaE$|`5j0RUV$;1f5{{7HuScd?2-h=5Wc1?DM?*1^2rPH*GMhF%g|cND!P)) zSZ1!wMSg}IVxVRwr&UW+bnPa`ksvYjzH-UK0*0Z#sc{lQWJ|S$3~d@oEZ&(}T~tZX zmv&6cf10|^K};j56^msthfK3iGAuM1GUn=M%8R->GL|Oe$TUk`5Kr19Wk#_JC#x0O zyro#HLUo${89LMzo5(OX+82nLWfC$RNH^UyL2O@iD4x*OqH5SvN|A%?iw)N9Aw{r? zZCW(zXe0etdflbdwxt<)VeF1ND@7TGV(Cr3e?Hl0Wf?oMYa0UC&ET^O8ku^m`8I0; zkF42WZwJ+mEHoYTmRu>L6>Tl>phrg7Y4y<#v*zL|!&0o7rOot%Z^RMvG+X#B?f$=6 z<;_UID9wt}tmxKfMWZis@L+5UtCIH*Vjx65KSb#}rWu-jnukum1;MyGeo+!LU~Smt|>$|<>Lsbi=^pGcmcB*3>YHYvJuFV7a1_w)Ae<4(l$-H zrD?OYNfSbgDbR%`P0}=NlCJ5NuCIGvy1zDEl6UT%k*w7=`TxHECqXlJ=H7G9`Odj# zxp(-|OBX*20PCba1c!HItoEdDs@Clf4j*p|1_IvUkne;qH0ug@{Ih@4zG(#z!E(%V z!c*(_1jcH23>~8`3P=bmQVv=(J?!y&5SDj~o7ySwsGs`O?&huCzOjHOG&ALGMUaPP zL*8jLRT*WqamvB+*H|U%h=VPoYlWeNtzfF;qw7k#&W<2G$Idn!%9SK089OmgHqKfd zswa;|+gufPM;kVkxIBMZtfP%(%XMZ+KBYQxGpr>@-DbC8=@6PES6WG%3nR~qRXega zl+s<34u>SGl3Ian24=Q8Ivoy!nk5gqutZ{ojt$mHS&~iiDmLVH*;T7-tyAPQDXYX~ zb-7k$*wqRnbFlr6K5Ji(Ny;;_V+CMkQFEt~hxZ?l#-DsoCCPPbIemNV9u zI$W|_&NY%e2g_u+llVAfU8TbFhf^Mhlbk-_$gT?Jao1}K`bjz&YN_0z+U0YJ; z+Gc7)xy(g$HkJ{cidCMCYPP!9vx?|2(;&g;&g$WGtZs|7*xD%(-ts=x+HP%{*t(`@ zrnjhhbnC9}vD#&=r==G2)-^|3j*V4XJ)_-d2(Hd4FF}7hQ*xar#}Tb^kEyT3l`l1@ z!zTj+>)VgCg!YZwTaS&eb{4F)HV+Mq78L{rO_DUgN<5j%GbPV1t78Wm$1;iTfGnN# z*gOtv^XXN2>+)S}#j(NF&ZB8tutD13D6kAR?Cf!0QYTD#d&_Bu(V3RnCUq&O)K#K9 zd1SkDTjjy^qhzIWRXg_Ps*^L7D2)!}`ODl`z9m~#`?sUq7w%U^+AVWQ!vmX(nlfe9 zQ?=Uasmftl*45RV{z%_wPDkKSy}v?r<(Xx+PIZ4&)O9frRv7!N8AVN7Cf(PTWgTwG zlP0Bl$NmOiu{ycF$H1=cSg&G_#D<1t($`?~gzxlr!bO%khfI?=SU0lIxN%>N#Kv}* z>~&QKHl)kec0;MV=-9qBp?o*4-yqu^{aM9Lqhl_sRXrq22Tj>lwx@Zdt=^EAvAoeL zZz_K}>c$OI4t3U8F0tuJxemJq8@yeG-3~n5DrNMPme($8KANjq)5=}Op@I6a-ir!c z?G3Y@%{kkG#U-a#^gH+W45qVbw_~#R$olKD)q(vxT&%avZE$;fuksHP9+oVoRP-CR zttl*I#kuWi!J?L#F;iE;cB1Ds&en|=H3xsYGM&vk`Zl$39M@ph(XL(Qj?61>V5!Rh*G{H!F4@sn$ow?>V(a(Tn+XtZ8*;gpAC&v*d>Xz5fud%UDqm-_s!X=84mI_* zF}AVM?QuA4HZ)A;qttY4a7`$;=1>E(7gui$_B9iKMO$kN8*){-Cfk~>65YmZqFa7Y zjiIY%$UUV}9r~qWJk?v=y1T0|2ZzJs?e*hbn%;6Udg^kl-LAEcj14(;-Lii{YIQq3 ztYZ3zt-3j5xoT)N$~i>8euv3ZS5??@tgXJgY%L#eoQ%S;>a-`XXn&i_)#%8b&9Ccq zHD_n2zOv=aP?qORliWqu?_=qcC8US0?S>P?&)#WwbyHR++Pa3gy*5rn(J63sG|ZBI zNsbn=uB%pT7#(9JLk`CZcD;XmonhGJ+FaJCx_F!!^v5ewOkHJuf?3nBz``vK5 z!mf6fJ4#p@_uD-gRwgM{YbN>avF$9|;X!G)$ul(2JUMME+1GQR?!>?@XLgy9vCPU6 ztF_m)ZJ(;DCRt)R#+kitm#Zt+s&1%sl(Fo+p{9(34I|{=$_SUdOUTN&O!{Mn)SLMdM$$pdvjG>d{e^|ZI;aFqeIFy~?D5&eljPQ7A zd-vAbBk7VfE!BH^U59@;{^l%Zpmkc{GHlTFdAM}EYkl=t=JIq|Qp}wh9jsYO@2+!r z>Nm(4s&~x_!Y4mOagFeqPOrli+4a&UEDshnoS^v9QCrwD*j7I@n3sRPzt-MF_PfbyE#~tX zvc-Ig*&!9TOmy~>ecGBv59Woo?$}co=-TD5PVRMuC@v4wbh?lk)Xr*@eQmw%O}?Ur z(F#?xXO8r0{*l@ns?abx+;83*C?+{qs1+89++3qy4qRhSjJ8_S{+t28f3+l<6$i)26uJuTXR5`bWce@GL2J9E1{l4PTCeatA!E7aL4vdbeJkPNrN8D8s>hCJ?(e2dY*PODx= zoq-aeuI-YY77$OU%F~5`PCAx1>-{9DM9pOsP}p)cgSCIrf};1GN}DW|S7?HrmhEUU z*;%bTvNaID(B~KECQ3)E7tLCoPEQ~h7@Y|?>l9EC+OA-P$M4rWOgsIjXNQC16Eh(% zCzOuhzA{1`rzV0^33M_LTvtG6Xv#M-<{jA+?4({(J0?QDV8B_gK-McHvxC@(B4ho( zK&C-~Y=nRM#mVRoJwtx)PL7NMxl~@nKSgM`a#BtO3J|ObkEu`z6ARNJj@y0H!&=Kb zqQEi)TVf{#iV@7wJrV3lXlYtjU?qZ4yGO`R(y!YWIIch`f`Q*5IKzE*P6b23y&<39 zDZ~}cJ;B}H$sW&y0;@@?gq{kN6VHj=5h@a?5)XgVp(&3q5Q-yRMU19+iBOtIi1Qss zVhwSZ@HpvUu8z3Dbu>8PG1ZMUn1*^!P3S-U9{-G&pq=7aPbsiYQ$+GU3alrH`5nS4 ztrr!b;%|45D$t#t&{1dPuG7ShL?vQuF8M)KwZca{@cTnI} zVY+|e{s={>=xQU{NHBg!49u70zQBp#ac^ypH*_>Ovdt41@q4FejUX5q>tnj0YuuiLDG1jTe0?bCqRKGyC6s*rPD?$)L zmhKVhiEu%h8;SM11DNJd zcw~XMk?NDBzhqC#%VT^{Yej6+4DWzjxT)QmWrTNH;1&r0Wd1|>en~-LNfjd&=G zc}Bx==5|{59)Bq68N%zL8DAhwCNYRq1NV??X+5|w9{PYbLSVNq#IbxYyw3!8!23zK z50GaQQ4AqFqJb?l0fB!V^}T-+K4c@g@1hhZrFsz-53;05th2|Gu@7z&503SC&COk+6rqe~J3Ujv8GZpfA{9y)@ z^LGXwPKW#9EIItt`~`+J9zRJShPZi~VGd5E!#Ox_hTX7-FTD!{>^y({Jx8a4CpE|} znc*Z~VGKTlke9s7qZdgF!8$Ws)(rIXq{BySfN+-y%R;r^X-ss# z5+|sI`bC`Jzc1Kx7=;vHAt@qI#EC=exgusgHzbD9$UJ6v2A<^n`%>vKb=$@>5 z`NAGffp3v9jZFn-Cft9tRvMC-`64iy;oIb$#N7s+4HVAWL5;N{ zGiGV5EhkeS^M+gzH|HJc43PPfU)OhGHZ36)OSSBI-B1=`aiMv*d?lKErNpn(25E2? zU$*xxnF2{%u2HBU3Y9icIYPw?1`-8psCslx_-CfYPn3U;Niia6;KEv5OMwgP64C59 z6@z9b(1 zo3T|SpSTfW>nln=6Si?^l{VmJN;~l?6V&rOvS5A_F`82zPD&Ee!-VK$rqZsB!_rQ$ zbXc&>2I+qs8IcHtmQY-9Wp(0q$`-H-Aw$niro1EGQKy1ERMmFJJmdZicc|ElJ1N-` zbCfPR2aUpAxZ6ad_C&Ture*>m-?&%%{$bZlU=KBD%6>A@?ge@X2KKAC4+mnt!O#Fv z@L<#yqF%NpFH3QdQn~J>bQMz`QSmTdO=%Q24NZSXBChQeJDWM>NtH8%!zLOwLbcQU zFtIU6Ei;a4ug8dLlI&SQAAchogC<(cL2A!(Yu0Q_Pgw@))3N56@18%J2N zh`to0YIxleOg>4@dM8erZ~~_&WA;wYc>J`;bCcCd2h144850=r#A10*NWoKtak5=@ zk#v8ha<^e%w5}q9Tw>oPSJMmCNHN<*W*?7`T<@e!TA$!*7h&NEOaMbG= ziMOPPL%j)aChw20=INg|)ax1dn(?({KHx$sjg7*05V<#K4vT8qZLi2-CGMS*Ml116 z++)3&7W|mzR1$@ZgW8O5#kZND4Bt-1w(x&3NgWTV2~Jrs60;YT(qWtN7QB`Fz;}`l ze3u1pwNVX1KF}P^k%CkUJ5ncuVZPxWe6I=b!1p0EFQv{)f&{Pp@B=2W;Rh+crLOnl zCO(57;u90&%BbHH3VF%4%NI=tBY1xV@8-krF+mQW*Q8<14TYRfB9}acO=Z;4OD%uu zcnzU_>C0!K49FY|J5I3_lGsP|p&o_)hcx}3A^kpVgA86}TDXulGRH{5uqUV;Ak`$b z&J-t4d^giiSB{ejO!z^bVo|wW9G#ZLO~EbJwItg}y15h4*hRd=rTR2U^_kRrL3(!! zehy*%l6D@FZJ*%hZIFqN=(a`6+Khi+;Cmm>;bRDUlOVR3^H|imh*j`}37kl!zs=+K z3yw+Q+J+oOg@VXt7(ETkqrEamqmEF!kliI}mXxaKWO;@!^7>~;(Nq$IJiY+A$*~4#RPrU&I@fp2LL4Ls{LkUHIoa=!Zog~6VT9_%mrht=YlVNpp0`03 z{(vNzqA2Q{^71HpAfYG0j6cF3^UUfeyzCRg{AWr@s3iEg#@R23vtQb18U287uDy+; z@tcUt)J#x8s)E@OT7SR8n@#uv{+>69#2>ZhpM-Zyh*e2Ky|9J9@G(^CTC_QOJfY#E z9aB@mDFy$QB1I76{%*n-@gIMrJ`$*7d?GX}_Tede_!qv!4ftgWo#h7v5DW|{#OstfxGUJ!=E4*(RLb}$sHyEIbfK~7l z;ixA(9cNW4t7O$euS*v(wd~x|*cuZ!SS{bToiafYqh+7&*K>6ds7%_ygceiNy}Us6 z1*gQTOf7VYxFsH>`67R}`SW|G;e#chZJZL~oS-*mW}2Z_aJTW@A<%+B(jQoPdW~`Nt%>IwQkOVCP%+hEr=fjs~yzbfSNxJd%#4_zr_m+{yY( z(8PApsDQ8)qh>f%`lcStPn2U-MSkv-vmw?gHz;ht#13#*9Mijj57*igp5f!3F}`r9 zz_oP8J``)`h{_JLt3~-fxrFk4l18y1Hf*9%Ba79JlQb`1Dl?I<5|S5^^kTb#}I$kChe8_!w4azUxhwKwXW4SEy9MAYdA1164{~!I67cvK{jEc!Nht7 z`MCLkW;RVc(VNi1B!o4dFhMsvNz32w4UC13wgty0JX79iE{ao==&a~8vsreUPj(GL zmXI)d?3#tfCMh7;`T?_a0!cjyZo#>?C?)9=~g9Y-ZdW2z8tq z_G%Rrdo2kQ?`+*OKL3b!N@1_(=aS2KEbi3gf1`=LfxU@rekMScE`r2LadJUdecO0t z8Y4euy^ep~LEhgNi1PmVDO91b_lrfmPW(1k z+bn)JAgDv(`gs1Muf*C}VIR|S=}5&KPk5&ypAN3%uStLA^W4um>qtmbxEgcT^AQx`ms6mgj7laoa#|(M)Kl&}M%9|^tL$s(>{<48T1H7H zUW#TK$q=|{L}OdOlz|j3yOXK(l`EM~y*9a8#W#}*`+f?wiq}G|KTz58?1xvT*2E7o ziPR?cV-u13i5aiw%4=a%>Xj`Jk9GBlUxk1DJQ7GoyrZ5Oe~3f7vOKj_@gLIYFWIlS zG5tDWIH_b=lzHt991jFf2DbRT{t~C>a9k-VmvxCC^Zlmmy>QLj%#E2(EmCL_yl5>Cc zl9_!=Fd#veQ9>K!^Ii*ONxl5TDanA~SSa!8)xV;WjH)C{irD>0EVdUQ&`oYqgHKXT z>=%-0DGNwDrBAgTl>9p-ElIAAERw|U^AstI%!rC{_Pk`Jth79SGmQOK%H}U~5^Su& zEah=4dS1#$*uH2LA4_*(tCH*{*eHJ$n%Q^Qce(zkaFvS1hmlKgAW4lxT493%X(f?m zFX`V&imiIdEM@Q+oHWBK8`!ypsFCQg6umS@d&GLpEv;M1z$UFP!C0YL=^Emp)&_-~ z2d+1IQ?0#epf~Gmu#CT1!Z~Tb2@JeQ&L&+=Q!?c7`%ZhckIWwb-CYY9nbP|NfhF(iR*Md-mKx_Is!|>2nYNp@pN(ztb~CW3*Xw|8cI$UCJ!F^hj)i8jAydYTu*rrp7rsbTLHAAe`xrJ>yKoAyy>S0E4! zdAK=KM~gcQu{J9`$`VJhodL?cyq$s3AlbNhLhOSB7#JvJOQY*<*aIkaP>aD{`r9AZ z-Us_5?E(6GAg+BdrtRjR=+eE7e@IGKH~%J;t_`5_uY<{Qw@_;}^+kU^|5-RzIS2kT z{5wf$EB%_a=P&}}0Ma)85hYT?LXYzyK%MyTHfr&1mda1U#1o)Yo`(>>Nr_ zaSq;k5k3rX0Y1v$GTeWE2{H%pJUny(KEd1PF2JV{&cVe>LE*-CoP%qs9=#WgRgZp- zo?JXb(;HwXfg0vA1Ehb#P6b%I0-t7rUz^a&TH>+}Y6vwqtc~J*P~%-kdzPNxc0 z$251I|1<*TvuCuqqmZ#gArnnKH;y{v9|WdCNKT2+7org|bA*2$i$mxMfsh=J&=XgH z&;~-Ng%H|E2yIvpq5k9u$q|H}JfqE>0-+5HBJ?GAN~eAw4de*z4kM(98CojIz@NSd z-{h!#kI~PM5iY_ndGiGZXW>tC@Yf6Q4@S8BOW>l!RZ6xg(-#OBMu_!ne4^^fV;>~rZD1TaXx7l#20gLpY)gVpH(05g6MA6{^pOp9NAbTm0i6R8 z{yTMa@}hVrcrf#f#y}K2)+l(Q$>$}&leGXmmIyp(y@-E#vG6QQ22ZgDk0l zFTvAK@a!Xa4iG$h7lh|v3V19LcvhUz7)Sxn-UZ-6Tp3xnd-*`RR%vLgCh@UM_!rH3 zs>2U(%>}IIFP`IbvZ$#JM@>}~Jrz1=s)oo^8+A!+8s+B5R0$NXj-qHwptu2Bbc&w_ z1^DiWha7)p)f{e`!&l9r>mqK8c*%1Yup8kl_RZnmvv@%M3?3Sg&Z1`yy}Jht;^ye? z%Xn-K19LdtGw=kY@2h?sGVX=U>Nz}lJ1B;G!5}>lf!Pj*mnn!#q+tbKqmcGd!C9W# z2>vq#KO>}LFEqiZkRwmnpGOak{Emlj3h78Z=A!o5O?pmi0=WI!}nhT+dyUYdAxHDKdjm99Nv2gat4qd-bWAT@zrc` zoTdyw1x!FA1?tUkO7OXornNvTeiT0@IPQvY+=bWS{ozCeuhlun>jdWyL^!`z=Y0JV zIRAfy&bdW!{>d07H4v{S>NgORH$^eGI>Oxg2y^T4!6@cF9%k-Ap4af>I^9;@Ld@~t zR>uwf5|{?C>O6kx0$van*i&735g+9i`M7BJUIOPpRdvmId~%+zLNZT)HxY=pP?q&> zsD#_d;NJt)aJ%5Kk|xN5W%wmB5Jo-H@hN|9Dtyuiw{>`)BnT^?;y35=%lH+IOT#0? zWf9G{ow$6q>H>b9kv;s4?3dc#)Y^CGHd%EMf5<`nsrL3~32%Qb-s*&Y%a`yAEs9-v z99G$tIsC(A*w~WB@BVxl54EV5@Pz?;nq57Qf4vth_kwf@UmUP2=kcGPYcbl5`T&0u zzY_z}Xn;uxIE4to%+4uvJ!_ zXO5O^d-ms9>Fu!0o_(2>w&d7z=GcE~-ZQt-o;%0N&k&`vtj3-#Jci{GI0o!CyOqYS zJrkZJn@=(?!tF4uH*}`+?fIPPe4U2^ekXXa3#JR~_E@I#1=D%D7VN&E?%W39Bh-0&&kV(ub;F$M*!fm~i1OhP7G zNA5%=Cv;3aGf|JL#j|vpYqM}RX6&L7jr2AP_v#}ocn>ISJw40CYhggVwGszA#9JGA z*aFr>&kC4HA7N*8U=_~_i6cckTgE+A*tN0k__T1ux@&uyyEfL$Ht2ta1=D9+vvFjc>|SI)#usv_`vZPrRYynM*odS;3$PPtc!J% zpV|WHtcUJ+2&7tY_U)U!pZfU_zufqkIzJnKCN6XE3VVUhUdb6*{u z_~pkWeu?$*N^MGuo&SG}Mm;dSo(RbzF!fO8QButpG#=`$=F1tHS`2*s*VqknY&Us; zus^Bh%Re%=3E0126*tUi9O{U_dU{+J!66g!*&gH>aXx8vFYDJLBHO|CMK%Q34zLh^ zm;e3zwGbDr^tk1f@b?TntMgZ{Z&;*N&as2!3geT>_UOG2wx53;nkThikopPyR3n87 z398Vm4+v3b&oa*(^H$HX}{tk@(kA}K~jCu=YQ(GfYUk!Qe zeY9Lq#qu;9J{N5L}V^YE{(gM~n zKNra?3G<6!(Yastih=p~V!&KxpVvwA;K}*1o@HMowx60~Pgh=G-(V0=^NUf;TiGKz z^H%mK`{q3Jj}Y^ZiW$Cj2t^9_w>__Bt ze>#81es+odV&D?E$nAe|j{Qdb{_Z^c<5@gl_ze5=fK+*r{SzR(ImTY5s(!H{RTm{G zZpc|F?Yxvu|HsLrZA3jmi|>oDiLNeq5+>k@$l@bbBM9CgBt>!eJ(83ONi!sYC71Sl zTv~p%tV{bm#SI?ug2F3YU85Ovi=l?+tdf7FMZN?ZNr)fKNjCADD}D>kOUve^w;L`> zj(K6E67E;Dz-BxP$L#VP_@ffuBraxn-orF;HQ}qx646 zk;3 z%CPNARZ+GtRT3suVutF-46o%|0CepnEmtko_NBU{h8)M4hQu>;eU_~FnJ5lBBOG>0 zHSrwQ2(7h6N~~u|M4qVlh1LdRv_^mCYFOM{Nsa5{jaAmNFm9}dSYu71-mBw{^=VS# zGnCDKjb1$++1~8cja4R*cL`(V%I*}#%18O7`Y2^f_2O{(0jWtBbhEB(Q)SgTxViGY z)ckOqmTRLhG(~nzO$l4(7L&9=YSF9qY&~=-q_=hu`XPD}Khir(v`m_%kPDYLJ2x;` z(seCe>*>nRDochw-RvMX_jt+bq8Jh=(-D3sheX0 zvcyl7(rJEki-mRMYSd0cyS z?09Ky-229GTXI1WyGmM36#hz7w@8iBTGHOT2%)otN-h?nfwb{;_&GM=Dy$;Of5kFc zE=llNX$Kj_i^z9H$m=5yddTBE@`MF>PJ!I9AoqXB-7MdZzXg|(JU4y`H?}3Y9w-0+ zsh3g01s#{LGdK*FT0u7qw@p1akrtQmnl1=`cWH7jLUnFrY-KKEY+-YAy*deWTh*2K zYWtS-omjTzL{98jj*@tHY$tJIrvZ75V|jN1N^Izt^=&KBW-W0H1n5SAF0`eE0)+yl zr3)>o3v!kMfwpwYv~;1R?dT&nzeL|L@;--@W(U{XP4&UtNBG z5dik#PZ2iB?uFK6PpGvg>UVo(0T7|&v~*T#^-BJQ)-l&Ci4V)J51&k_MRZPj@~CtW{aS_t?WH-GGh_FLo`osyoJ`W z_ib8>>G;_84&QKt33v9RCa}A_t`-d{!E9UhA(k7lzTI6^YSKD~CTs1YQ7!3zC#2bS zms97k+6P5-u{OMA{CLNLRWD82`mm%-zZB|0?ZnN;Y)2bT9hfJ$YL{A7yF~oH|DQHD*_YYg` z)1rE_{?_G9Gaas3owU?k**!hnzOPe1(-xt9n2cK0RPzCS+pt=7yisSdwpQ*lY9~&W z_1K%Hwat=wl=LUhYbuI=tM{uKtC|KkPwo#7Z?YY1tUfd^Z*p((&34Tb9jn-{nz0Xr zt+;jXX6^aY6}4Dw(4Oxul~jjZgDv86^GU6`*HGRj9q$O4^($w0+J(j8NwI&^Os%hX zbo-6ISu~7Q*y8qTDz#VYwPUsJ@|He4MEcVdX;o)tNzPHV%6CeCXElw^?2nrDQs-{9 zDtLq8kkn}DJT|-AwpCJ*JVz*$DvfISgr*jcb{Vu2w^>nL@AA}gKhYbVGib3NRuzvl zEsmVrzhW(R>Was)$aAEre^Yh+T%)$F3{~AhtAX@bqgRhb$uEk`2sJE5``rtk(D8`J z8@5e(d_k}5@VG*MQfOsdiYyASIi4m`SOSt_o$G_0+$gGXs zM~G6Y0p2qVP^USGg8OCI!B(e+?`(x5$w=ogd*rg&_otJBz1{n zeRsgv$X>}62uTrg-aU025w89O(eq0_TA*QOKrkeKX^^bf=a+S3)I}Hu2a|h*oFjV) z17@uv8G=$MEXS?WTbHdBk1x&Yxzv{BIQL$Q%Hb>r9VNB6)695HHXC*aV`_h-F%R6n%(s$x${Yp^nQ~n3tKP141%DnwsG&v z#OTg{MNovB;ASJt!rRyTM;w8wORnh4vhL8eu{LNN5xU{99#lXPp_}st{IZ)QBk~!+ zCc+`;Vt5|HJM8g$B1c#v$(Q9=B%A@Sffo1}i#ax;`nTg6QVXy|33ARWOO%n-b&O0H zB1Q;76k&HR8)bt^V3{(!P4Wl)^HIM|*_4fc%0hJ_CZ?m*DzqoPDgG(K3f#ivymhk< zZYzOX)O0Sce+sz$@LRO^WGbMZHd%aSaBD+d)X7W-x(ea9;212 zn|gQ^ev5)O$b}K%HO0=q&BVHYc75K+k&F0jh3^=M&+F8eM&eKrz6aMCzzp9fWryT& zzaU`qH0>xQ$i&%T5jy8l{>Ot!-rHjO!%?$Bd3 z*09oDpfcBIF3q}xB3flwYam)X$pt9YaRfzXO2T#7JE1M?!rcZa!97ZHP%(tdDBmP{*5+e-Muv zaR7&Cqq(pWxm3X6)NdGaqj2{d(W3)La|x^zOCmH*de7G-C`2apIDu2NuSj4ZaU406 zBkQD?=h|apO2p%M!a!o(fS_V`nYmJAicWTlL?@nPIy#lduh{VqXZa;ezH6bJ{YB<2 zEA4$7-c0R(1-_j*a$wvgqKh>#l{iO1I2Q=6*r@4~qTYzDO+=aZH#na;)gj`dGUdsf z+9%=}-W#Jgb85eceq~i4bLxPIOUhIzbE;Fsh(a)$Idw4YzAor$J?=l_4=no!JhIn4 zB{Quq<2kmFY^z}l5q@^fmg#?KK7LU6zo3?5r+HIj7^O916_dY#- z5I>Y`O%m?VF5*YX;52tX59R`Q`~_6Wv;M~numc}Zs!&#P6=4Au*>)ZxzdE;{MnSdB&S?> z4`aK^8qbIUH256#IW~6Mvhl*2b#5RPV+_}SSm$+-H?w)~z&YY&BNX8kc2mX^#0w%! zz$8;YogT}`_+dHZp_c6yS-Ev0rky$Nm8KF{ZUrq@8crTCLQ#Lj<4fFQ^`%${_%*5- zu0S9Xj)d6l&;9=oS6Dg77QWBIZ{Vv2{5pPO{B7TUK$<3%WD4vSYX^+(#1w|b4 z`{hvb2F5TIh=%6m0S}wAOe$JF;R$;P+3xoTA`(kM?8c=hp<;yxfj09$HW>1INwy*X zJe825#GfC46;z-BHRzxS*ezu#yOE`Tro5Eh-~!@zXsm*_K^e6=N8mcz`0E5|r7vXn zm<<=9?*c=?@6uDpfnE4LdWs4H^uqu^oXqtE8-$~ABK^dc_5VUcW79<#{c=t+H42JC zhL46|jL!>j49022_i3zG5x9f^B{W4o4r)aPITpg>>0K2zAkd6nuW7-dzW z%ZLO>UyN((6;L^e(CIbsI~rpUyaZ;e@*cns5F@h=}!}1m0bA%JQ!cu9$#6+M2^8D zncE*sTVIr1{|R_BuDgu&Ph_q?n!P@*zQ+jmWRi}Xf`A+F3OwahXni&{d?Gdc!YX`u z4W3i}ufnAmd^HAFufi*toQKjlcV%(@S~8@%3BqtptMDy_#kXVd-5C5Jli+X~e?ika zf?p>Xoy!&H$Ct@Zis-$oakTkW=v#%~jlmx_$KcPqG^_Ae7EKKP?qO)S0`1QD=g-#Q zpI?Qo^pyapWAN|l$H^ftJPo?1K}~dCPotw{cv?>9xda_;g3gn1It-v;be@3w(m+J| z=U3quUAlE>2wej6PmAsns#Wk1e^?SV5SrmdL zcGeKa38u1g3?JS=sVlLtU--p?`Yzg;mfi;&Mw(uQ`lc8@K~6tP@29SUjsg*%rrgmS z!_QkZm+%>+ZuG*1xLY=@b4#ktzoh&s;G^mM?a3Os395NzRKpfZ+pID&OB}>Ukm_pO zf$$M1DY39ijJSAhfAPHu4VUmM2${QcrtMB3+l{9v-N9?u8Sus_os5^A>W0SW;dH|q zKHqQ=FVW9e8yYAYUyR|^=V3lo;y3ZK-bD%QFjTE8m(|H~Sg=pJ2NR{E4?e}y^Y>gumfsze|n179aPQqbgHU_-DLSX zip)lOHMUX!&{i{xNqt7Axc@$gH6#k{5CAc)UmAy#}vLyv*@R!8bgAZcV5)Z>z;t#i@$Rhp}xsdwsU(d6Sk@ca7^#P6u zz0L4zObQNT+RidS}uoT{8uf1EDTs*R}=W1A>$;M&8$U!9T+;(Hc7wT+&_Jg##+ zLY)s#kKp47^$H0pis=CLb z^oJMF*0%9A+`z4WY2V0Z=`J}Kr;Pa2eNP)i30-Tf?gK3;c9|mDzhHLs6u3{D!!?(DKWB8Df>E3Z%Vsy8{7?0vB+Ek3o zSuSK5FjW@?>~n*LIXt#-;t6smq8J%`7^9JR*oh_na65`D;!lz5P#^yDMbo-(B0)_t9ionJp!TRM?4gd=Hf%bA)xAzyqjb(k>EtcNVsyw^jx;M{ z^f5mD{w1`HZF~dQaN{4^*RolA006|7 zfw?Uqm%n;B2$!J0Hz$8rTUQfT6#h;~G9&~Eh}6+qtOf};)1dVdkTxJz6pCDpt-hO4g{aHeXpa_2JQJUHVShdcpnmgUo8q%7`y2 z=T`KhRwdOeX66zLnwgkiTh&L#M*f%2)RZmrrWpu~$C7=1HMx>$>TaBrQ7l#*={I#vTOEm^ z1u=p4omvv(6)P{J?h}aaY%7Qhggu!++b(@ix?dnDIf3r~z*<3jo2{I=K>*@6*$?bRTY0u+6*>o<3V~tAYOJGVL`Xc zJi8lH7X`$X5d0s37HxIaT)S>hnq^jUD!He5tF2sZvGhov*Q2IpEvK$8-D5|vKc9?d z)0vMkN#k@|6K^azpH0_fHYzvg$J4axlSCl!C@rAm^@3J0*;KLJ`6-|*aEG7HWSx>? zIEB+u4C8-G0rkC=C^##f499TZ)6Vd4A82NUKpv!9&rmn@qW5vh}&E%UXdT^P;RGWaW<+-~O zMH{YiYTrR!!8O+GwvfPyI{DQF_c~@5$pHmPJ3s? z;5F7i-RR>%n|*snfLB}16mV>e@F6Ccof5r zxE)0Ryx%+OP3qZtE!4n_$1sQ?=~%BeYYm$06n1o?RB?2hmv7Q*93zSl?)fKNYr|)0 zqGW%S9nEqUyuk@hl=394bB>m~&-Z0sJ~V8+X<|K7DK6=@ztb^YV%`fHZ#S;}&B&aw zY-vu#CLh11J1eC;UrDW~Gb#2#Y|659d&1PpWu42mNh@cT%7(SAVR!5`IiO`A&GxJ(jsru0Q$M#F0n!rEMBh#gwaaL(}7G- z4ZgyJ8r;B{Eu71QBsa2!?o3z>zeMjZNT}g0^kx)Q*}zws<`)=VR6{S&xu`a8Vqz1Q zoZJyQ9GR5jj8RNj#Wuu6>%1o_n&rhuzh z#uM^CbLX~bYCT1Y65(=R;0H#rUGz_) zOd1JL9H$`8qu@MvM}c2y5GEZPm>GY11$D?rjmP4m9}2E}u)v5(@T1Qv_h*O3uyJRZ^8qY zHsc}b5&jzyl2r(am;4L~c^(z=b6en%jQKB6O9u!$lIRkC1pok{mtiRb9hXoMISiMX z$HEMME@NzAb922~33waFb$)Lbi^VPhk_#RZ#6tuHi8pCdq9}s80Fa^}@emJ*q9|Hk z5=#;!2v7hhO1A9SPGiN1lQ^++D2a18ZQR3c95o?rDYa#%PTRCidbjC)Crz8CZJHiw z8|BUJ0z5&=vA=%$uroXJ=FQCe|M%w2QeXXl;mwx;U>|-4AzuqkHY|kW4IQD$aJ(x# z7FXj}L_mbxY4wuY5K*I(4ZUO2+IUg~9w8?spB5Dm9Og@XVqA@=2&G+mr6I0OL}*~c z0DBtyp)hv{FIUGRoSg^FKB4@C9T(jnHKgDyoZozf2p~#!XcSw!y9ebxl zbTuJn6}hD<&eM+D3WQdt+wTnpn(W(u{65Dv!6j++JF6$U{YsRvDje`}O&|0*IwdYA!gc=_=6lfY` z?XnOo+Jjup{c7Q$Tg|WHvI;_-u@Z&g3w8D=Epwgq#biL z3$uHjKCUWp(pfuM$8*hX)k+Mmt)f^L=U;MkpKn<@6r^KPj# zySQR{l&uF3=9|#TgyL`Pnk0|2l_Nm%-TquxQ zZM%@a6y6ge-W*yGc316x?j1dl2*{x!M}WVopx9S|{KY_jyEx`QBDs0N;kyr=1EtA@ zp3%JnCwFvB)}L#c80{~%1$(4dD_+aahqqKbXLiYJi;oRQI zz?o2Ij=ZB#5K7z=c$AatoJu1n34D>%T5jRE+$y)C1bi~TyJ{+bN`&mJukGv(a9rWA zT%~P;;orf-J z=dwEM@7;@_u!t6npNhqk9{+qa6wyS;LXel6MQ|WkjXpDf0-EwhZ!Us`)eyF`zWHQ0 z($Eo)$KvW(MDyr15%Lh6>w85gplGPSBJ9{;^uYZ1xRywWupL1(Ul6J`irOBJ8jVFK z=A#}p67ff3<1-0QqXxxmVA4qC*9`+Ey zjj%0)gb2HT$Z)KNP_mg8j|h9nN_rK+y{TxAI!i{aBE_smN0A|&7@yK+)l`w%Q_p}1 zwFpI<$cRvn!1W9u?A%-vEwT}TrwT&(7NTd=h)BmT@KizAwY4-UZ=o%*8bZZg$PZqb zBQtnu467NK-pv@A=n$D&uOign?WmOB97WiFw_}cfhc#*&pSq$`RRljm_Ubl-+PhW8 z_$xvO?U&UM8t-->V@YC89jC<~N08F5Z(wdC2%JRNy__+HqnBbcT0^&%oQj2xtIRqH zPgg89Gf%YdCR%PTDnc(s97CR>ijhs7ifbWl!sDaZu;5E1V&eo>KZ1Q_uLy$(St~@y zB3dMWNg<=m%*n=M5tfsMW6_52?CgA!MVW?fb&j&Ki7iA9cCB$e!x*R3v&q#rlpdbEJSE zoef_OM+prnWdQ%-Ot?GR-?nupbOZ!^y)4uF8$A zUUkL}F_@E~7%oz9*nC|g(DFsI7onxn+{Y<3o(!vzWAjmcP}>Ik3nn$45WRB=THri? zT*`tZERaK{4t0c+Z`v+qazr+ep^WXvmP#-XPQSHQXIk}nO4&S3oB92@48daX4G+32 zhgayf8;fiG+C(_2&1z9*TArMqxkuO9n{^th-Z>pPJ3I<+XVClv<)KE;K#b)zkI~tD zNsY|Y@sv-NT&Kql?}W!?xCZYs+;EG3g);FcWC*}}5DGS0mQKs}$>4$~DUVz3A4tZ- z(MkV&I1a(v3XvfPs4OAL7HtTsEQ#aZy*f>3lbx$Dr3 zfahpc8J$mr*V4(2;TIzOGJ%&qIVs&y=Oal^6M0r;73mVG%S`_^bLtF%Aoxbdtd9d` zIHHVg1K-m-naBOQ49DO%7%GIXVsbG;y(ubw-8`Mw4>$H`+%=EE~WtxDv6rYcFYEdF=lHIm{?97uTFc~=X**Bqc-NDB$ zw#$d=cx-kq9MLFoxI7nsKf}&|H;v@rKp z@k5V+{~|#X{3}gD$4KN#IubP6;d?CUYJz`X*Vn|@XP&cjV-2T&qchRiLiAWzi-ZO= zM*07M|70Wo3*lhpR`6$3W6<~qGStEUtg`_vp){p>aDFbLHKh-J^OcU!%l9x_*;h7; z6e@wc&}c`FPIpA)SACr~jua6ECe&m{(Gar9P|bkYp6Ppuh*{*g8?jFBW`;(Ggm%o9 z(a!ARUB~WK-(I$VunH?a@tZbWvg}9vzQMoR8`X26( zsk3Oys|dTV5b#*S#7oyvW}h9)3{~!Rea&{?qtVS z^vbjqax7OWk4gq-=ZtJr3mJ(H9%3g>9YS>~MT(|A0~v|Z6)jnon4e<@krpyfAv{WH zN7*5&_+>nQ49_za+bBskVM_(XG9z~)v125ES@-R(<&?fnZ=}GGy_yAj^IrYAPk%PE z1TGUbD1(eF`v;LDs(<@*uFpFWJa@sDw&nGt1Jh=gQsT6Tr)l#U7AWEnC6ASx%}n&B z@HIE4=W;sJM<{v4^K?{s*yY*7676;0Nk|g!#S2+~V8#1r+woW|X~!}0S!lrVTzK3L z{|w)yOE^yCSaC8JzROS&*aKG`edaf~E_HS+q;_jbbwVAd1MZ555i*4uNv>!^cx)vX zH~G@nw%-1k2I>wvvbn>U0|IoL9tbCyKSwbp<1Eh6=IHt>=n=}eyBJ`lJ_X!EvI$H& zY1{LE#5ct<2b6xm(5PIN;bUBJsSypE(@Gzgur;{)udt;4IixZe){2R~$Xej6?2 z;avFPMyqJlSMhcy*`DsT{H!{sC+cg3w)$*=kKr}C8{<0>N;YK_t%1UILW_shNceuu z0N0~`Fj;5Rfs|Cp5ZlNK2s_O`YtKiM;n@^_UD}tY5Rop@(ipKYk&LtLJ@x;wcD`c)A)pw(EK3nCjDo7@~=QF#Qp$AR}rmep0Qw%p~3$vFhL^><>&EZR7xCm=Tb+1E;S9oBz3cy8UXbnLiHD5dhI-e`aE_+z?jF> zIYn(VX(dPWZ2=TiFG2Jc6c6JP#9xBT9NdQFTBYg=r3I^$MyTydCZ%Oe=>wURY8jQ@ zPifD)V#LM5C%BFRTwrcBr5@3N}MnUgK!a^ggD%y^Of0nAN93^3@^hgAd#i3sdk&* z$);&~zn-S|>+lG?nx^-|E9w0R{Sdwaze29X@UAuK&GFB#0XMn=T+W<-1mRcV*Gy0+ zXi01VuknY`YgvIQA*f^8YB}r@7^D`L#Y9Jk`xt|ius+5RUWDKD+H^>5%aE2ZL{np= zG%{aXh3IcFM5T=o72W`%!YV|MF+{skAgu$`nrdIh)4Ey|pk+0jmq399=!eVj9&+6m z;gW9EYVtC_4(D%!4em34;gpy)({R3Kz-fZ`RUJgSIgaW8{!SW(Z_+dlDlM5{IGO>5 zuIo_FVCXVn_yYrmTcGGrd?OPYF6mY9v7yp!@OfqCQ-A8sGKSiRU0F-;7a4}y(}4Wt zDj@%w0cn40fm{Ij4h+00An%aV$!i;7y^2&9mqvaEc@R)cRVWO94#Pw6GzG%1!^7|c zxSDomKlQ#0e?#a$sMr3M0_3wM59|!i6c4Djk_W%Lng@Ree{Y_M$ITOw0^qlYo&U51 z-+5(?Ltk5QD9UM?$?2#e!?)DU(l2G6=x)WjijX0IA6Gly6|pBIYh(-V)|}#T)2a#A2^aFL!z+y)5_2dbyhs@yo2R83Mwt07d@H*7r!oxa~^Y92!IS+k| z`s5$aG(?BeS@;~W`fGH&e}~es?^E_v z1|zr&MloQ2=0oQxlC?l19!EMMDWj;u6L^xC-U)8(qP$CjUT|SIwaKJW!5-`-_D{n% z@Dx$e3OTqB`>>xlwjFEWWgK9Ulw|JUAeAQn@96xG;jo#wOcAd+M$PIa9Ibv4)#{o> z4Be#M0~YcA+du?+@FuWXf#Fp{*-aI;qSj{oAN?QMrT4 zVqIQ=QnM^G%X09*ZmR?pR92E)HPvcpR2^le_fXkHAAdNdr z*+_fai}`U6z9Q+bTaPAY>`o}jXeN+*>)a0>dU93arofP|mWqk)K@q%w;(XrrH$ z02x1}pJP16X_FdGVHl@zhMw&GA$$ZM)!!e*r^v)p^!{l^PBM^##Svs7!GKRsll2T# z&uv-iZDjg-0;#7ede)(zd3wOZXBpcC4t@j;P)i301@fAM(h~pxAeT`TxgD24Ag~0N zzfm^`x8~P3qo;oq$CZAsTRpAm>CwzcNYH>lBSs(zA)y0wam@%J3tdP80YVtJq?R-= zhnNE-f}O;%on&*^j-5Ez@qJ*&c7jPV7@WkA*oosL&faV9CVL;*E1S*Um)Td{qhU0M z1bDyYW4gMozy9~?)vJ2ddi(uL-v)pN{0V|h8=tH>=?#C?bbCibYG_sjM6e%KPpCCM zH85GzH+obXi-^D@SmRBq!(*yXMOf9Xztn`Z2_Lno8DzOZ?_@xYL_=CDf-pK8(Za~T zY!ZY`s_HRWoxIiT6a-T(I?YZ|FtuW>*_|uo&Z1dzl;So=p<8g5;%-ObEKB}5+BBg&5lxL~eQP|H?pQF&rVJV&xiq*nirDar`*z0uWgJ9sXes z*O}4D3*3?oo6PREHZ0-`m8K0!<7k1o+0%wOp2HJMhI)ok>@15c&0AGa$a}F=ZO@a0 z}cn?HN}Fn-*)RJe}UOq(C!v? zX}eFat5NFwT^@%jbcFYuCE@iOyBs>uPwey3c$ZD-YF& z+jg%Mt5=u$kK~PrrJiLx=HL?Knn%5*Ii=2?6?uH;fK#=u;Ka_V$sV3-*jMIIJFJ|n ztX+RXfzcT-`Tw1x=J6nLl~}~Y#SQyuu02{_}PIq&c2c=9{EzI!84Og%) z(r7(YKfb@nwa(*SQ^;4CCwoVlqHP1+CwqTK1l}eUIM%Fc8t*S!*;u{2et+BU?xj5= zbrXCs8)x0o!_}@*cR{&B#O3vpz^zl(I{J@FoS>|YH0HJO8_g)j^4%Mo+xw&GiTI6sG-1;)b(T^6+=9U}%hia#~);fP34v*U; zSe2m-#iktI;^YvPF`p2PczrePp-?cSj`}p0{w9JMAwRuV1PiTpJ&UkBL+`=p*q9a$ zi;#yP#xn@6Ip4D<6pRG-Q5ToT7aTjLXZHpNwc|bNvKv>m>S@JUJEsg?9q*hn za@n>0&l@-qJf_w3XpyPl_$_K++^2%nSpecA>Ge@a??OKIwGX;5tdhgiRH~_M1Yj=?t;% zI##ag^RWyGSXy2YKgNHI1%2!o;|&ICyncT)!g|(_RZ#n`MH_8dfKuw{W*S{rJ`I25 z10ydsxlC53L>g@0|LtIjsgXm`K!+Bfp(AVq=wE1l7E^W>OM31DV5SKbq~_OVW-RER z_WHC?P5aDrXh`)%H4^Hk*OKW3Lm*|F=hnIlVN_?Ie9UgWNpXM3QDsw+;EGInX<(Dz zJL3(6KfpX>9YluB&}RV-_OSgTRV0KJ3k--*ve=ji_k94$3)$`mn9%&hJdSG}{B8f}=+fme5K|jiE?;BXC#(8{A6U#=;|ua2vwf@^p+0 zuyzR0+*(Pizn6$$do+3wqJt$5rP22psRsZO? zN?V{hp^lL^pm@@Ukf-`0No5H4B#XAd7TcQCY%mh?1}0mxb=*5Ut+gInSYz=HZR8RM zy%8o{0D=KuQDNIoedO4GTpX^L=?EW^*v zC1vGlKp9PC7EW1U20lcKDt&6}TifzAj$eLMGcx0A=Ub?9yd)Ho`z=_ z(`Sk4b9Q(plZrR$Dt;j!c=$4L32Dcp-jIe+SU!K8*0N$qhL_-FiFkh{9(c_^(u#17 zxOAsi=mMWN!z=JLGVAHqmIH9k| z#3s?@oA50Os^HrhCtwpoYx!b!vk>}axWeY?J2X$zJ+#ULg#>B@w6JMrg{g-(2So^t&0SX){7k22$}^$Xc<`#Jvmev5EVAnz%o(!+V() zSe-7^ALfGqe?-1%BIqMG*_cVT)P5QD^Cy4srxth%{tTgbLGuvdFDQu5!d!&EA|K?`Ll0sWgv+FbME!J_i2XJEjRk%Ve~YjqyOOi5(0Ktbfo+7pXDjpz0Q()KJI=k=d5}2KAnH$3Y}3 zF_%c9S%M0tY)MzPp%s*MMWK}xHLAypGTL-Sq5WnRm40DH911a?aVU^T1DO@oEMt+b zC|pYNFUyBqrl=(u4xJliTw!QxCAEJn&Ij{NXe#|)j#w_k62{Ug!P11LJaM(S3{92M zUgu-6u8ivpMU~&|HkNjkMhu)-$r!AcpoHlullZkVRvU_{A@MingOp8Cbu!i)ifW*i zoASZJ6m^43IqlAlSh}!@v22!LO=9_W8%o(?sA(&LWh`;qNafoNW$no9uNQw;R+c+Z zBC`TLj7*yZ%d@GhUdCO9$~s69x8#GIO=S%-b{Q(`rj|YVU}Y-Xbz>^aa?MIySK%JU zwO@i_rZ^i@TwAi5_8RKjmzfq`@obfGKOSHL9VCH%&kKTBM4Bn@PBSt?2dwG8vl8U3O;_Oo7DTVo>Z21~iw5)9mA7QVBcPV91Qek=50_o{M8&&{D&uMIGuk|254@+1el zO&V3hTD)Rk&EFk{-;mi;5X`Ly*DO*U>R1bEIbUs+)^A(r%!r zlEOTmkYs$21%onvo+5u<8eoGO53Wk|jjUu$4FrObk}36sR$^!;7a!6A8uaHT{YmFX zCF|POTQus=CjHq=njx7s8cD5@)EP;=ku(^|CL`HwB#lPWWF&;*7*Dl)8NZC9%yM5O zYjQDb%A!{?rhAbEtN2w41>&E_qk)Lmuhn>hGg^2c8rbV)%kqB}n!wTE%-*0U81!i> zEs3J?;p78oyqs3e*YN8Sp2u&n*&5fvTF9&Vyr(qds>PLZwvAtL49>M0H=1QS+a{ur zIfh2lo!5pC@gg(5U@*dFk5=ge{}1;z8DJN_#KG6_n-X5aZ;=nBJ;vcn6+_0$_-Z~a z?kgls;tv$aT^N63=*KOM&epW3a@vC98oNHAneUDIN43yiX54f()NhT4RDz^@ywExr zQOAz4O~lB{oq>QBY9mJ-W>>({U@#gQ({_1Toibo(dB_{~Qe!t;04g(RYH0V&sn}pd zMK=AfDLMmmoY6W16F~}{=l;HePO2OQtn6QL4zjyPvbTTlQjUWre1lRm2hCuI7O+!w zD{M(rZ`G>>WYtu)Evahz{Hh(`28>sEDBqTp-%0uQr2H<*cfc(PsLo^(yTNWZLl<;Y z^_x`O4m_~iL$Pvw)dlE3$9mxR=xG9^=LY;fJxh!x&;tXym?A+9>h&V@!d~jZMzHeG zW4G(0^wNKiX`&B!HcF0%;PMIiuFCb57vUhnML5Jmi=YTsKsp0fMYs%7i%Bt^I}1E3 zw4LF4S)r{(RKyq@xeRJcZdK(aI04l6GzXVqrp2t7FTvfc;1foHq(~RxQwV1ukG*{s zsZ>74T75pLo8>$_qF64%V+ap}Mahl9lV?E8ISYR|{3Uo1AO>Gma?iup=|8J{H3qN6 z;C01v3BH#=dFwp<_&oe(41VVl{4p#2bDm27@*?~ltNnQl{vigxiow5LgZYmb{C5og zhhUJ)1cPD*7?fgYiD6y>1|2b662n3Uvpgfr>P#@DF1bs#q`LI6{j}v0cH5 zGq6grUB-zPyJC-__c9)9aVWAvDhQs1HDoF0F{0RFICBPa75OaKspvI4bx^Tgz&l=V z$$JfK2bH`F_~CPN6#}auQ|0k3dcFhJ_rZV3j9BKblC4@q;6ywo!i-)Em$E<;zMopyGrPbwdJTCUd0!|zHme19Yp*TEg&1$N%^Z3oS0I2#h2|UETd;N z*q{bnuo1RGEv?2nI0E(Hg$9Vws=S*#)LC*zFOW0(C2XO&-imj?Hd?9M@fWaz%Y%QN z+-hj&%3&AR3mu$F?|#_LorI0tDX7+6!ZcVoH%Ryqas&>z8-Il#B}ZVPzFxc&KSml| z4F~WpDzj2w3Gb$|Jm}>r@E$5N!x3&7ew^MU*vhrwC#W`;`3L-@;bOSE=3ETD87{_f zX8V$zSub;D_-Xu1+?mx-2j-Q8$_syR@TC-2wp!;c8x0IsHs@oR+d}sFhf4W^M=UWP02VVg)|R?7TYWx}(j4&9nGbRM1|(?|?`Mj!fJcrOmPodB5< zEtTu%+)HLOL)R937{8=*wcsQ4Hm7TR80`3nj{SZ%vT^^N3cqC@*+-MfKB`Y1eMA-i=R*(VcZpGqeCB$0he z$F9ysHoh07!f%^L_UUA@PwRm7H$ryXJhIOu$Ud7)_8B7ktd6}a8`=1dmkPgq9@*!T z$v&q8cHIcs9rMVZO^|&)nJn#h_`Ht29}lGYhZw$;in?>2e|RC8;|qV}OwIT*ekG2x zo-JecdnE;9MG^+4IZ;|ax5FKAjJi0N+{#z++^ZN%rIYNga?{J&pWF;Z8k&XFUG^JgDa%)bmf#R{Xr4e?DIS2E3`~-_-NJ2S0_M>G_`-^@#K9 z(UelJq|~oUsjp3`-<(q4nNr`IQhx|XSRP04byE2huEJW}jGceji-$e*sWS2M8za?5ar< z004O}002-+0|b{SlnoY_fL<~Pm#~*ODYqMwI7F&{l~?&+8^;xYv#Zszk`M?mAcHXi zfhA!fgTaSzNF;Gsw!nt~2V#=0&vsa{OJBJscxaO_A=irKSbMqJDCz!R|VC=F&;L`5Xf z71JkyjFeK)V<1l7;_|90YPpOwMu1CP*Q6|A{$u7QM?z$RCw;CE;YgT-***ssVSU8G zxy%uE5XTi958=r25q1>EIF92~UKe3wg>i;|$}JH#iDRTb!YVk1>=9PQQJf|0x%*DJ zJz-MU$krckpWSC>T%7Y<{nChu%(#d+S>NRnT$$bp(z=HmYI22x$;hy+EllcLIj0~E z?)Rl;!VXt*nrAxt93i)f5nSUfCmZHQmD4DnILWbhjyfDnd`NSdTiX2>gA5mH;UlDf z$=ks>d&8u;pLKYr2bYdoImd8sPpE~l?s0GWJAxK&$k`lX_FrD^cVDVAGY1z#4ws2= z=8!<@T~WeM4?nOvxc6`?>$ik@?g>sUnp-w!mxpqvn+`U)>IK#tJ>?Q-tZajD|EB%o z;l#38-0<%mn>#%`a#XlDq^&LpBF`~@$2La=a*}0&InL<{>>aUk(r|N_>_5)=#XYmm zU_wfnTI;(;nSp%=ryI_XW>4GQ#|FBNrzCr_ZEZQ2LO&aIlT665lySKn?gma6nC}Vo z;Cif0h(CMZxcibPLfV>zp0eJ}GcKRQF)&4})8k3Z+i)&EuC;|jzH^+@ zx!_+ukPyR;a|3O4tp8rNCv?tg;lu&N;mu-RR{bn<&r!?JkhLp#dAV!OMJ`w!T+Vu- zha9qUuVC9qcr+b9Kj#wLTP&P^p!JK)!Ng*Jw#|Mosgqheuh~0Kq`ZQcw{uL#Ouu8p zPxssGt{Zd?ubuAkItE#h%$tXX0$n4k@q}rZIQr(#^7b>%urE@W^fWq8!wij(zxBVEoXCio>lE&o4f>#800xc|XsMPe9#H3hC>*oE3Ah8Zh0Z7B z3_^?NFwHA822wxtV3dlDlh@XA8qEmZLWFzgZIw>cfI3bWoGpoJgD~7haYYE!Bd(C5 zM0W5Ts1e7F(zI$kd6*&~WN)Ucv54`^I<>>qpM)rlatiBJ4=v0G`W^w6;3B36Q>CWTnKevLb1^+rIaLoegu3^_eHPSx z87?oSh?*v;1o}J`irz}(Hb}qOMTb3AX3tGLtb}Le4 z9^Od6k}IAX)pLX&&a7w0s@DJk7DY7h4Z*1r zl3v4#l}b_U+ucRf8@0hl;6WPfqsFa6-}k6`RaE38-TujIE0Rv5JbWCZl$T35Co4&M zS@;BtKWUtJGJ2v0uuoawVfZxG#%#Kqo<)+XWxGA;RCgVG7R!mIP({k{dn!xNTOlfh z!HhqD0-vXjzffkmb4u5={1UZ%6e-BtEvw!1Y^;N?7`>0!~kLPX_eoEYJbpLakkIlRSI}*?QN1SVk*+Pk`^j^LP^JjpD{rNX#jkd$@$> z*Aszx^@^I_RHtM~Nya65e*6G_XhF*t2pq2tvv8pu+tr7$j2~NI5B$W~#PXlZ80IjH z&}{r%zh&tLzqEh}euc&8rU!;w-`xu8qpH7w-_ncU?=bO^bW);+t*lD3xwV9pnWI{N z^yZgFa0_Bartbw|Y(Wf;cibntcOLLEuq;oH6i6`i@!v-S8)Twi+662!;UknHPrf`=4>n z5qxRH7fdlesmp^nQe(#VSed&X-JQ+&T5v~T6poZzn#zH=t6JjCwqQA2u&nbv0l_?s zmq+d|v9BxI-wAgW(okkUQEq>riv3@7oe;_Xiltd0zM7{)aA@UfGRL8LeX(L1?54k*CD|hHCap<_k;boLv zhnEAZJA4K>{0E>6%=({)i7j|d9^T;3!`p(UEqJHXl!x~|2)-N8wODxlz&3pNd1%MC z9RZt%kFgH}=X>lCFh2t94R~mO@diA+*!0P5_)OF1^6*9U_vNOq;v^4W+lKtJ7>|X& z;Qd;c?0&~iaHj3d3bgkzP$zC&%=*@w&ADc4v&;L zbQ%sDL)bGvt3Z>7Uz8hnS4D%|UD*0?p@;3hfhQs8+lF8Jo`T;$UZa=o#cbJiRw(vz zA7+Vzzv(G3mddB2aZ;BN_)YY zMdbfP!Ci!|fuh#ALSMWoPDFb9=)I_yv)JdubpEfX`99aW|jcTfq9xpxd7RYzhn88Dhj>;t{oj$uvA2Q=@Fy zZZ=JB@F+$LH#s^X&OPhLoR+|_YYW>eEYngKn|2-E?%LLL)g_}C zFJEPlRyr-y+%(kQe{8p{zU1ol;`=5yOOxH5_FZbPEcG?oCr!O<>Rs2euiqdw3^ZDt zt38HMZ;h|sZIH_POl_WqWq+HF2Ck{A^Z1t7O>ySB&T<1AofS^$(g}6<^8G7$som1o z=_=YLOMyoFuC4uCbk$zhl0L`A(JITOMi-m?hu8V{jXOGy9&YzJou$hRC4J3{-GgnD zPRo$XYm_cy$Wydcmac<5MLjG}drux;R8wm;nYzk7Qe(8Yyk)G_Ab)MKSlil)Yub+< ztbyI^B~pp!WPRzOcBjF~C;C@(#OkYEkY^R_=B?`F)eh4Ndpxv!<7ijA%_AM$6bfUTCW;b*!Pbg+%!I3?W*H_YhWjDbtmKQPs!F>IQ3uOyZZ?H`59#AhyL11J($YnS zq3!U`a;bFJ$$ggP9lN^sT0E=R5I@{mv2P_`ZZ}mOSkmb!t4BQ7iWu$oj|C!oVu4`P zH4qq|2&%roaDPOJOz%`;M`S8Nu+F8DsT2t!isEv6xPD0|Bv)5B6jK5r$g`Nqk(W*;2UAgsSeJ4EjxL#& zGg;EFObr(>DVg0aLax#tnJ&sdD@k0Z`=AgJgnt7lr0k3gnI zCdmuAmKWfGQ_g_y5ZxVXf!+mQ8zN#GQY}nDN}I<2~(^7eIy(d zg(VOUxqkt%9%UpJj!e7ugp`Si;50_|Mew9XWZDcH7nmZ`R%vt~ht2_+I$lMd=?$Tm!1JOc;0ESCkPn-}7;ISaM@FpEFKlM60$!H6iH)elC# zx_^L?|IeD+NTFfjfDxqYh1el+sgrRf2&-3R!bfkII~osY_)}t;eKX3Zm@iX+N!Dk( zH1y4<=*Y#;M#m^vOh;*aE4UE_D*7XgDCk$8f^c2E&a6!y(l#41d>{BQ|Zcg}McslOWw32nAwD#Wf8DGNp)} z>*=*t%z2#qIPx-|ZhuQqxM-74g~t<+4nm(i^TY|2dHf`+Xwt8V&~@qb~z zg6gS^rV7+M(6TAPSjHIBjhR9hsLr`kQl5!}(-UgPRfTPloY18Ng9Cw>3gzykcUkG3 z^lm737i_GRKcwO`_IlzW%_D7~y@%dY4!!S%55^TV0&NXhL^&Yqjj0jg%N-L@@OUrX zFZ}iZAfx#Go?wt^OO7;_o)j8U3x8#Vt>`SYK(x{O=>vlE2L-xg!eI~E=s2AaPyY#= z2cq4nA^=32r<7nE`&U|#E6P%4>V}k2{0iOSJ+%|g$3YmqkrGfZ^e4QLjygM z+&bFm4>TsC{*NN(-7KE|WTPkONm11QqVLxX{9ws*V~vilw1KC zy-cqNp06UE*EWPlYk!NF=P}7q8M2tL0ZiBkpElM8Lbd544t8b?&O51)xd;gM%^MZ? zW~+rQT#O71hz_X1(XOBpO(tHwQ;4Xe+ArhqqQk}|yvRyRxs>UOh603*^ViHe2!RlG zwp$@YInWae>jb*KBAI4e0jpPXm6aB8HBf;W+Nh0}h`|@wF@LXcHz$Vk1YovHy+8T$85*)#lY&`66~AB}U`J$-N7(h-_a|7{M~H0^IThfXwya2)m2k z0IEdOJH$L$L3Ey?|Le^A`2t%`!K5gp9#1Y;GUv!Z<~2Z&Z_bzom9-XjbDLJcCgXvK zYUA}N;27Hg7JsgZU_7c{)JYp(qLq8zh`L!|uba~{qNC(?EE5ZN2V*;jGr^d9gI}I~ zlqNH}-AZ5f2ThYJEqn!g;KZqbdR&-0M<#+8d+`-$>*6g!mu@VSZZeXxi4Jv5&b}hw zVG#Ij2sTG31sfaJ{v9F-hX6M)OtaU-K_jOc~>#-;N4I( z7geeN$~-vxmxbIUn(_8pcn|N(C9v*1FdAZ7n$PVzldCLzfUkyLv2ahS>%KGxtY;U` zrDN)ojSul*E5v#YlOzs8bJew3KG}7Rhj~QU$gdqhezYe~IW-%OTWA%B(q$cSs>Fja0m<|U)5NfQPv}@Ed_2?> zP=kJKB(cy0Pg*fElDjz16)P_rJujk@U&+{~x(e(oUCF~HZNhOY)w1X}N5T`cA|t7k zrA@R$E7Xwl8opN4n3MCV*W37d{nKmbf7)Q<*MAG`mNNFOM)8Shs$nkU0+Oaqr#t4& z$ZLcGY01WK(gYW6L}Tkomoc{KIYYJBD<8Kfv#^^8NgNLAB1tAJktzG@GZg&&xFhKWw2* zj18)F_JfT-LN|-D_fbg2_Y{+vvHx7+8V`g}{Kg_GHlC5p7I;IBwjx)%H}_zJPcgQk zn|Njx3&~HYn|U_7S__k1jIbB^2*re;r+-D7xlKHs72WNdtYlCKIED^J+(`O zd-w?!-8Da@wI+FwlQqJpi>Zh|$yA^BRKOPq9aH_7eMGMopJFO-hA@{}bIP+8{xpB4 z@E)>XYXUx(^VEMXmB#W57XCbc@xr#`IkrXj@RzNS=_}%tp+HiYO)%KR@Yh6kz<<`# zq@8x?Tj+(dsExnD-xN9YTQ=$u1!E?D#nTVcy;US0iUr11cW3y7 z>fZw|%lsq6(4Kzp;B0S}MTB*J!aud}kNIc9f(uLa7$?NKzeGS~vyASJhX(N?^RE%N z!{HNy;m&Y4s457K>V^ZE7EO+W<9~1YcUJxl|DLG=={>4O0@%!5qv|Jkfa=B^XLJK8 zD!)#a%UNmIq$Jcyx6Cdf^PkX|42Q$9Xe=U5((d?wI1bFgw(!{?|Aqf*(cuR|YJYruSd9z{aEsIMFbuO-!GCgD9gj|8^M*odMB6xu_S8BMjz>n+o`Cq~*sWW6Zy*`~u_qJ? z#}pA&AS~-lnOI)~L#5h(vUo#5$mR`=qLV91{cj67(I*@6GgA>6s9YRxW3yf^PS1(? zMLbKi4L>h!$8!}i^^y;me18dVZoIKL8E!g5yG{vG{ui!hZE%?XjjK&3pxrb;lw{Y3 zu|e9CWYUdg#rc5T)ZB80u6iUVn_8VjXQMssrK`2?GVP;-nDH{6EfR*yFi?h1h+cR} ztk8}%CBd+%`3(7U%UP{cq!%#55Ng^0uhH0>7=wcKD2*kBpTj!z(SHkMeT2ebon(1L zW7$I!Sw?-7qVt6v$!pX}jCm;rzVn$(%@@m`%>>WK=|q-N%O0bt`3~{tQED0hNh>w2 zDTVGLDbKa=pO~=m97#iv>AKVOdS7#b-f)&~ViFHc_&rYd5uK&?Nw|DSqJ7O6{BVLE zYMwPiH6$hqLi%xlF@Hp@Fy+NGk(S9u%~*ColXPQRw~wR^vmZ3#+e*RuE?Uu~$?!1K z!oQ;Kk3+1%gyENz*g zXA|`K)&zaE-8e&EcNi1&?YpVz99=e)eEr^O`r)&*1aGMULw|yPYPcT`JoO-%A0z|# zd@+NMNzj=zJ~JskrWBw1lYGR0QSftCLyU$>j*lKsA27S?c>&(d?k3Xas< zpCvj^M;-E6`m02z&e8Kj=jer@@_(GBm&*U0KsGYtQo&L}c#=&OEaPd0ZNkq9E=zDl zf)`^b!Ano`ihrkcea`VkL#?N|?y0nu*OB}R0!-%BGB>F6wTuH}yDaAFHH6hpCM^n5K*~1J< zm0bvPS-2_%WjvkF2>qv0kUlRU&5gV$iKKPO5GzWmIe$M?U!Q@Iq7+6%Cy~rbCzDaO za)#FlFy5VnU4kzbhHpO0n-Bs`aLhxGq;0gAq<)#*uZp!a%XEl~TgT=iElIu+$@>Oc zK{sZ^X<9inHm!VVN;z&xD#xvwa@fTrmHRzJ7J(MiCDU|-=WF5ll|wV!sf7*qAZ)k~ zVZ#Fw9Dlxlh7TrKIm;>l!yO4elHlMBhZ7t<%~Pj&+NYc9x<38>x_;f763eJ#&YV@rZRfWYm? z{lW8OMl#`tfS%R_f6QS#%MXhX`}nD3aJ9?{F0_#^Qwu`q{>=45>EgPGYP6DS0K}@a zl7A{Jw2ANIM`55OO75ewGKXkNlj5}{b(5RU@)@T2btW@Q%6t=era9fDaoWn;a&UT_ zX}+CqpTp^vOis6GmF9YSZIaVhpn@6qLru+((REFy`4dfN_&k2kG|lj5XZTAA{_1(U z;W3If8BpDju)f~k`ZU$vMXuKKRNHP87=QeByQ!%Od6B=H;O{5+hco>1eGgIzEUP~m zW+SqS46nj(MiGs)6bM}c(aoCdH6pRlFxhDYZI&On97S~+gPo5+gW1OB3gEeif1!E$ zP&!f%X{{J%bRK}lDS9NS=WO~p!@oMif0%EwOyd`28{f)*7pb1SRF@7`gM;T}DPDDK_O}eu?JM+xUGqdgYAD_Pfn8Xu?q}VE% zZ!Br9yHe$>g5>hua14yW%2kTo=BBJV%Gwp?e4(NwFRG=gQ&g7gOw8oSmpr9->3sw5 zb*{F5v$+u1>|8dt!(VgLa?QMu7PqbUykLtg!^QuEilLEG4Rem6iJ{Gp@=A<*I1I6s zwTCZqi^B}PVVMk5$mW@%Z8?^jV`xaFHyD~`yki2bNEnEqErB?UIPE&fTDf^8EvH0j zq|$yFHg`&~rEQzwJ6J$D)3e6@R%)?q)w}d<%oW`!+kjxQC!`tEOM4s=m>N~VG>Y`?(~pmSq+%pnkRZ)GorcIle_9R^*{q@c6FT?l zNV7<56G`9$I?;vhz~LH6t!?P)*&`A8!*GGtgnx}*FB;QSk(G9xC9RGYKSck3W~PRL zaDZOlC;-sAK3t^xhqRCCIy&fZ36}{?qdpB#lbLUbeMD;S5M!H}16-@&`kt4`qPMc< z6Cx##A|;8A3A$hM@*4aVafl*Da05333MMrgN#hW=HoGD<+^xri;lp>#6BAQMOho)5 z$1-0rbAY+iGBJ&NznPf!@@hRg>ZKX9COTHb{rx&AMFYgfpwb3B@?uZI@3HbEbDZB0#Hi_2#(O0raG6e6ge%I_P;qIfA@d{h|>ZSo6EZ+8L-S{ zPFw6^b|eOnEhHh0jLAA_n{Lmfcayf8=Gq?HrfKWA3Esx-Ch4(lwrzUf_kG`Ynr{2P z(MSd)v|fHcH1mD)-uvGBzjNmGH$L?$0GuZbfl6&_XW$@`9Jm%w>a&qhQcWK6KnPUa zQtzk(Q8l(Rf3Og`rG<4KSlm5Hep};#BVbR3)u=jfEg9cRQ$n6VmBAi~4=iiRh#HN& zT@6K%SRhcAW$ib(2sF=T*pu3J6weu0rmN-1PE6I)No|Y(7dq6n6yaXAa$I_g`0Nej zoeF6yCv1(yEhy!jATW~P@F?7Y>{%3upV-?xl1Th=e|4M3i&x@o^DNr%I)PU^?$5Q2 z$YqK`L^jBWd>2SNi*g#dk`yBdQk(R=dO5Rl>bz{1LZ5M-zT-n^;J~9N3BQsbLZPpzR0b* zRMwNwmbR+roueUbdqr0Ha)#fS?OgDaX4dYR-dkr#XEh;{Vokp+2!8iv(q7FuD`ns4 zmVeMz>r*P*Ij5lYw{&mM`J{brhG&M|k~GCLe}a6e>Pq>_aCF8eN!kp@1_j4HsUA%P z)*7eFIc8vQMB2BOm9XmEElIXpS?y3zNyTVlb4jmiQyi$Cqf%u?Leu@WgT8f+jjIkN zv^tbpwrDCZ{Q*>A8CD>wM#eV>aFZM$g(6a ze-i7AW4v~LgJbzS4llDZ9M-H=brq}L^rCe{8E}s7&Ma9f6{h9ZMu%&+#L8Tes6B+U zrtHM7E)aft@ZL^;{ZI|tRJyNh4C$ML=Wp1p%)E?rlPetCa!VqNA+Kt>zn-(U*ATn1 zO8A|%^E-VF6B0jCzt+PttNVh}+p|6*e{sR(ZJ*K`lm+5)v&{M==Or^6L)uLJtgO}! zu=ct3u7QS&yVXLV!%f)qrmymPyK+wAi0gWr;w|Nb##-VV+M9XXimW(gk#mc+`BUomb(R=es2}@f_iTR{da(e`OekljVNrc&JhcuAL+NzIMrVJ?BNnRHL{=|_^an>HJlbui_Hv36f3`cVb?66n#EtDE zcjlYM=9a~(y19)BiEFAKe{A=O%oT19Q(keiE$h0+!Z5QQr?eC#FlQy}j zj%7K!x+5ukL>x&dZ+!0GEU<`y2e@9gIisSuPeNYIF}P>rQKt4 zYbTOi)g#fAYdNx)h-zlnxu)v7JRnusNh%&B0#Y6+fd-Az3}{hpFY}XaEUo}DRS~E= zi-3n30!$!9ps|Pye-{r<0xaGTXfH;GT20~}4~+zPb3vdl)78T9DD7&Icnn+N{*)Tl zLor6Z9Igb2&0#;p3?r1uyF`Ka# z8?y0#40Y_rd^*ERz}+=lV0swynEiYqLA5~+-;>ad7diA2e+psmy3XNPQ9uxy)Q4)# zEnHrmokTlo3Z3Q}v%vtI6QCcwHt;~Vh<8H-stc-yGlyy8U{?{nJO!C;@HV(W#a~3N z)Y#U_t`;NU>N3rpO2-U0d2;|f-XWlmE2FcgN3XFUPAlwH)R`HGqxd3IewP?d~&ewq0jeuna=xgYSe+)P3(RnPfOp38W0&TDa%cZag zE13HE1R3nk_LL1ep-TV;ZlLPnXgsEE5vc7d9Q~+YQcK07cQ8`Ucje;}+1pF&R8v}} zj%QHT00LLujIE%z3W~C((%ajSyVz7R5)*3pwz{KX$#@Roojti}l!%Z3Dul7#;5k_L z3kA&ye_be-2HPTX?GR{r6Jj1B1jKZ%`WD6rA1owNg`&!QVuRZd72y_OpE*~M>g)z! zSQ!_<4GGNjNNRE~p&z=mySf%jAv5;GA{t>RB_SmuGlr)fyTxNh8{DBfx#0j|ACJT$ z`laHs)@*PHZx^8zp2u*CYOx)C*N;U;O=`#0e`z{fM8FfU!8_oc^wclOG;<>W0;+~!zAeI%8x`(-j;a?0{?D!4;A}$r#Q2TT9oq}DCak#LamXQ9&e3i@(mUG ze`W&Zrv@t?zLi$-Q@e)e-zUI(;oE3RUl%c@zk|S2Z{FgH&1@*O65cPO)bB*)^mv9K zqd!*Au6(PIu+5?-Ai$@Vz)nzFB1<&|I8? zhwsOLI3u)p_yJml$_f7wf7X38N=}4yUDUS`(5=6U1#Gqmh2hv= z7vR_6H!xZB!-TeV?W9&V_$>&Ce@O7#m@Hv6Hc7ib_VN7DBo81nb4sA|#P__+HV=P@ z0(aFE7Tqo66*eE=JMsn`EVO?De@fN(GfJ9GTG}D=W}yQ4{ul6y8ZL?l>; zXK3*Jt>Jqk+WuYy3;Y8XTNmvmE~6;qb$CkpPw>xlw)vMrY8#LLjZRXMK9o>Rz4evY4hp5kd`zV>=<9++jDBdT-yS% zn3nWM)l`a3qvCQroeXPJ5&F!zlyUu9Bo#qoB^Ha*;EczpWFs5`u_zu8h;7HwC)p36 zAR{6cV8M#|i-4NbK@9s;e=P{~6$YRDC$2h>ir}^60StB@!TI}mPvF1s*Ou9bUKqyf zf8##`J@5s*ayZ0d{T1k|3T_q-)nIB0c;(?Zr>5aMlBCu-)T95^o!8_2wH>Y^6o>p_ZrmUD!aiR z!I!chM#b;H4Az%{e|-e+3O<4tf{w3v2w&~^+9UY-o+J1s$G70k1Ne4y-HS)?fg|_` zu8-imAHvI@#`9VDBK}qY`vzPF9zM#$$G!ke#*#9iBiIK}{|~}d_|P$Q@8!_F2b=JH zXj#TvH?t^j8YurD{E!KhAC09@I3GbRD%ljI>O6#xKY*hnfB4ix`0>;DedHK^&K!QP z!lzFo&z_EgmkJ{PnOs&)pjFfc;Sn&wo`>++!cNZ^D&!0mjASFnla0Vn6bK_U?8(CD zClS&NbDzn~I)1tsE1P3|4Swb{4wk~%a2ki7h0mEdY~qUgx4B`W@uP;pkN+gYiiTI< z7w_j{ga_t}e^5m%XCT#_L#i2GhhKV()awRPznm)sgOBUUZ{jh(Q_SL$6Sd%1aPN0> zwO|BS^kA;%v%nN91zb)u4wYFut=aFv@0${zGZASq5ve+kh~p0oJU#<|ln2RK2e;%7 zZYc!GALpES3X(rB=E{cm+$WJT|{@1X|iuVqDml2>EJ8Yd*fO@<(;JOL#nz1mn zLL0Q>)s5E<+<(J3vK0OgucauIs%=j}89knULqK6vb0dt5I&Pp~R0kuOjb3AT#;7$$ zq8T}3A%uz1&WuntlGiBbMk_HYUB)3sqH+xUKTt~t2=^{Uu#A_T&N)4QR%=rmRTzFw zZcDalxs*Z^3Jp?iD5kNswHmNmD6P>zQCc+KH^~B9lHIu3v{EniZ}<4p($|gm>48>S|H4Uz~pguw_MlQ z)-WOvRYQTP$pK6N^QAi$1Bu-8?-WQ&#W%GuH$NWLtu1YtE--C*&FjMt5!9+IUA6Ei(b0o*iFxERlIbkc4=AYbRTZ9hDM`d+EsyUrucjYR{e;iB)x#!GR@+1 zp8h%dAJ4ne^Bu~=bNo$#;mlzd+P;hTq-{~)OfP(j?y`=5JnoTyLy2LecRxwB9GuUy zM>T{oyiJQIEOAhK0w-m?D0)n=DPZJ5EgDg}s_EE5U8?sC`@8Je*_w|h-E5V!vSid~gH5Ta%8eZZ zet)-DI-cL78>Sa^T{ih0LUzYwePtQTxvj%LALci3gM zf-AfUBPrW6hRylIM0>GoK10GeopKnRBGdeUvc3VW&SmvF}^|32)u}wXeb^2 zMihN~8#BwP$#r0BB zYvXl)X|RiYX%};)p*P!jduV|m*ll|PsyjBP#>i2TFuYKVu%LkifC;&hsj zhRNUzZes*bxN?c>Bhc|aJ|N5+9IfI$9SIi?6ni~^TD+fNi8We`M+ z;9EYg(te=XO9u!Ky-^l_1ONb9m$Bj%9hcA|UIdqK(m5A@RNYeBRuJBmbZjJSjIa%u z7!n!(Kr&eMP)Y|1Gm=dBlMA*XnWS_wGM0%zmVzYOFumw2b=sL;^r8>Yhw5}?!ZeeR zi*vp`yZf#7?Ag^n|Niwi0DKKg2$OdILjBnZ)MG!0Oy|l@0+RO9`pHsV%ezpIdYATj zlmz}`Un_clYxP|6We5}Z%zAikxfa5LITF;s9=JqRyYZ>(TzFP=6WE&wtalsPA>tni zhO5_TFqzwBJ1HwWdt zr$2l%$cybpN#ovk4^CukqHs9%-8yQLfLqI)fnx4|5fe)#l(_L$aVCA%kXTzRX}aQv z2hT3jjGIv@a*5{(Sy97hg-yqh`Y%^d=)c;IUZ!7?U|D`_fV%ibcq+YL<^7C z{B9>|E@FYp7jp0GXO(c|m*9#+W%+uSv+$ZVy8kYRkRAm7&~$o%72F>85b8@N z^#yf>?b^e;?Y<*6m(5Sxi=Kb%-3J*#{?uGf!URIHb<{jHcghIa&jOS;Q!oj#2pO14 z!8oKOl5z-hU(NzSigVr%VhzHRQNrro@!=E`&d8X88JLaZ&mp8fCXvUv>w9(|A-D8@ zU<4uZk~M zcVc^?bK^zM(0<{B4iPlZ^CK&Ae2*M6qnX?HT*tHby@5|fzn{Vc0tW)n4d@pjfEbsM zGzy)ngh)8{J7k~!3HjehMkvvqy3<2Y8m0*sY0==P=^ezlLJ!j)eNHbx@qc;&CIy6f zSfDfz9>bGSK4scDNJ52hoM>aT#1JHk4smOcaYPyU*GR`R4*mmBO9u#NL||z?0{{Tg zm(gFAA(udNHUyWToi_xR{MtDRhm6%Zhm6%ahm6%bw~W<1vM7I9TW=dT7Jk>SILJ$E zLzNmk?E>|-K+|To0kTcdX4^-DnxP~jGvt)ySQdi*_x;Wx=ccu6rA2`Ptsi0!FXxcw z_I-z0UR=zG=wGJN^abfk*Neux=y>q0D&DJ&jF+1Q&&_!FCH~Mh20D9Dx#E48(_7~w ze!Vu9zmzTMrM-U*=cK$QRaK;aY0a&wu!)jnML|b$Ybte7DX*e&Hqg$*Ed^I=iu=ac z4H>(3zLwcJZQbrxdoqzsU>S8=Y{{AeW6@Ege89e~uF17nVlh@b=r5ctypEbe^lcGa zufsyF@w2AV*{6{wOcAR+m1e!x9;Y-4>sLDNw6;{4l~;d$FSe0u<9@uq|K?*Gi#wG% zn2qheaTXF&uG;m2URl~`tG%k`wA*US60iaXG>~|x1Z(t+E|#-d*xRV?=u3JcvaX(7 z&zkHOIK_Bz%k|9E4SYaPWNcZux^^}>^2y<(u_hjw(szwNGUfHUpP9{;OM17}FgSZy zhafhqU_yV@-GIa*wQBy!=CzwSAplza)tpvv&q^1n#dgdG7RF*)>wF1=lytUZ!zfr* z(@sgyz>-ksZ#Bsx4vz6)wmiHJ)hsY>y=ymHaRRK-AiVuKTa{QXhu<%)wuR;xjB=Ak z8IQ=QaT_-7_o~+APpWzaYtaXID_w&u#^H@;*BF0F4iI~GE9H`yzr3FPI{QCit$qm$ zKP*msFsyw*AZOic^Ijj5*Uvv7Lo)awA;W?Pq;TRtB&468%IJmgNoB9sjYjU3Q}ZLY zRUNSH`KQy{h+NA3y?oSkXb13+E63k`u%S8ROg6oH^X;22 z5YH$n$kkhewBS;zX=_kfCv<>o5OOuK!riux-Eg9tURU zj7NivJnjpz+OMp5dBH$H$)0hmBB`dS49A@#4ZPmVF3NZa)L$xAy`cXFEig&~hbYNb z@ABG! zneIdr#V`5%L*eK!;FzPpd~R4@LIrU1(k_VlJQ;qRSzOYqSylI&KX3{;feja(p^*y;E3yk_M4ptw|Bn7uK^W@y$b?|>6Xn%Um zMzQ)qyquzi0~jUPyRrqONIrMU!R59Fe0}HIs+2rJq$4?z7|@|IG3Z#cl6aKtT_iQH zc*cRI6-vr&`Z!R*(6vFyw3*T&0##dOQYMndeDprL^;HsglXpsfeU_?nPfs7isvfL3 z#$I?+Zur3I`pC!zCDO9;w4Q(KB-4NUK7D>dI-O0^Pp*pa&W}9Ds}jHUR#mb-6`6jO zYki^TVuLR8z@T%T%Z7dR1M041ex>$ou>wMKNkWl<<&2Qx1gGehq}f?IpLL-h<8Dig zn-$WcDw5A_KmYv7pX1m8nOQNB30VV-fn-%`H;^Yfz7B< zBq8`1@q=8PAJlL?QX#H5lQzL*d!8RxiEzTyfyVo6bdUTqdlo( zOvgW->U^41m>MURrua`odXAY0-tZF8gPk&8OW&CP#P>C8E>yTr7=XXebobHQ42o)V z$KVW2xm4tVLscL!^`w8%hmwDHM1t=B>4^r5zf9tt00KWGaC~}Q!#E|ijpG2m1=R2~ z2hqy83Lt&c^AjLr_9(Jj^L0lN#qSV#VUirSQmnQ2P>;3foJ$%#bR6|TuAVo;FN9GJX#gnRSslvOQKIqQmP4UJB{m%U3e5u%V8)%<_HxB-+X^aAoO;C8lk$v=vG6$ z<&$#G4NgN6u8r3j#NOqHh6!Nt2DvRz9V0~n?PdjnkrTKVwm1@#J-6_j{Q#(&9;K(8 zBA4Z4$qz@pw*ta;Ea8zH=p+B?K1CC*7zdhi8e5#4c0>|C8wecJh{uTA0ks(#;Y3@}b*4pN~y(kEDC~0opZ7(y zo5=eL2agAUV#z(x_z}W@`1y`PpPYJ$2-%`)IR@o_HSRp&dhA9t8DnC~Bk2_+oK_D$ z_C06v`uZEH?a9sgM-^VFrDBG@A0JX7wd11_{6A1j2MDwL7WbhC004)V@kS0EmQpwe zm;Sy$4VDHyAP2mV5Y|ADAeScwJz@cZmx=~GQVvcgD}e=J(x9Xz$U`VGm+A&RC^{1d z881Nrf-U|4!8zCp4KCH)Wn5+$LQ&E~gz1BmajQlu!x4rhK0}z6QFX?fCe=%_j6^8Q zG)02ZmrMseBM6FcQs$u&j7OJu2R$7nF=+-#P>vw!Bk8Jn^|EzM^>(6~(eUhKcVoS3 zFm6`Cm|c;m<(Ih!JthI_m*59IH-BL=*sXLmlU~~SOG0m|V{rCsD%Q&|8|D;%1g9cc z{YoIHHUxYggqaR4R=9l5Mz22{Y6%5Y#Zyy}US5P;7avJ}7NbLav}VJ{P}h=SA=GfL zYY{A=tu9jdC{r2~UIa7CRJY6HA_|&xa~(})e!JAyrFNOH;9TwJ=0VifAAi@xEJEmr zR5l5`wyeNA9#Ldi3d=Zx^<*m9QK0yd(J105)n_v<3s6>^sO=b~UCE_AgMvm-4B-gJ z;BM3mcVT9}%>zXgoQ=mlISV98(=km(a`p+Mlu0ld*1(w@y0sL#9GmJgMgSy7T#^kt z8R>BEUeA|23xRE-5SZ&x1AjdfIya{$Jv1*!!#yP)d15I-_2R5h{ok=8!`ZNfgFva> zxJ+E}WM+PmdrzgHZtigZLZ-ay2 zM6hSWgan5XB)aNqReD5O-zdX(;V~Nwz~j+Qi8B!PhFl)iS?AlOcC8~dOK^nB-F2%P zTWOhdx|PchX}fvtIF^L_#uDqWBjNn4}Od=!I5cnG5jkQYcAjQ#C1`jxMEH z4Jq9U*HEtnzob~8xI>0#2v-^-d4^_~Njy$Bv9;H))@(`zup)KBQpN3Vp&E{a{}ue& z1~0>JNci7UoKXCJH?g;1h<%2JuvZx945Ii7yjnu&ye4`;8M%pR`1gP28m3siB}+y! zs4TPc-+(u{^8ZNk{|RBf<2VTw!=H~IwV497zmx#NJ5+cW9Ylh^lFxPfc)B^)k%D## zArp9I_#6D)21nr^eCspQNK&uj6?o4^4*5R9h-hSNB4b&@^%5X2{x|P-nYk+#(W!0_8 zaFAc4LwpHqCBiF#!8A74%5Jf&Jr3ngKzJt;Y!%REE_tIa>iko^$k5i5Q*kCqWEia z1t~D&>A2ViC6`7HJxG7yWNe967ioEua2<_F*GXCx_H^)rx~UwOY%=_ctOjZ=5(+O~ zoqn-qtIbNNbE{|+NVtg%EH&*7t_^!z=|;k{$@e>ayIOsX-jLeEiHuHEp8lLLZO3zL zxP^CoN11IU!Yw*&xEX0%$Zc=;@#BHXS&2J2-Jzu2eO@n_H0^&P6j-~mC~r^r_)&&R zsIrptpDV)@n98r*6ei;0wrs?Qj-2{uG-;)FTEtew<8HjS9V)GxEa zD7@U5R~pA446j?#Qs3UtSl_g)ebu_=y85+bN6n2J8dtR>J!QUbgjGY#Q3loNRfz;M zw|-8jZ!{5(6pIJUO*vfZ(ZXg^#kA(?oUaWslVcLXBa@3hAPpJNs!d|^3 zp6zM5?02iPYyaPo)_y*cvy1->#HOv#;^Uj#&9MqqV^zXiWxN)y z=Xw0?GG51n_!#_}jJtW%8-rgLb#dwszp{9u#fH0VcpKhr!&~@XDDMnV!MRrTyA}Rp zmZ^!`akGD~E9_QV)PPHIyUtTM7?j)X>XqJ0Xk zw)!B?a+p^iDW^yqh0t?o+s|USgx{sjqSNOMDK3An%iE(fEaT(2(uR-W6Fi$;$#H*@ zs^F{`NGrqahw;Cd+j)eOhKYE}|b8T1k_gVGNWWzY|-_K{on0oBisUnn}R&4gEaYMFKR z7XF#*?CrFek+7CsGkEYSGX+j}LJ9v$wakAGj^dzaaLtOJR{k6Q-G)c;AF+dkH360O zX0qY;;s*)(GlAy6toT0uJM-}sk(Tg3#PT+^*Vvsgj&9VIK|K5yKPtcv@neLEX+oJ@ z=~Dax{smcvG&95f6pv9@Vo;RFuo#b(Kn`!2l%{1(V!4zAcKZT~+il)j*(fuKg8GM$LFCg-AF+OY7tP#C?R#XBORxFN(wufB-l^3WRQ%2Ip$x7G=8@|s*Qo!wY zdAo#^b-mFlYIv;tiZzzmXg0=%>)BWt>)|CE9A)G9)q8|5E0ghge1Wrg60tb37+)xX zT#kU$?N&mhGjb>s8IxC-%b@H*?dB# zewUx-s9ohz&&X#BlllPBqj#R4uv!~iz)nLb&RaaT*SI) zZ=%lUbE}G%_a-(PCDEUgD9c#A4Y#lcG7?IKgL*clYA0Lvq~^DNq7==!)Glq98A!3S z>S(&A4P6#rLSick{SKcm6buEpkT-q~$7CjCGoP8UCf00YXRuXdHLFRV?qo4!b|z~q zfqX{wsI|q_<5fao?nxG&pz(jmj_fZ%%I`qD%g~Q+Ib<_Hd z-fka-WAOxL0wZG~X9EkA@?UcUfQ`3o09h+tGdP9r9Z*5nD|u6g{>}m`RKqlX8nKS< zDrgM*+g>764d7-}7KTStOsfkf!m8d6iWM;k5mH zDdSjn7JZM_M!+J$7Qb2mrxVQ${2Z2oE)>(?#jpf&Qb{&sPjY!o*1BZUE6hkY4UJok zbYmjvW>{rLy5)FCuTCUA4_eKCFy4?Y>2=T+$9SC}xe+$$B^L!(;2vnAY&bdg0l8rBdBw@o1T3I_Ubg|=`;%a;Hwe1GXnP>f%}q) z6&Q#WCJ?)so_!1M*F)Y+otV@I4@KbNWHPdWOw}^-dVt1lqE8NJ z|0dCg|4O5hKI7=K+%h+}51!ozYx>~D>Z-%=IskpY3lM>SM&Mt~;^pjVeemC^J~$RZ zD*baKXx#@BOD)eq(Evqpx{%Ra~{wTzOgA~=jL&)Rov=Kzd2c=M&ALj9V4dlBw!K@NN`kwgAz<67(RiSi1}qBidRaI`yu2UBjZUO zX32*;=s*4hCm$n2NF9=E93sIaf%-~;L<>!5CDhkJ5v->tXTccQ023&pEThQROg?`u zY=Mj59Jri9!ETCwRJYTZJD?lxh90;Fw!%Je3C*n_eNTXka4eRRMlEm{$KiO=o(z3h zh7(8!Meq=wgcIpq2|S49IEge#dW^ZkwLe7zxVde@LG0*9^@-}ZRgDG9Cs3A)d3nd604!t@DDmHufZ%2v@dFfY83o)j zIFE9l^T{WFdSNbH7~8}c%*Af(5o^zn>1aM~B>n1<5ZiQJ;YQLG<40M#u6F8?a8_ko z(^Gx8&2rJ6oI7E>F#sJv4}WpVo&&h8>gj!uSM~H0edyUw;8-XHtBQ$I2st0aRFYts zggzsh7aP!=m7r@EJ)06^ra{-wh!`XJmHoJVzgR7Qx(eA=Q5xDKl4)ZAgSy5R3#4cy z*TZ;S4@p|T#1Q!97?LuE4M>KfNQMQHJ8-9NTzkk#_{7CJlDR^F3Lai402%?UjNo|` zSq|U@d{`2$7ihT7p_C&5*EtEemI&*+l>S}@qsZeY(OwtFVR0;;J7Vk^vCWNPd(nQe zVj66JFHOakuE*lVI;N-Tm|6#5R9jU)ej(Y7t}p;rpqE4ey_5hQj#t8C zI>+VF9VqufzHaKSL!-Z#Iyx`iXvC}VYMt{9q%7{I!?=2?s&$RT+1K#hP2V@r$UP*^ zZbQ;IEGEh@yq01oimU6$8JI5AHG1-h*FrIWz2K?BEBGaS@fIS<$rosgPfJ)?1I{W| ztJH?YRx60DR-mmWu6E-ML|9w*da-U{PIO(|En@SY6Him{%b#JI!jGI!AWgv=@g^P1 zbLc6DVRF@ToWxE02k@4*0lck^cKEN-=MMVZ*^l@1<2Mq_JU<0&%}OW7z@ChIscejY zTIpA!R=QWX{Wswyo&P!dW@j6~eQhPIAMZC$Cp8gl8u{WSrYEmW4S~lDy|-X!Gk)>z_L08CifDi%7>`hKAHk>Y z1&I{Vw(>A*0obp_0Jc%Al1Cv)rT|?^Nxw`2l+xBG)09$5E5=ZAYNZskjLL;lm`F*+ z$>e-m5YJ(o#NT|jnf~sjala#4--n;T&*10q3;O2we}K2(ZE^p$c8}9=I=`oHanBgb z;rH|{=CeXJOxzFC-Fxk|O$rqO&LJY2@)< zv?WE~OjI%pl`nrDuvyM<1_&V+ zgaC2{5JD1(B!DEK0X5wuFJWP`8+SKAKtZcj+j`cvR%@%RRkT{gU^hT&L8;YV_C9Rw z-P-%It^ZmN{xjcud%w54KwFi4?|W~)-#6dPeDlrB_wdW_ocKHdEEX>!OxC)4J%MV? ztM%zWbzXnh?q<(!twetTMA*{2%e}{4?REQlt2cG-(z-&m&A~3W*WKS)eUawV0`8F3 z-J%79?p|%3zpvlz^Z0!$n=MgmSJxsqlQ9*rA-YD1 zwd($WKjiNm=&7#Pf?WYmf5;yQmc;HAup`XKK(9anf+O|-p*nxl2#p@i+Z{j5Xks+! zA;SF3FkUSlr4V6s;xmM~)*6f6HETYa#W;i_OJW5kAdE`rfiT?~yKS(a`V=A9_>P2_ zo|LR-DnhQjMVOO;xS_81?3K z3d})Jj7H}1w)%g%wH}X8>sFwQ#)~#-b}@7I`1bgBYt=1UXs5q>z1!FA)q*9>e*f-) zeg!H?!0Aa9m`4)O=}E+q1+mq)+vnfwllIiAg-YrMJl<}N>|+7KL<=GX7SiktO1f*= zRKK;kf#f>XdU2M}+MMLmg0ZC+jIKShj$(b~(_-*?Y0-bu!)i}o-$2OSN%q{TT}8b+ zGmxyz!g*9$(vb6D_c4Yf?;h}mntZ{K+t)?LI3Q*zW#wwYbc<(`)bRrCriu6!<6KUqBz7yTQ+>0?N}-_Lkn}g zkrsGpr-!sX-V_7DC7G$$yq-P}A?UMPQr2wd+t&HJwQds@syFqsZ4g@PId#mm!HiAi zktElimE_K49x7~wZ7jY^$xgCEAh(g$B4Q${%Z7h0lSI~^uhqm)^>Uu-733>|l7z(@ zm35PDvMbUvZSEf;lDYJpJ7*F@krl^e9#@>Vh|brDvtl*vKmEg?&5)ifsx) z{<^`Cwl)xO53(Uy�U=uEvp^C|xvTIVxRE7)6ItR}k3jpm<{RiUQI*9G ze3tAs#DmxVrwkwgRaepk(`k@q_WZ9jlQ>lsZiU-eEw@uT64Dgm!AIoGY@UjD^o_+P)A?zRw+M2n2}F3~p$20%s(xi?iSCGI6iM2jPE1 zEP)SGaG2VKd|(f4w}wdOTTj&7Ejyx}iR(+wi)-`k;iGULGygHlB1$L)3(9c6m$sFV z7AP??jglIKS!LyEGAB+EiQBmuNQ_LkmNSe`*r6CcnRZx8;ii4G=IG6MzvAOq|))8ED=qdz&I9R5s>!>fN+5>@!CzJC8^ zuERwLjpys$IsFRZaV(T4B@8E=gxrqGx=8P>y=sr8+vKS^K+i${K z%=X*F_B#lx%gzhVNl^#nu$@dzN2g#8!puxVu|_f10i~EnZhB{=rmSMV)G6A{MR$QL zu$-e#qm^sPO09|osFHtpaMYMQ9Bm$VBz1A3(*-swy)Hr6d9Hd*8Ym0q$Kp6t-DMObNRmXXNPG6a9rXH({YiC9k99U*rw z$2-`>jgF8!swvJKw>mop;(&t;G1D@5jLeFBUPrgzr^x}glb<%C#w`><1@*Wg0?{2y zv8v_kS}qZ$d7rtEXVp_dGWdznbr8=JM@Y-dOb6Y(&Fvk~(gu_&F2m()+bhVn$t;&6 zj4d+N_Eo6Ev1Mov77B#G4H1_yO-Mi|qpg^VztZHn~oiUhARS#0(MY3Id_xXA%7 z+-yue_D;bq6mk;?!uYZ#vt1k8aBBg!;x-ygN;O_?vn+p%DM41H7DOr2x(v7Tw000~ zW_ks$pj^YSvtV4NWL^*6rgiCqbl|%jcqJE0XJ#ZhP%qEqcXap+{K=M)6Io_o%reagq-FZ;=)-<;B9;4vZB!JXhFt}yF z*G3Hm50by^^zUo)H~B(ZFUxB}qS+hI$xyDv>l}Cp-_0w-B!7?&3_{y|a*ZFXAR+Ddow+ntf={eJU)4Wjw==)9w<}b=%H>e=n0M_<)M<#rN?(#I+;SYG`DI&o*7S z$)y!qb3b5GdL7l#(Gw3pIq4ie!DyzXm$z0uRtl2EyyU8W+5zM7mlsz(DSs!dZ)(`G zcFVf;?MW|$zXxGe#yB*+PHlR;x$Qi{*|hkh5`xrdwav6Lnq*%T`6&ZFqnJ~fhQZYH z_dVHD8!oQ8ZJ^()Eld-`W)Oq^olDL>{$!;q!lfe$MEMj?tg%z zzcNREi+!zSR#S6OjP^Up^aZqCrmxmGDEQK8mzX8FNqN6zQn(PI%seSfISkw`M_Woe zYZl}RzKu}W<@bf$9)F+5*K3GE#WUFMz;^_2p3zQrCj=!8SutQahegR}1<}K|sw9l! zZod{R_W47_eH^V88!*M}y65K$#c~KTqN)tJbCTmEQ7wx^!Dg9yi6T@^1FQ*nNr};R zF-nY4aS<-2B_#?e$?(e|++JCqwyrUxt3Rk>tQhAYNB%a#6;R0-L%l7Fn9ca#dWU3vwe(eUl69c%dpT7904{7JAg`6dPRNU};$KypXFJ8F?~l5zNp6 zHm9kktJv`CilE&gcMmV=j43nAT@{y$D;#2nxRUHvr`;UTXu*GyTYMMAugwY1q$ljO z3%BSZc6Mun@deiSL7GA&M;e3hHPOR{*GoyP#m-ma?soTw_!!!vESmZ`jESG~h+QoD z-6VRiQ|xj<0gJxKk~Kw;t>^Xl18%R^yhgfR6#)?}5LbziDsn|0!|x&Zy-ty5R&|x9 ztYW_lRB=Ea;a^8J;0b74FWH_#NpYsQMjUjIC=aQ^u3OS|1paOpjABcgE@tqf_t2vo zonnRyM)T9TqKu!ukDk8Y38xSiW$m64xxCEK$pe^bn0Fg5u=Vn@5i*V_?vuQ z8o$Zc<0p?QpFj-=G8S6fV1pw5>lpyx;941=c!ur;ET{GgsHOXhxk^aaTCl@vxR5CL zue+5K4gXU(0-}8w>W)JF5Y!)o^-uAaE8-;m=FtEEf0xs56M+cXZ3T7Xj(HW8$6(VD z9x9$zoTA?eIt6T&Z1LR&xP&mDS8GQaQ+%^K`?N!I&IfTj+ z@B`rAUjc;S_ov{G!|<0DNwsqXN}1|4N%e20LZMTkZGRXQovLmGW)l@Um(gwfCijb~P&AuJ8f^tH%bzuvZg5Ofzl> zFAif%7%y>-K8}|PI0cSm%{v`;&R*AL^3C#zy6R0O$iLs>57 z<>j4$0DUl&Tgc++yrHCGgOl&TtfbI6}6kl7c%F(GYM$IoA74ogEmBU zw*kGRZNt6cZbOIYB^?SrL>M%5xYuxR3oF{2pButkZ3pknc>tyi;RnL_;V^#m6n^X| z-p?11vLcL+lm9r1Pw=ZGSw5l5vJB=W z%Cam$mZPQB-9dJGCya-eC}BMue-b`r$Z(Y*L;DDfZ?7E2aPo3`CQg9%r~vJF6o;b% z9Eu3=C<(9-kCA8AIWCUuO}58*+|>PusE?;o=UY>sNTpV+s1Zl-bA}x@8LAw`%BwU~ z7n`fDh!=_IOSI@;jGObQ=$uF4Gvs0;t`nb;A;5R>^Tr74sWXE(fAG2}?QxN( zBMR%#VddRPJQa;Rc>p{q{qwWu9%t~;`gz0|_#B=#Eah^dV}Z=5e1RbF%ST4=tL-EB zQaf$3-=II=8piJqQy$>_atycOav2@@hx`lZDD5d{YkXR8~zi!m!Bps!hi z>MXl-P=(ps!hirn3D{ zd_9rvfASFgHMKe02g3M&lI^LjX4Iz` z9={??UKZ-ZBIjXHY=^;?^LTWf<$@?&6JN#HAMf+=En$nz;VmA3%c{nzm@0|LUyK#` z%yj|`QQC#WU}cRVf58bAL&C|XC0t=K;kcN};oPgqGrl^Gg$bfSOpCH03M32D#S8;@ zkpXPygrR~mgLGJSQA`#Z#VVFqGp(516Be`6FnLV^le6NPoF#!v#GF(nONmKT(qY*} zDcNHbt5jmm6=eq2Mgyy)Lf2@1Sj-EH>f>UufD>Xl6W5e;3(~i=9Y3`T>rM0p|8<=JHzJ{flh+Y-|a$xxtvtd*y73Y$wDWeD^`V z`-r?dAwI^}Pn?3u44}s-l)sLM2iwPrhla%?C!?#r5NvPLk0K^DDx&61=+{LvpRx|h z(8zBL(yaGWW^;gYr>iOByasl`LCPQx(Z2^M?-+zzf8e^PW10$m;!)8kGoQOfd%XVJ zc`xSwK~Bm}IxIf@6lC5>i};wxQ20WlbAH7!@%S-uBw4BPzAHb~cR9pUV#wfQY$Tqk zI3YdC9ztwy^~fB0nEr;ji8i9y*OG~QpI)c+=NvuxjN z(BC3%mF-)N_T5SCkBa+b`#y1;Hold_Pa8e!qj9b$tXqixHR5iP+D}O`XK3~l#TQAQ zGf5uHd37Q?He@G+ysVM;NMy4@-pr8qDdar`+0P>H2*}^43St6J94_Swo6=E5T%QCdAlOl)5C|+Qz z|9?d4*{$@SIW0yb?P70M8 zJ_>(Ab#7#AWh5?RY+-YA?K}y1RMpkz+$=9Md63D30Fhk+4hazUAVGvckYECl1T=`o zA$bWSlbJX(VXrL9%lT5ZJz6@yM#tl%!%x@%o=uU2cdt!>@;&$;i-WR~|P z6N3N$_xtL{n|I&6=bn4Ed+xdC-uT!zyY7DlfEnU_gdti>n5klgYGtMp})Pu?eqA3 zb8E~|R?MqFa3msBAQNFsuSgZhMo@J`lO;4lNwdGbtj+Il^J--s0e{H9wzIWtkrsb! z4tP33{y?y}r>uYtVN@^h3gjZ#dnyphdK+P}NAtGC4l@uTFQF1)a_?xoS}c})gn{vO zBqIw&>8~2iNAwRu7;Fxvz+mF72Nq#mk0w064gU37S*;dY=Wki!W|&}cjo-h%vqOO* zgpsL16&Qw)t;3U)Bf4DaTkrF4^htkd)N3Ik)Z=Z@h`W(wbrwJhj7CrlNGjDXU$nBO zsu-cj!l;VLriS{oV2{ZJqc%fKj@HeU^yu}Hu~B82r@g&1yGPH(8%7Yw<5%^DGHHA@h3)_Owi?vCOq2v|vn3-8%bj0UA+@tF=3So(_uy~C@>Sj*5M8WwZ#E{ zJHk|#KKDKTvT9#PXQ)0D(A@166RbH!$nr2G*;y11(b13&9eo{3g*i~cRL@1o46XB! zstZkVAUGv4i!`sN-9s33?q+|vYRu;3LVt_aVnRaM@(wl(!d7=s9aFl*f@A_oY>jD& z?O>QtVIeGH*;SE|q=$jLMM`t%ku>5!8W56|UQ zJmm2R;zV+IS?yY&ja=j!Yt((Sd<*I+gvgddkyOu4ORC=+H9Hen-D(VYahiVyl@g^2>%q&kkfR^kp3rr%KOln*gjMFQJVkhyLV-P`N!R@? zAf8*oy2@(Ri7&F^izK-DpqGyR@~%POMeL=9<<3TvW6|;ZGBR}QwwN=E;?kZ1c zoyN*pogQRQyxgE|3K8?|?od@AKy;?^K?CE+B2g_(f0^rzbQQh_=Q8`}Q8bv`g&bfj zEwqL_CR=l9?vU-#&P4Tb{i51@VfX=D#Kiv)VOTNkwt_OgZ=(ezqy>tNeMK=v{)f9# zFYt1=Q`sv}@=|}X%-ycFta5v+X<%JhI))B+^Liq&Sb-nY#=a)LvVu1ym)qbnxPtaA zgco6KuVZtspTJM;)az%FouoCe0zW5*sI_;5Xqg#ihMb_5cLWLPHE^vRu7+RGa+DgW z0>4Tr=V=HF4_1VA{y?b4vtBp&6k|+BSkw=wl(P6x5wUC=!l)Ja#X2)1#a*Bf!7FH<|1@4Ls{}P*}Ji|7)8@kz~x7(?- zlk}Jv3-Et-Exl0X=yc#x29NX8-Vj^oJDOzPpov0XR|*?gMK%6FG>f#?4);MBLUB67 zEARksw~jy3wheLvP%CZtz{*tR)Kv8nJbr7H*f~Z z0*JKoIQ-rQkHH^kGar#=4eia1N=4ApR9HIMqg2b*EAXnF7<-NMTioI83>NbeQ0_|3 zD4R_Dh{}%%_&0Ka(7g_Cu)^OY51!JwlAzw^ykBY{DXDjD@DBXRPCq21QK{W2q5U($ zm|lOJu8#LZ8+-tNvC|LX9T4kR2+PL^d2zl*@AEesd;)*xJ>7(42|3_XYAJU6{Jz#s zUvW=%Z7Q!ueVcz~?o)+-!M{0^_*q^yd`_0=N(JqJFEaoji+_;9j-=#pjk|qqi<`Y= ztDC3nW(5vV(BSrlV(Jhsh_!_jDQJ^;$*O;2!{!dH;zTnOOX{%D?e*5vOsr55QP>eM zBQF~>DWGt7ba;upBm0=?TiofB#yf>DW~1UH;pE6HY)Wb(8b-UhhAG}SIo%0st+JHL zM->N<@^K*XpNBBpb&!Z0n1Aq6n<}MN;3SJ0grLSw5CsR56K?hMMsSuZN!m$>OvHby z;!rHI;}ATI!(?k06v-SCDZ}mX367xE*plI51xFzax0Z;U**M0Aqw#P%j%IIQreX^B z7WZ)yTf`+Qj>GY+$|FdXF7kq|UOG6i#7W>e=7dp**wQ!KvlymVvM1qWCcBKto`NvX z)h~1ooaTfK9At-493L2m5s^efb>DyN(_~Rvp>+niU_>HB{wyq~!I0vouHN=>hp62!_iqE6N!-h4O_OoH9fsfnl2lX3-Nqpw zR&xZ{L|SsU2N6no7h6Q|6wy&XTGFZ8fTpHqzb_aHxII4p&TVQ6YTnj`UUz?xz6K`l za|Tj#XNMMO=5~!B3XF>SxZ3Qdrgkzb3bC6yW4H-2-D51n^jP{@XdfiGTpc;(PQ{sm zE6Dj7;rt4U+JgFG92u#lCks?2n=3e^O3~iSDT7rv1&^noIO-B&3F4SzmdkX+IvEF9 zNBSx@;%c7fC(=A$<6w~#xXgbSf+iP56+DYvfMH}o70)4`h-c$>*$_6^u^!Kjq-`u|Q}BF(vC4@r z>ug`k*9pe6T+-PVPe=<;Pxg}U@)`I?q*|BAnts@`gR_8<2K6HwUW}KJ)6q@8)*WhI zCo`xD{+R4Fc^evB(dmC{pbrHvC-7E{3+RQv^8!v5*E2*XTM_z^=IYib{f=L>)4=4NtUK#NyvEc(L| zZi~dp?J!r0R7#%Qy!2$ERJ@JD3W2w);DQOv|27qG#jRY|B@e$N1bQ_et$Ag9Impt5 z$6Pj|!OokzvV&I3y2?4p_A}2E@!STZM~bt6G{){h!_pH?UWB0*j7T%?wnHKAh|R&o z!jL`GEm*Ojw!VL9adlPAqNZglYb&d09d_0&U(t|QIdtLjW%Ug!7E~`wY8p~sRkOHh zVadRPv0l$8`kkQf zfA+l(dGvl|z7Iv`G_&3*98Y#6e$O%j^4z#^+!hmztMPx4cfLv7ovBCNAOA-ixb;TJ z+Vc1P*Yf{gTK+-k5(dO=8KVaXrYAxP>-N;7nrTTj)01juB-PAJs+pBkQ%>8|PM?wV zbh)hfNjxgVKc@+5L~&&eogH3n_T2y4_kWaq>(`evHt}U-yNS;fco)(=&DfiE9*Kr80AeO_ujP7evb>v8v zT~U#xohbsOamJE@y@2=sWidHrU9>rJc^kpxC&8dsI;bGTWK!)UEgg-cAZQ`ZuNoPdAU!Iwx{5LTFrLr?cwV@s7JR>edy$xh5o zwvdu8YekR^3O9u+WvOT|OD&3NVtTHaDrQ)T+0dq?9n7?BnWZaunjPL@l~_QPTei&B z`%kyS2Pyi~R3B=Q?swGa#F6giAHf^>id3#S`jA^$?LVvu_rCD(ACDA zCK{T=DY@cgK^xOi7EZsIR)r2Zi;sUy)A^gtrDoB>{#(n-7Of7^;)EZ=sO7gX$~>e><~uYVGtoFWQ$IDZ|by8Pe9{L z@#-W<3RuKOvB^&2CXbij>hZNmE-N=j(wX_uJZSWQU3^EJVaE%^nJRX|r*?lFBF^UH ziQz2Y@2X;$7|tY~OC+A>5W}6Iumm#N-5unUP54X1{(bQS#(9w{%4J4ZTuhjLj1=hgjf*0nDk=>UD?6I#qFt&dIH+ zSfb;*jUaD#!a&BiRL6HGRdqQbkMSL=L)}ePVJA2ks#b^ENmaX?kk3%d^ih9DRrfl< z$wMC2!}1C}bgkOdtmzjp#C@bh+We3pw3gA4Nt`1dNH{x)+-BwwRy==X7x#;Yke zZU<{wdnx}Qlc%~JvY<>As^B{*;_=9NMy22H)!aTl&sZI+9;2T0^9S*S9j_2il0DPj zHfRLgntmCnIN|DSWq`MW_hcEgnIFs%!w?SNT#^4&J^I{jwT001}B zZ#m2+i{x%|s2g|8E-BpsM{VPwVqwJ_^gCFGfO(QEE*%L+6V5mJ>Kv^P;2_}numCcW zQ7%p&H2$)Yb8*Yhjrg>iUC0y*wUuIW(Bb_=I#(uY|@P8LyNm zSHp=0$|}eJzO<;6luq0MrLDbPBoK^D^RTe#6cHrYUy*#%n@aX4deWX9pxLUp(G zji3Tcf^L7Ox;y%YY*0#M+tT8$(2~15sjdsQ8%xbp1BcQDJHoIl5zXKjG!f^6e23p4 zVWQDplqB}NC8no{Bj9(^q28-w$T)-6!U2Tz+TCy;t#$X;8t-Msdk%9qCoA%m9VsYW zor8018MEw#_N#G1X&4@zm0OrQOD$Aym2&{TpeKJvFVYGNWN84GGi~(nQhGl<57XF{ z^j=BtrS$gDdj-AEB-*(DE19$GUGT&fcyMADJX_iYFNWdeFzgS*TU%h;B)#svFuWhB zyS6A(uly(se~naL*aiP6$|~K3HURo91PJ4>Fpiv)C2_AS%9ed_Y#56ped>#p%Qr9Xh9Qj;!+6vr zdWtgnC#xu%Ukd-^aCcQVg)Kl|VLZAUD_OT0;w>q$yaP}Hxe5pc9#r5y;~x%*DU2eW ze+_F8a|#LujT|&+q+_W9S)W730kW4~yV`$pu$BHPSReT}Bw9E?w%jWMdkO>!jFC2a z0gR#Ftz;dyk!QS};C$7Z-2Tj2>j6`n*NJcR*x8aKi-xEY?sv*3R@ zJQtqF^WgSWB%rFdJKN87`-&vI5;$hsV(@qd68?9;mcO#%RX!u!oli zPB2E@REF+-cH;?+yU-2LjV*~Y{3U-YH-)PRnMVBUE@mDG-K}-u`Y`&!7;t3o#7%<4 zXHUfWUJTAb5r4y(V*}S*1D8|cIx~#lbCC6(w-+x+#Pog)CTA4Wh4_7ay+#MIm`QaP zV(qYbBXoxml3tES1~`G8C_PQ|45g=)9v3|e0gT8UD0T-pj-IpWX(!K6y9IxaBxgV` ziq}7)7f)V#73;4N`fG3(UP`aL-FR8!h#mN|ZoGQW#GWZO0&HKyk}S;D|2sf7kx3?x z3M&dEhm)xe-~*DyhZIi#1(w4{unPVPC&9I-VvJsFQN7qOjJu+G zxjUklFzF>9cT)(UQ#{59W-=VEtvqlHF&PG~e7wg5e1bLj?@Yi;tikU!0Uu-yzQ+W- z&>DQN3HVTJ@cT@_&$a?bydNJh)U<^Roa3$`Y|^C@ClzIKlu>`A7`EA?G-+u#3^H*z zDP#m><490&6e(;prFjJQH zQC*fSJw~N$S$dpW6~iDNlm;`5TEV;P7t3vggZfe{t)g2@rC~H1o<9zKX!unM|{zk z6CrA2BQ7s}gi&nWwi{n<+>QGiY4h<0J#W$T4n2RO=Y4;AKA`6>^!&9O|JIFvk6RLQ zlBSRD(aWRLryO6VC@kX9Uy6A2m*q>^jF5zslRMH08D|iZ z;Mf>9@Ix?0bY3Y1o*%ylTQM~y}FesXD*!^Hh5zQ>IFf5MIX~7|hw7d~R%V1F%OG~AsWr+o=5^=Ar zz8S}Abu9X7iGFF{SbdYa9NRC7-io8BCYGWaNl|UzD0+*!EVB|m`G>j`!hbtX_{(Ey zSuQ=inR#4 zga=@!@Czz!00@iIId0@MAv+X@D=f|mi*t60?=irI4DiEU;>Y~Hl6Z{5O^AcL%7D8z z39cj#?m7eRH%V}V;^1!P_N~#z!nnq529mpykPMB3+hM@nlLU8m9Nb;Z>LmuR#m! zhl}BLxC`EZr{PW7y}m_zh_`VbyoyWUWjq$%jV=VkaiVxs?Bf_4SBc|dwS6215&SFABT~wM$q>t+RYtK3!WYWW{7v> zJ4d`rl2`+SFpF^glXm@I(Qf}6_=>+V7ai#2Z*=PIH~~xLcd5}n6{pMZ>BfKeNqDmS zK3V@3ZDJjNi*g{7Z=Fy3yk(l#HI54QltH63GLS;wErrh{f310E#fBm zeUtHhM*{rz1o-ZR_T35Xdm{M6OHhC(5&k;}M>oOkAzlN-&m~0jHAL49@C8Y40!|fw zA_;Fmgr)3CkXH$0kB;njkv)GYvcE(2V8}rTvK=8u3&?>0@^X#503$Dx$O|9x@`M~8 zA_sKHAs2FtBoF)KA)P#2lZRsRR7;*l$x|eG41{dxGR1VN}E=lfg46z}n5 z`5#bA2MD;)LSXnD003cNlR_NkB@9cKLc3WALRR6!E@M3g{wLQPCpewO%ORwN^S$<=XO7(m04vxW28;CMa5^8+4Lu`n>x*X6&_m)Urkf*PU<`J2Z_nlQ{J{EX zY`3;oix`?Y9N99oTTc|adSW99&Cqf~5d+orkFViX5VW1|g?a{x zP+i8g7|fO) z1CP+hhn$wzGH75QCQ~eELxvuS>z8#`(Y0C2 z=*dCN=rhyEIH&EbaP?ZWR1XC}WiTV8nOQScG(*DqPzQr(*ltl;YPi>>z)YCs2N!?L zZt}pK0L-exd~(wbb7gTAnK3Ohl+=(?Eu|$2+57=7%wy1~8HI{52G>*u9N9 zK5Y(n*-hMbAg6a-;>=TN!UoMS;^~5p!JP>U{4gIDVsMKXxV2o)K=+!*7d5h}XmVCM zP~u>f|uBukwgbEErpc6h4d0wrJsRZx9T^e?i-92d62*7R? ze8inHQbaxyWJgEZcAlcTu_toQM5a_&rkcr%ni)X{3o7`D6&qzNnth^Z_M`HD0Trh4 zG~hb%N%72^3=p@Nyh50K1){uC1!eL=RL?-WR|&hX#u=|sVLI8Z&)_$emS}2qn#g7{ zNL%TLzQ;+epmA=R%C-rT@@h@ZDz$-A;CeVjp1u}6eO&+!snAH_SxjJR4b-Yp8w(Dp zb{LM3={KP1n*wk|g(jYAlaz6d zZxfaB4pe@p3N!c`?+D?aN7{bkIlFK2S_%ryq4}J>2pwg2a?JXI<1b*d5^EBGxY)lIhHGxYe}=!%?7w2a>#Qo^vG}fk6(0Qqo8Im;cAh=B ziG-y`{FXrmT~g6h{tbX;yLK81{0si=$1~?M3})H1*3Fo9BYHlq8R>(%Xe@E5R!dsP z__$V5sL5I{1`EWR<%?z^of&UcdnZhISsfmLhqBoM9g?yAzv=(brAlC(TUO>~9zUyR z-X;%gz_W*84MSmne&$j^Wz%qRH)NAKrFYuYHy1NQdVU)fI|DVAMKT68oP+PBL0>#Q zY-)vK9-jlkqXFtr^@5(qT2uN=Q_pW0KjHY}*+=~fr zrxea@3-=-%dzln&7r|wva2{JY4aag)xV;4Taw(kG7Va_}yIczQDuTO43fJHWcdZoe z^#u1ODV)!L7VbJ6d$Sbo?F9F3DV*OH?k#~J{VQ1sE`l1Q<8B>=_d6x88{PvSz_A(h z%u$V8@wykUPviBuQTU?V$ZRniK1fFR(}&Vh&^OUq=nmC5R;Agi}b zRxfh%TNznHkdTn|d#7#N4Ublm^(ep_e%rU2qKZ~3ilhKrymfjzo zK1XhNtdge3IL^M>r6*{*+n%PNr`?t&?+KOO1WjY7ru43m()1^%&#W6BucYa5j&s$C z(KITjDd=stp{e1yrRjP&B%$eVPR9o~JXuN8lN{$T966C4s*@%LpV z`8tbyy+z(k+3dr3ZooOW;&=*un~VIcLk zy^Owhj6PN(uXq#6+aKPv@UD-y&Ai#=Jtgn8c>l&`Q&Rj7P)i30W*RH9F$w?x_?JP9 zksX&%%uWiG8a@htLUnFrY-KKEY+-YA?R^J$Ti12}9e4mA_(1Z3OW=?UkQ51kL*O17 z20)4gr@$pqB1JutAO(peI6%p=yt14fXSQ|{&n9skXE?4+uf%cUG_zSvnkG%#ByD!m zrs+(Zr2e0KABe>Vkd)n~|L?0m1AOn@bARXDbI&>V-0`4)FZ|cj&mx2x>CZ7L2+S=6 z*Xja`fhG0Jv#~t47%(7=(YgK$$|a?4QCVK78=AQgm<@OIug@xr%F0Y#cVIcNri24? z1A+B*Wg!qNSqv<%2iEJxR_2tjGP4*s+^@}|<7fv)ImsLhNQcqBR9p;5A6J^p$$&C2 zl2r6sPK42aepRlzwZQx$z}JniyOH3+vJ&1{3xEW|%$0Cp9hdy0UdS(T+xz2_2d>T z+l#DTOmFpAZPqd@lnI%#$L*Hw;)IAjeI!?q{bs;_@1|C{%#V%25drW=usCLtZJ1Qq z{IaV6Q!~~3tX3!BH|gEhd2FO&TPENiBC=?fh0QkWz`TK2cva1-w^DzVQy2BXj`>fUuQ5L2$u-z-r_0CnRatw>q7|ikN z$aA-U5v%C7Vli732)1EbZf&#r1pp9B$qexnVOg;H4MK)+D|XA+W0gzgHUWFF(CuDz zTXO+Oo)Ek`I*b8F$p@SOWjK?7vnnwh6T@*a9G3}jMhL@c1{^Vi;VgJo-O7H3daLI2$^K^W1F!a2zwkkr+;h;nXplpaeJ`vL%qoz;KQ;9HwD$zyLUxxPtZr z&Q%@5dG0p3!rGSQc0-q1eOX>XSR|qmx?VVM^|}4~u^CLny_zE!#c7?K3#KGydSzmN zJA%t-g@|X$#9VnG!&(7dD|ZPt>b;7)1fPt(K8Bm)_HkSz;NBR)z0T%yyRO3oaJ~NP z1Y@QF%Q7?3tDUmVMlc0j>kJWd^P8~M>J~itN3hN7&Bg-Yy1hAah22NFyp9R#74(O& zD9SdO+-URpWdp|@aTx&jBFD96hT8CdjG`k(tKgEUPNdnQ50_zGo)t{*Ooc#9OL)fP z$<8&KT&p@E!{GIG$!?}#%ayWRFEPxzR~2h^uShKuI>E>Lc4eP)K zU9J-qq8?mOv0ewyoATN79Gl-IkEze0LkuR9sleg(jL3G2T`KTka1GZgbSSNVEI$tX zrsYyGs4wthLnbr%k}=@tGl9w9;%EFC#cZLbD-&>sZEY@pu@mH;GR%0~BX+aka+Lti znKFj63^=01aE^7ZDoPu}v1fY)-GzghqCA6ji#DH2K3Cx-x%n>Fb%H2TpOA0W>26{D z;^xoYehkkG`EwzI*?~uWzDnSKxl?^^hUcqZ^|`Er=f~9NCGcGCQlGm7cs`;&KM2oV z$0PW9c)p-MKg966Blre*epP+mZf$d~_CWv00tLIW=jx&VWv>J5%3e9b?W)ZHc6Ccd zCbui_JYe9j;0EiL!C-Uy^0~nlg2B#|_i}@^Re-^cG$@2{)VlqA1XR2JwnbM@WfXmi?VrzmO$$*G>om^@G;Ep;x`7PZd=3(8MAPPd1>`>PFJkJ~~+;zT*rYqVQs zf44i2T9lImlkM{h2d%Q)<1P{^?E37}t_`no?xd-UkfS(gwOXlvED8Zx_JJG*;{*(C z{=m`llOan7JTJ{%&CC#JuF-N_2V;WJH3CCaWxgz4sZhYqSIsvpmvkJ<6~&;9QZg8_P7*PI5t2IItWY#8n9?JqPN+*{~Ws>Q>sWSU) zdx0Pf=s*wUwA*M0smW1cDi8YU2#nQ!&!}s;&#b#NSlTf#Qd?aJ{8s|QB^ecN{oHhW zNzc%f>%!D<$tkbf?Y3IPwhF~UbTCT!d)!{odz;-#X=z)3=E>TkhLhg<>Qgo5BdYWW$x4E0h=XeyJ^19Zk}H4w9YEFa|Pr7g0eXEJ!c~FfINK)|mM0H~Ob4sGvraqagZfqf&}4IH`fPZ? zex_l`H>k^XlLHr~4wj$K&>P8NVX9D`bT88m=}N7&jm+uuGi+XWU71@DEp9NX3h_#% z;KM|J2RWBlAh&d3qwIo#$mWw>!=g;6L0&ZrM%tH2a;*x6TnWNTwb@Dq6U(V`g{}fx z;dVm~qzBx&2<|*pu3TCKeU0en3J0ef0+k0xPt}YzEKkEaaV+b zwjyhp^$7Pf*EHDkMG5>&*a+yuEp=xaLP33h+uGu(`js=D>Yh4iciUL)dvVFd`xC1hd8b5Vm znkD#F7biP5l=1Q#7WavQa6k@1Jfdd1)#{?2Olrkdp^}c3u5qwK;*o>~QBh8}t_(qc zyn|sei<($}3xaS=7CmmUbJ|?py)?@4S~K^z&wHCC*NmlQ-rK7y7?^S`FO18ws|Ops z=5mA6(mr!$u-s!+vZ;e*V#g&n5u41|bLiaCppN+oJtUOo0bdLFiIwEE&npE|cU@7# zG3pY#O{c9(6Q0bL{BX<0vkmJk-qc|I z4I{&y3H&=*YU(pVzX}l0fxq7GGEFwj1Uy$+9D#AIyxTO^x*m+s4{~|4K;9!1;)_X` z7VTAT{fy5nb!C;U(?=0tkpAGy6 z@^DxEQlCDrH5eC1Xd7#*Px^Q61F+WjM z(#7HjZED+>wZADwHw@!ohR4l+GGM_7{^ZP*XSqEj#us{owa*bBpH%(jvWz*i67)AA zvbZB2F$3RRu%AM)q-B)HFH6hJ!eDhvww{v1VwV7!bHNZcSY5fIfo7X0%B=^9b*jHR z`-}#D1K?ZDcB~V9PAtt$6i8d~Fi}2#Og`uSw)sHTT;b9bjH7D%{LsFC32&x?g~H6$ zGD|~%*3Y$Yx8y*$ynU4rAJuy8te$Tl)SD`>b{)PDv{lb97q_m2 z+8gt0i&_E^xzF)_F+sn76iRM-x+&bP&+DlvNQle(a2N0`>N{yFY4EPMJ5LQxG^|4! z(l%giWbw-?!?-RKviLL;6 zs_Kec&pSo=O141hnsMqpjIR~KLO;Zbqof3ky>F@^&{xFnkI|cqE*HeH3sd_?BjrBV z(qzl3x4r-J;AAF$HPBU;qF`UCY_Tg=9Zcj(T`mHdMq!Z;rp&}#q2_@w4o+CDI${!? z=d&O`w3@_V`G`@UtDkcDDcEVB1@gjdqi71qFzyv)7lc7yu8ltP;uzT3%uqqeMr}#k z%+$e~7P9n2XBO~qt(xbx1mop_hLI`P`a(ftMQE~x*;~DTUx10ykRn*zo_t7`3kFNt zE(LG73f|($Fr4(c6{|$eBCZdXG|c-Bt{dw1cZ>#ms|#x;vFS_!*zH8)dZ%|S^XIz)PW@k&t(tbf1zNr%OINedV)wSB=v4eiZ zfHe>FV`^}J88ZY!W|6Op<&UP)TsDs6f*p9Q2BRnrSpAT98xEKuZ`OD94VF~a6}N3n z_m=Dfeh!1vY$d}n`^c9qSGueMIWSNH`J^k3zS^cJg|aA4wfOr1uhQ(R#W~ARzHjMt zL+5m}Zr{LU)5=uQ)yg4m=i#xslKT0;u+`-n@Elfupg$LsV%a3**ROg#jaJ#>gL@N} zCtUt4J0VoC!vwBXFkLxbF(3+tS#z5S^2;LA0OXgR4j8Xi-J`7={)6GmFfr8K=%$cA zbP)OGtMj#ITW0%uCEPjL5RS{&TSETUWknw@T!uL86fIXW*mxnB8fDoc7!1X2EdCud zfxUo#*BM5N+C-0DXFLw`9;=%YQ%wboTNMjkR+l{FHq#~h0`N)OPI<(00@`W0pj7g9 z`bRtixw56r0rQEPxcP){vSZnBbkR^}X}vJruJb6?VqJ+D^pNLB(1VZ#aqU2!9`d0L zdc=Bi;I!+~#BhILxwKLK^%rMV?7;OkGjDuZ_c_u1N)@Hc?=C!kyiHk}# zIb30N`Nv^iV!u)`aHe4{Snpg|F6HeNC67+mIGk%zloFafMp<0-3wn7~D&h5gi;?=S zQ&3-4#$cY4FPd&{c3DKdftEL~jvGiWn~)b)yJ12;?sa?StX5H+v)1Vj>4j0apO4*t z53u|5aphxhe<5}c`E*z7Y7qRf*3uF`F1qA6d2-<1A9wFy<)yLvRv1^aN;^QWkl&3$ zUJT`{aplc=ztz6KH84>y$J$dMnwnZ&2Qmf2bcsEui|RbX#bS;?br(znJ&MP3+HEwr zR-qpZ7pVdK{iZE>*YrzfMX-A+^cS0dF77Mu&8#om=pS_s3I(}L54Rowdpp#F?bMG8 zd}G$Z%3B)p9p=ieW9`oIUVqt$Tad}cJjYn_bEjx+Q*=ZyZiwBkN1sPdrOClFZB;s9JiRS&O62{y_vmE8@35Kf;`|a#|5OpbTx1x-#J2m53YAz z96QvVTQJ)d+*dVTY;;y+`tZKWg4saulx=_xYT(Qm0A~YmGKp)z+0{FIsMDe^-Y$>Z zH0ty?D=x~Fp2|Vzc70%P?g405Sr0CtLCbjNSlNi7KC|iKSlQ^YqP{UPuk2ju_{9pl z*4vabdnY~w= zodx#e6qRZy@c#XyfxRxd7&2vowQ$&%-XlJWQ!qag_#gK+t7mPadi86*Lys>~GodbveL}ik*-N zbh-u$sCb5W@JxwtW0UNbv-N_wV1xWzxHOg3d2(r@dEV!+x>twXS=25r3{JLgc!$~e zDG1_ao7m$PV|1rsesRVX>MoF0ZI-sxiTQGGO;O{_#rpD|t^w$OSGJh0lnRT&71>nU zwzO`xMdDt0L#3Vw84jB)%idV=w#j-{a4HVSsuJtjl@XNtGCXAIgi zQvvO%IPMz6IbM&hr}jWD%8OCYqV5ZValbiD3Hh9XJ}!+8{4W$iRf}eUc1yc7|!4*70x z<9eUI{M0~cOfNxU!Xv=Ax^OUD2=wOze7@Kor&ps(XKa~Y80=qwd2q!L)p_QNob_68~R+Q3vUMWM z)+(Gc3q7t<@47ft?#l+hIXgkP-^^Hj@@iHI_ZwF>_|4UN9rqi`{HCl$^_z0=$NYH% z_s0shesOY1UB4Iue-!((xIfw@!0kD$;`ZxTT}vf@ZE<#F%yW0vuP6zA0Q113x_vqE z{nTc;oHZ3^&wisaGts&lXRjlbIAdShxU*(5F04!2$M*2BciChDu)Fy-m= znsa5ly-b1msd)7=)SsEM`TQ=A4H7B?$c1x%mEN1WYtGhhWY$-otSxHYDAg~XH0dcc zw4jODyk5Pi=RLPUt?t65(k8a@Qiy5CO671KSZ-s!Am6;t?P*xMsGnmqW4$du!0WMK z2s6()e<}9+d%U*HOu|-(^w(Ed{j$%UCAcl)15-^i6Q`Y(;HfK9<9%IrH@(bOI0t%v zF#Lxcv!SKBg-~c=F;KU%77B-EHsbjA@Y6nKw??AGB>wHjI3e1fwi@xPxm~Ws9E1|V8 zaC2W9)Cs8FAH1k;#%Iokme<2;N^qGWdahZxjX>88D{CB5Tn{YHdl!{;0L+Si01mA% zFer2;JlMip3(WIRe{g0^S-WyV37_Xs()z|qU~QIR1pw{HF2zd)Cv&)w1WeshAgo|i zt0@0weq>Zyt1(vE^md>Dtj8}!W3>|KrI*<28KGv z`n$@RbSdaMB-Do5MbwJmstGk4;p#|QkpMSmOQcx89!h$&qXs2(3|-H-dD3!g#>f_h zPUBX`b|gw~91`k8T}+(rwBj^L$fwfvrlo7ds3wI*Qt|Is)iIbBw*jMn&Rw@Ojh9O3 zgxZYZwCw6J@?I;uxG*E3QI*?xT5c`~Krf(6^yE?QXNT3 zHf8+NU6LM-+>LImECyN+zgW3nw3c7IRqVlDUzD@G6qR=wW>SXEqdbb!8_Ew!XcA2^ zgEWoxou@F5}H@Nd0|^wvxI`GeO}mB2GM0vEnC`F)+nKn zin+3_tU*F+YQ6PsW%Ux;P|GfDD|1Qc2DJ=4M2L9GFRONnwl7h6#Nqxs&@}qnp0a20 z=XYxH|M~9!F5gYrmlC>)ZesR)3q~X~kI^^(zc%JHHv7o`+3f#+N}Ek%nzx~sG1Ghn z%tHpcM%~lLeO>*X(}QCJo-WA3XqDY3p;w{X8O^I<;yp5UqHB1Xe|!7gBO_fS2{k12 zT9x*7klm-DdV@;!Mwlv$boC#f=2S^Ecc?UPhVjokG&nLk?Dh?gCKJ6?C3+i1<`YB1 z+lt?z7XJZ8xhLFz!|s9P@;lY?yD)06NEy*@Dh42dLI+xAuxyKz5uVurhd8LD9_~|R`Zh&VYGiK zsdBPbwA-7^654Cu6``t|jOpp+h*~~^9$}*VF?1`h9KTv+i<_j+#n!sw*1e!DkE2Zn z@B~I#%y#2{>(@g4-LK36)>G(dhV=|aQbaGq0fntYl%|k`7ej+u(v_!qZ$m;KN6#{r z&tW94C~ND1<7**EQ?IYm6x|yK^^XY_1R#M^=4df0zrez3mvIBfgpHY zLSI5(W>8;+_`1C|IO!#2F$jZ9Ai|?EHIKTDaB#7%D;Pc>Sc96UcSjj>*U`WYVQ{V` zCET^P2G*8N0bfVoU{Ze*VxVTo!e~U>K+>!TYw0RExQ)N`sH(#YJQPakTj<-YVSj~@ zYtNj2AaJG%Rxg$08rD4V-vZ3EBBAf1?=fxsEja6z9b%MMb;grmNTX|4I+*ouf1K8d zet>?+z<&(G>KPC8z*1ms0pKUAQoGD!Wm*I* zeEo{y{1ba&jf=oyWM^P8xD*UWMC17n_s3v=s7^!J6vOFOv>UzV%4xgcU(mlY!T+75 zGFtc$lz7aKwnYv873rmkt_~mD4P9CR{}cU&3HUpVns+_mBnffinkw!f)e9gM+gEd? zZD9&)!Iah3VWi(!QC+HW$N8##d)^Cv!#1A`Do8m-gWD3}==+j8&OkNrB`jiNCK7Rf zCPupO`5@zUc@3;!Gz4>xSi^@l!f`Dhhh~NN69^g+a*(YdomZzolCX@;naF^1F)Gj| zf;@oph#Dx9O-_DPF5yBIX&*+$aOgyY^NyPg1Ih~9EQ{5EmK;vgk{!V$T!KrPAp1G2 z=L!t$Yir6C&~TNVML{XI#*tQ+u zBwU5a9co)cIOvn7D|BsE?^zA)p%hfi0!^26KH89s|qE1XdI8E_p8 zP#Vmkan)N+7NOPZt*9^(cH#O=dLvg$S{8*xSvgrwtKdQv*+MJj2z|4a%g#eW4SzqgypVs zWlmWMvn|Y?Ds3^+FFbGyi>;#d6$0$NbU|$fGZQFMF`<11c zIfX6Q%qz3dzgG-+0_J1NVmR&@Mz_Z+E6rJgj_tOXs^aLCl|aXt^nDPi;8hkEM<8N> zM$X_#BR-9%KqF__%vD>}TZV9aW0{+;i>-v>b7sV|oc-xTz5&ldK%WnPfnCj>XIb4g zFcyIWcs>));RR;<+@ylLF_Ze3nfUf(Ced|9O*^@W7nul4pp|7lr0f|Z2d|jHLKNn} zygBQ;X--3|IlX(e`pBxMW_vd9B__jVXwMBi3D`SG4!+S05DJS!*E6u2+3|_EM8<$` zg;{EFy)!T$TxKnxRrb?=5`Gzexe?!nUjg?EfiUZSO$lFxZ)aq$hPab*vDAQH3&R(a zSHiDHjUq&#H-K*?9(|DTn-D;~4&MRkW6FFierz}3x4^I;>5wr{b3;7?8Vrpp3v9Ub z*?kgz8-BYHzZJiO1z+Buf4H0eY>f41SNi_cS{v3>)LrgV8l z%!smHtW}$F|8APmwABm=|B=f6J;46GW~5_Cb*eqQAET0Vi`NGH0V94G-@yi`W>(=t zFhHf)fid8Z81W;l3k}oLmzY^%RGg-z>^C{mE}X--Ha)%0hrWUogBof8lLE1xkZ>1U zOD6a!&`p}0ep@jVM*l^X{!fAaOJ>O9H0k4fC&kJ` zN`37mCHN}-8k6PEK$fqYQHHiGO)*(czc^Xak2~MQf5C)*`4$NCZ8J=WG=*u733KK} zD<<8j@mKh-nKXX`(tOv9jM~z)TzfaA@KsG&{ucioljR2>%Mar+x7|bJ;2)b&CVpPR zS@;BqE?Ay^YMb@z+lXZBw}Wp@Pxo@T~y}gwtA(1eHUvRDfb9Yzv%t$G~hZI#6Um^ zgmo`2ZpquE!IDo4XZTUDRJ(Y@LW)@Hi!mBYgYaVHHI}a|ZmjdK*n)}{lcD8V?MO!U zlLL^>lk3>How}94>T)oAeoG@1^aPJoUsKN@CmMrGA_r9ys^n*@T>QJ9e>d>&M*iKz zznl4gcMJb+#VCW>iihbnLbV3^SWk&j$@sdb`+Fgx&*xze+?T(?ym8do?hilIp zf9g655zOWrpV^Zq|a%Y(449A#RL+a;uW_rb8@mB0Xj#5g+slAPlW_Ev^Un zLUuB#rrY$9en_~;05g2nk8#3hssMwbWf*bD35-nraZlKALxx4-CnHe86cJaoDg7)V zr9w^d^E+UA5_Fufc&)OX5XmWWnymzCtv)2Ik~95G8i9NY%tUQr!fE+zFrCCFTIRBU zhtoA_T4z?xG@hMAW>h7siR5D0@(q{Q^e$ zQ8tNn4PcT3{C$M$qOOo~#$=9n1@@eIL5M6f9xLDlt2t!Zj7;3rc^g#Z48~i%Y~3+U zOC3WP%2?tn5OGWUyFY!2^5%k2Yi%xn32a{qC@}M@@!NFC#oXd=7RgQI7D%fgGl8qy zpkqNtoW^ry>%2%lTR_#=Oi?Gjb^M%qIT#nX5x+E$S4Lm+*j~!{-Y$|?kyk@P!G3xY zOeY$F${`(8i6PCA$ZN^#j6nH%wnefwxUskxw36~0K;FxOU1&KBqf&5rA+paQkq6PHk-U$*pZQPh za7l5>6I{TWe1JU6{O^Mx^IBkaBe)h|OH`+sem+b-Vg#uk0aZqh6p=^K?To`8!_cSM z{^7t1TkM}RkjFu*!N{J3M4rGkEPH#By-pDq1bD+@3mFo58jmq)o`Gn8@G-3ckuM~W zXU!;!d;)AcC1r)5ZP~UwoNoJsJWoEINj^pX1R4+yjR$7=d8dl>Q!SMY zDu0%Ij#d6V-@e$nf@+3eG?Gp7r<%HnEsBsY;}xcxuYhj8YDU>i0U8xzt0Ls<_(oRY z8&KiT%_t{Dg~nKgZ{d4?ScPvxg}*c-nN_f+*51|#3<~>e=GuP)9kv}FGUo#+PH>&* zVlz!EiBu?qi;f6OZU3sm@5Gsp+uyZQoiR1x$S6ZY&kd^nv3qj)~4N1 z-6n!W1*$g!BFxgi_5bx5_S7i>^HnNBPf{avOk}GTg7|#!1_+UANX?)o7^@;>?zJFW zNy$pw)rC$;9P37Z!b&(eyKbN|JKz%v%>*QxOI~55W|{}1MWpstgxbSq^VTtAFp%OT zmh3Jvyn>$2_J@f!ZnM4K5*3z$ZLDPvutZPaQ+0&Rzx z&CdJP?Bwe;?Ng8QL%{115dHKt48u#&y%gesY)3bL1` zB{9(BM%vAP1U;|=)@~$iz^Lt7w?#qJ{po28wBJYvn5@_Bgti-D8{n$z?Q zqnTuzu|MOBdrMkk*K0j&(0bU&&w{)pJ3-^jeSW5Y#iWU!BzS4Ic*dFSYjSDk8~iWP z-px2OTTM1Cd)HX1sroqEyagsjDJ=&ECYZjIq&6*eTv`!nh^|WLe&RO5)p|69XmbYC zjac+ZLBoMBi}Vt`fdMZY;p#@s^v=cKDA-|}aL2QCMYtFYh~A>f0u0){^NEoic!1@k zfNx-bZ?W&ZpSL6aKni^DvLor&3wMIXuVc`~Y32|H`r2p;lWLX$J^Ff)zK*^@Q_5z| zr!AUKTjTmX{z= zAJd_qkmybHW=8wTxYRqPU#UIwypcXfKP}PQ=*w8m&q(wY^p))Da}vFszM5TqL85O` zul`h`cc@oimgt-5TiDfCnd5^%TWOMd46~dk<=c)w#*!(OO#96Hfkf4-q@6Jq2Ko({ zXUv2`VYc72g3;Ul2hMbAz@|UoNxw;d|H4TBoPH}?Prr?kyqMe!iGGKE-HZz9U%@1q zZ=Na3;c@lIl^Fd;jld!!Q?ULJsAXJ%+R%lg>L8-N)m+sNq;E(g?=@CcC! z=FPJgq0b}tl5ZJ&%Dc5SVH^oswv~p1$Sz5Tva935bteh#&zz1|%XQDnk3w0fgz_AOz2@LuPj78t%W#@5|x7 zBJTbm+*iikSHZmtHKAsp_#WKl zBFumB%kU^VyoruJ!f!S-XoV2$z$82}3DZuO@fH zS_;H)ayM+GAiSL14L779yfL{OuA-YF-EbN1GFS!H4bJKsi_Rig^cKS=x;54#!zu~) zKg6%N=kY7%bA(?pZ=?K*`I(MiF%J{?74t1UzhYixhzN5t?^kOEK<5Bx4#4FAP!2%k zK;;~$mID=7pWlXF7LoaXB8X#vzjA`io9LA>iF;InsKjzqVmT_Y9F$eErkb>Y%TLgEcAb86b!CO-hynTz{9VrO@ zaEsv16a??wBG`xCrR~M{ZujE5A#QG&-n+NF_-?MP`_TiMeBQHv<;Cws@6+H@w23~j zozMGOjE?YmaEs6TIiH79xW$L#-Qt5l_!0DoHowQV^LsRo-$%FjJ<9n#jy5&h_2gE& zoNr(D9n!%8}&2v^N4C)5R6!05_w$PM8AyT z6sQI07w8`&Ci3^to0ubs1Rm$WgB)%UztZlge@-P-f-wJog8o&zO~2k={qNC#MBDUl zTQI5=|A~I14f9{=VSbwo^MWP}CR#9`-Gad=5$02vYU%_FsicXkjgUsQO1=^67 z7Xev>iz8uwst&5M%7Wubd_cS1sse=wqKvP@R*lLPyQ_QuBH}?h zlR*kJjEu0?j?~Kd1SF0ub$p&aiTnB?sth=v#z6EGK2H$bUVz)R*lieYZ;IXCvWZ`L z7phXPUh^D&-GI~i7=EKry@}uaB>sbQ?C-gAkK;E!h$s-<3AOKw)qVhOAB^2T6a{;T zgFQTdsDjmO;tw(~_IC@6mjLC5H}OZ=BX-O3J4$~5-*0BPU=35~xdM!+o-ww+CFlvQ7rj6^*0XphNMfg$t z$DsbV^Q*^Tyc5u~_;I|+wflV3h2Ip-K$jwa!K@Uz=E=jw^gd*EJb|CqojdF(ejGmu z4Jp>m#pH%A`z^9yE^-0S;}6645oAP1A)`NrEXW;=e*)Tv9|v(6>(VIeEc{Hww4RNy zUS^#GivBc0oA^&6o$!UkPWVdfmUaK1CwBjL61)HVaXkjNKi$IpuyYgtJQlBQeAd-} zg-oaql|bzf5&|CqJ{j=IgijWH=dhUPEoU^JCaWdBI9-37_>=B zl54MNk3nQ#Y(0h)M&yTwAU}JNA_6^s1M;(qwGOWAr-+rHy*FSzPK4U12(@G%u|-8F zO%$Ol+Pd+G2sVdvk8HznY;94tHd3zD@^a3$BHDAG1hyjl?T+s_h&ZHbfQc~3WN6nh zDcYGVneBQeNxOl`(w^a{c1CCSmJAKqHn?n)z`}&uiJi}v&8Ueu_2kXb1wNhR>JnXg^^yXFbHyeT2=N4G;v(*jmv&(z^@$zS z5Vesn^94kNdbtB`nF!NT71I*oS`xUHGPss9xt6lpGq|oqM@@B1RTfc0S(mwZ^S~tw z9p=g+Fo$a4%AycvTwGZ?bO1Sjxv~UE1}eC+^x((`xUvi|1X;MUGEfW3<;r6H+Z%0e zZ-PBGCpNbws>x49ntRmwQa161XcI}aiH2wsP0=RiMw@7fHt|5Ti51Z%I^&vnG}^?Y z3ASIKX#1_Zvwi%+j<#RpOl$jB{zq)TP22X5BujJSE^NO&(HJ^3Z9lw!&GzvNI~#^Y zSDn@{uKpfu|7c=!kEOBwm!gR`{T^(;J<;~BC+>*tw?}5JIV=%*n)E`xKn5XIOcwg) zxIsB5YIH+UA9^z4Lq{JaqlvCV(z=dC=S<@|w?th>$6SXD!&5QpI$2TI$>XlWlvWgV zo$I2mb1>>U)p4$KG}?-PF)|)W%RU$B@Xklc8E~GnN!?D;ce_QXPSfqTM!P+Oce?{x zV2XBoZnWDiyxUm|4n(`XBHHcFXt%rKy1g^n?VY3?vS6Ip-P3ysb@9<%tG_IQGi86> zwx>{677cZdJ%ze++M#YPS(=yaBGf5~zCWWG>h4Sx>QsXeQX7PSMPHrLAYQ(wP*)ZW zb&eMi>H>+)o!>dsy{IO>Vo#y2EE?(@FCx?_iMGFRt+t<`Y5NwvGllKH@_)qk&uiQM z#bjw-wRhVOYTEt-yRrQYZNsn_s#6%o?Z1E9U)-DR@41Pu{{7qj5?R(5<{x^Rgd@ZJ z!^uLwMst|o*!3`fzdbREcO8qtsp&eey~bhQp)t&tr5xrjk;{7-=Ht6Pb9=X2GO9JZ z{dLzk%sVuO`LeXb{A0<({0-zvq=9>|XtilsiA}SJ)f!EEeUe4jzX*#ii(0fp!=mex zn|5Q=0-uRkp!-pB>n3^G?u;-i!3ZrGPL0;RA!>vM9=}0<25^KeBb1{?SQs_J(x?%Z zMUBuNHNrY>gbr?m?x+#IoV+5^N523pc0k}&#YajWhQF8K!wweY!RG{g^5Jt9KKtM^ z3!f^610Oqljw80}iBKPWZiUZzwp{fHTaaL1VfJ;)qvSQ4VNk|)W3ollT=e*$f-a+*-aZ^6)XI-Lpr=lVIw75*mFiS9r?^ky`O-hxKZTakj^ z2G;O)bP>G+T|sY(8*yG0?af#5&GW6^#|ETW+Qc!q3FFeN=jp2Fy9 z@*GqppCRz|1&p2`UwR}`ej!r+XDQ0Vk@CMtE?1{df5qbJcb_IdQsXQ6$yU8PBlZ41 z1?~fp@_*96g?Rn%5!~O#;cE1q4H?G_%;KmIN9;R6Q_6vF?!LmfOg z+y(A``A&2Wy$juj-i_`9I0O$*)q{Rini?{y*I9|E?UnUD=WCnMoBeYSQ`Y zSwVhP5jpRZ&rkkPer4xtIP9uAa^5E&slkC=smUF?VrP{y_Ig$cvmd_Mwm-$ZKS@z( zcMsW*J!ybk*wgMIL7E`pJ?$Q{ACS@jxn)nghwP`OG(hg$)9xYrQ7R3P2lljk$bPnxePyps73EB|o2q?Sv(Jli7iay9FUZh7Mgl>a*z z6%AmTUi<>gwe&2lfH4g|>f;=jnf!Yf6^pC zWu_xbppuH!6bZp+h|pLOtq<5bEKFIASLSjOq~y_}2!p9AsxfN;M@!2HaCF#7|LPG1Hk>9HuwA;x%VUWeThNfK6I_z6>aYOcH}+`97g!N zFftmuR_-%&R*QR8ggf;_xX&eXKZVp6HckWgGl|?IzMa55-nV1i19V=CyM2p$PlWqI zGWWB#n`;Z3rAua9~ z>7o|*TetfCgAwja$=ojhhl~8Z9~mtr_4{KQ{r;E+clJA!k+I+a5A^JOJzd+RVfEl~ z+}14+hoURNal}_P>D6T7*Fd{&qBn1!!_ZrkN11oUk1{Y?d83D$fB9%-VQ+D2;JiE; z=iLc74(RD9j)UX8g1%A%=T*r#cPHRDq0gc?PL6XseYFP8Ym#y9Nx-QFuZ!YTbIpH` zd_SVhl87>OkJ2|LYw{l8_@>=)yf=YkO+3dMF8Lk1!?`a3r#2p^mgBsczC{D)t;sm| zC*ah9{Y7!=xCVZ`e=7~#4^!E@s2Ew9`5_oKTS)OboR8yXNA=^l)lu^}Zg*I8kK@A* zi|{x;>age^$JaY7hR3nTVaa$LcRHS+f8cnMz7sxo!{*#Iu){JhQj{E3N7SEG>{MN z4f*5vSuNy8e>IT15|FoIyqIEaXaAsr7V={n$bEZ5{-QSWrUtTqZ^&Q8U(-Ta}y9GKlKFtlXQc%q%l~tpQ%g%_gM|Ne|IOqZ6CAQk65OF`@9C+-3f5p zhi>*0mnq=Br~!9R0-VMO{?n9jU($fPHvw+@@XUUKG6mdMG~n(_fZIMwvmdBT0rxcx zxcd{}whh)s`e*d(ac_h&GK1r3`qv1lZ-g4?4-wlsVp}0H44)PlI%OC-Eii1tBoGG6 zA{gaMe~~4!Kuzh7_+KOaF=8)sVE&QTk%|5U#{c)gym1=o@em%x#1>fp@2(R+{ z)yVx7e3jo{jojaj@8$RRM(*F2bpOeu`_Cuce>v&?8%g~CGKv59lKB4!|AgQFgxwPl zIZnFSJ$$S8Yh<0@udDRrYl-;en~C`3e>?H=0p1VD4>{fsBjvwHl%M=6>Hgo6 zKc|zK4HAe+oU= zh%s7Wt3sINAeb%FV3sprwr+yi7?0UP24-V2W-AMrjiH!L4={^9m?ij_1rE$obj*An zf3qYTGk3)-O~xz(#?0L?%V9C|6wI_XoS3~s#Sbp?w>$XpeSW}+pYY>{rTH5r z{FMQIsEVH|nRWH>+b!ryG+FG=u|f3Ey289z+PH!Cq)jpMJ-@%=}>F~>L7_{JFD z*y0;gd}E1k4DpQ}ewKl+PV;?mej-zd|QTZu<+dg{t_bJ zvEX|>{QW!rRug~!jlW5U*&C9Wz3GVAi`1GT zM%Lk7ZJ{j%3gv8Rxhb?k9_9&4*YS?Us#ct<(+9cs`rLA{nQxTqExp0! zHfJcAk(&-UMqp+?s~vEhz!@771Rmdg{U~Dx+(O`Gd#rK52?8gF7ZP}QL%FWZX-a=h zoh#R_>y_eMwAd=?g^*G!XvOACMAs|rx&x*O+`s!&2b?Bw%$QHW5nWwQMuZsx_eLgL zXNiETP^=egg<>sVE;b1~5Mc(G%j=qk)+y_?xpKAIZYeobODbN&6|dZ5%H_x|=3aUl zDV(krn@vS6HhH~TS87NBIp+>eHfn#6=~KCUVd5O*OF2(5y}3?{>U!uZhpxv~44P!7 zPo!X3Z*JIdNa`dt$KX15+%Wt*TO=aT6dY%kj&3tz0X&o+fa3_FM|hd6|86 z!6WeS6dZy_U2r?x;lxkp2;4bnxfyM{gY4_=R*}Giv*-3Uqkqpydl}LN55j*#RG7yJ zJh}@hj7Ckb8CM6Ot`8Un9-!m~j#D(j)hT z6$f?`7@Vd6(E1`^4;u6XEBl?Cj>zxaB((bB@)w?yAg<#o2{jDDe8kO zQ{aJ!3+{xwsM%u#j=@l!i#aogC~HK z29LUuui#C@FHK-NGJKQ4B|9MlSqwzvOyHqCrK7990KRYvSA9{h;>~|G+O<}>iqGk{ zM7y?zUy$b)BOH-kW-tMAPEa6^*4b3zrcsNQco`HJ3XMamTl%QaelcAvxuHl5Ib)+8A@ zP0v?Miq|K~Xw70Ix14{l37ttYM#{Aw#n()fu|J6s{8A@;3A~oT?W1$4DoE$`m>$OH zuxD)f8=UZE@a6p!Vol-NwAdqoue4Ig*i%O0tDNvg_-dQxjB@ce8cGMLe2rayU`=3z zzRn3>3tx}y?BaU=@J)8|C=JA~RisY!Hd}vr`V$zTZ*jsm!?zMR zH#$#hHOe)$S70$PXroiCQMkXIz=bio6X!EF-|2+!fbX*LvQQbru#qoym=7WG@3!-@ zky(u7JDl)6@J<^D%+S^;1m9-|fi-~<`T-|=Km4Fg(3@_ZL)O&1KV%p5Lvt9pA9ljK z;YV!b8jPhMwUd8qB#eIC2|ormY`mTZ2h!-;c|Ci^mj8qkZo*I6$U&#{T=rQzIjjkc z(0iTm96WF1vICL)Q+6&p9K;`R!u#QaSl+IVmrMuzG&awh4W*8io3SSFDRa3N!xC?q2k1rE$Q|6F92W>l*T0n%%3_vk`v)Z?D#y$n+QCBUA7T@JpEa zcBkTikGkM)qwfET3z9}%|5Y@#)lm=C^CPq8XnTEYuX+i!yk5X?L+O7L5si%9XNdon z6FvdIP40UaU*fcEuu#vJ7qwh4)r!=(PHsMNT~O=heIL6YEQNdXHgaB1E9YHk=R@J^ zh2SMc2&R83S+CZKc(t~Yi4WhOdf)-}D7BCeiTy{*UUSJjk}dl-^VLOnt`n~C>ei~9 z_GsBawv-bXIVlv^g@5 zRQ-|~iI$@6Y&ua>GGbdv`|1VWmzL98;apX7$JKvE`O0Qq>a9ttDK9?rWTmjqt3FE< ze3rnP7U8&BLo%|&1%0JlI%SSYDYmHx3e`ZfkWR|}vY%V=H#-5z z*9W#3;yMv+fP6(V#2M`mdGC)3Q0%V5{Wzz=;rT0yiXukm2 zp@VEHTlHMEwFf{E&cCS($>3tAz=?~zn%$H$;ZiOWl~;KGG9?`xC0$|SR8lB{L>(HP zRS+YnuqgDG$0V-CmGY=%ek;7nt1S#i-*$f?6fU90?);Wo7yVJ4-xiff)r_%fs+mo@ z+a@w;CSH=pW0h@J22e*v7frK`yEKJ2Z^tei-MgscHm`AlJgBd`*kX znS>rMh00fu&E|r%9Ey4J!BoePGN$D{;uu*$bFTan;@q9Al6u-LYs#> zG}&arzGN`qRs=DP_E{53f$c(u)AE1X80&<|dW}7=8k%P_Q7K0AS~}&H6Qwzp*9O^D z5qy@@uII|WST>U=Ws#k1rM?!umo!IF_Y3G@d?D?t`!;IZ=PSDV|5$ zbI4{(G?$|jXIPR!uUc3c^|T8xO2qXQ=7HLx z;R;)7at!-HQ(JakMK%$k=drY`F%wIChQ-9PK`tD_61F{JYB^wnwO5=7MU2JLfVUzW z(_xe2WTi}8m&~c_<8h`>sYmoXQ(?=+DXHMdEUrroaKMiqCe34ypQPK zXJ`j$y@{`IDKlO+nwG@<$gWI?6T3ogti?LDNwvzm5p=c0Jk9HK(>Td@uym=qXhm>R zif`&+nq0E!ESA1h#jK=5&6Q>DR4X4!_$&jY+Sy>LiZRKO4X(t*@5xmYTDGd;^0*X_ z>tYULA>(DG$|}Bl)fIoNU3@|e(X|Pxd6LpDG!>dU!vUI)gbiVZ3sI%xvcF@H73@16 zp2zUxN}|AQ$iz%Akc5rO3YQLakhL%9?|ERdO|_ZmDVmY?&^=`1J97`?b46Ok3@z6v zFk9G`$RjdnRnqi%m`1qNDY!0%bp#6UAY$5r5PbqY(}JAqf_0((i+QA+B9qH zC$uD+lUoww-E-HjNa2`71V zaT95FSgn6THr15%z9Q|ft_bLH0w=EGE0RXVqou0{?sARmpeRP|N}7EHveEJ@LTKPo zYO$qcO6WaNIk?aEFM#DtNQhSk*{-Fv1soCVMYjFWQ>>bbndDh<&U&#ZU=k@{=mk01 zDpAAE8p#oT>>bvuq7t4y?hlgNf{Yj64JD% z2zYX#gk+-BGPH5Cts$e+l-I}E^*6QFXwQ~TAiF@n46;5hWsZrkjBnkQY$mpW;3mp%93S)xJ?$o1RrRcxor(| zTU=1l6*2*jLgOl6R!t9vrbRk#7Ui<43MUW{=I9DlckWVdNx9)x*j_i(>W6W7Sh+ zt@=o>6&ZxGH07pYY{_$+8y5@D^wRZ`$vE(72hf0rL6W{h)7a2WgD( zZO&{vf_!uLw>e>8*O5B3+1Q%P@r8e`N%uS_>7N$%CGmO=Stp=9( zQId6sw-*KC_BuEe-s*5?|z)&t?I$d@u3` zOC0^h1MA38>Egmz8B4UztTTTnwch*p+O3^jqk0bQmZB6G3euLkY?6(SVa;9``+zWT z8L6OAYgXfWZ%;?&_<>)rXtEjf43?#heND?&CF46S(7n%MknV`ktq2)w5BptoJNndd z_+0|Ws}(F41pKKB?uGm4PtJetf?tQNH|On6Yg#MjYz_v` zIN)yx_-xO4?y-{ny8U-f_*?jUsuWY@9|<_?N~2i}ASMLvpS{YRn|yxF1^*2HGKB>G zm4Nr)5;)-B2|TnnGN^y!e-e0j9~c@s{g)Fy1^-RY1hNwWpQaYDI|MOyYZ^X-rkqh~ zdTqU3n;EsKhX6mj>jBh#+1W*a5EP6YI(3X3o+jil034+kLg2x%6V(x=nky*LVoO<9 z^0>a^Ajb)uRJ7K>JpykWRB@Mc+e_pAJ!#=ur(RsLJw7tFfLDJsO)9t0CCC)HWr{e7 z3za)T;7tFNVxV1Phd4a+j0ZV&8r7X9aJZ_}(YCW=lWff6BB#ljTi|2lHuTb5yQ~!q zFWsJf5$?b10n>pqDtp=T4sz!de2U!Vg8SiRm>0<1m{HhD^Wgr%ixJKRe+7R{edK-u zXNOO952Y3_!h3(K5sD813%|N4`JU9go@{kK2ATOVSdGhcST%wn!=!GK>6YyL; zs9X+mp1|AfO}Q_*4$Seu&{1n+N^y}_pyu#$YVA36MQR_@*iU{Auo4F5Au^8+WVr{u zgLod^n(uGMZ#7#D8rN_Ae@IF;WcSEWuOj{_@=C&ChT;j_s*S4QA_95p zG-l%fY9p1^n$l`F==m{TFW_)0Qmz$a?P{*rSfkm3zzM0PZU`{0oLEX;r2g!9j^+7-s@F(7z7j#DncW9Yeb z!48~YOXBC{$cMTxcjUEiIs6WI@_pcuyKvDMmW<(5#vpVd{47NK|KEgFy6*LFxe0R@ zKKw2?cHzSx?852|WOf7upo|Zb6}+B+!=DDh0f&|ykT}F7dIW_B{C67Fx*f-}a0{yI zL=}HssEQLF#YN}ANg_DQ#iWnJ6$+aP&nxiWoqb&bc!$n8)7Rtp`DbD629u^I#bF?) z2GAI!eP)FAA$n}lpiQDUpW^hKiPKR=|D9d9x&yE7LSg#!`(a%^+=YrHAL&9}l8<(w zEy>5aur0}sF1${Xk9XlKBzYQdy$J`r_YHqI;LW$<;OxS;;V{*Ox8rb27rqw(tZ)97utqFX>@vc`Bj925&^Q_^gTDG|^wD)RS`~l2 zw1ul)gI@XuG~k=iOW%w>`VKfX0P%A}5U23o-L~dC+Be^?-C)vBFyE<(=1bu}d<8J$ z;%#u0nQzH7pM%k#>B8?&r#}6AhEMOnAML=O-Gool86yaO(m-$y7KRa=8$$4IlnW5I zlNgb=;=kL`#qY%NA($DEbjgquCAxpNFX5o}j=uJPd4qADp#99a_DBVr6O-n6zw^<@1 z7UX3&81n%vrU$UNHh{%#JuGO|Hi>=|J%D17>tQj?2!|;U&yktvV~+QOiw5w;9r6f^ z;iVn&C=26P?T}d($-)jfM}zGJa^X4h_)X$wbVl%T8~CK)>M%a3A$%UhJPgoAe6FK| zY@+sCnC&_kYTK}gK_o)EkJo>l;3Xd7Wq9TKcv-3q;WgdIYvBeHW&&Pq8@vedAyFe5 z=kN)AcJ%xXxp;$tX)S);z~ZB3*hOjGnLbP3pKM4hj*@5&k|0lzCy_*qeI`#}`Z+}Z zgwfQ`qVp_SdS-;q@o`b6r^sdUl)3nfx!7_3d4e8$gO$glWR(T$VJv3EPOLp=k-$l` z#aRs6GYH37a)pJ`Q4+`TE@XHT*?pEAAxFtE;=t=Nl0QNc_*6iBPf)E16`9bGCN%S~ z%0y_XWw0`X5$cdE=Mh?4n9~y)u!KlduKxp2O9u$5rC%zm761SxJ(oc#HY1l`&OZ&8 ztp>vhw_4#nZv`@k$w5MZNHkGaT#~>7DpV3s0s*2)fFyuHG)}UUu(G?e?g0t5YHhWx ztyk5y+SXdznwR_LJvx6q!U?K(#25Ccel?(fZBT=1Scz(3mk5Z^(|L)qNAdWT;D~3_ z;3eu%w52mLr1+K4V1iWjcBzqwGNP{40wE>n(}Jy?wp?3Qw;)tz@)W^=aB^P0B9tIh zBzZ076A&7Qw18(s(?hsWxFatqK4Ip^( zt+3vw`n~35%1O|SL4?Km+4xm6mzfCV>0=0|*;_1m)u{$ai&+S@w!|XLMkq_0fpBWd zFuvd(ZMW*_Qlq;x??xr)^{WwAr>5t6oa82lJ4$7O)MPY-wm4u#HgRRfmiZCz7 z)#+zYo6;H~^thQ)udNCE*oGRy~;ldhK1Ll=8U zxGiw!m%U}-HW^NbGiHDYXCgR5N;smf4{HI0rEWbY_%u&PFcgdSM#HKSXjy2lEJCr5 zQPQqT@*z3;3X$Vz*OFl+v@oe#5ggH7KC*U=B@cuuF3dXB?+f^dgRb3jcc;}ZU8{Lj zuZ0MnO(B2g8^o>mm?q{6mDSlY5_0_oA$Kf#$gmdHG5FfaPYUBeVI!wUq#$Z5gf1T< z8;{p(%&MNtR6UPkMTCHW1gH3hFUv`$vrMSZisSeCBtUe z!f@-MEa1MNE$7BZ+J9>b5ho`fwyC$VCAT987f^rXD-NjP5ek<(?O7k4|Jz7U)kO(k zicr0xAXMKzab&me4-m-{++Y8v^8DoxQuhBwgaoI%fD$u8LvXo&r_?ave^ydaL zrmlb2!o2)I*k&Epa}<9$Y?u;_$MCm-acd*9Rq?Pce65{cgy7gQ=aA#oU4{rm8S*jm z#G_t;^0^v}1uRTulYx&?+;%hbmj9Ilq;b`aG}}@Qvdo_Umu1pbmEkgYCo{{ts4+-v z_BD|qpO2ajx2X@LP~{7bw509sc3*Ut%8Y+=VPTZ1^0`kPjgs;KCE6Yilbm_NPVCLTM$chFwOd;i5+16nE}4&-Vw2=ntU%VymQACYL*M-!c;J+TP4Q8-isp(rJp zc~;DcYEvjeOg|2vkl=RsBqgKVOhx!qPKcM8R?2Q?S!Zh34vX*^b8gRk%<=l16Fv)f zGjZ>d=<4$XYi5*Z6?tJvsI3sXe3gH}+JZZuoW1P;?-2*6x^d^ge;bWx;pDl&gAz=D z2fq zqm0^VLqxVY1k+A92w$SEErDq#mF1gR2gi=n9%Zel#S?DU!%lb%9w* zc8@ueFFWBW_=*f)fO{pn`YKgfOk2aC2x@_rD&%}1S0s7{zAlkE-yo~HLjG99#kTee zclKGL#ePf}dP7*-%PxrBx8U2%%-@lqp4r+sL`Wq4j-zXIEtcw0V-a>?conVq9DI*0 z_I)bMq9QCkUh*)oRQyVnRtaKW17i!q}c{8+%gI!~w4sRJjm45~sGg z78KzRRK6QAs)yW>g4WO9}99nS=u6#2VoVdEwDy4>oNCybV%?L7L&qk&9uXG z;#l~>e~ZPdj&}Om%%-_SbXpxJrwCYd#TibNkc3`Vz{=^T_N1za2YdnujMcwN4_w`RPS$pp0Pbq=<~CP^iR{aXxc|xe~mHrzUDITiHZB zjcDxJ+U{6jki8>Vz;G#~{#jTMq28~R4h#eh{*}6~b}7-JUA$`%aS=IKc4-jli3R)U zMnuY6@}M@_r*(e>qv{A_GCSRP#yDZR6qiZ31W#x7wb*@pTbwE3Vq8x9YhXZQrqykH?x{1~3XfS*cS8@;$=_eoHLTg{cSnTDctPy3dw9X;*q1~#whS<}@! zu)d?cbKQSH_tvhq_8wY58)m(0zH%$Kq0Y}YKUeFUn{|0+#kTD@O2eEhU3xr99OIg0 zX$57nTe56|Gj;=&RAMY>R0~b+9Lr?AR=TNhY9nxY`eGr!x~%o>KuCYHTQtgE($3KN zcT>GgH3oTRS*K})7ZtmlID$TEYV-%a8cP+~RYAOp7z*dLT zGcA`qscg>R(csn8NJCJIHUwDF(qOP@h*AZ*xD;=)UE&Oc)p=T-yl067-sy?*$f_-) zz3~xNf7=uAt@1G^eiUz$;g9eq37*1_C)B6j^GP;?+m;L@3Vv1Fs7{=oQdEVUBaSto#k}H%SC*MYSKN7SKf2xE+s^Q?Z9p(Jd99p6DwSbR|#?R+w}d}Z(A&k@B}`|_We^8CHUn^e6ot#Umk$@8E=2U8`%oqp%uPci8osH-Aj1i{kz z@R#^2<{kFOfk{?#@Yl>Tzmf4~yoG7@JJRg;m3T`P6fx|I0!oO&fCVy{oc@1=e`X8+ zMaBp9R^qS3>2H;AeHAzu5Kd~SH-+2%5taX*B?}2Fd;SAoWjy~$yEgT-M^BdRqeH5p z_P+_H_R$c{QN0a`ol=Vb$>{GAuXuRUd_%(5@J*^9j0Pmq#T3o?yEV3-Bq#=tjPJ#( zNku_O^qg&)=2w*<>p6FrH8Fq2TV%l@6jRSBl#s_zNft3uys95QxiSuKjYFSAA)tD7 zGAodhZ)g%Vgig9HwS*{0g#MtWMI+HLQ}X8j!%3C}+uX-mf-ICt!VICjqC}`5d-^lg zkcF9ovkHoZD$=IcHxg8$F}AH7tZZSC%okMkP1DD$#a=M7YI2)G^XY%y7_8JK;?03d zQGkM1S#MMs+D*naNaT(n6+67ZVrNHEuNDgrsqCPIrneEoG(^ z=Fs4D4XT_!dY%e>e`mcdZQKV&ZCo7XWfy` zx(m9kSoarLsbS3sW?#^)ExdMos&Fy6{p?tlvnmhDgk?2vz2Y;0;i02f>HY|u%P zJVn?E3V$wgxCPGLDbR4GA@m>&S>dtk=!Dks@TLpzgG;RN2o}nk%bsAlle5$yWF_sM zLRp4kZ&KPz6Rg9W^(c&4vA+CRSno?`eFa=;#ro>PF}^0r`rYXmzYpGTh4F`uj&&N# z>)?8WM7@E=J`Hyn;cBVDOq_)AINX!T zrozM~;lRk=q#Cj`8`Fix%$e<`nL?TX_wh}6zs>>QO_5fl@f)ULg5u>vUD#c;+)?AW z9fq3XFtxn6rg(WtP078$H3uWQ0-QjfD*DWKEO$)8BjbOtq-lL9qye2>T5JC@O_8{S)EEBed-^9y*c_ zML3y*wHkja=z9Z{Qf!r=gKTv!sdXOAg-*&1T@=hWkppa@?c4)iiewr+55soYLvrnd zeh%_#f_yHG{Stmf$*YvS?*;fZ0VToJ@EiCoiBSeu!SCSr1T_Jj^s^h_0UqoPKYM`t z8TFA#KP%GRXBuAWKZF#+rm!T_%sXxU?9Wuli&%eZ_}OY2VKlQQu`G_2ahz2tAH)*` zI1ExIPp^sRtc26C^8tfbtHG;^^Qw=dt5S~Rg2U*}hfJ|f>mHN@^@IuKw1z5~zViNT#Th#Q;9ghoukCc`i^SV^}llL26_ z5mS~m_IExpiK`r!-&Axb%rl3B{dhKeaOF+=aaGfk<51G{l}AVHdvdXz!Y z8?b=HUnk-kGjstHbj!?!#TFVnH7U$`!x(?nNkK{*r*Q2AUoEi;IZ}lU@9Iq6xDMM5 z^PIzxB1&e3d4>@(OdK?YP&tXDj2lcyu1_Gjfg`yQI}A^{me61mR~bkaa|IT#z+gtR zF^-)S6ZT^_qsaiZTL*P1EKdh@X&R{I+|(L*VF*qF%>=-zWLR}4oCJ0A1Ydv6 z22?E@RJxvvTMRH)8DKi6p{BoS3b$o$maqv)XA(&#_Tu&=l069|dkM*zcs@LANZgP} z1jYBUb+dy%8MYsH7_xL2xR)`cn+$kU^5|fV644m#o>7xrWl6cpaA&G2#|sj2@q&az zxzJc?BQasjB)(E}+A_M@Wu_WUO0s{KboTse057H)`a%~OwHjLp2l!&j|1dMNmtV(` znQ;&kb>mK=V~Eu^Jxwg|l8I^b_fKQ6zbTF(`h=%2HidiA+^IAR79I8aBrNr)Qiqd3 zJyBWGAlp}aanz9g3?p?&)3~p{N|?fTSyw)~_y+2gYiI{tZgB7z+82{^T$z7sa&dC< z3aTZtimo`m=jb}0RPRt(%Z>~TmKzg0lH~ayHFR;j?rsnr+hC-boDRo9YCepUag28_TIra?=~~A@d>r8reih&#eoLUM=K0e)J`4m=IqmKl>v8xIIY2Lv(GYG(H-&2}G2C>5NB9My?v(RfIx z2AI%&S~!8PQbJoyreJ?lOU0&43e-{>l4(jU)W94n9i3E7*TIQ&Uk@h}Qcfcv6$$hB z-%_ED*_`+sq0isoRrn|T3;s>t{2sr8PqTaarhEK0K8w%s`{#`3f4~>{{fox)m+=*T z|B6saxV%d9pCy`?g%fF&=P7zOGT%bB`;ei9Y?~n40m%H6_d;pBhe2itp5u_EA|Cg7 zJmztfCsg)zIkJ?`dr4kh@cxV!r@WQt{S0qnd1=T?U|!)MtGRgE;>Rld0ED+L$YKpY zz2V0Tyf)=$7`(gYQJA;zyvIZq7g0Eg8RWlEO9u$j;7T~G6aWBamqCjg9hVS&GY6ND zfjteEt>!%nm!Jp36Su|tJ^n<0NA5P<%LcVQk>(RIH2X#tP!65YY0c7UIhmHQgoVwK z8y2~{L|!7LCu1l%qm=rHd~FAWo2ZEvg6+k+fd>!1ODW_fd2H{L(c$ucF^OZ=NWp2((^h!rSzOh&uDrsriXdBf}V1Jdajq|0Kjd) zo)&<&Xql?p2y19nqSq=~g6P#kiw?bxrDcX*i)mq@S3OPf^qQ}|4%J@Mwbw-LRo*4~ z(W_Yd8r&rY(yJd$&h*OPAqFoQyj6_cA`aX+COS>RC@9zi=VoDc{C|6?Ct7H#K`VC@ zkP@!v-h@vP@M$;~pMi^i@L9N=df>JA9NdD>!(I3Sbm5Dz4PT;3{bhKH`rixqCwLWK zfxqIb@GiavpHT1olFIMFzeHUI0``a!Q7Siwd!w7fy`q4|oWAcA4!zHc0_wAZuY~J; z_FPgY7pyE>Qu|n!7-Kp0V&w)Hv_p(rLNe_Vm0QG=&0-qooObblW-+Gx@r{sO{`k%= zF>MoR+yW(1ADS@oK=}zusM&L^VuseO`q6L(d=vW6C~;C3FQWHAd^4t-RmKhiQAV)x zD0lPpj$0VzET?RXn6*jP9;uZEU4Bd#j-_3gNLw5v4%RpGhf2{ACTn(}uGxg)@OI3; zTaAiV6^F)%_K=8wXb+X5trD}fQHQgrdM>zG7j2eoz%{&j#~RhzhB_XSN&5ASvtCyu zC=OZ{7S*)gZx-{Jvjo-7*HpU^?v7XO#yHh30RFRyyGgC@z!3a96yv)v9^Zpm_&ywl zA3zg+2uIN@*n%HJ06&2seoE`sXK*^racAH^;cWbz#=#eVa4GJNQQ79`24Gx7l5yQ2 zE7}ceHc3uRy20+`Zb0b)Vu7yygLL(iMPIa}e2Z9^FcpfkV{~te>fR=5#iFS050B`+ zmULerj)4E@91qvGEQ+I)Wr#7%C_1eI(O`g{Z;sw*fIiwBy~zN*%p85O0eZPP`jH0c zW6aTyGC=QtZ;pPn0eW9^^d$!91I*Ev8lV@MqaR~{?lMO|)&RYqIr?!1=tIoWk2gRc zYL4D)fWE;T{e&p`u*ja;AHi~Ds*O@MnetPvU8VvA%ay5i zf~hiGwT5hfJedj-tdC4}Nc)vjAu8d}h1n{nqACZm>JZE6SwYWAdc5?kqGvTdK6={d z@zWEar=6ZP^aSbYpeH0P+D5TfpCo@IosejuB&|+d1#ueD96O_=G{YK+ml{PrFn=T} z%@R$TGPO>uhXP%$CrY_i7xY%HVjas?oU|X^^Wx;*dr`$N_M;b7oYH$QsyKCDy{KYC z@4cwvwBCDB#p(Oei^_lDs25&TamIc*!4YTf#}gcJ)_y#}5ohnm6C82QemubuzwG@9 zjyQKep5Tb{_TveTIA2_#FA`VN4u7BL@Z-y$;?DK@rXAv7O{Pc*b!&w=OisMnw@@p zbdfn;TnH6WJN;J?JN-hrM|%jX^f5I_ciGr?h)0$<#TN0X@zJX$1-nMxQGZ2ylgD%l z6}l+1$SQdvRpG2?;U+Rkl1_cYB5_Ej3BBkJUU0bhe+i(IoT;~n9m{1=xArdaY$Ejy zF}$&1)Jp2rrS!Ch6nmV2HQG2iJtAB ziyy;c?=~fi7yHC@0Pl}sWRUoWlHJY7KbR2?0@oQCr8APWuEcV5KNZO_;Rxo36?ZJc$I-x8js{AO2KS7k2dT&qGmd72m0@W)3deCYG=G+(p^~HFJ>w`$MMfwi zb&d|zr@ww0M}e?1Dy)pwc)_H=%`Gv!^izssc`25>l$kY^38!u9*0`pY$C59XAGMa-4hn0gQ$*oFN!uB2?jv?t# zX2g=5AxX}T`Unoto2U5*V%zjE;mz4c^*s{Trn#{U%#{pOn+a=RSec)K@Xk2G^I{3l zlY|d5>lb&2l?7@0#jd!1Q4>qPMv_0gXZ>OqnM%9y9e<4@WeN0Ucbo{9)s1;nslQU( zG=_G3xDo7Qb}98?<%s&RGiZxD*JatJEJoO_91E~bStcmu1qdr`>_v20Gz-W<%ix-@ z(y>kHWCV`OQBK{ioXPKB5-U->{5ZS|bi9i+JmunT%4J;DRb18e0=kr2!piO2l)D8) zDU6PzuzyLX@IX>cWpQ|0b-ag?@XF)xcIkLeB;k#T!+ToCdoBsDe;nS+oc~HRvu|AH zpLHUCO(HTN4sW-P_g)fSQ5@b!@s+vaGC$Lae33+?UmV`Q;)x82%luIzVo@X!8thTL zp|N-tYdnz+ahbVsnU=V`e7%Cg2$vE`9uRBV7K$s%@xkz=sI;Ok-r zq=p%gik+}?k|%7tWw>R8-lRgEl(lTTWemV3ISFN3D(QDNFuDmlir2& zE+XX&02|Hs{b3+|52p7J`W^-&U?hEyf`1Yy1)J`mQY@3?JI6AaUhhE}Hb6Gc#`#!- z3-ECI-79v z@HY8m}}5P8Rkye~uEX(8{2kasx9`w--v1@bNc z*;Yq(SRhXy$aXlgwTx{4BHOCS7A3Nch-}Xx&ke|C7_yCpY!4wjB#;dlWPdXQ+3SGp z8$jOeBk#$PciG50V`PsdvKt23&xq^^M0VXFJJ*oCVaWa}WCs(n3rOBymprhNCrkVB9BSr@rFE>kjDw~JV5&KWpoVxJcb-`B=0}T;3j#e zNX8M$>t`~IUS7PCQG7C5Q3hBc$AHP>cX<_1UfPop^T_ULdE-!Ci71m{g!0~D||FC}x zcwAM{GiNus*_)eYvwd#grD@qFZPOQhrIa>p3c;i;Nm`l$hHY|_F5T>g-3@I)s3I!L zL-2(lB8a5`fIxr02#6)%rnJaY1W`c|Mcxk)Q4mFtH|3u>_wHsN_ii>#_5Z)`hp%_< zx#!H8Gc#w-oS8W%`q07scLKly$9RO1dV6PoAX23V^)BP5J`mbgt^gu5)Su=*!(SEj zhdQg)Z8=SEi&fW0+x$U)_m-+-^^hL%$Mp6FJsS0Q>Z`(C-TqJ@99mXyg|K>gHG(@6 zodQmTDFdQZpb$Z2G_xfvLPcA+tEw{`?hNWx-H~uCyrrk3YPBA1iv+r3;YhT+zpQ|N z3t`d#@Cp>u2>lfZRRfK%CZGq~Q->LbP?}MRFneG$K|K{q8N#siI)n+9Q^Y^@dWdKr zfiS`fM1fHVMF}{BY5npKgw6+_^hr`=?x)tyuOw0|cz&M0L z1D>Rtn86L9ZK3e?kd#7`9xJcu2?X1Jb>eCw!e|>H1tudXCM1;_)~()9Ut3NcEETDo z^k_^-kM^rcG^r=V;$%ZXY4(CaQZTBl3Uqb##Qa-m0-E&GsrQxvK$hj903q@o8P@9f0%6eVU1Z@e#y8PYca}cnGK9{ux1ED}{IfBDCVAr!_2e)V%ArWAyYiCie~ugtPJvIe5Lyw&=Aydj41X}tPIa`o z_s>sNPb?6uYL4tAh?y4EIdsjHKuA(pG^ok!A5;S!I+*%SgyLAZW@k)a8HxCJvJTlZ zGlM5vO93y>Q=M|6)LUFq=SL5(b|OPaOHALUq5NmX#WQgFRS3W zD(EnX_uBDA65M&no5oOi*B}ZpmV6I64uc+nLyk~Sm&H^y9Tth!rXsICTndne)tIDF zmTb_>oblh9nRHe)I14_*({eUKNn)|DjJ5>=2uJ!-VmY!>flz0Eb=vB#4aBzUJUN^4 zgY5T`oAn(rV!q2CtBpj6PJ0V9ER84<)baUmaRU*q!MX5xX8t_#0kgZ1`Rkxf)|AF< zdmgQgv6}2mRG%;;s;xJLFT+=u_zMuml~a5bm0o=(Z6+~2Qf|f)<>c=l;mf_b%Lu1t zK%nexVy(YRZ{O&D57yDZ#$*{7y8Uh2h{SRQE};OvKE1M?Rl72tUe6%R+=>@@CkMlpOdM zu=g+V=iJgNw)KaY;GM4rD9Oh+C$_mR) z)Nta(F43cZz`j&>HnUmI-+mX|4hMLd_Ni3*Dd|n7cf+A)e$Lm?`M~9HhL`6Z*xO}o zT4na5mE3q=jtSaGHQ`7y5B4(^?uROb@_YtY-~j}MO6|@5PMHm=)8H5IkO~jNFB1v1 zsz^^L7U1aJNdOXUHHh-{yoO z=y^_8J~^;l+wgPnyh@C{K=WJP9qfsg^Om;Amz@WKQpxuZI{Z_mAHq5*_l7`d z-$a-)z_wxF{kIF=g11%rA-pB2mXWZ$hftbkEsZ`OxZr*GkfYui*>ZQoL24=Yhr*$b zo=|yz=5a3Xr-NJ5RvUnZfT)5%QCf%&(r;gXE@(FvH~>KYAUS7QN%MMt*Oqoa+xreb z8-kq*y2!Qi2V*I92wzOqupFs*3$N0yWAn~#z4|08#m(xl${!3i(fTIli&0Zi#S&tE z7`a{k?(QIww`7o6&^0|Fxg_QgMmLsuNH`vuq0UK7Vuo>q^$e3&_UU}hfc=!^p8QdN zIGQJa4Ds(pSnNAQL~a~+=u(?2r8dDs8Z{9?OI;uePA1dd5$0fdp)X6?S%@setKkti zRmCY-&cTGeVM}CIiInLoypKoH{%*@~xq>suwXm0nT-jLZ!U~+JVg*|Rt0^X@c+DUe zv5jY?VHM8dshmqwNt!d+H$VqBF7Ob4xW}3>@}%1br+YTT3`q7OT+C!IA+ncBH)Sa3 z+_=mG4pyTX`8tU-mB%1d=IvA(GrQ7-E3ihz74VD-li0&C4}}tmow~uT1&eL9QSXUz z!Stm_RBP~98Vrv^D2(V)@?cZk$6VeRbv+(GMH@5LQ;EINNw^kqjBlXG`oGkFZZ5t5 z4Qv)(Kc5-S#`P+U#uG@=tucQmJH1%PK5#3|vcD^eP%*IB6B9>1E%hU(CMruoazv<9 z(%RY<4n<=Te;~vy#jUMTJ=n1-=#SFZu*~>!7&Z5F>yb8Y*9l^{S<#eMTiDv#MT`m8(7HS(05R1p^c=B+XhXIqWwr@L7(xUixx&5s-%4Fvymwi!4>hjX|0MpY>LD zx(A#XVTUezgObV>Q}HzHp-JW4DDCzHVa)%gM|EZg^h)Ozklc5P>W{}yEhAPw1B zE<6)IgD@|Tk<+hf5Ubnq9F@B7BEPm%kC{;gJ7P5Jo`g3mla}>?C~w7|!*f;e;O9-& z``Z-!0tI}8gkmsXo#i(EB|N_vzldL^!K74E<#vRP3Z=`p$`_H=FGiz3rmF8QPiX57X#F};&%8kMdKW<5>Ob+|{x-FQ8#i-k`oSJ@4JDqf2>l2_l_8s^jR zsd-6ns@+|i^5B^}iDTNkb#{&hPE!r}R*eP~Q0XF*bBhMkU^C9BiVZu3?%^j7dE z8vYnAX8Y8KFwXLzCZR}EE%hVw6v*dF!_Fls*n7MW-bvM8*{m%9546-MGisR^l67*c}uD;rlfG_|g&tF2$% zx^_cDO>HCD-1X}ko3kqG>(+iMvvSO;b!(fN8&}q?&4M3)-Beq@rgc^Q%BIW~Z_|eL zwT-f+HnVM#Y-`N{QPxn~yfTxF)wNBl8tc|K*R5Nd(Imnhh$H@AyQp?cMN|(YmI05u zhJ4mDDKJBl;9I$d zMdaZ$;*R2f)Tjez{l8wn_93R-!fyU#VSlo)2U^&JRx2n;i~WZ+6Je?Okc>$U(dsTB!cTk@@XW1uf z@sqW9sB6*qs|d#q{woL77_ceKLGGK$b3s$h6#Tb;hEH(pHX7g2@JXZeo`z2ur4KZG z+9-Xb;WKbOmp<0;Sy?Ag!{>~WL&N7~t0>U$1*1;U@Fk9+Mhh20pGBnnf4@e?L!wy4 zw}qzSTO819+arOP-l%s6{rra})6;Vb4dM2lpx&fM0{&p&Oh3=p`bc=kPDQw7O0Itd z>D-uq19((XCWa%7&vDO!0&<^>KE)`$b2g|9zcso=a4)0tl8z*6SMGtLRHKZvpHpWAx|XD%Cx*Fuw`O?<~@Mq zea@K~I3~A;_2}eKI5xS9b8M4MG?QaHyY<;c;wal87RY0^oEh)|99u(r^AqVjs}y{> zB9?Oc*&cwig<_dYREwiE?7&VHo)E_*PbG5RrkpBPy5I^?L*4-yf(SRQNn9-$ZYsf-lf)}Xp3Qvg*)FRuK#YX?5RCql{e{$u<*qqVK zF%T?N;VnjB2R7HfX&(Q%NIpuQJYnO10T-!Q!2=eBWvxFb??mL9ms}dqE_Bv_4tpx+ z8^bQPhge|Wbd=FKhZq;yH!YH#=glGGoJ+#SOwOCD;)+~gOBiepZ(ZXpMQ&P5MVx_9 za0bhNz?gs^OwZ=yoY?bv`~D- zEzb8q0UsiIZAnwa#R!ER;fOyNv_5Rytcgp+rN!c_;%l0iFBUNRZxH%#y2S#k<4bve zNqpM_h2nB~6Z7<*Kt$&=md#mzkmNRr?}#f^68Cp$ckBp++9j7YI}-;1WyuqS)-xk+s_$4@~;uLW$AM8zM`R>-lBEfe-#2zB?dbe2Y0fi;t=<;{dzF@&$Cia`e zj~M68nrM<|A!09Ky2T9_d!UFpa&_vlb&=X&RF{AAnZ=UTto%g88E2n=CYlZEZYP}k zJ>bHKCQdYl`6*T1=>b(-u8BLdf|eyaMp2Q-E{*?{^5RXyZ^5{7Cu zpngqN4|`x3L!B!8T=iS3dekla9w=pbC>=q6jC5ENe=zucToYRjd`}SMlOAw0zS9hR z&rsE~9w=jc+YG1|sOm+34|o`=%YgbbRlV$i;S3crM*S;Q{mla-80vJR zs+iI74XXN=2S%}Y$M%b_(Qw9VceLroMK1AgQV5DENvL}JtjtO+^)mIRjdhzgStO|#HWgzQ>WUjuhtys z5Gw9=IB0E@)ABV#2;I2USe|h)*1SxZ2s9|}mS9#|l>DoYM2up9uI?W~aVVsoTf*TO zCt!)mum2ZrNLrxHeO=Pwa;U1K$WdHcNYN&g1vA;u9K#%i9vJN?C2pDmogsg$hYg66 zgAz8_fsk&Phi0CCEk2wIlVCRbsXu+2m2QKg^_-^G$=LC2nWmV(Z5vIl38K}7C>mLn zNIt7g;hspF&L{KKy(S?>0}r*AHnI5YLO~k8F4PgGT}alzTo9xzw5GrbUjCmM005N_ zTLB$qR2Fa~efwYrm5=A+SbA>+7tDlN1mU5t83e=sl^pA4Aq@cVOZr^|i$Tb4OQ{=oEUc*92S@Map;BQTBj|UO0RhV;SzKBI#}LkudG z8gLWv3Rnq_Y?N#AM|o_L*P2Y!$62AS9~`v?>bi8)4Y1Y*-(HD0v>4k5^;oEVz z>Tb9?6LYD=tQmj?W|P#fQr$I!L*}+c_I;|mc5ukbY?1wd>UIwfna38{byT+pt~Zg* zHjz1d;pR*n!&7iL({TKd>V7;pf=1X9w3q5`862{aIg$0|#oZ`d?rx>J+XhF_Xj_7Q zLUnO}=rcFLxh68D7w(9|otbFHq@YQdMdZJIGHIDg63qR%96@dHqL04BBcVeQi5J>c*bj~rGR$2uyW zxaZ*22Viu|%s4jCKn-3e{}k{~p;zHo5&yWnD!&MkW~kR5DDoD^aa|uavc5PRqv-cV zDEpY)iV_8c0uL&1fB!$6l3tiZ+Vl~BoQ7C5eE5hF6ZxO}cm)dH1INd(FkckKMYxy# zDX6FXo03}im=<83$g}~GDKJH@i>t^Z1$Y>W;1SvRn z1?#+CFNR^T2{&L9Hj~*X!dIxgk=CpmpT`ra6 z{5g0xo=kP*E@2;@LZu>Dj=lJQX=-)BvG_x5r8*Uk$LsJ^^g}T;;I+5~+sF!#4M=RP zRJu=kx8}xrA8)LjYEGI!hhf`WkTC1l%ihiL+r6Mu3;=*6?+ z_}Ms~=Ptb+zaq%UshK!acc2jod&p-9Caz^BE|0|Z)i{2`T^h%4-HqRW&cu|u{dkg? zF2^ejPX`whi%zQBjSb_LPq|e}(lc4w`*i?XpiT^&PId;-gLWL(1qy%WC5)t=MsU~S5lI(a(ASUfX6cOWPC8?|@k-KK)6c{2 zn7V^klI{rXcMi6je%`!_mil{pvDbOdrH-p%TdR_v|3Zx0k!-gj3o z-o{(GlLE}jB)28t_z+EqElJE8Q(uNB2`Q@R!+m?@Xo*os z*Gp}156{Gnx8r`(S6(3{MUXsI+)JH}SwJ#5hb`W%#fK_zZjSM=ZcA?ZJOz0bXGb{#y(15%%DZT7ZwV2mhS~ z_!xWe$1K2i*@OQ+2|hXDEITuyMREi913qr*069(4SslmgsdDBluhUz=-j%n=>oONX zzg8G3eF8Xt$ww`~CMcx!tKbIGh>cK;CqfBsf>LZDayG+oJV6fKVW3ZH&p3R7vuCpO zB$b3LJw+vlEImynrz|}~yLo{uJxg_kvh*C46j^$nT8m`q1*&tI+W1GQjniB-h?~&6 z39*|{y73u$o~7qGb~5OBLGJZ#e9@G{9+Cqw2VM(*Ie67HDHxH*Fv(rF(J9HDH_4qh z$(=XJoj1vyH_4qh$(=XJoj1vy*WgZ;Ucx_vYV!Ff$>$6;A3pIV$?MC9F=4=ec`=00 z4*zl(^9}gQVazw+Uk_ux0sl7id;`9E81oJI+F{H$;NORyZ@||NW4;0ZK@PpKnm$Jeyid=E^c<{=3!q2PwlXn}aDs`GJ{adH^1%~6t5Xu;VVsFfgP3BA)F9boAeE(w;s}#umtgc_ zq8y?M=U9_{OPuW zW)hNR6H+Nss7tdQMX$!i#sMiRN~36hLn=iZBt<6j^QJ0hLD0(L@K0P2sY8pkSq*8Q>q^Nap6sgqZRN*%%T4AolQIaBB>!K|# zIt^NIN+vDEDYT3dTT*G+B5B!b!>U9)Agfv$tASMX0g3*!!Lh1Qmu*9$s3eVlqF^dT zK}k{9;3z7gE+ISNlf~-JA^c%!!Vjm?5|*@_ZpSJy86A+-(lk~hspumTeQa>7mXdYe zhCzcOF_XLoa=LMMMZ?T{#P-Ya(wXES;2uzC-YvGr#aU}-Ep_&a&w8D=i!UPV7Z(BC zF1{|PbOk_MT*c7=XV%&1x_xnf@%^~?!R_KY2Dp&{e!O4Y#_xSZN)m2H8r&Tw+}&Al zm1%H4GvOZ0f~!b_`;`gzn=H5yX>h;i_CF>YN2WDCZ6bL-3(1%?xR*@0SF+%CrNOP1d zXtK%Ia>95lfW=q{%TR%KEP@Ns1-GFJPh&B>hZ;`760E~v*ny>Z5f?{-}wJ*BFp>g69;dBfxRy;U)?j;#5}WeQN=z7>~lCX^*?o+ zF3R4fRY!rN(4=E{BJ!$#*zX`g?3Ih5&@oz$Qb>-YM%wO$QhK}T?VG1ek4MSx zqs;bdJX(GqZGMNbTYh&N-{JysA%D}a>@U70E|cGvne9ImH^}dQ8_f1zajX2k)oeeI z(SBD(`+XVh4`j6eGNb*GjP~D&$K>~8=J!(>@Xuwy|0$#WFB$ExX5jlr2K<`|ct;70 z#xT+M2+{Bqjq@kM^(w)?NizEu$)%Tgzl->LfaYW@$-UY!mS*aDa>kq4(jjm3$lEdU z28+BIB5zs9n-KDsP#r(c4ID4i{{c`-2MEdkm5R439zWV=f5WjKyBHh>ITiC@0_KS5 zROUHD9c!_UkH01G{juGd$3{blJR18!Uir4 z(KEnY01;yHX- z4{z+lTMkvke+_>uNXKAd9@_YS$H}qel4+vE6#-%d(@Ez5M`)}sQFMBg0;`u{C48Ae zw69Pk^$LYPFF_}KEf(1@=)_y`HnE0zVr!TOcart!%OhT*>l$~Gt{MN7L)Z0oeR-Ty z)>8jcFW#AZ$&ESp!`MXMzZdW36_?()7w;@Tx*Kfee@74X;@#w)NrcmdShSH1g`AIJ zI*n$9g!d+D;~NRun3H5HcTm~17&9w%{SJ>Yl3&(`_wNzCMSCIJEHJ?yo{EhR;Dfrx zmkLP{C0EN>T`ehA^UZ{4K#56G!G{wh`A}4n4+}{?f{*IPxsN6pZ@5X9WS$tn3ho?f zWk?jLfBEw*Wf6Rg+~i(-f+M7e{0U9ujbsH$B5zC*`2?Ew0I!nSzedjLTQC`3r@he| z6xY5<6X?|haczpNmL;)KB&r}Urh=#Th~7<9@M^jW=y^0gt&9E?UG(;TC~7J1!@a4q z^*af2x5wme$36I5OzzJ_<-UjHUWm`r#LzgNf2^N7JuM6@@GBF-N4Ch8wUNNIMw>VF?n7Bwa{l7zo@-Dfv z-%*3#Q^|WI*guf7c}H}yM1zTmdN{sF3y07j9;7+V#M2>q$`Mb8=_yw{9U;0rT_rCF zf0Y#F;fvs)W)5oLAW{b&5drgC_>#`|cH)~eRhYncu`P*f%@7I&cdInw7_b<6UCEX<*@{1pyyf6JbJe7&U~-)y1q^gHzX9{qkmzaP=>C-nPS zAO5lrf0g9Q^3x1Z^F);~1FXc?C>n@*qF1Ay=ryqdyhXlM8_PUBZj$@)?G`8N!*`6g zo7!+>4c@Vgyzjd@LZvPZKC6Fk)i^KKcmckbzSE819|x9hiYIIw#r$s*b;xRce?*0} zX(*$RCxU;XO~YaQODg)V1l|hqeZqvOl-?JZ?~*5qF7mm82`9%akAnW)6jWo`sey{8 zzv4f1mhFtg<6n6f{I7V7*}f`*{}gQhE47CQGO*46#Kwee4fOA(py_OXgdZof{gLS6 z7=EI6u`0UumPHuNsW}m5dlaPHf8CIq^JL6m^MDmDO-y4xm$>@kaoXj?#&Dc>z|V7Z z^BO0JXhIHWLpaw-Fhr@ap*kx|bqS6v>t(~aj#yEI74K&gdEEX%>WCu=ER1Bs*rXT> zY?xqSGMkbhMou5^SzZXa$LJ!lu`4B3_YwSDlkXgoDs8>VPwb`1{2Xl$f1jtAJ_0S!2ba+f zrMDR z{1AQwKc*{xe}|&w_r?4BT0Ks}Dg2$Tq8>}IOuU!r@9VHhyf z@8{_C0d~H4KVN_EVHb$^3v~L+*yZB=a=rfQl=|yZ>TgP^f4?oI{?2HB>^UgFbyR;R z@pv}z(L;S*O?Wqv4E{jlEMZ4TGAj^aDW9syeFt)HfPAq+u50A03i1U5xpPPEf{{B_ zgIg7HMaZE*AM-cLCuibJM}(!~;7FWoAP)?Yy~IuS-%v{j2qbc1 z1u`1|0HIfx(cwELmk=O84wu6V!x^`$jX&N%8Q(>|j`OVdZuHjpy@8&ZW7n=% zJEQfUNT=8D4Xv#?QVpnKZ&dASRwEH_kGeG28}bHx!N4Mq6=?n9dIV=GqyqT}2V{j+ zpb%k93~IKdN2u%!_SWhMHiT(e=oJ`+ zU{7=))MT4sxli?X8K)V8FgB$VVRm*HziLD&rqw3*AslGAU9k&~8lW|dL)g!XRDlTy z4kJCnR7>2p{t%5QMabtXg#9y8lGaQ?D3F&3GcwaI35UJ?3QVH`@)E(Fc|c=tDB4d` zOh+ixu75L0L=N%z);3bF0tX@}dIMp4wn2dn3Y62D`3m8n%;c*AU23;4pmr%xgZ=lJd+$m}o(yz`-O7oszDakAGdZ%F{@qoNQ^gZZg~b0%{~-m65nv zlJ=BoK7kCy?m+Megiy5B7wz?i+$33Spyr}Zzc1j6E=I^JuUJjuUL>0iSPBhx5U|VvhrppW zx_??uH{E=bq&BlWJL~los~vC@G>rlUjwTfedBYKPc{oU_IJaDLvA$qUQy|nAZHZwB^FbNau3Ev9N-C=p!6lhlruu!oK0?q| zH^1Ct=Ju8byVNcd7HWag(!^aitx+(o@M%L?j7IH!kWXO<@;i=Goji#00Z?p9g1=La7zQ zq#P%IZ3$&slmk@gX0i3q0Z_iCA*0n}L~eR^b~56yMQ`9K{Rm6FcB^ID=PkCc>y_u%SPy>M_**8TPS)H{4+$cju^586h2T z4xG!pe4C8FH)ZJZU|0qo(tbx6Nq=Y9!USv5f&UkP7gh3J6?ALNms+ihB-p>t2gui5 zy8|wSi&*j(Qy?+o8R#rm1AVOjjd=%L1J|+uuA{gxeF(Y0ZaQpriOjZMr@2$M#|IPF$9*lX z%@2p0;TC58R!WK7lzT;Fq~Ak_N>mNI^&G=J7vX^N3hR`KQ^R_W`*O)?>p8W!(*`r( z`xz&#rMu+`-cvF=&eE(hLw^N+U_9$mZ%YR5wZT1bA2~ghnR37baJQX$eu&^qb$=YE z=H{K32*!G zFA(+hsx=M4&1%;w+A{?nrCe!MOH&)28XgNG68B^9xD9>;d&n625`Pr~XL(v={Ukg! z3MRpiIRvRlug5vzX}aU~27-a^zJNQC5|V;09iiNaxR>Ho{YR=MG4L$>l+)km#umc! z2vf^5Q9I%1c>qwrUx+Y0t*YVi_O9*nHmgx@x3`nLX}d09Xi7Fba`JurT}vY z@n!hEi=^|4EFEOzCceXeFyCSF2B+l6NQN!Ty!o%e>%94I(E9&`a7g(+0y*K&`!2P) zQfhCz0O1{qUyb&mz+cGPx`Q0G%r8%qb{de0cpdN_{M8Qc!hhf5<#3Y~DDZa~TW47Q zYOWOh!w%K(Avq4eR%~>@N1FZq%X|;#joeDZYPbA&d~3traQ_N#bR8|?WB7zO>OZtm zpBk;yjM@pGyNLD`bC&8xtX5`oWajoO*h}0Zj4ebosMSb;oS5f=Jl2X*OCkje4LfH# z1MeIb*EyNuCTNW%F37jq ztogF?HSqQ)EK4ml9&sqw#8mQoL6!XT_+{lt!Q$4exD^`2`eQKt-+<~pw#yY%; zba=HBDQYe$Hw^%=-33J~k8!Ez{9JvvPO{@lJTsZ1Nj~F~p1l%c?$3!y4wF*(<)eHB z4|6MA$()k5pacP@QrKz3wMaT&o5Re>4|z!<9hVZQ=nXjG6nZI@CSGgA6rk-#HQuvm_wLhYUio7adWp}QtKYw z(a~*$pOo^>Lz2==$xxu=_a$UCBT-y*;By=~34GoGhrwc&z|S4{EOLMO2Y(?mo*0XM zH4srFHT?EahSNRitt6W8;zg@MAvL_BVPU!nnS(EC(??{iX6ML30*oaoI{chrEyuu@}@@5vW}Kj%?*t!c|cP`N28~)IibJkk6RE#Vb}CGYbCQfv>?GoLT(Cfp4(IO~ikuJQ<3;Y-xXS()`PgAK<_3_&y&u zj!j`-ltS^4-^=ej%}hS=nuA?^ezjE%`@DYN>0Xu&#i^SqpZipX(uoVIy> z&+rS)gJgJ8a+u~D_Ku`Pp8?JT4-=daB*Iv+p4Fu!HpD~gT)`P-*sX{HqhT8E@Ky-L zCJIH710I9{J6>2M?6iMe$=9bsP;<@9b9lEa!-|AMjJ6XeW26=xEZ=n*92GN1 zuEhI(X2nc9Ze^hn)AJLAX01iIg?V5oEWfN!@Sf7IPs^U)hQTdT|qTc76?YmdO4Ua(_zZkqt7l9 zRhCoK5muH&JjJEvZ+6d}6N{3~@_sV3IUIyr6G(fjwTZc6o&#I(ShhFP^rE1g!|S&! z4rm37OvMa`SRf9u6Y`-JENaVA1Rv*Ke>#S0GS8Hr{))rI;!$FeINWNDy5KBDPAgrW z%R`Z@FAwXRG1qdY1sXvuo94lmRAgbxa;c_gd0|@TW}f9d^ZC`MOhJ6JH(zVDp~}o)p=rt1B39i9o`iyGsp1+uZT9zn#`WCeW*)Fhgy-Dfzd!vNN5ByCYD5bD^is)blPj!f+L=&T} zCA3bbXmWv_(eiq|A&2PEsMck9d76btL8?XBZH~4{b?k!=wk9JvFB(zxKKV^}T@|cV z?ofx=pb0KaOO3c-6rSi10TJY`e~r|&$ti*^aPaD_c$}wAGM|r%3`?n#fyPLS+$n!@ zpf6~F^)$5(afY^{Zxj3HxnMM}=qzzIcYT+-E^vyoT`(roiVo%@D;qz0U4|K&!}c)6 z)CK9Mk|MSu6l`RFl(infisKNMiOcO`o8Z@wG};wmmD~;a^eZVW_aya6e>Z-$OX3&yhKOD$Pb#GMF*-NCTe?>Da(({|n^wvQ6u7k4{Eg{WlsdkFqsr>HcmK+6aB z;sF;p#Si6MA*c2E!YUVoe@;xJqzGC(CcDF#;9FoF_S0~e@H3F#oq7YEJnO$7q5!f zDfTxUJ9a35We%~wn8y77IaUE|2nPMCH^3FZ6OC-@{lw?n;vGBQA}I4Kpzz)GBTDwXy(-x|xv9~uQE%r4+FPB((G;Mxe@CXX{OG{m8te;qs{DL` zhBw5-sNvB4v8^orrhuR3Zwhn=$;rwdmprfUIJ(l8!ae^^Y3Sp(XDz$kQa``S2YxZZF9d@&dRt&h2+&&=*MPEwI%L`igyl-j)n~C0u0&eSPjS zz99~Mb+U|agqzG{eA~#NlOS)0J9G~-n_4_Le*o@E1++^*hjw2FMA!~@>tpBYW0e88 ze-L)0e-0mI7_P*JKL`W*YO3|&qB3>l2E$09jnqZ+khH;vH3V@WxmSfi-Nbw|w&cyv zAD@3c?5!Gv;rRvQ3+5M&FT9s!@FK4rw12g{F#6Qfhu@?0(q|HVE}+kJ`rMyCpJegG zc6fLgs@tn~!A}sXcEhW{-~R_N2=DKK4~F2Mf6bC=>oCk@s((wWFPRDpG%8ev(5_Lf z8-@y^!qH5H<0aKpood<;PS>a!hM|n94wO{0B-Oz>)q){hs8LOs^$d&|hPw74tZ&&4 zd9%hBRt@6ebanjpypv)S?h9PWZ8Rv=5=z9$~z5<&91q#&Rm(YM% ze{>-I8`DHxpF-YVDCS#2fgzm+@`}(-|50-hOeo{v zBV3M0(l+K}86JgAqzr|)KOT+85KA_ke~cb%rWr{YVyaJ9kI3^!SN%s=^|`{N>)!&% zlNvU97+1FM#x(##cuJ}&UT9Fo(MDCo6$I9Sr|Pz_nD}9uaRaCh;<`cfJBxQ=Sil~z zr(#}dz#JDd3@#MvSc`Nlm&DpMh~IJ+58}CdFwL!AWk7PpkSd zcEB)$1^J{Jw1p&WkX%lOBKp3D)^jbm;X0^-m)+t&8GnhpuNJ(3 zc3t<381v`IPFL_VRDCZu>7KE+vfcCK0N$T}*5!G(!sG!Q7{tLr9NvRJdI%rq8|Pg9 z5Z+())OIMWdWt$8-$BC2Cm~eD7d0C4zJQsul4S}$VU+f*25HwO>B7C#w=mAka((|w z;*1nk4&hTfwWPx13RQ4<6 zWh)2qXXH#C!WZ~fiY#ByWLYlN$so(}Bw3D;0nF{BuXn(BxZSYsx|iGIKOzK-Z?77c z0pvd!e`0(YcIh0K#g4W7`*_~;ql~D3pH5w1P5nwbb)hx&tLfB=6*b}?@Q=FIHt8Eb znzy=2-{^#7v~7Evh~6P5{I)?tqvH}9jjxeojyYU>O~x88%7q3NK=8(Dss$grHH zfBe@%I%K`RqT&HztE9teP>dQBV=4GbMej54RxI)f6Ld^!Fy?FUdfYW@O73FJsu*aA zC8)--O9PcxPBBhr*(MlXIOP-{!zbo!Up^?tGux=7&af#P+h4(63$``T5=+o@wkL>* z$!t&HDfn*)%-OzrQ0yn!o|Za8e-^g+f5m?bwl&ZaOVD(-OU0yQwoBy{Gw~pEwr>~| zlO@{=QfD|L8{4z7#)54Pw8RoLo$V=NYBJkXcnU5W#$BO)tdXr9H~>cuii7R~C4W2Q z=iL`~4+S8Kk1$qwE;b%)qD+)0)=(xVs1TL9F;9_1?$qTEzT8v2d3-f@9ZrQ&)VcfrSa8Ml4CNP$OAr5KDF7c{;F-6RAqdm@;A6#4<9h zIMyHm=#nB0=YgE%O&tpqA8upnZzWf1?yXqm^_-yD2{cs#5zWJbgUK~ z%U!AMXu+U3Zcw!D5+?}QEl#FPe@=LJi*Ek)Wtzq*nr z@Ec{}m%srLOqWFk%VK&aESm_CZN{-e66-WeSrjJ8qEDB_>87&SnoSmGSjmDc^;;Qa zu`Nj!XBuU3rUX7qoSiOl}%7uB9xLBw2h%m&L`Vf3nz?O%|7k zOH)l=k9>?Ke;GNrR&3K4!u`m#a6RO<%I4}P#J1~TOEpC-xE<`(d&IUuaYf6lh4};G z+S2@8;zlGM?*P~(e!$%BU@jl#0IoD&TTOn_YIf?Y`H@^rY5s2UW4?NpuYMN4`lYT@_<6H+aShLUvh zrWeurFNQ7&aTt;^DNiWF8VE@-|;XJ_M=Q@68%mtw82#R-JjZJ zbaepTpFzKFYR{zKgQ#6Wzm@b`O~13~w}v9)TKcVn`LKYrU8}|Ai7(`Dk@%8y>Q0*B zceJ8s;Aijx`~rSSf8X5xBfJT3$@W|N{m=0w*{;*u$KwgIeS+2&Ys5+1rf;p?B~;l~^>#Gn{$|lH+x>d`{FM6_ zii>3XBE5Z^xLvky*Z33niTh>ye*OMX%J^aNsBAx~)9(>af5`R|di(j5_AgS}FN&9B z`z7%qOvK}f|II{mKJoP;@p2!{H%ypoXr0f~Uc3pPk%V0&#Y(IdU(rq-jtGadH$XmA zkPiT4Z-wkvk$oVtS3wR}ko6cju0ReMkdJrdBMjvQzshr-CQD{^#+ z91bD}Y{(Ioe=I%A8ZxqZA!n<|=`eDZE0c8OTw11$GOd&OnXCx#*H_4;3R%gQRS{Vo zmvuP#AVrp!@m#FQR7MIX*0CGT$zcB}wAWupJ zhcN0tw=n8JNz{L0`#zi`!9j2&2wYPmSW|3|;LL+qn~Z6| zgsCKkX*SL=BF|04BFn^yE63H@Y-P4PV8kHSv%Rg~1*K$H2XKBznQbpF9>S%MOpjYp zIplmsks}wSLxewgs9#W)V{u?YTtgdGvHXfuDazMa+e&yU~Bc`yCARn@ka)+b2mxCMub$y_$Y*&PhcvMzeGmWEV_$LqN_D47EhtEDKTP} z8p2lBQ3WW)-*+rCF6A zP3mFkb31)s3T1E^jDhVY?(1S9+8HCtEYaMUL<4`j#g1ttx;<5*^gI@~7?PZCNYZ`) z$~vltFr_xQ!X!p}OpJC6VJv}TFe=6niE$)ugZmANE22ro_5kmjnn(zGAQd_{9W>%O zc&Ka2Maq@Nf?x4@>3GxPFXNRfk8xdn=1fEaf5yjI56dommsq>8L zkEVZ%X@W!Gb9kY#c^jc*^ac9n(-U^q1!ot#Rq0@{-3ns673jN(r;G6tLagt5k=VB| zC%P|Q%zNYZqpvgY(j%@j_}=s=>I}RLFE=E2CXF)FldGR*6gTcZfLC`Mz-v0HBX}MC zeU<*MAHti4aA$&1=ckBPx5>#d(N4xIsmp(h+T;~co4iuE_RX-*pnr~$y&MPd){YWs z2)}M!{plsFdy!IA4GlW6|3th$vy4)lsD1ON)P0 zC%HsNDxMy~?;9kO4-tBNh_~R=9%GB;(Qrm${2}$?5q#txkg0sL52NrRMyh6G2G_?{EY{v?7g?88^M z40$7&wdPTL=T_KWLoSEAz)^D$--+PwS5BX28^k}C+xFo< z5ccE00ruf%66}{~SwymPY%90vnz2Qs!iZF~Pa4Vdqj~Jfu*6^&m5TVv)o9{QwOX|@QsH{)Ao8NS6afd9|y6b~Mf<~)>z2bc5Nx1rNo zV{v}fUa4-cG%s0~W(&Ie>coZIk$LW*b zpNE&>74iOx{*HMl^E-X&?;qkv;{79iy@Zm)@AN6=rBPCucrP>FkClHWi1!Hw{FErX zw3y_OhaVD#Q3N%GD0x|0O|*T02s7DYk;4MAjFJ5p*)@^f2-)zFV;ypE679C=mqq7` ztWxB9LzFbgwS>shB3+7nCo-2PqWI%>wN8epnovh+aVSJffsU zF0w`OArA7yk(+3Jks~a-I4=|jTA~>dr)J_jN8~+mXe3TGkh2g=Q(cwELw?M=}3@m?nd{oud=iE&4GLr|{2oTvJ;ADY7SONsl1cF8rh$Ns9 zH4e#37@5qBGZRd#Yqf4wTWhWRzTjFh>aauw_uW=oyVzA*Yi;eme6>~l&bjZ+WR~|P z6N3KwNB!~Mym#-p=br7Jd(OEpzH(siQvk3?yn#@pb#}W0m6}KE(QkjvzCfr%0YqqO zJk7P;Rq1hgyDQgkIZf*b)iee>TppKyOXX3TR|~j8T4$3M47$3t)xI9T%j@=eS2UU- ztXWlqke7%~0UN@MVNoiOh2UT`^CT=nS%rTY@^*T(U`eCTx2@N&KrzD9 z)SwDXLdeqLNxBgYZuD;R`p)o5DYR&zlDb~Er&A-YrXozR08)QoI)Y+A(o@s=H5(i2 zOK5XH(DZ)Vf@~o=}4~7;w*-t#U1K#`Ag;_U>&`#=&>i~ZNl`71F5<5LDpw1HRBx%iY4o`MX=_VBx!lE2dU@?N-?+OI9wEu|NNQ|mM#p>n;S&4PchtvjfJDO_M-GI=DlwzPzH zFf6FB8rHDn>d8dX!$5u_r7;XiXJtBYDTHzKXl*5y%VU_!W63!LB?wD4D&_{=P?x8s z*W4jQgtFnF2d9ugu@$jo6eo{bI;j{^p&5>2k!>Jn@7!FMa-}0JxY~5cNr{J7@g|<~ zcm%PTTwQ-=j~3`A*LadO>XBK!1@#m#WXY*Ws^_L9)z6O{6;6gzSP1P1hoz!Ad%Mfy z?xZ%_+=uj2*&A|uDq92n1W{qqoWj=Z5ria#>Jce(Xi^n4=wj--5pqJly8e(>8wj}i z*@mo{DP?7=G2kU>no~-YDr^G}(?Sk@Vo$=*wZ4CV3@{KjnY-{5p4j^1T!|jCcl4IlR3+CaP*VBoeKUMP75L3?L4x zuB7p%Y>;NQe^Hu=XH|tS!C9=9vk}Hb7JF^5!|g^m+!>S0k(Y9NyKCZBcfC8bRb%Cx zkRE^JP?X%N^@WJ}9#^P75Fk3OJOn9zyP~i#Az9 z8uP4qGKdUKZ< zPTjCT$=k#_SC7`Y$>nLFiFIY^82qk|ZA5=!i2`4z1imr8v4&HTZ`k1~xSFyR!iz9# z*tvPsHSjG5jk-3HJ6Z!Pa6P$0t;ZjtO=glAa)Mg#4-(QF;U)*%05{WSlp3i5x2BYH z6~dZPh_F|y@AC(w5K~ODki_Xs3aRHh&7d<(Y8NA?gM#!r(La*_LR4L4nN zjHM(O9JqjBRj^QCAT}&Z?3VI;%npyj<7{q^IOu5?=`nGa<`gQuAYx@Ya4CYiRcR-v zR@H}gnZ>tLIOxd*9DUWLA zL_0tleVvO1COuM_-?76R@LiJ7AW&= zC=@|UQ(fuQa#C$4KZbW4#MnIUWrz3R*ABXon8w7ee!}trLT;Q#(8qjehu^~QI3p@e<|Pk4 zqMj0$*XQl(^_C1(rD)$=J;Hx=V&>#j_#^y@D{z0#&4Ry>%{Ws*=fU4H03efZNE>%j zLABAqIO|D$c!y>6UpD-SP&k9I5Agh0uDXEEQ7=^ip zX~#Y#-KAx%vXsh48)lO7F)KF<6@;bEgG7{v_Jfz&0+t%)6p%%!lv2ko5CzAQyX^9D zBDKVsB<&T+Q(@2%m5vDtb8IXrF3kV#{38Ubtb7Zz>G0m`K z&&D}S_TfafQ*QmEL6?VR1(1QN1E%p#ZWQq&iFm`v?9*iX*r4?W`N4=8i2Qk2Nt5Ax zgsgxTq(ChuOiC4X(9kMeNE;9?q9=~JrXj_QyPd;jLTUCJ=KOzoU^9t6`3z;54pNI_`(K`#o9>=uAU%5+3;eC2$nX__Vx~+Hy8@I+};ok&S`HCYM!pu9#@dw z#wO+%W2w8>uLU}|Un7V@qoF0PHLJb7hm3{7+xFfV9)e8m49gICh$^MMlX4Kr+li4= z-c;IumgiXZ&T%Krgfab7 z@tUa19-_6LZp}Q5T=pqLF53)1y6jW!*v_@}sx)SfKhl3DiJXKT4jN9*CbwG)8Idao zCZzR(NOUI)JdN%ki?9p39Z-N<4c3SH6g-WR3PM70zO%t}Tk~K~4sJur%W|buW92r} z!i3^vHOB%di7h_{m@Q&r=J4SsJTp?tu%u1Fvk1nj zO1!SOXA6HHs?TA$q?3-8rUj^%KgnBp4g6D5?KEUfUmnVyEMTNTU1-M(@GInSbklEg zg*vv%nxcXilf5RVfWZyD-d1{1@KSOeTYP=3z6Nhd>t>q9$J>I@PAd8;Uhcrl@Cr5; zlNd*?vadPt68t(vx$W&fJ~^C~mh@&>eV0(;IkSJCIHrA5<6vRxJB2I1-ot8z6T$zjv)qhmHi^BwgcdOupQs#b#ig)0h+;-nkd`#qdG%xLTmHdH> zh5LVwerQ7zowH)2pZ3V+y5-51v&t0didJKUWnFxjS%(m?#6-J?C1Fm!G~I7Ipa>t1 zt$D=4kPS4~Zm4Z)X>#e6TW{ggvb7?13N1t#Gc{E9=7N{`ik=iYR99h z_8yACX;ykI7kySFR?dkFe(f=#uNoic=9@&hHa*6D{lD7gtdj{VW4!2p#`t*{8uTjC9<20u|@oWn3Nej>jUMhcE zd;K1*dd2_D@QXA<{o~V&KK_{0p`&c^aeVxpXthw+i-K>eILJ}o1pJLzAzw*Q2#)0k?n4<37{H5~r-TuV2C6$i#bS2DyzG6a3bJAK-_S z7NXbw&>A*e?`Y+LD5Ql?G5PKXn`3Vbkc3q3|CL zcmw}QX+;X_ci;tF^qri_=oS38WNRs9yQx=)W%Y)fr_;Q8lk}y{iE^%Gl<$9}0j>z7 z(1K!+5JezvZ@0m|Dl+hNhY-TXRe{q770;INj?D zP4D3}db)vTdZ^#8&C3=!mQyT}mF1L0u3U z*#XVZUlnx9FMq9Tkk;5zRW4OARZMdbbJH!Pq{~_nGbtx>QP@zKiUzZqmnadlbHpq$ z$4bnGHZAR7v1QK^UBL?+@E)tg0;<}wXDNTWnvR7;a8blHDC+3NDhGq_Yj zNhSU&v5>{T$dbrq`mD6zCR!AO=UaCz&<8KFhN!acTBr|ROm30+we`(sk3ZQ|UWTtx z#E}S@+gW(Sej?W7@)Q4cVzoomiZ#)b_vU~`(IKtNwL>TGMw?txN880wq9OICRfJj* z#}digwEo!QeJpf?u_Awoh9LA{2-7S)b_uz3zg&aM()8SBE8#e?fxT}_ZkA}x z6B`O3lPm1SmZT}-1j;VEd;yooV_u0rQ57eO%{ih?oTLi7a4`B)2z`5=aG2Hhn&~YoYaldQVW3e>{@Jl9^V{73VR|^Hou%Q+EO3ys!Z5c)Tj+ z>eF0IO_vmaLv(+rVxFkvrms@d<$0pA0CJcIrOV?Ak=?1{>pG2BsbYza?`nelW&x;- zZ>f&&T57tk0LC!BWjfT2)O1q;jAf`A9qLwUx~%|m8ES<->z&keR{`Yll!py5vq6t2 z>-#!1{S030AoWn*K`d&W(<93>TilmWY>s>q%8{jbz#)I`6%Wc|J6R14HnCn({v{hP zVh3bGrHTjeGp6v7NCCXg=ksVTFBia1j1|1mPLh9AJm$d5#N%YClo1AvI9SuaM=448 zPRRHUBoZxaojRDAPNN@lMgnaebj{Edir7QOvc=~MalM9^y!s3HxWxo*>Mvcypm@R| z_KGJ-=}&)=K0S$SsA9j^T>$ywY2v2E-R*USdU-k9IJ9Q>>Go>+Vr^w@@dwF163iwS zji+~`F;AzcnX6bDxgPSEV_HJ4j%}n|14M1`QcS%%Qmb;b_<92!8XqFj@VbZ?bv)Fc z+rr{+@Oo(e25*;-_5|4i3qX*u&}so26!TvX0)T&m&jkR*v-B+BaC&z_DLo&l=-XO z`e=VM)QuyfR!7|skGcugnW1hu7}V?IQCCB&nT$_J7xhMH8-9cJ>_Ix?bld344T?}pRN~ZrKmFC1TE%m{lE6$83=LHEO$k zWXSR?k=;RUcfwr;vUvtF+W_33h$BA+hb<1r-PHEL$OtO1Bb^?xy^W4o*8+_;${VxXJ;(27ujz>dwCdMSmG#hEXgU# zd4TZ0BPrGYtEKA>x&n0FPuEp+Jwt!jJv3h(@P-LU7o0+L{F{CUZA3yai$!D zlfpPTGNz?CE4gtMBT@)Oi9}QpMWjeX(~7fSgxo=x*0u}hF3;Wp8O7N}Ipu$0TtJV< z?>O+UL73215yr)H=_dM^#*~QsmtlovoSz8(6CAts5*w3H}90~{p zo>5>Q|HIsvhiSyzr*Ir%c46VvapR`u9iu?z$B^+EhaM@1WoP3``lsMA@?UQB;WM(y z)I;r7Llu}It?W#gO7|Nf8*YChcXTrp!7bEsE75ctS>^3eNt&-BS5QsMWhE`?3rXu& zz`fLSKRiwg>HD;hKBR?k00wXhJccvjahwMv8n_cz!d|R}L9B--umPULW8o=mhJCmZ z_T%yJw6ttL9b?4zJcmzFVKoPd#k%Y$vQ?Y*;>!>Xg4#%T# zH9ciP1+}c9UIi)%z8=>SCsnwD`j4g+LF*yned*~*83GyJ_eu7?Tvv;_lnmWd4C4B> zy?6o;6PpuP<8xLn1)B)jNqDm14ptHe(gh9RmN05zbZ75DpMd?~NJRN&49dcYYv6jR zfvUzpl`m0+!q`u?_oaXRcy=P9w_*_GM-iQa=Ng;gC&ZwQe*3U#(yA#B$d#?h(d6dn zYG6M_S2JA`={lY+rz8MmSj;Q^Twdk0o||@X^!q;j@B*Zt68&e2{xg06FQT8^LA<1G z%5J=J7hbimVrZ>QhU`z_$V|+V|9wUlU?U?&h1CL*qcXAuAlrWu@HR!KKOnvRkOIjc z(U$pR3QgXjAnGR+?Ys@!;b+lEOu%;h23{@q+`j0Z+lS|qWf|K!o@Zzu&nN8*{^-Zh z{u#!0URBoC_{;!aYdhzvjN4#R?Dp~~Ue6upUG*qlTmI}0$SQw!-vC~}lLT&~Jfb|x z-WbUE1m+M&YZQOHF;+vrh|y40ob_BoZL_1qtR1o*gOKd9U3l|OIa_2FvesM++=Yp_ z@fN(*u!19{qzICAGs)0Rf+hVjCVEk$l2q~b7)jn1k>u@Cl6T;phP}Q7b~&)ykYuK0 zpqV{utTf}F?@!TH7RGzXpFE29GPVTq->Zv%Gn^VP{>^`J;-5)Q0pMLIfcMC`{ff-% z*Ob@2Pciv#DANCc(w}!@#Md3&pq){!VpWnERmuH3B?T5LdDm=Z!$f?*P{m3^74|_W zYAfG`I}=y*hcSAvNA+OGhwzc89v+P7;UUsPJ`TWh2E{XskRl_``5;dmLrjK&D<2;< z0WY-%f6RXbe4I7-<0jxm*5F|i@QK#oyG+2(wE{=nje88aUrWN|(58rOvb z=_zWn$)|nvlqsL~Q*V}`(Y;cm#aVD38GNaKFqM4&c)UFBcFmY}OoaojxR#Lk`2ai%)7^Su_N^N13+QKNcg;8n?b!z3)v-lh+2Hnp{x~C{sbmOyf z$9?_~<~#VpAUFA<-(|aFT^(} zdWm?;*CXEY4Y_N*4<8x)EHa`$#~^;tRv>oa@61zroh65kKChN`h~FC+Dh-Kbk|X&; zs==Aj!PWT3cqpd*z}f5(3rB-;g}$G^)drr=a_vM&nb$CB*- zB+f7}9NDvRjs@8gDU)r1G@0yA@Y8s*Kao=$z|V{+j*i3!Wnn?dYE@V$_kd#C0k(gP z2crf{V$44>wp9E=Y=l4-kR9cL2%ri0WX&+I$r6YbWuZ`+>Nqq6IYx|);g(w`mko$< zoO_G$1EM%Ari8_eJ>qaqLXup^OEH8@7P-PXL`beAq?BBdPRMM7kR(?WOVLX-q|Az< z_rs!MSc+bbqo_QVqH;;m+>ufAG7W#3Cn^n!jx?-nyrhWiSS$#O#X2pRn@GzmF|>>q z^J8h5FKJm~!Ky?&EUT}^v05FAzFMMRIx<#Yr6J2kMbT?<6fKXXXt|`QW@Hq-MnhIu z3IC$7Sd~Kfug3|0Wh^Z#|nXZ7;Y392I~2MQvEr zubaEvHXx2Ew(Swk2zv#kxO>FOf}T17!eT22QN=cW`Q|yp!V?zWJ;Kiby$sO5SDeGY zUnU--aHVl@7a4GuCBco0gZmoyec9Nax}GVao2 z+#QfHDDG`56!-5E5ABQkr+j~~eM&b)%v!66#{ZzA>tP8+6F|YXfal2#y#Pz$MOZ<3 zUMIW^m%}S?AG`{0!fWs`ypH4HMVt=L<1F}2)Rj&~oA|bPn8Qe%Cyt2K;1RqH^Z(W} zX%pQgc0K~bZ=%KgZG&M~RmR}#vfW}}w+JU%QmnVlPWHAAu}kbW=qP`Tgg0e-#WMgq zrHN;Wm*p&3WM(SKq!@DPH;;Y`=(mu5i(mpwq=@`5lG7A=pGK+4OxiN^2r5IoB7d{R zt0ak~H0o2r^#}MX{2l%Q|D^k;oMd1&I{2OLvL9!VH2Hm&(O-(?^1a-6Z^e!BeWU&^ zHi}LBPIoz8oGM)M-DQ9D2SrG}hm8KS#M$!wY@`1x3H_HQ^j{&al@7E;2U!MSf zb3*^^3H^6R@QHo2leg0Nn+fJ_;^S1J^(><2QkwG`_$x_f29}D~NO~tzQdZAPAK5!1 z`#WT>gzRUKH)dqZK;A)-H%H_x40%&R-a3#s17ydI95W#YImmxu2y)yYPi5q3iaZ68 z#~AYXK^_~(x<9hjA}7$unJ9AREt7lXEEzfXMb2ntvL>@0nXSkyL#7Ebyq96QjH_j_ zfp5P@E~dx>GFi8ghfcD#D9#z+7dgUh?N=5kuT ze|<+{m%2xd>#8vn-#oBOOIe-k5+f;9S91e#9mTZ~yPxKEZLz0yCS*D~*L5<8xXum$ z8W$wNWn6~AY#B-b0t}{)o6DeK!orNP#~jw;y_&VtOkboLX3|*U`z0X~Z+xY{60obS<9Lc6XK0 z)Td^(^fp!RF)~CK5wFyFs@U9*)S&v zRWP^C5A#AWXBtM3j~a}Sv&*PVsM&#kw2FkPgKEk$^ZNp@fI+RQTP1xAZY*`jW5GI0 z#FAD%V+?h=P293Cr*&@kX33t=t?GI*V`=EzB3K-Rg|GyjJBxu&&E<47uYP<<Zn5aD!8Htfp^p@AM#cRh=nI37c$#JAXzf%zIl))&6qkN8pW5Zg9`U!J z=vJji4^J3kgy%kQm(jDIBz08N;FfR42nD%LIZb(VLCD5B8-VLED}XW;cOUc zcmQyj+IxL}I8nKH9k zq|JWN36@qZm2*>9)J>3o6jALJGSdZ2f$LyD+4)km^JO8}9|nb-b11-|N_gj`3%+ZR z-2ewk?Tx7R6(KknhM7Fb#^bq{Gu8jJveK2e$x&6RikA3hk!r6+i(VIo+R0HhNf=l6 zR*@sOq3|2RP{&tyZ*+M(-b!LqxYg9bTY?z4Z^aE>P7s5t)DCQa2C=D4nYn$@v^J;~ zbc>X~OU!<^b7%#FP^@eVc@Mmoq~GV1Zd2g>0_X$Ip_K}JPz-&@In=JehXvqAoI|S^ zoLRD9Ta97EyxQ1A2YXVZHUAiVoF*Pdu4p2I`(u@;n&P~n!8@x(Q#?}ks1gP&xu zq>?HTFRK(-Er|Yqw3AJY$fIKDvka!~r5wk$mAAOiwUce--EF*G$=i0`;*vyM-4G_M z#;hCCtdg^EVa)qD{~COq%=!j{nWZ*F1Mp1-f!@s=9n9QDB1z%OCNM*7Fod3;KS4B07-Ioap$O=s+q1=(yNv zmc%M1*2&drBxS9V2ZwI>54F&!NC&Cbd zzvI$&n`w=LJ7Z{lh3tTq-$FUfAe=CfjBP5;!Ed{>CYc#BRI8B3_mHrtpQ;8Ie!$6evJVqaPcw~OFRDclpT za2oc1<)m;0g1bfvcfu3yS}EMi3GP)=xRb7MFTuW7OW|HmaBq^ropObHO(;Tts*GG1DRFmZ$1bwK(Pu6z?$o`J$P3N{msw2LLKN5&cm$)MoUx|oS&<3AJC#tX_ zi^DzmHVv=Mjqn8+!;-ol56mxOpARCi5Wa+Oepn3i;LA7~fCkLvufSK)GPJ8mO1m3> zDOj>gNV(4|H+^t#DJl1I9IU`?oKc&UuDjv8&7<&xA~m;rQ4^_d@u22-k(%k8nlT)m zS)`_(Q!|RxM2gfbE>hD_q^7xqnyw->UC6`_Wz=9vE}`bfUi*v>9w?>e0gi)ZwtKuh z15zG$#LJi@UPhlmyo||68I&f`PrY`3OCLN~O3H&AXV@!=1Sxm8krMH>xRUb36q0Cy zl(A{R zHqNPs`6zJ)oQW-c$KYI8#=n<;+2d;+EmE!ckr z+BP5kzZiY6P)`O7M(c9`3F8+pMzIyXEBpFNk>E!SCbzj?d`-5aB6MO9u!we-fgc2><|- zmyvFo9hXoMIR}^T7eW|+e0g9S$94A{SO5zyNG^DShvel=kQ4=y;wegAfD{Gs5>JVg zC<-J&3K9wM04336hMZ($;Cd zH?zRv-~y!V^!TH)vE1F6`Mo#qy?OKA%m82e&*wjn5Ne|z#wb63u(T4~Y!0jj*0jsn z@MgqD@HbkeS}xR=#a)! z^JZXq6~LP(*waLRa3$oAY;OjDzOb+p32fn#kC_Fz`U>_O-x2QWQz{e(78)!*Syij# zda>S&J)(zJ%d$<#qRm7ZYgGjz1gOWWwqUVeEKn%9sEo;Dc1#OR)uQ4r5etNEldAM9 zBv15NsF}QQ3(NH-iWgJr1p*aVs1&kfkLm#eT_W}jk~~3wmSrH2M-{np4BG^|00d59 zamp@NV3J)iCU4|p>Y!$y;;#Y%f>~9Tv5kt(EFjQGWYJNt3UtuBp(u@5q~cB%708_g zXBBu~w9 z#U$p4a~M~DU|OPdDH|pX0$8&y5RVKvidzt@!UR@j>?xGXWzhsU!iu_~`m+H?_L%_Z zIN&J$lYp~L7|xx5;}&(CN`|u`0!}GmICX#nf(M*t58xCrer6ayml!|(V!*MR7|t@_ z$k~7+HkkmYli|oYfU`nazwTo=R)!O1IENWOK`Y>Y5EA3ZE-)N(1>oc{oM8cQrWwvy zA>iCi89$fhY9(k@Rgkx`WAzF`E)i{@7okw`snE^=`cucuf=#TYavtbeTv26GQG+XK zwTLTn#5{RUP^!UjpVfgqLA$fdnp=tKWJQ-eR#*XYShIi}!h*xDY?Of@&Zz7q z!eZZss+{zKJegih#bTxCS1e+V{a!_^z@`d+Wz6liR)}U85Pl^W-XE)E@6W<}*{;0@ z`CIIEdsV&aX_f1p^>z6k3eUb^1iFi7X#u z^r`^2f64~9`M~$a*;;|v=LE3tzEX$a-pB)-B91d6mpgY{49Dx07ZjHl&g`{+Z;aa&j6XrRQ_SM_>H&Kl6DzpA!g#ZZMUDcn zD^)D@0B%tf*9^GZl^X6bhI=%MTf*#WAOUwNirdX_?HaDka7P^)zd3+gQOe})!waQU zRPV0MIb^0=S0z;`=~%wtlI8WoX0l_hAG6Q4T@7Sox0m7N$iit)3^phVS4L9!kj}p;uN($MW1rV@ESQR|sp0;%(UQ znX8J2ogK@HU96|7g=}~@Uj=!8vN%)e$23RHyO}-PvlN8)8>iGezz>R5{+t|974}j6~5THeJ@NXW2zv~yG5s>nl`-I7mI)&nbl$f=880wvo&V}Z(D9s}aieDl_LT?`Qua;UIZvRy4rXq{=l}dqs%_0obv)D4~ zZEqYHo_4S0bq@_RtI_u5GAXj(vl1%r+49yz2Eq)lBZjw4sYlJDC(pPQ#knJNZ4@+J zYz;J-m(DfMR_^%ENb15&XLw~izqqNib9;r@`$l6g=>-5}_$c@mU&Vh-- zrGd4n)@|BVes2m}k=0KtQygDye zi}eAM4-=EZgAn<4c z{hl%dj9MKIR+QjMr4{-o$nII_U#SEz!gjzM>1e*t8V;JfHdoKLtY7dno^GCXEeC3( zfg`0SmVG0GwMR=pk5uw6q|!4J;xTt^jLsd~9vr`W0PHeEy(W*MU~&n@|HegNTdrR| zQVNb!uy;~_==ZYOx3PM$XWKtrb#t{C_#Bn$kAnWLg8tl>)EiX6b>Xs}_5SI$S{OGs z>7wNK&vvelwlvm)UEW3QOuxW?Sn`dkV&A-@abRtd<8@{o>R$G?OYQ~m1Ku;H!r?i0 zXk}WK-Tm0+byQgzoZSl-MyfoDU!;TuIBJ$k!~&RqH;-Ok8!;^a-_**+EAa@R7KP+? zFZ&C*KRQX>;(&ctS)1`>)i%#`MCxVH>GiX~%kGDMQHSc5H_RRzJ$y!06*K7*RoQl_ zb<1m8I@g5FHz&sXlIWKK{joj?1XP{pSAo76x7aVXE(EggP8jz%2l(y?mUTvgXQZN$ zvL20pu3}?!WfRb?1G>-w6Ya6dmCn`xZCNs?FR}UxtA8}cXOC@T;nK0~u|#_1Sppr9 z>sdf}Xbpqm6cJ~6<3M;S(SP*jt9>nNgXa9shLVmI3m>02J6uy`4aMsfh=RRBW&vZ* z1_49sr2Wo;BeU+U+9dygb6Niy4s|UDvX@wYyXBQ}umizU4S|dki+(H=k(gfc)qZ!t zXI>l#CHV_Yp5t7fFg1w76#QGUP%G}#Vv)(+2)_yNgC3EMw=Dl6w-?Rdr0`du^Ec99 zZ7%6vVt%f9HrhWs^v|MDC-&6Pxu|_;^(MJrb9OAOz&w>>rld+NX8|x7#1_Rphzm7; zdF}Ocn!d_dAnq4nyqI8oHI?*?4310ZysGMhxQNS<`LiZ0u>PHMfj`sQ9cJxhGqiJ< z#m(l@o?t`w#g)*-<6(PE<3M(l?~Pohmoduy$e2Z;0NjbMR*RnO?sk%8b*KHF;n1S<&MVZYS zIC80#+3z&;i`IZVR*T!N4z^TTDDeylqk}Ns8fb}a$Itz^qoE`0?7r$Bzo)i;S+#7> zdtlzb)HxYEGqe(#g_LU^yp+;JJG&u1uy|(kWVyc4kBME)J8z$DU4duckiVJQhb!xv zOFOR=M9cH+_nga~bB8BRM9z7!$6s!jolUY;5VG=v!zM~k+nQFuUzG@XLo&WB(5=vr zq8vU!w17%9(LwnbL@O`c5*nC)qcPF*X1fCfxCVibytFs)>6>pi6%SuLwmvs5EAj;_ zUnm5_n`v9NoLIFqJ3Ft=cQ;n3N;}C@rCKnYfxwAX=71f-AVmKD?o-$#`jIm95LJJ#Y!~OM z$L3WB2&U_-QcJUZ4Mq0ZZc<(^tu#9;mshg$i?hpn)&tYBGIj?j_Wm*v+>wdckNJtm zLo7wWjzUZ}NZ{N99#b9!ibr8$S~vF>gTSuS3qz{kZz5OCGiv>8_fnw7bUIwt9m$iO z&IQFx3*@*$M=3Ss3f0Ab{=V)dZ;LdLP`^;HuVH2omL4DA3ADt#F@9vWJK{am*b%(g zvEl6=x-n8#wI0w6Q8#GIfV0bFr=}Wv69oFIMQASTq5?I!>`fkmsbsm}g9u#3X6oGW zs^qe--{$cvc53ATrl$n>tgm7LX4l;VITwzFM=QGA^66@D>_QQL_8z@FH@#ZhRMJh{ zUEl~VwFXL~dR)oAJ7!QF&1Pb{lR4&7Y7JO*pWiQ=PQ&vU@vK_12++$iot9_ZvaN;? zD%1nr8o|DEDljYxmPK(!QL~qUPUe1Amh70JpOf}A<{&MWh7w;5$n(6=tEi`{mgiug z+JV2U?#A<>vCfcx-yA6lm37LZy}HFMfgE~fljShRGWMz=Y!byL)fyNqkm%ho!-L&r=c&ijW?3w0Q6@dd6h-tc_)AUe0@%OD(?L6AWg)-i+F*9o zX;(>SM3J4oMWtNGu@6t4abwd_v1=@=92~GGuRv9guJQJN%Hdf16VP78ldTZ&D(;Q5 z9*b5Z=+Jp|8(-qn#_3m2!t-zfKU45L8h`FDzcBnY@$%jROzYPJ z<4aS+7rP68LC)2}+oA7;U7x#lrDRnKe;=Lq-_ zzfkX~HeWk-t+?t;R!imf&}74iP?$Fj^yUtW&Y8y3xSo#TLf@1!QhQ%(fy+_bf3mw_ z`pj76ges^l!Th?(`ZHMtXYv~+PnHZ$iTRb6%crk@Ro6RQFs|%3JgR50NATq-0~Ke> zM=EO?#;Ql_NA6y(pQs!b@7tPc$gen6O>7&BQMqa_F_SB%5^HWyg_t!g-paWdtDr>#MzS#o`&jca;>L!q#?Ec z=4v&6S1Uj7npO()GMS32lonPN2KUPQI>}?4tNQ)&Q1zAZ*K?3%K6lB;FO+k7^OHO&mT|T*SrD>*r zXD#TkO?t6cnv#J|g{4uDnMd~Kh@(LTFIclgS@5t>{91RJ<;ZNy>Y!s%#T7PU62|1= zvd;COnU6RdFzned5l6gU8-()57Ur@Wi~N0BKLwboz0*qrIku8QLGGF^CpPm?maNMC)Z4FOvDW6R zh7kLzU@vfwsi*1SAjqQ-)Z|tnjOq_o8FfQ}C8zGcrDQVT#@LcOcurNPSUZg`_fKaRZ>Rb)*TLLrxcw=pjt#x_W z+;}?sP+l8dQ@m{Eoai1J$T`!tHE6CnKU|&{^YGO{Va6k{NTDWD1of{3c#70r?JI06 zYC6=h?VGZ>O}38Zm64$pNd2mRN6$1C!OXH1mupMD-;%e+BAtN~U9>T{}jd{bpR@Rj`E?CO6 z?oY6j{$ZTM`AU>~m-9yUTyI>CV>bW7Oy@>|y-w6(>(aa@$sS3${T@s6;kbUnLJ*J6 zbq20wS6K(=T303(8Y^&r1tbV^Z=ZWg5QMEtu?|}{0uTX)ojo3qbMaAZjXj^5DO^1_ zT-F1jdU?OQP_T&?Ch}#4hxTrKIIo5FvJ}1b`oQ>5Kj?iScq0EijQd%|snkmg&D7d1 zs~bgTLEOr6D%iX<-?DUW&DjGH>k!!YQK8coO^sQIj)f&}cVj_+^CkCMy{tIx6?}<8 z9bJ6BsnBYWSjSJ5Uq3!R)ER>>g{H>wy^_+AX++i>zIt!rCbt za)A}g_YRDedm$o!5k*|l1%An14C)=2*P2(t z;g!`u^ZI50wm?b0I1*miUT*FSY%OjE*CXN0t*ZFF1!ZG&c%S+fl#7uq{sN=s{V1FY z23D66$>d>_lkyUya-*HUDs~wPgn(=zM%LI9M%D4%z+mWl_*$TOe>f1i5?(s(4=t?* zwyK80;cMIL7Uaa}Q0A%@REm*VtB+CcR$w#eU!4wYZUw`kDPJE(_>6#}|DfW!f78DP z4BQdjFI)_-vi(A++#Fn6+vdBA%@cu*9*pkXr^?>V&Jq7wU}@UF>I((6P0y^waA+&C z=?{h?K-2S*0k;GFe>c}RIi$E1SY7t6`nLcuI|?|u&cL9sA?Za7Z!@sWKSRNVP5yk>Oh?$YDZlX zYDH}}xa-NtPCM9djGeenkEXoZS9%iaMJE`wJ2O&)K2+$?8HT~heJf=)3<-IVm$B2I zk)1XP4QTaFe`l=MicwPX&HO$$G9po+(%Pm|m0tAUQ=FPG<+FXG!!{>!r5pGM;Y zj@h(6=md9%^k&sj2~DGOOxLp*6&mXe=4EaIaR(=%e>u(bT-sCCE}_fX!0_)WJ0_t; z&9IjCl)*q<*2-4)l(kAIs9|2+Q`RD(Rju9Ho-((D!de;3;X>4mzfrfJb2?yo)ZYIq z&wzIV6wDy1I^j~34X|3i4 zy2-5Oe=Z1ghx;eh`BT3Bp}zT%sbNq5IC$u~dY^>uLHDvc_dy;uF?F_oe4byuL+Zpt z|3p#?3Ek4_z5;^V47FaR)p|9AnG^j(r{;OBlsd1~>bwp@Vejb3#N@c@8<|Y4^aicc z0~qCrRbH@T-7*k}<=Zj|&`f1kw#3nr~G~2hDO%0elpaX=byD z?TC4KD?je4+L2$V3E^k+rll3&=Ofs?ESd6}XVK>vw_gBxEQ2W2t;JxF=`q0_0h__lN>6$^zy{uu&==8{e;Cv+ zVdU7`8iwa}|7s9sj6jq|ZF(Bb+mYaEbAK>$C9nxC&mXL2e4tJSZbo2Ot@$JUo10)~ z>AU}B^cBYQ*Vwv+k*mUJ!q_x2to9j6D%Gh?|MXF{fi7?tD50;TZ?KO2I!5l>rUVW% zos;@$ac*GAGyf&POezxkP4rt#e;U6712txa80FVp@Fbbh#q+SO0{uccmWA7h$ka#7N)+{{qe-WAD=0 z$q!lUA7NzPUe|_F+rIf={oeQ%Mhx3luxKDvyr1d5y|ixzXn-%FAEW=wLL&MJMyAM> zAft6-6D(jd3<*TMOWv(|AsUBw+!YvycT_*z%KMC7Am; z4c#~yZ*uCZDhX$4ND@Z2Nce1&^1jQ_!~S))r4nxeJvpACC;Ng)I2X%|5eJ9$?7(!s zx#`~l3D?y#|0gB9tYS_l1F;Jp2^Zob23M@N)aG}sXGT^Zuft-Bf5bNX_H7?H376q= z#>^o|_@Khl_F|+T#!Vm;VOe})P?{(pUxd-&)22I9`SHC$49{A$24^*T7F-DvlL7H6 zHZct))iu(V&WwbsaZMJk!nG2rK$RjQxL!il+FgT$YEd1#Ym$&ld)F+XM(xfmp(d@g zRYJ|^D7!lb$@Kg@e+UpvH!zX3bp-rIzel(oiUijJ;7B6lfn^Ksgpst!*YMeJi{&aQ z)qv4%++)LC_&8$}vLu2}@b&mT+-Kg65e6-+C*Vx*cCm2|O?L{Zd z_7)62Qw(nP1(t&$)&p8sKP%xNzG}l)@HKc|2}GE@3^`oGAy$pei)ohyEqDXGJmXiw zTc|~ZAq#-n$@|C>zK-s-;Z1x4BCNDQOX3u0!C=9Ke^G@@ftXuc7|=*~(!auH6<@ti z!gu3)Z1^sGFY{JhpZ6a`pRI9y_Gi|o(JH8+pk9Gr$;iJ7RQYO*n(J<_eJ*~j16ofo zSIfKchJ$pYE!GVQzfmLqAdr8P15t+5q}jv67?ovOrnTUovEfJY4d&6?ScA8MM^Cd2 zV8L&&TpL-+~C_>-WWpW~U*0hu@ShaYhu z6aFY0l`}^DX^9)fFKA>x4rHHlAOU~WsD5j_fBq-6`k#XO&p43TxPDt)UTG5ZwDP*0 zIrKUFX~xU*z{_VG5PBK%axBivg_q4sCP)2w`~}9%3&7169ms0TP5VoiOq$_g$jdL` zUuL}g3h?sfgy`bn5V`oP4kY4_N|@jeu<`tLjA{?aFFS^{8t`wPjUN5V)+}`0zj%!$ ze-Re^>yWq%CBI~cckpkB_*?ilVYY#(nl13}x3~_i@NeVau|ccf#pv)pl`Z)9F%kl6 z>ye#=V@Qehq1Nd77J&W%{zDu7HvS{veKEYAxTTK&MDx9Wnp)H<;Xl)y>7S<-wMqCd zv{rwaT69dpf29@ub!t(&g#ShZ{C}xMe;pG3Tg?yu9ZYhpNW%ZX_E-u2M{s5SrKOnY zI}earr&*Lf|FX9`(?XkIVgTkOU{qaQjq%!QK#*r7EQ3$CU4(yx|Bdzg-}zc=+V(G< zS6kKk>h>1DWM*+Rv=}fRj6cTz$>PbMuz4_j4}sK;VB|_n8Wdy%!-NkcZ{nfGe`Hf| zOGMxXM9louikn|s__dW^+xYbuzqa#h2g?GMmXc6sU%IyS&FQos5R{0_^+p^R zO}!+&?N2p_i8HB_5=5~R@zb2;`X;2&B%O;x5aj3%Jh3U0x|0+!{!4Pqq%@ZlLDFBB zIu##fQ!zQ@KsIt1h9w}3ZuYNke+BsRVQN()%OMJ>fH|C0GOaU1NMJro0~iU1z@w5H zjO;@RZNZU7uW}u10B+{u_XctCj4`89Ue@QWy>m;dj zg>exi7v#s}ko>wRf$3zN8%u0@0tDglRie{ z6xjbjF6nciENNne*jZ4+(8nN3-aN0JUg-d_yV?cWw3ayWlzogylNGg6$~GK zYaz4x;p@GnobE-DTp)8Wi?W~I0<+QmP89?>T4k8mB{EMg+n}bOElF>VY_F~+ECQw? z8@r!Hvc%j^fF1Ma&4&Gv#VdSQ)IuP?E=kVDJmH&xt?}*9Bs^G1e-QlbLipxn7?QNW z3X?@)vMi$SfzCCuY9m+48gP1?9o{{`<4>o#(QKzL}42^%AC+#(Wp^V4tm zCDuC2CzBqYt}bhM`l@OGrdd$Q^|-5xzT=9xDUurmV#&$_5Vw%KnUf2LA}|*PLo3mB zWr^I2K4K&Hko(x!e~EA4JJXzx0m9@Kc?BDJuLO=a0~_1H%>Y~Jm}Sy=HF=E+NJo3H{w3wbj;RGl#VdAH*EutXll z1B{zTzz_V4(Im+8QSufClE_=3UuoBzE#&PGoUHlR`T2o8f6H>27OTl)YXAu} zfdpDk)1V{X;Fs`MS%Y7O2EXD!4%Wax0G$%~s@A=)LB(Hnpgh*M>I1n9zDabJrMj`5 zrQ|hGeJ?3*@97b69N$Vj6PHlJ-N$c=6h4?O{P8 zze9f428h3h(R2T+57?%kz4_4kHq+D}fZ(J1Sm1G&gEzs&G5=>Je+<(~v_#zuvQ$1h zdBY1to;)p0MEsH9;+BQ{89Vh54ljV${VtiYkv}JY0ggS|I_6GpV;?Sd(vp42D1{_@ ziq3>!e+H1-mk(vA!Oh`sMDl$CseXQBXFafVHkm7l{4K7rK?O+ot&9Fp|Hig|HO(wJ zn|y>y4>=rrHwO2_CsAXvq6#ajwxU`qa#>NM6*XB=bJ9}Cv-6dfDQ06)o zT4PS5vhUjF(#aFC^M2r$&>Sq`?TB-HtQ zf8eR;9aOR5yJ$u15Qeta6ZZUec55>D&p^4w1IgP6@r0 z6xraeTmPE1F=aqK4&hZs?lj;NBJHIoe;II}4enIKNCgb-&V3I8?0d#08|Q#(X}=+f z7WOsB{kJ#vAp$y0gWt-}yk%Nm+7B9UGU(C_@v4Om>l13ah!#XXD$)^p){x6%hHu*q z-*zM@CGGOXzMXm$I)yj>?;Aw_y?;2CV59g19QFlze=!SJ z(K)s_oFV+?HRrRCgiF8q-6178cO9T4yPvXkS(iD#s*yJ%a;+u@G z0_~{;0Z@=$73mdvO``dp-n zyW5dyGd;@g?v`i^ZDn`&g0nOne_*kni>LQX)JxeKAbmwb*p_w(Xj*ucjozZKmgoRI z&04-zqG#wJyL-Jv$F;i$Bs!tpJt)yhI>qkZ%tj`#5eosdqfJ#jjN5ahC>|(i)r?P% z9!?gnR<$oq!a{!rBGZL%IKuW1)-ihYzu}ye0c_?&Q}iwLtv327eOr#1f4&_fc{Q~g z5`Bz5;z0TIosd!S%@BVmGOeA;5cQwy2b+rq?L%P@%d{U_gW@LH1>zfxAHFjcfP{oC z%?|}b0d0*lTFDM+*5WnLbo5#Bg<#ZpV++oXsZR&Df>2ovg~BXH z<6o)D^~6N3QDwwxisfn4y^D@N#UDiWV-aA|dn>5CLKOQXRP-RPVZ~F4e--0VCL#f4PqE~eo;kSet0G!?I;Rt%;geJxeGt7#BJ zsnQLnsko6U-A%L=f0gbvke>zq%1pWqjZIFIQ*fGh(e=2PPiqzU*g*V_j|zUr#slGZ zY$Q;A$Hst(-!bbK_#Lx*bCiJyS5dhI0CNE<7eI2Mc`h`}g(kUBnW^pux*6qh9vCpg z-<$*thw(kfy>LV-+4uQ{m0A3dQIltnHg{XF^w!wOHuDtrPxZOHL6i5!0tD(<3ZqZLy$ z@%&znpF^L4woy)>MVk*kFD& zU2~1}SCe7Bj=o_G^R2xw-$cKm!~9wd=9?VmH_>kyf5ZH4W|-ejhWS18`^GSTXw<1c z(qX=x+^IiCe-ag~8@vniG$MCXyXep3IE7jP`cw4XsEK?Bw23*ANZ@rYyvXGS@fXI5 z`d&Jwl9>4`^w-9H`hR9fKzop|Qp*cqXj{YOsyc?P`J(yh$&tb$G6Z(Gk%o}GXXv&N+iz#^7i#()@ zLcR!)GA5WBL0Ug?Fi32|q7I2o9MWbCX@41z**GWarkbHCYb>~)!+FO2)&wX-5oMf@ z3k(`N57xK@ml`xae2~T%-+`5=BoZ6f9iXvhe?GVZ-c{&xMjYf**p&*BlMV!;B+S0f zVF1#Y3X+=^WE9@j>QP=I$dObKIW5Q_ymJ|Hax@jhkrt#6-ZdJ6w4{RMWdvz5>`q%M zNPb$7lkl!tkIEB4+EYOa4D5rj6Z=|Y+zUY*3*$aTpToUFu3dbx;dwlX(5LY%LGXAH ze;$|OkITDw^)XbZ-L1cXH-{S`lYQAk3KgM3MM;41w`m=D&LgYm>ZoysufrfbJ z+mRivB@j86qI}3tE8)K;$VNNCAjiR;fBcYHu7l+6f|&X>FzdV*a>$RPHZCj|2&5C0 z;CJG8fvjJ{?;eMFNkAXR@5b-pqWqLT)UNB1;#$<{l!G4Lcf1rFiNp0Q{#n!IrKY7g&!C?dkrQ)v3wem&0oP7sLtPN;cOxe{uKOtg72|h9w8co5>!b<(e?ZiZ zJ{l!G&lCef1}eMw=c5XEI#~hF#vhrkKbNfQUrbOBJpO77=xq(V_#1IYdWh#UcY>5p zp)xcC(i{ht&m$kY1Zn3|f`gsc9qc^*ApW(ugZ&_zS@1XY0C)nX9@f8l*VFj7cJc4+ z;y-=?PXp=iz~{U0`5t_}51${vf9LOa@js=S`f`G)*Xu(1XZ$bG2{d6+*v0>m+Il6; zr0~P|Y6Sk*81Fyiy#EOQTNL^d@Xi{#TwJQ3W`u5!`6~(JT{?Le{vp9S`4^MO6QcKQ zJWBqMtKl|C1`|jg(n%g7)S$=kl94p&+WI(P??@)W973tlf7}0sR(!(Piq%veuHU{D zpER`M2Qpjn_l%V8G&iPE`i=i7EA|}Jif^++H~*)s*h~5hrqxHDCugG5>Z7Tw?ifz1 zg9n&a_l6zuLEtnu7!HEFZfjbtGniH@(@v{HWcXmyYNATNpQ=))rO{BOci+~uT4yk= zR%V=5A5WcDe@Dn@v^xi~O|2t8NbHEy+Gx;`ds1xk=xy6(rEZ&b2DW)LwIgSBTl#R+ zmb#uMQ@iBce&+Op1aop)8Vve!uWn8j?o)v_m~zaVWZj&KbaN`#&8bp1r+RKqb=;h~ zbaOgSW}@={HXyJKx0|KCWgmsVK~5imks{=UPXT?CZSVF=s%TJR_yJTUPEVHLu?D7D+JQ9EZ8FFQ&>^Ty8mTZ0j#nvk%WO)(n#$>X? z|6C3gT%h-(x^6UnE^Ll`|z-iFYp$>Rhr@5AU>@`0zK&W zMm`;DcPrZN^J#D&h?f7N0WNsUuS9Xbk$`KUe+~tSQx@ISeSU2fnPk%|u= zE`tBLj%xVmeFKc62he%+Mv(o3=pE=yFs|Q>ejPo8{vJJyt>}Tco^XClPdJ}!llX!S z+2(rsCi(T~h-%Sy63B0Zj($INfIOPGtDu|qE%J(J`ygc!zrQ2to zc7%oBRrArz?rQnM1G{rYx4!fECb+=wns|i7?$|cH<#x8|G5b3Co&{kxWK)EaaiyL8 zN`e8%#oJnGXTPUl0J3~rEA8x;7Ysmdf8EwfJNu0W1CR%9Yo(q2nu7tzBe%8E&VKh{ z&r16)e%nD-+A;YfeYoi6o=5&9(?*PL?&MGPrRAn*TbgV6ScaxlZ~7g50)dp7o9!e_ zARmFhLrD9_jJ2M#g-|PeI^oj`9}j#6k|&ImdEzPF`_kvgU$Sm!-pG!uFQP`6e;oL~ zG<$86`UsnZ`7%BOzyliv-_tj(5r;8;hw%9k zeEtnS{|=x3fX|Cuj4zP?+#^XEfBk37?^&JSvqqBqiEcQ_lB6_~_2@pDnv8rrYi~V( zCZMGl(*U^!?In0+bv1klqlS?tP{d<=BDXyW9fr?i=m!liAi@K%lTH&{x`ml9Bk7z| z_!X4>B>JXP*ri#Ip)WIYWaSsT&04vcmw()8=H*W^OJ(KD-4?Cf!pk3me_Vi-zm6F( zE5Frk)yl2BJPZ*xD_>#u&B`C>7PWGbmybF{Ue3nEBdq+9Zktwa$Stv_KqXYh;7L1}2$bVegPA7F}JDt?Q zHz(tpVm3ZD%ivnhQSab~S&H#HX&x^rq1pI7eAJfE9C#NyyF#;Je^$-`uAS^?c?QD8 zQNqQBgztc>l0w*NK-g(SxP+FbC!Dgkn@X6aqxH#z`POL)VSV*BiE!D=AlwMork6^% zoF0l2_D6H9A|RZb5ALSY#Ypbb+D7nsb#bZ=9`>m~!2?007sAQD1nLE}K1#ia9>%}M zsTUUaf%+6spH8M89b!q;6NgxwdNVz0M7=&ny*NtUok|@dDl`k! zF97w6Db$??)SX7uTWG5h_4{Lze@m2lTPpQ=pl}(e`+@pGe~RQEH<0|}2GrRvC`Fy( zVeawRVMp4vOMA3aU~#t?g3A5+dR{{1J9nukwek-1%S-$AM%wgLs=Iw-qPrzl&=5*= z+fMc^6$2b!D$avRI3mbe#}PTs89HcyGn9(+rX(C2*sG3X;}ZJ>c{(bDvZxSDPt&nf z3A_m?jvtKTf18siW+hV0;+#($4CkRF94Qe;;y9CZ$^d6N73bk396Q*Jj$`K%`09Zq z@Gyj(Ve;*0dj2giNS0Igx*DFrE?46-xY5=03_jv=nx4T&T~6T{+~RVYpTTV|r{x*k z?s}Hax}Kw#;NyqSl8Zir-xnVNF7Wp#n#9|{{&QeVe-uEf&Cd2Ha90ZE$D`A^ zmeBX=L2|F2(D&*IeXpL-_v#6Kub$BN>Ir>sVnR>P9U!64b+TWYj>^6_x+fyK8lI!e zPt(;@`IjahZq;WkF-?HLewx?_Ib?u*I4!bK1i*eN*9dvt0J%0Dvf)h2egxMDdD8&7 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 z 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 Kf1*i~CjSR?_f<6j diff --git a/edg/hdl_server/__main__.py b/edg/hdl_server/__main__.py index fe70c7708..29cbfe4a0 100644 --- a/edg/hdl_server/__main__.py +++ b/edg/hdl_server/__main__.py @@ -9,7 +9,7 @@ from ..core import * from ..core.Core import NonLibraryProperty -EDG_PROTO_VERSION = 7 +EDG_PROTO_VERSION = 8 class LibraryElementIndexer: From 8bef8ec3806f12115048cc7fc75cc423e73442b3 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:21:41 -0700 Subject: [PATCH 06/11] refactor out bundle references --- edg/abstract_parts/IoController.py | 6 +- edg/abstract_parts/PinMappable.py | 12 +- edg/core/Ports.py | 2 +- edg/core/Util.py | 11 +- edg/electronics_model/CanPort.py | 8 +- edg/electronics_model/CrystalPort.py | 4 +- edg/electronics_model/DebugPorts.py | 6 +- edg/electronics_model/DvpPort.py | 4 +- edg/electronics_model/I2cPort.py | 6 +- edg/electronics_model/I2sPort.py | 4 +- edg/electronics_model/KiCadSchematicBlock.py | 2 +- edg/electronics_model/PinAssignmentUtil.py | 4 +- edg/electronics_model/SpeakerPort.py | 4 +- edg/electronics_model/SpiPort.py | 4 +- edg/electronics_model/UartPort.py | 2 +- edg/electronics_model/UsbPort.py | 8 +- edg/parts/Jacdac.py | 4 +- examples/BldcController/BldcController.net | 1135 ------------------ 18 files changed, 40 insertions(+), 1186 deletions(-) delete mode 100644 examples/BldcController/BldcController.net diff --git a/edg/abstract_parts/IoController.py b/edg/abstract_parts/IoController.py index aecaba0e6..85b4a2e1a 100644 --- a/edg/abstract_parts/IoController.py +++ b/edg/abstract_parts/IoController.py @@ -138,10 +138,7 @@ def _instantiate_from( io_port.link().current_drawn.lower().min(0), io_port.link().current_drawn.upper().max(0), ) - elif isinstance(io_port, Bundle): - pass # TODO: don't assume signal bundles have zero current draw - else: - raise NotImplementedError(f"unknown port type {io_port}") + # TODO: recurse into bundles, really needs a more unified way of handling current draw if isinstance(allocation.pin, str): assert isinstance(io_port, CircuitPort) @@ -149,7 +146,6 @@ def _instantiate_from( elif allocation.pin is None: assert isinstance(io_port, CircuitPort) # otherwise discarded elif isinstance(allocation.pin, dict): - assert isinstance(io_port, Bundle) for subport_name, (pin_name, pin_resource) in allocation.pin.items(): subport = getattr(io_port, subport_name) assert isinstance(subport, CircuitPort), f"bad sub-port {pin_name} {subport}" diff --git a/edg/abstract_parts/PinMappable.py b/edg/abstract_parts/PinMappable.py index 9fba3cf54..e63aa23b6 100644 --- a/edg/abstract_parts/PinMappable.py +++ b/edg/abstract_parts/PinMappable.py @@ -76,10 +76,10 @@ def get_name_model_for_type(self, tpe: Type[Port]) -> Tuple[str, Port]: class PeripheralFixedPin(BaseLeafPinMapResource): - """A resource for a peripheral as a Bundle port, where the internal ports are fixed. No allocation happens. + """A resource for a peripheral as a bundle port, where the internal ports are fixed. No allocation happens. The internal port model must be fully defined here.""" - def __init__(self, name: str, port_model: Bundle, inner_allowed_pins: Dict[str, str]): + def __init__(self, name: str, port_model: Port, inner_allowed_pins: Dict[str, str]): self.name = name self.port_model = port_model self.inner_allowed_pins = inner_allowed_pins @@ -100,12 +100,12 @@ def __eq__(self, other: Any) -> bool: class PeripheralAnyResource(BaseDelegatingPinMapResource): - """A resource for a peripheral as a Bundle port, where the internal ports must be delegated to another resource, + """A resource for a peripheral as a bundle port, where the internal ports must be delegated to another resource, any resource of matching type. Used for chips with a full switch matrix. The port model here should have empty models for the internal ports, so the models can be assigned from the inner resource. This allows things like digital IOs in a peripheral to inherit from the pin-level definition.""" - def __init__(self, name: str, port_model: Bundle): + def __init__(self, name: str, port_model: Port): self.name = name self.port_model = port_model @@ -122,13 +122,13 @@ def __eq__(self, other: Any) -> bool: class PeripheralFixedResource(BaseDelegatingPinMapResource): - """A resource for a peripheral as a Bundle port, where the internal ports must be delegated to another resource, + """A resource for a peripheral as a bundle port, where the internal ports must be delegated to another resource, of a fixed list per pin by resource name. Used for chips which have alternate pin functionality (sort of a very limited switch matrix). The port model here should have empty models for the internal ports, so the models can be assigned from the inner resource. This allows things like digital IOs in a peripheral to inherit from the pin-level definition.""" - def __init__(self, name: str, port_model: Bundle, inner_allowed_names: Dict[str, List[str]]): + def __init__(self, name: str, port_model: Port, inner_allowed_names: Dict[str, List[str]]): self.name = name self.port_model = port_model self.inner_allowed_names = inner_allowed_names diff --git a/edg/core/Ports.py b/edg/core/Ports.py index 0465deb97..22d95a066 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -328,7 +328,7 @@ def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: @non_library -@deprecated(reason="merged with Port") +@deprecated(reason="merged with Port, use Port instead") class Bundle(Port[PortLinkType], Generic[PortLinkType]): SelfType = TypeVar("SelfType", bound="Bundle") diff --git a/edg/core/Util.py b/edg/core/Util.py index 76f84c5c8..9cff2f148 100644 --- a/edg/core/Util.py +++ b/edg/core/Util.py @@ -1,5 +1,5 @@ from typing import Any, Union, Dict -from .Ports import BasePort, Port, Bundle +from .Ports import BasePort, Port from .Blocks import BaseBlock, Link from .HierarchyBlock import Block @@ -9,16 +9,11 @@ def edg_obj_name(obj: Any) -> str: def edg_to_dict(obj: Union[BasePort, BaseBlock]) -> Dict[str, Any]: - if isinstance(obj, Bundle): - return { - "_": edg_obj_name(obj), - "params": obj._parameters, - "fields": {k: edg_to_dict(v) for k, v in obj._ports.items()}, - } - elif isinstance(obj, Port): + if isinstance(obj, Port): result = { "_": edg_obj_name(obj), "params": obj._parameters, + "fields": {k: edg_to_dict(v) for k, v in obj._ports.items()}, } if obj._link_instance is not None: result["link"] = edg_to_dict(obj._link_instance) diff --git a/edg/electronics_model/CanPort.py b/edg/electronics_model/CanPort.py index 5f53ec456..59ef90a96 100644 --- a/edg/electronics_model/CanPort.py +++ b/edg/electronics_model/CanPort.py @@ -31,7 +31,7 @@ def contents(self) -> None: ) -class CanControllerPort(Bundle[CanLogicLink]): +class CanControllerPort(Port[CanLogicLink]): link_type = CanLogicLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -42,7 +42,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.rxd = self.Port(DigitalSink.from_bidir(model)) -class CanTransceiverPort(Bundle[CanLogicLink]): +class CanTransceiverPort(Port[CanLogicLink]): link_type = CanLogicLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -53,7 +53,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.rxd = self.Port(DigitalSource.from_bidir(model)) -class CanPassivePort(Bundle[CanLogicLink]): +class CanPassivePort(Port[CanLogicLink]): link_type = CanLogicLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -102,7 +102,7 @@ def contents(self) -> None: self.connect(self.canl_bridge.inner_link, self.inner_link.canl) -class CanDiffPort(Bundle[CanDiffLink]): +class CanDiffPort(Port[CanDiffLink]): link_type = CanDiffLink bridge_type = CanDiffBridge diff --git a/edg/electronics_model/CrystalPort.py b/edg/electronics_model/CrystalPort.py index e289539d9..998fc875a 100644 --- a/edg/electronics_model/CrystalPort.py +++ b/edg/electronics_model/CrystalPort.py @@ -22,7 +22,7 @@ def contents(self) -> None: self.xo = self.connect(self.driver.xtal_out, self.crystal.xtal_out) -class CrystalPort(Bundle[CrystalLink]): +class CrystalPort(Port[CrystalLink]): link_type = CrystalLink def __init__(self, frequency: RangeLike = RangeExpr.ZERO) -> None: @@ -33,7 +33,7 @@ def __init__(self, frequency: RangeLike = RangeExpr.ZERO) -> None: self.frequency = self.Parameter(RangeExpr(frequency)) -class CrystalDriver(Bundle[CrystalLink]): +class CrystalDriver(Port[CrystalLink]): link_type = CrystalLink def __init__(self, frequency_limits: RangeLike = RangeExpr.ALL, voltage_out: RangeLike = RangeExpr.ZERO) -> None: diff --git a/edg/electronics_model/DebugPorts.py b/edg/electronics_model/DebugPorts.py index 3e70b9a56..5324b031b 100644 --- a/edg/electronics_model/DebugPorts.py +++ b/edg/electronics_model/DebugPorts.py @@ -26,7 +26,7 @@ def contents(self) -> None: ) -class SwdHostPort(Bundle[SwdLink]): +class SwdHostPort(Port[SwdLink]): link_type = SwdLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -37,7 +37,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.swclk = self.Port(DigitalSource.from_bidir(model)) -class SwdTargetPort(Bundle[SwdLink]): +class SwdTargetPort(Port[SwdLink]): link_type = SwdLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -48,7 +48,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.swclk = self.Port(DigitalSink.from_bidir(model)) -class SwdPullPort(Bundle[SwdLink]): +class SwdPullPort(Port[SwdLink]): link_type = SwdLink def __init__(self, model: Optional[DigitalSource] = None) -> None: diff --git a/edg/electronics_model/DvpPort.py b/edg/electronics_model/DvpPort.py index 15c6819f1..72ca15ed9 100644 --- a/edg/electronics_model/DvpPort.py +++ b/edg/electronics_model/DvpPort.py @@ -34,7 +34,7 @@ def contents(self) -> None: self.y7 = self.connect(self.host.y7, self.cam.y7) -class Dvp8Host(Bundle[Dvp8Link]): +class Dvp8Host(Port[Dvp8Link]): link_type = Dvp8Link def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -59,7 +59,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.y7 = self.Port(sink_model) -class Dvp8Camera(Bundle[Dvp8Link]): +class Dvp8Camera(Port[Dvp8Link]): link_type = Dvp8Link def __init__(self, model: Optional[DigitalBidir] = None) -> None: diff --git a/edg/electronics_model/I2cPort.py b/edg/electronics_model/I2cPort.py index 0474297b9..db189f4a5 100644 --- a/edg/electronics_model/I2cPort.py +++ b/edg/electronics_model/I2cPort.py @@ -46,7 +46,7 @@ def contents(self) -> None: ) -class I2cPullupPort(Bundle[I2cLink]): +class I2cPullupPort(Port[I2cLink]): link_type = I2cLink def __init__(self) -> None: @@ -55,7 +55,7 @@ def __init__(self) -> None: self.sda = self.Port(DigitalSource(low_driver=False, high_driver=False, pullup_capable=True)) -class I2cController(Bundle[I2cLink]): +class I2cController(Port[I2cLink]): link_type = I2cLink def __init__(self, model: Optional[DigitalBidir] = None, has_pullup: BoolLike = False) -> None: @@ -92,7 +92,7 @@ def contents(self) -> None: self.connect(self.sda_bridge.inner_link, self.inner_link.sda) -class I2cTarget(Bundle[I2cLink]): +class I2cTarget(Port[I2cLink]): link_type = I2cLink bridge_type = I2cTargetBridge diff --git a/edg/electronics_model/I2sPort.py b/edg/electronics_model/I2sPort.py index d3f88aa06..f694e47d2 100644 --- a/edg/electronics_model/I2sPort.py +++ b/edg/electronics_model/I2sPort.py @@ -21,7 +21,7 @@ def contents(self) -> None: self.sd = self.connect(self.controller.sd, self.target_receiver.sd) -class I2sController(Bundle[I2sLink]): +class I2sController(Port[I2sLink]): """Controller is both controller (drives SCK and WS lines) and transmitter (SD is output)""" link_type = I2sLink @@ -35,7 +35,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.sd = self.Port(model) # bidirectional -class I2sTargetReceiver(Bundle[I2sLink]): +class I2sTargetReceiver(Port[I2sLink]): """Target means SCK and WS are inputs, receiver means SD is input""" link_type = I2sLink diff --git a/edg/electronics_model/KiCadSchematicBlock.py b/edg/electronics_model/KiCadSchematicBlock.py index b1037e8ed..f60dbfc57 100644 --- a/edg/electronics_model/KiCadSchematicBlock.py +++ b/edg/electronics_model/KiCadSchematicBlock.py @@ -176,7 +176,7 @@ def inner(root: Any, components: List[str]) -> Optional[BasePort]: return root else: return None # invalid type - elif hasattr(root, components[0]) and isinstance(root, (Bundle, Block)): + elif hasattr(root, components[0]) and isinstance(root, (Port, Block)): return inner(getattr(root, components[0]), components[1:]) else: return None diff --git a/edg/electronics_model/PinAssignmentUtil.py b/edg/electronics_model/PinAssignmentUtil.py index dd58bcbfa..4484b059c 100644 --- a/edg/electronics_model/PinAssignmentUtil.py +++ b/edg/electronics_model/PinAssignmentUtil.py @@ -11,10 +11,8 @@ def leaf_circuit_ports(prefix: str, port: Port) -> Iterable[Tuple[str, CircuitPort]]: if isinstance(port, CircuitPort): return [(prefix, port)] - elif isinstance(port, Bundle): - return chain(*[leaf_circuit_ports(f"{prefix}.{name}", port) for (name, port) in port._ports.items()]) else: - raise ValueError(f"unable to flatten {port}") + return chain(*[leaf_circuit_ports(f"{prefix}.{name}", port) for (name, port) in port._ports.items()]) class SpecialPin: diff --git a/edg/electronics_model/SpeakerPort.py b/edg/electronics_model/SpeakerPort.py index b60b96160..bb7e1f8bd 100644 --- a/edg/electronics_model/SpeakerPort.py +++ b/edg/electronics_model/SpeakerPort.py @@ -20,7 +20,7 @@ def contents(self) -> None: self.b = self.connect(self.source.b, self.sink.b) -class SpeakerDriverPort(Bundle[SpeakerLink]): +class SpeakerDriverPort(Port[SpeakerLink]): link_type = SpeakerLink def __init__(self, model: Optional[AnalogSource] = None) -> None: @@ -32,7 +32,7 @@ def __init__(self, model: Optional[AnalogSource] = None) -> None: self.b = self.Port(model) -class SpeakerPort(Bundle[SpeakerLink]): +class SpeakerPort(Port[SpeakerLink]): link_type = SpeakerLink def __init__(self, model: Optional[AnalogSink] = None) -> None: diff --git a/edg/electronics_model/SpiPort.py b/edg/electronics_model/SpiPort.py index 1e8669bd4..9cd6e9ad4 100644 --- a/edg/electronics_model/SpiPort.py +++ b/edg/electronics_model/SpiPort.py @@ -35,7 +35,7 @@ def contents(self) -> None: ) -class SpiController(Bundle[SpiLink]): +class SpiController(Port[SpiLink]): link_type = SpiLink def __init__(self, model: Optional[DigitalBidir] = None, frequency: RangeLike = RangeExpr.ZERO) -> None: @@ -50,7 +50,7 @@ def __init__(self, model: Optional[DigitalBidir] = None, frequency: RangeLike = self.mode = self.Parameter(RangeExpr()) # modes supported, in [0, 3] TODO: what about sparse modes? -class SpiPeripheral(Bundle[SpiLink]): +class SpiPeripheral(Port[SpiLink]): link_type = SpiLink def __init__(self, model: Optional[DigitalBidir] = None, frequency_limit: RangeLike = RangeExpr.ALL) -> None: diff --git a/edg/electronics_model/UartPort.py b/edg/electronics_model/UartPort.py index 87f87c364..ff633828b 100644 --- a/edg/electronics_model/UartPort.py +++ b/edg/electronics_model/UartPort.py @@ -20,7 +20,7 @@ def contents(self) -> None: self.b_tx = self.connect(self.b.tx, self.a.rx) -class UartPort(Bundle[UartLink]): +class UartPort(Port[UartLink]): link_type = UartLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: diff --git a/edg/electronics_model/UsbPort.py b/edg/electronics_model/UsbPort.py index ba6bf15ec..7edf62b05 100644 --- a/edg/electronics_model/UsbPort.py +++ b/edg/electronics_model/UsbPort.py @@ -26,7 +26,7 @@ def contents(self) -> None: ) -class UsbHostPort(Bundle[UsbLink]): +class UsbHostPort(Port[UsbLink]): link_type = UsbLink def __init__(self) -> None: @@ -56,7 +56,7 @@ def contents(self) -> None: self.connect(self.dp_bridge.inner_link, self.inner_link.dp) -class UsbDevicePort(Bundle[UsbLink]): +class UsbDevicePort(Port[UsbLink]): link_type = UsbLink bridge_type = UsbDeviceBridge @@ -68,7 +68,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.dm = self.Port(model) -class UsbPassivePort(Bundle[UsbLink]): +class UsbPassivePort(Port[UsbLink]): link_type = UsbLink def __init__(self) -> None: @@ -95,7 +95,7 @@ def contents(self) -> None: self.cc2 = self.connect(self.a.cc2, self.b.cc2) -class UsbCcPort(Bundle[UsbCcLink]): +class UsbCcPort(Port[UsbCcLink]): link_type = UsbCcLink def __init__(self, pullup_capable: BoolLike = False) -> None: diff --git a/edg/parts/Jacdac.py b/edg/parts/Jacdac.py index 471c2ad53..62f9e7152 100644 --- a/edg/parts/Jacdac.py +++ b/edg/parts/Jacdac.py @@ -25,7 +25,7 @@ def contents(self) -> None: self.require(self.nodes.length() > 1, "jd_data connection required") -class JacdacDataPort(Bundle[JacdacDataLink]): +class JacdacDataPort(Port[JacdacDataLink]): link_type = JacdacDataLink def __init__(self, model: Optional[DigitalBidir] = None) -> None: @@ -35,7 +35,7 @@ def __init__(self, model: Optional[DigitalBidir] = None) -> None: self.jd_data = self.Port(model) -class JacdacPassivePort(Bundle[JacdacDataLink]): +class JacdacPassivePort(Port[JacdacDataLink]): link_type = JacdacDataLink def __init__(self) -> None: diff --git a/examples/BldcController/BldcController.net b/examples/BldcController/BldcController.net deleted file mode 100644 index 702141292..000000000 --- a/examples/BldcController/BldcController.net +++ /dev/null @@ -1,1135 +0,0 @@ -(export (version D) -(components -(comp (ref "H1") - (value "jlc_th.th1") - (footprint "edg:JlcToolingHole_1.152mm") - (property (name "Sheetname") (value "jlc_th")) - (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) - (property (name "edg_path") (value "jlc_th.th1")) - (property (name "edg_short_path") (value "jlc_th.th1")) - (property (name "edg_refdes") (value "H1")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) - (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) - (tstamps "0260010e")) -(comp (ref "H2") - (value "jlc_th.th2") - (footprint "edg:JlcToolingHole_1.152mm") - (property (name "Sheetname") (value "jlc_th")) - (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) - (property (name "edg_path") (value "jlc_th.th2")) - (property (name "edg_short_path") (value "jlc_th.th2")) - (property (name "edg_refdes") (value "H2")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) - (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) - (tstamps "0261010f")) -(comp (ref "H3") - (value "jlc_th.th3") - (footprint "edg:JlcToolingHole_1.152mm") - (property (name "Sheetname") (value "jlc_th")) - (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) - (property (name "edg_path") (value "jlc_th.th3")) - (property (name "edg_short_path") (value "jlc_th.th3")) - (property (name "edg_refdes") (value "H3")) - (property (name "edg_part") (value "")) - (property (name "edg_value") (value "")) - (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) - (tstamps "02620110")) -(comp (ref "U1") - (value "mcu") - (footprint "bldc:FEATHERWING_NODIM") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "mcu")) - (property (name "edg_short_path") (value "mcu")) - (property (name "edg_refdes") (value "U1")) - (property (name "edg_part") (value "Feather nRF52840 Express (Adafruit)")) - (property (name "edg_value") (value "Feather nRF52840 Express")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "02850146")) -(comp (ref "J1") - (value "motor_pwr") - (footprint "Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "motor_pwr.conn")) - (property (name "edg_short_path") (value "motor_pwr")) - (property (name "edg_refdes") (value "J1")) - (property (name "edg_part") (value "B2B-PH-K (JST)")) - (property (name "edg_value") (value "B2B-PH-K")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "138203ea")) -(comp (ref "SW1") - (value "sw1") - (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "sw1.package")) - (property (name "edg_short_path") (value "sw1")) - (property (name "edg_refdes") (value "SW1")) - (property (name "edg_part") (value "5.1mm switch")) - (property (name "edg_value") (value "5.1mm switch")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "027b011c")) -(comp (ref "D1") - (value "ledr.package") - (footprint "LED_SMD:LED_0603_1608Metric") - (property (name "Sheetname") (value "ledr")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledr.package")) - (property (name "edg_short_path") (value "ledr.package")) - (property (name "edg_refdes") (value "D1")) - (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) - (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS")) - (sheetpath (names "/ledr/") (tstamps "/041d01a8/")) - (tstamps "0b4e02cd")) -(comp (ref "R1") - (value "ledr.res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ledr")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledr.res")) - (property (name "edg_short_path") (value "ledr.res")) - (property (name "edg_refdes") (value "R1")) - (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/ledr/") (tstamps "/041d01a8/")) - (tstamps "0296014b")) -(comp (ref "D2") - (value "ledg.package") - (footprint "LED_SMD:LED_0603_1608Metric") - (property (name "Sheetname") (value "ledg")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledg.package")) - (property (name "edg_short_path") (value "ledg.package")) - (property (name "edg_refdes") (value "D2")) - (property (name "edg_part") (value "19-217/GHC-YR1S2/3T (Everlight Elec)")) - (property (name "edg_value") (value "20mA 285mcd 3.3V 518nm Colorless transparence -40℃~+85℃ 520nm~535nm Emerald 120° 110mW 0603 Light Emitting Diodes (LED) ROHS")) - (sheetpath (names "/ledg/") (tstamps "/0412019d/")) - (tstamps "0b4e02cd")) -(comp (ref "R2") - (value "ledg.res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ledg")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledg.res")) - (property (name "edg_short_path") (value "ledg.res")) - (property (name "edg_refdes") (value "R2")) - (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/ledg/") (tstamps "/0412019d/")) - (tstamps "0296014b")) -(comp (ref "D3") - (value "ledb.package") - (footprint "LED_SMD:LED_0603_1608Metric") - (property (name "Sheetname") (value "ledb")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledb.package")) - (property (name "edg_short_path") (value "ledb.package")) - (property (name "edg_refdes") (value "D3")) - (property (name "edg_part") (value "19-217/BHC-ZL1M2RY/3T (Everlight Elec)")) - (property (name "edg_value") (value "5mA 28.5mcd 3.1V 468nm Colorless transparence -40℃~+85℃ 465nm~475nm blue 120° 110mW 0603 Light Emitting Diodes (LED) ROHS")) - (sheetpath (names "/ledb/") (tstamps "/040d0198/")) - (tstamps "0b4e02cd")) -(comp (ref "R3") - (value "ledb.res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ledb")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) - (property (name "edg_path") (value "ledb.res")) - (property (name "edg_short_path") (value "ledb.res")) - (property (name "edg_refdes") (value "R3")) - (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/ledb/") (tstamps "/040d0198/")) - (tstamps "0296014b")) -(comp (ref "R4") - (value "i2c_pull.scl_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "i2c_pull")) - (property (name "Sheetfile") (value "edg.abstract_parts.I2cPullup.I2cPullup")) - (property (name "edg_path") (value "i2c_pull.scl_res.res")) - (property (name "edg_short_path") (value "i2c_pull.scl_res")) - (property (name "edg_refdes") (value "R4")) - (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) - (tstamps "0ba902ec")) -(comp (ref "R5") - (value "i2c_pull.sda_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "i2c_pull")) - (property (name "Sheetfile") (value "edg.abstract_parts.I2cPullup.I2cPullup")) - (property (name "edg_path") (value "i2c_pull.sda_res.res")) - (property (name "edg_short_path") (value "i2c_pull.sda_res")) - (property (name "edg_refdes") (value "R5")) - (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) - (tstamps "0b7802e2")) -(comp (ref "TP1") - (value "_mcu_i2c_i2c_link.scl") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "i2c_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.I2cTestPoint")) - (property (name "edg_path") (value "i2c_tp.tp_scl.tp")) - (property (name "edg_short_path") (value "i2c_tp.tp_scl")) - (property (name "edg_refdes") (value "TP1")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_i2c_i2c_link.scl")) - (sheetpath (names "/i2c_tp/") (tstamps "/07770242/")) - (tstamps "08f50286")) -(comp (ref "TP2") - (value "_mcu_i2c_i2c_link.sda") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "i2c_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.I2cTestPoint")) - (property (name "edg_path") (value "i2c_tp.tp_sda.tp")) - (property (name "edg_short_path") (value "i2c_tp.tp_sda")) - (property (name "edg_refdes") (value "TP2")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_i2c_i2c_link.sda")) - (sheetpath (names "/i2c_tp/") (tstamps "/07770242/")) - (tstamps "08ec027c")) -(comp (ref "J2") - (value "i2c") - (footprint "Connector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_Vertical") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "i2c.conn")) - (property (name "edg_short_path") (value "i2c")) - (property (name "edg_refdes") (value "J2")) - (property (name "edg_part") (value "B4B-PH-K (JST)")) - (property (name "edg_value") (value "B4B-PH-K")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "020500ff")) -(comp (ref "R6") - (value "ref_div.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ref_div")) - (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageDivider")) - (property (name "edg_path") (value "ref_div.div.top_res")) - (property (name "edg_short_path") (value "ref_div.top_res")) - (property (name "edg_refdes") (value "R6")) - (property (name "edg_part") (value "0603WAF1203T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 120kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/ref_div/") (tstamps "/0b7102e0/")) - (tstamps "0c0c02fd")) -(comp (ref "R7") - (value "ref_div.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "ref_div")) - (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageDivider")) - (property (name "edg_path") (value "ref_div.div.bottom_res")) - (property (name "edg_short_path") (value "ref_div.bottom_res")) - (property (name "edg_refdes") (value "R7")) - (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/ref_div/") (tstamps "/0b7102e0/")) - (tstamps "175b043f")) -(comp (ref "U2") - (value "ref_buf.ic") - (footprint "Package_TO_SOT_SMD:SOT-23-5") - (property (name "Sheetname") (value "ref_buf")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.OpampFollower")) - (property (name "edg_path") (value "ref_buf.amp.ic")) - (property (name "edg_short_path") (value "ref_buf.ic")) - (property (name "edg_refdes") (value "U2")) - (property (name "edg_part") (value "LMV321 (Texas Instruments)")) - (property (name "edg_value") (value "LMV321")) - (sheetpath (names "/ref_buf/") (tstamps "/0b7302da/")) - (tstamps "013700cd")) -(comp (ref "C1") - (value "ref_buf.vdd_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "ref_buf")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.OpampFollower")) - (property (name "edg_path") (value "ref_buf.amp.vdd_cap.cap")) - (property (name "edg_short_path") (value "ref_buf.vdd_cap")) - (property (name "edg_refdes") (value "C1")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/ref_buf/") (tstamps "/0b7302da/")) - (tstamps "0b6402d2")) -(comp (ref "TP3") - (value "_ref_buf_output_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "ref_tp.tp")) - (property (name "edg_short_path") (value "ref_tp")) - (property (name "edg_refdes") (value "TP3")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_ref_buf_output_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "08b80281")) -(comp (ref "J3") - (value "hall") - (footprint "Connector_JST:JST_PH_B5B-PH-K_1x05_P2.00mm_Vertical") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "hall.conn")) - (property (name "edg_short_path") (value "hall")) - (property (name "edg_refdes") (value "J3")) - (property (name "edg_part") (value "B5B-PH-K (JST)")) - (property (name "edg_value") (value "B5B-PH-K")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "040b01a2")) -(comp (ref "R8") - (value "hall_pull.res[u]") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "hall_pull")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) - (property (name "edg_path") (value "hall_pull.res[u].res")) - (property (name "edg_short_path") (value "hall_pull.res[u]")) - (property (name "edg_refdes") (value "R8")) - (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) - (tstamps "08cf0278")) -(comp (ref "R9") - (value "hall_pull.res[v]") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "hall_pull")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) - (property (name "edg_path") (value "hall_pull.res[v].res")) - (property (name "edg_short_path") (value "hall_pull.res[v]")) - (property (name "edg_refdes") (value "R9")) - (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) - (tstamps "08d10279")) -(comp (ref "R10") - (value "hall_pull.res[w]") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "hall_pull")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) - (property (name "edg_path") (value "hall_pull.res[w].res")) - (property (name "edg_short_path") (value "hall_pull.res[w]")) - (property (name "edg_refdes") (value "R10")) - (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) - (tstamps "08d3027a")) -(comp (ref "TP4") - (value "_hall_phases_link.u") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "hall_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "hall_tp.tp[u].tp")) - (property (name "edg_short_path") (value "hall_tp.tp[u]")) - (property (name "edg_refdes") (value "TP4")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_hall_phases_link.u")) - (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) - (tstamps "06610212")) -(comp (ref "TP5") - (value "_hall_phases_link.v") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "hall_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "hall_tp.tp[v].tp")) - (property (name "edg_short_path") (value "hall_tp.tp[v]")) - (property (name "edg_refdes") (value "TP5")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_hall_phases_link.v")) - (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) - (tstamps "06630213")) -(comp (ref "TP6") - (value "_hall_phases_link.w") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "hall_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "hall_tp.tp[w].tp")) - (property (name "edg_short_path") (value "hall_tp.tp[w]")) - (property (name "edg_refdes") (value "TP6")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_hall_phases_link.w")) - (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) - (tstamps "06650214")) -(comp (ref "R11") - (value "vsense.top_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "vsense")) - (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageSenseDivider")) - (property (name "edg_path") (value "vsense.div.top_res")) - (property (name "edg_short_path") (value "vsense.top_res")) - (property (name "edg_refdes") (value "R11")) - (property (name "edg_part") (value "0603WAF6802T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 68kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/vsense/") (tstamps "/09320295/")) - (tstamps "0c0c02fd")) -(comp (ref "R12") - (value "vsense.bottom_res") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "vsense")) - (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageSenseDivider")) - (property (name "edg_path") (value "vsense.div.bottom_res")) - (property (name "edg_short_path") (value "vsense.bottom_res")) - (property (name "edg_refdes") (value "R12")) - (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/vsense/") (tstamps "/09320295/")) - (tstamps "175b043f")) -(comp (ref "TP7") - (value "_vsense_output_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "vsense_tp.tp")) - (property (name "edg_short_path") (value "vsense_tp")) - (property (name "edg_refdes") (value "TP7")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_vsense_output_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "136603d8")) -(comp (ref "R13") - (value "isense.sense") - (footprint "Resistor_SMD:R_1206_3216Metric") - (property (name "Sheetname") (value "isense")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCurrentSensor.OpampCurrentSensor")) - (property (name "edg_path") (value "isense.sense.res.res")) - (property (name "edg_short_path") (value "isense.sense")) - (property (name "edg_refdes") (value "R13")) - (property (name "edg_part") (value "SMF12M1FR050T (SART(Nanjing Sart Tech))")) - (property (name "edg_value") (value "1W 0.05Ω ±50ppm/℃ ±1% 1206 Current Sense Resistors/Shunt Resistors ROHS")) - (sheetpath (names "/isense/") (tstamps "/08e40288/")) - (tstamps "066d021f")) -(comp (ref "U3") - (value "isense.amp.amp.ic") - (footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Opax197.Opa197")) - (property (name "edg_path") (value "isense.amp.amp.ic")) - (property (name "edg_short_path") (value "isense.amp.amp.ic")) - (property (name "edg_refdes") (value "U3")) - (property (name "edg_part") (value "OPA197IDR (Texas Instruments)")) - (property (name "edg_value") (value "OPA197IDR")) - (sheetpath (names "/isense/amp/amp/") (tstamps "/08e40288/0270013f/0270013f/")) - (tstamps "013700cd")) -(comp (ref "C2") - (value "isense.amp.amp.vdd_cap") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Opax197.Opa197")) - (property (name "edg_path") (value "isense.amp.amp.vdd_cap.cap")) - (property (name "edg_short_path") (value "isense.amp.amp.vdd_cap")) - (property (name "edg_refdes") (value "C2")) - (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/isense/amp/amp/") (tstamps "/08e40288/0270013f/0270013f/")) - (tstamps "0b6402d2")) -(comp (ref "R14") - (value "isense.amp.r1") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) - (property (name "edg_path") (value "isense.amp.r1")) - (property (name "edg_short_path") (value "isense.amp.r1")) - (property (name "edg_refdes") (value "R14")) - (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) - (tstamps "011700a4")) -(comp (ref "R15") - (value "isense.amp.r2") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) - (property (name "edg_path") (value "isense.amp.r2")) - (property (name "edg_short_path") (value "isense.amp.r2")) - (property (name "edg_refdes") (value "R15")) - (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) - (tstamps "011800a5")) -(comp (ref "R16") - (value "isense.amp.rf") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) - (property (name "edg_path") (value "isense.amp.rf")) - (property (name "edg_short_path") (value "isense.amp.rf")) - (property (name "edg_refdes") (value "R16")) - (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) - (tstamps "014c00d9")) -(comp (ref "R17") - (value "isense.amp.rg") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) - (property (name "edg_path") (value "isense.amp.rg")) - (property (name "edg_short_path") (value "isense.amp.rg")) - (property (name "edg_refdes") (value "R17")) - (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) - (tstamps "014d00da")) -(comp (ref "TP8") - (value "_isense_out_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "isense_tp.tp")) - (property (name "edg_short_path") (value "isense_tp")) - (property (name "edg_refdes") (value "TP8")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_isense_out_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "12f103cb")) -(comp (ref "R18") - (value "isense_clamp") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "isense_clamp.res")) - (property (name "edg_short_path") (value "isense_clamp")) - (property (name "edg_refdes") (value "R18")) - (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "205a04f4")) -(comp (ref "U4") - (value "bldc_drv.ic") - (footprint "Package_SO:HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x5.4mm_ThermalVias") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.ic")) - (property (name "edg_short_path") (value "bldc_drv.ic")) - (property (name "edg_refdes") (value "U4")) - (property (name "edg_part") (value "DRV8313PWP (Texas Instruments)")) - (property (name "edg_value") (value "DRV8313PWP")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "013700cd")) -(comp (ref "C3") - (value "bldc_drv.vm_cap_bulk") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.vm_cap_bulk.cap")) - (property (name "edg_short_path") (value "bldc_drv.vm_cap_bulk")) - (property (name "edg_refdes") (value "C3")) - (property (name "edg_part") (value "GRM21BR61H106KE43L (Murata Electronics)")) - (property (name "edg_value") (value "50V 10uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "1b1a0484")) -(comp (ref "C4") - (value "bldc_drv.vm_cap1") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.vm_cap1.cap")) - (property (name "edg_short_path") (value "bldc_drv.vm_cap1")) - (property (name "edg_refdes") (value "C4")) - (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "0b6a02a8")) -(comp (ref "C5") - (value "bldc_drv.vm_cap2") - (footprint "Capacitor_SMD:C_0805_2012Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.vm_cap2.cap")) - (property (name "edg_short_path") (value "bldc_drv.vm_cap2")) - (property (name "edg_refdes") (value "C5")) - (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "0b6b02a9")) -(comp (ref "C6") - (value "bldc_drv.v3p3_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.v3p3_cap.cap")) - (property (name "edg_short_path") (value "bldc_drv.v3p3_cap")) - (property (name "edg_refdes") (value "C6")) - (property (name "edg_part") (value "CL10B474KA8NNNC (Samsung Electro-Mechanics)")) - (property (name "edg_value") (value "25V 470nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "0c9302e0")) -(comp (ref "C7") - (value "bldc_drv.cp_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.cp_cap")) - (property (name "edg_short_path") (value "bldc_drv.cp_cap")) - (property (name "edg_refdes") (value "C7")) - (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) - (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "085f0267")) -(comp (ref "C8") - (value "bldc_drv.vcp_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.vcp_cap")) - (property (name "edg_short_path") (value "bldc_drv.vcp_cap")) - (property (name "edg_refdes") (value "C8")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "0b9a02dd")) -(comp (ref "R19") - (value "bldc_drv.pgnd_res[1]") - (footprint "Resistor_SMD:R_2512_6332Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.pgnd_res[1].res.res")) - (property (name "edg_short_path") (value "bldc_drv.pgnd_res[1]")) - (property (name "edg_refdes") (value "R19")) - (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) - (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "1ab9043c")) -(comp (ref "R20") - (value "bldc_drv.pgnd_res[2]") - (footprint "Resistor_SMD:R_2512_6332Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.pgnd_res[2].res.res")) - (property (name "edg_short_path") (value "bldc_drv.pgnd_res[2]")) - (property (name "edg_refdes") (value "R20")) - (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) - (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "1abb043d")) -(comp (ref "R21") - (value "bldc_drv.pgnd_res[3]") - (footprint "Resistor_SMD:R_2512_6332Metric") - (property (name "Sheetname") (value "bldc_drv")) - (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) - (property (name "edg_path") (value "bldc_drv.pgnd_res[3].res.res")) - (property (name "edg_short_path") (value "bldc_drv.pgnd_res[3]")) - (property (name "edg_refdes") (value "R21")) - (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) - (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) - (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) - (tstamps "1abd043e")) -(comp (ref "TP9") - (value "_mcu_gpio_bldc_fault_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "bldc_fault_tp.tp")) - (property (name "edg_short_path") (value "bldc_fault_tp")) - (property (name "edg_refdes") (value "TP9")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_fault_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "248e0554")) -(comp (ref "TP10") - (value "_mcu_gpio_bldc_en_link.1") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_en_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_en_tp.tp[1].tp")) - (property (name "edg_short_path") (value "bldc_en_tp.tp[1]")) - (property (name "edg_refdes") (value "TP10")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.1")) - (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) - (tstamps "05d901ce")) -(comp (ref "TP11") - (value "_mcu_gpio_bldc_en_link.2") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_en_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_en_tp.tp[2].tp")) - (property (name "edg_short_path") (value "bldc_en_tp.tp[2]")) - (property (name "edg_refdes") (value "TP11")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.2")) - (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) - (tstamps "05db01cf")) -(comp (ref "TP12") - (value "_mcu_gpio_bldc_en_link.3") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_en_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_en_tp.tp[3].tp")) - (property (name "edg_short_path") (value "bldc_en_tp.tp[3]")) - (property (name "edg_refdes") (value "TP12")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.3")) - (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) - (tstamps "05dd01d0")) -(comp (ref "TP13") - (value "_mcu_gpio_bldc_in_link.1") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_in_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_in_tp.tp[1].tp")) - (property (name "edg_short_path") (value "bldc_in_tp.tp[1]")) - (property (name "edg_refdes") (value "TP13")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.1")) - (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) - (tstamps "05d901ce")) -(comp (ref "TP14") - (value "_mcu_gpio_bldc_in_link.2") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_in_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_in_tp.tp[2].tp")) - (property (name "edg_short_path") (value "bldc_in_tp.tp[2]")) - (property (name "edg_refdes") (value "TP14")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.2")) - (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) - (tstamps "05db01cf")) -(comp (ref "TP15") - (value "_mcu_gpio_bldc_in_link.3") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "bldc_in_tp")) - (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) - (property (name "edg_path") (value "bldc_in_tp.tp[3].tp")) - (property (name "edg_short_path") (value "bldc_in_tp.tp[3]")) - (property (name "edg_refdes") (value "TP15")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.3")) - (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) - (tstamps "05dd01d0")) -(comp (ref "J4") - (value "bldc") - (footprint "Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_Vertical") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "bldc.conn")) - (property (name "edg_short_path") (value "bldc")) - (property (name "edg_refdes") (value "J4")) - (property (name "edg_part") (value "B3B-PH-K (JST)")) - (property (name "edg_value") (value "B3B-PH-K")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "03fb0196")) -(comp (ref "U5") - (value "curr_amp[1].amp.ic") - (footprint "Package_TO_SOT_SMD:SOT-23-5") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[1].amp.ic")) - (property (name "edg_short_path") (value "curr_amp[1].amp.ic")) - (property (name "edg_refdes") (value "U5")) - (property (name "edg_part") (value "LMV321 (Texas Instruments)")) - (property (name "edg_value") (value "LMV321")) - (sheetpath (names "/curr_amp[1]/amp/") (tstamps "/1b000443/0270013f/")) - (tstamps "013700cd")) -(comp (ref "C9") - (value "curr_amp[1].amp.vdd_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[1].amp.vdd_cap.cap")) - (property (name "edg_short_path") (value "curr_amp[1].amp.vdd_cap")) - (property (name "edg_refdes") (value "C9")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/curr_amp[1]/amp/") (tstamps "/1b000443/0270013f/")) - (tstamps "0b6402d2")) -(comp (ref "R22") - (value "curr_amp[1].r1") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[1]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[1].r1")) - (property (name "edg_short_path") (value "curr_amp[1].r1")) - (property (name "edg_refdes") (value "R22")) - (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[1]/") (tstamps "/1b000443/")) - (tstamps "011700a4")) -(comp (ref "R23") - (value "curr_amp[1].r2") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[1]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[1].r2")) - (property (name "edg_short_path") (value "curr_amp[1].r2")) - (property (name "edg_refdes") (value "R23")) - (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[1]/") (tstamps "/1b000443/")) - (tstamps "011800a5")) -(comp (ref "TP16") - (value "_curr_amp[1]_output_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "curr_tp[1].tp")) - (property (name "edg_short_path") (value "curr_tp[1]")) - (property (name "edg_refdes") (value "TP16")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_curr_amp[1]_output_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "16c103e9")) -(comp (ref "U6") - (value "curr_amp[2].amp.ic") - (footprint "Package_TO_SOT_SMD:SOT-23-5") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[2].amp.ic")) - (property (name "edg_short_path") (value "curr_amp[2].amp.ic")) - (property (name "edg_refdes") (value "U6")) - (property (name "edg_part") (value "LMV321 (Texas Instruments)")) - (property (name "edg_value") (value "LMV321")) - (sheetpath (names "/curr_amp[2]/amp/") (tstamps "/1b020444/0270013f/")) - (tstamps "013700cd")) -(comp (ref "C10") - (value "curr_amp[2].amp.vdd_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[2].amp.vdd_cap.cap")) - (property (name "edg_short_path") (value "curr_amp[2].amp.vdd_cap")) - (property (name "edg_refdes") (value "C10")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/curr_amp[2]/amp/") (tstamps "/1b020444/0270013f/")) - (tstamps "0b6402d2")) -(comp (ref "R24") - (value "curr_amp[2].r1") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[2]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[2].r1")) - (property (name "edg_short_path") (value "curr_amp[2].r1")) - (property (name "edg_refdes") (value "R24")) - (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[2]/") (tstamps "/1b020444/")) - (tstamps "011700a4")) -(comp (ref "R25") - (value "curr_amp[2].r2") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[2]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[2].r2")) - (property (name "edg_short_path") (value "curr_amp[2].r2")) - (property (name "edg_refdes") (value "R25")) - (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[2]/") (tstamps "/1b020444/")) - (tstamps "011800a5")) -(comp (ref "TP17") - (value "_curr_amp[2]_output_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "curr_tp[2].tp")) - (property (name "edg_short_path") (value "curr_tp[2]")) - (property (name "edg_refdes") (value "TP17")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_curr_amp[2]_output_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "16c303ea")) -(comp (ref "U7") - (value "curr_amp[3].amp.ic") - (footprint "Package_TO_SOT_SMD:SOT-23-5") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[3].amp.ic")) - (property (name "edg_short_path") (value "curr_amp[3].amp.ic")) - (property (name "edg_refdes") (value "U7")) - (property (name "edg_part") (value "LMV321 (Texas Instruments)")) - (property (name "edg_value") (value "LMV321")) - (sheetpath (names "/curr_amp[3]/amp/") (tstamps "/1b040445/0270013f/")) - (tstamps "013700cd")) -(comp (ref "C11") - (value "curr_amp[3].amp.vdd_cap") - (footprint "Capacitor_SMD:C_0603_1608Metric") - (property (name "Sheetname") (value "amp")) - (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) - (property (name "edg_path") (value "curr_amp[3].amp.vdd_cap.cap")) - (property (name "edg_short_path") (value "curr_amp[3].amp.vdd_cap")) - (property (name "edg_refdes") (value "C11")) - (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) - (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) - (sheetpath (names "/curr_amp[3]/amp/") (tstamps "/1b040445/0270013f/")) - (tstamps "0b6402d2")) -(comp (ref "R26") - (value "curr_amp[3].r1") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[3]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[3].r1")) - (property (name "edg_short_path") (value "curr_amp[3].r1")) - (property (name "edg_refdes") (value "R26")) - (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[3]/") (tstamps "/1b040445/")) - (tstamps "011700a4")) -(comp (ref "R27") - (value "curr_amp[3].r2") - (footprint "Resistor_SMD:R_0603_1608Metric") - (property (name "Sheetname") (value "curr_amp[3]")) - (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) - (property (name "edg_path") (value "curr_amp[3].r2")) - (property (name "edg_short_path") (value "curr_amp[3].r2")) - (property (name "edg_refdes") (value "R27")) - (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) - (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) - (sheetpath (names "/curr_amp[3]/") (tstamps "/1b040445/")) - (tstamps "011800a5")) -(comp (ref "TP18") - (value "_curr_amp[3]_output_link") - (footprint "edg:TestPoint_TE_RCT_0805") - (property (name "Sheetname") (value "")) - (property (name "Sheetfile") (value "")) - (property (name "edg_path") (value "curr_tp[3].tp")) - (property (name "edg_short_path") (value "curr_tp[3]")) - (property (name "edg_refdes") (value "TP18")) - (property (name "edg_part") (value "5015 (Keystone)")) - (property (name "edg_value") (value "_curr_amp[3]_output_link")) - (sheetpath (names "/") (tstamps "/")) - (tstamps "16c503eb"))) -(nets -(net (code 1) (name "vusb") - (node (ref U1) (pin 26)) - (node (ref J3) (pin 1))) -(net (code 2) (name "v3v3") - (node (ref U1) (pin 2)) - (node (ref J2) (pin 2)) - (node (ref U2) (pin 5)) - (node (ref R6) (pin 1)) - (node (ref U5) (pin 5)) - (node (ref U6) (pin 5)) - (node (ref U7) (pin 5)) - (node (ref R4) (pin 1)) - (node (ref R5) (pin 1)) - (node (ref R8) (pin 1)) - (node (ref R9) (pin 1)) - (node (ref R10) (pin 1)) - (node (ref C1) (pin 1)) - (node (ref C9) (pin 1)) - (node (ref C10) (pin 1)) - (node (ref C11) (pin 1))) -(net (code 3) (name "gnd") - (node (ref U1) (pin 4)) - (node (ref J1) (pin 1)) - (node (ref SW1) (pin 2)) - (node (ref R1) (pin 2)) - (node (ref R2) (pin 2)) - (node (ref R3) (pin 2)) - (node (ref J2) (pin 1)) - (node (ref J3) (pin 5)) - (node (ref U4) (pin 12)) - (node (ref U4) (pin 13)) - (node (ref U4) (pin 14)) - (node (ref U4) (pin 19)) - (node (ref U4) (pin 20)) - (node (ref U4) (pin 21)) - (node (ref U4) (pin 28)) - (node (ref U4) (pin 29)) - (node (ref R7) (pin 2)) - (node (ref U2) (pin 2)) - (node (ref R12) (pin 2)) - (node (ref U3) (pin 4)) - (node (ref R23) (pin 2)) - (node (ref R25) (pin 2)) - (node (ref R27) (pin 2)) - (node (ref C3) (pin 2)) - (node (ref C4) (pin 2)) - (node (ref C5) (pin 2)) - (node (ref C6) (pin 2)) - (node (ref U5) (pin 2)) - (node (ref U6) (pin 2)) - (node (ref U7) (pin 2)) - (node (ref C1) (pin 2)) - (node (ref C2) (pin 2)) - (node (ref R19) (pin 1)) - (node (ref R20) (pin 1)) - (node (ref R21) (pin 1)) - (node (ref C9) (pin 2)) - (node (ref C10) (pin 2)) - (node (ref C11) (pin 2))) -(net (code 4) (name "sw1.out") - (node (ref U1) (pin 20)) - (node (ref SW1) (pin 1))) -(net (code 5) (name "ledr.signal") - (node (ref U1) (pin 16)) - (node (ref D1) (pin 2))) -(net (code 6) (name "ledg.signal") - (node (ref U1) (pin 7)) - (node (ref D2) (pin 2))) -(net (code 7) (name "ledb.signal") - (node (ref U1) (pin 3)) - (node (ref D3) (pin 2))) -(net (code 8) (name "i2c_pull.i2c.scl") - (node (ref U1) (pin 22)) - (node (ref R4) (pin 2)) - (node (ref TP1) (pin 1)) - (node (ref J2) (pin 4))) -(net (code 9) (name "i2c_pull.i2c.sda") - (node (ref U1) (pin 21)) - (node (ref J2) (pin 3)) - (node (ref R5) (pin 2)) - (node (ref TP2) (pin 1))) -(net (code 10) (name "ref_div.output") - (node (ref U2) (pin 1)) - (node (ref R6) (pin 2)) - (node (ref R7) (pin 1))) -(net (code 11) (name "ref_buf.output") - (node (ref U2) (pin 3)) - (node (ref TP3) (pin 1)) - (node (ref R17) (pin 1)) - (node (ref U2) (pin 4))) -(net (code 12) (name "hall.phases.u") - (node (ref U1) (pin 23)) - (node (ref J3) (pin 2)) - (node (ref R8) (pin 2)) - (node (ref TP4) (pin 1))) -(net (code 13) (name "hall.phases.v") - (node (ref U1) (pin 24)) - (node (ref J3) (pin 3)) - (node (ref R9) (pin 2)) - (node (ref TP5) (pin 1))) -(net (code 14) (name "hall.phases.w") - (node (ref U1) (pin 25)) - (node (ref J3) (pin 4)) - (node (ref R10) (pin 2)) - (node (ref TP6) (pin 1))) -(net (code 15) (name "motor_pwr.pwr") - (node (ref J1) (pin 2)) - (node (ref R11) (pin 1)) - (node (ref U3) (pin 7)) - (node (ref R13) (pin 1)) - (node (ref C2) (pin 1)) - (node (ref R15) (pin 1))) -(net (code 16) (name "vsense.output") - (node (ref U1) (pin 6)) - (node (ref TP7) (pin 1)) - (node (ref R11) (pin 2)) - (node (ref R12) (pin 1))) -(net (code 17) (name "isense.out") - (node (ref TP8) (pin 1)) - (node (ref R18) (pin 1)) - (node (ref R16) (pin 1)) - (node (ref U3) (pin 6))) -(net (code 18) (name "isense_clamp.signal_out") - (node (ref U1) (pin 5)) - (node (ref R18) (pin 2))) -(net (code 19) (name "isense.pwr_out") - (node (ref U4) (pin 4)) - (node (ref U4) (pin 11)) - (node (ref R13) (pin 2)) - (node (ref C8) (pin 2)) - (node (ref C3) (pin 1)) - (node (ref C4) (pin 1)) - (node (ref C5) (pin 1)) - (node (ref R14) (pin 1))) -(net (code 20) (name "bldc_drv.nreset") - (node (ref U1) (pin 18)) - (node (ref U4) (pin 16))) -(net (code 21) (name "bldc_drv.nfault") - (node (ref U1) (pin 19)) - (node (ref U4) (pin 18)) - (node (ref TP9) (pin 1))) -(net (code 22) (name "mcu.gpio.bldc_en_1") - (node (ref U1) (pin 12)) - (node (ref U4) (pin 26)) - (node (ref TP10) (pin 1))) -(net (code 23) (name "mcu.gpio.bldc_en_2") - (node (ref U1) (pin 14)) - (node (ref U4) (pin 24)) - (node (ref TP11) (pin 1))) -(net (code 24) (name "mcu.gpio.bldc_en_3") - (node (ref U1) (pin 17)) - (node (ref U4) (pin 22)) - (node (ref TP12) (pin 1))) -(net (code 25) (name "mcu.gpio.bldc_in_1") - (node (ref U1) (pin 11)) - (node (ref U4) (pin 27)) - (node (ref TP13) (pin 1))) -(net (code 26) (name "mcu.gpio.bldc_in_2") - (node (ref U1) (pin 13)) - (node (ref U4) (pin 25)) - (node (ref TP14) (pin 1))) -(net (code 27) (name "mcu.gpio.bldc_in_3") - (node (ref U1) (pin 15)) - (node (ref U4) (pin 23)) - (node (ref TP15) (pin 1))) -(net (code 28) (name "bldc_drv.outs.1") - (node (ref U4) (pin 5)) - (node (ref J4) (pin 1))) -(net (code 29) (name "bldc_drv.outs.2") - (node (ref U4) (pin 8)) - (node (ref J4) (pin 2))) -(net (code 30) (name "bldc_drv.outs.3") - (node (ref U4) (pin 9)) - (node (ref J4) (pin 3))) -(net (code 31) (name "curr_amp[1].input") - (node (ref U5) (pin 1)) - (node (ref R19) (pin 2)) - (node (ref U4) (pin 6))) -(net (code 32) (name "curr_amp[1].output") - (node (ref U1) (pin 10)) - (node (ref TP16) (pin 1)) - (node (ref R22) (pin 1)) - (node (ref U5) (pin 4))) -(net (code 33) (name "curr_amp[2].input") - (node (ref U6) (pin 1)) - (node (ref R20) (pin 2)) - (node (ref U4) (pin 7))) -(net (code 34) (name "curr_amp[2].output") - (node (ref U1) (pin 9)) - (node (ref TP17) (pin 1)) - (node (ref R24) (pin 1)) - (node (ref U6) (pin 4))) -(net (code 35) (name "curr_amp[3].input") - (node (ref U7) (pin 1)) - (node (ref R21) (pin 2)) - (node (ref U4) (pin 10))) -(net (code 36) (name "curr_amp[3].output") - (node (ref U1) (pin 8)) - (node (ref TP18) (pin 1)) - (node (ref R26) (pin 1)) - (node (ref U7) (pin 4))) -(net (code 37) (name "ledr.res.a") - (node (ref R1) (pin 1)) - (node (ref D1) (pin 1))) -(net (code 38) (name "ledg.res.a") - (node (ref R2) (pin 1)) - (node (ref D2) (pin 1))) -(net (code 39) (name "ledb.res.a") - (node (ref R3) (pin 1)) - (node (ref D3) (pin 1))) -(net (code 40) (name "isense.amp.r2.b") - (node (ref R15) (pin 2)) - (node (ref U3) (pin 3)) - (node (ref R17) (pin 2))) -(net (code 41) (name "isense.amp.r1.b") - (node (ref R14) (pin 2)) - (node (ref U3) (pin 2)) - (node (ref R16) (pin 2))) -(net (code 42) (name "bldc_drv.ic.v3p3") - (node (ref U4) (pin 15)) - (node (ref C6) (pin 1)) - (node (ref U4) (pin 17))) -(net (code 43) (name "bldc_drv.cp_cap.pos") - (node (ref C7) (pin 1)) - (node (ref U4) (pin 2))) -(net (code 44) (name "bldc_drv.cp_cap.neg") - (node (ref C7) (pin 2)) - (node (ref U4) (pin 1))) -(net (code 45) (name "bldc_drv.vcp_cap.pos") - (node (ref C8) (pin 1)) - (node (ref U4) (pin 3))) -(net (code 46) (name "curr_amp[1].r2.a") - (node (ref R23) (pin 1)) - (node (ref U5) (pin 3)) - (node (ref R22) (pin 2))) -(net (code 47) (name "curr_amp[2].r2.a") - (node (ref R25) (pin 1)) - (node (ref U6) (pin 3)) - (node (ref R24) (pin 2))) -(net (code 48) (name "curr_amp[3].r2.a") - (node (ref R27) (pin 1)) - (node (ref U7) (pin 3)) - (node (ref R26) (pin 2)))) -) \ No newline at end of file From e6808fce0ba8ac5bf5fadafd31c2b8aa2b9871ac Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:21:55 -0700 Subject: [PATCH 07/11] Create BldcController.net --- examples/BldcController/BldcController.net | 1135 ++++++++++++++++++++ 1 file changed, 1135 insertions(+) create mode 100644 examples/BldcController/BldcController.net diff --git a/examples/BldcController/BldcController.net b/examples/BldcController/BldcController.net new file mode 100644 index 000000000..702141292 --- /dev/null +++ b/examples/BldcController/BldcController.net @@ -0,0 +1,1135 @@ +(export (version D) +(components +(comp (ref "H1") + (value "jlc_th.th1") + (footprint "edg:JlcToolingHole_1.152mm") + (property (name "Sheetname") (value "jlc_th")) + (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) + (property (name "edg_path") (value "jlc_th.th1")) + (property (name "edg_short_path") (value "jlc_th.th1")) + (property (name "edg_refdes") (value "H1")) + (property (name "edg_part") (value "")) + (property (name "edg_value") (value "")) + (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) + (tstamps "0260010e")) +(comp (ref "H2") + (value "jlc_th.th2") + (footprint "edg:JlcToolingHole_1.152mm") + (property (name "Sheetname") (value "jlc_th")) + (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) + (property (name "edg_path") (value "jlc_th.th2")) + (property (name "edg_short_path") (value "jlc_th.th2")) + (property (name "edg_refdes") (value "H2")) + (property (name "edg_part") (value "")) + (property (name "edg_value") (value "")) + (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) + (tstamps "0261010f")) +(comp (ref "H3") + (value "jlc_th.th3") + (footprint "edg:JlcToolingHole_1.152mm") + (property (name "Sheetname") (value "jlc_th")) + (property (name "Sheetfile") (value "edg.BoardTop.JlcToolingHoles")) + (property (name "edg_path") (value "jlc_th.th3")) + (property (name "edg_short_path") (value "jlc_th.th3")) + (property (name "edg_refdes") (value "H3")) + (property (name "edg_part") (value "")) + (property (name "edg_value") (value "")) + (sheetpath (names "/jlc_th/") (tstamps "/08970275/")) + (tstamps "02620110")) +(comp (ref "U1") + (value "mcu") + (footprint "bldc:FEATHERWING_NODIM") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "mcu")) + (property (name "edg_short_path") (value "mcu")) + (property (name "edg_refdes") (value "U1")) + (property (name "edg_part") (value "Feather nRF52840 Express (Adafruit)")) + (property (name "edg_value") (value "Feather nRF52840 Express")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "02850146")) +(comp (ref "J1") + (value "motor_pwr") + (footprint "Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "motor_pwr.conn")) + (property (name "edg_short_path") (value "motor_pwr")) + (property (name "edg_refdes") (value "J1")) + (property (name "edg_part") (value "B2B-PH-K (JST)")) + (property (name "edg_value") (value "B2B-PH-K")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "138203ea")) +(comp (ref "SW1") + (value "sw1") + (footprint "Button_Switch_SMD:SW_SPST_SKQG_WithoutStem") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "sw1.package")) + (property (name "edg_short_path") (value "sw1")) + (property (name "edg_refdes") (value "SW1")) + (property (name "edg_part") (value "5.1mm switch")) + (property (name "edg_value") (value "5.1mm switch")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "027b011c")) +(comp (ref "D1") + (value "ledr.package") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "ledr")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledr.package")) + (property (name "edg_short_path") (value "ledr.package")) + (property (name "edg_refdes") (value "D1")) + (property (name "edg_part") (value "KT-0603R (Hubei KENTO Elec)")) + (property (name "edg_value") (value "Red 615~630nm 1.9~2.2V 0603 Light Emitting Diodes (LED) RoHS")) + (sheetpath (names "/ledr/") (tstamps "/041d01a8/")) + (tstamps "0b4e02cd")) +(comp (ref "R1") + (value "ledr.res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "ledr")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledr.res")) + (property (name "edg_short_path") (value "ledr.res")) + (property (name "edg_refdes") (value "R1")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/ledr/") (tstamps "/041d01a8/")) + (tstamps "0296014b")) +(comp (ref "D2") + (value "ledg.package") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "ledg")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledg.package")) + (property (name "edg_short_path") (value "ledg.package")) + (property (name "edg_refdes") (value "D2")) + (property (name "edg_part") (value "19-217/GHC-YR1S2/3T (Everlight Elec)")) + (property (name "edg_value") (value "20mA 285mcd 3.3V 518nm Colorless transparence -40℃~+85℃ 520nm~535nm Emerald 120° 110mW 0603 Light Emitting Diodes (LED) ROHS")) + (sheetpath (names "/ledg/") (tstamps "/0412019d/")) + (tstamps "0b4e02cd")) +(comp (ref "R2") + (value "ledg.res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "ledg")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledg.res")) + (property (name "edg_short_path") (value "ledg.res")) + (property (name "edg_refdes") (value "R2")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/ledg/") (tstamps "/0412019d/")) + (tstamps "0296014b")) +(comp (ref "D3") + (value "ledb.package") + (footprint "LED_SMD:LED_0603_1608Metric") + (property (name "Sheetname") (value "ledb")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledb.package")) + (property (name "edg_short_path") (value "ledb.package")) + (property (name "edg_refdes") (value "D3")) + (property (name "edg_part") (value "19-217/BHC-ZL1M2RY/3T (Everlight Elec)")) + (property (name "edg_value") (value "5mA 28.5mcd 3.1V 468nm Colorless transparence -40℃~+85℃ 465nm~475nm blue 120° 110mW 0603 Light Emitting Diodes (LED) ROHS")) + (sheetpath (names "/ledb/") (tstamps "/040d0198/")) + (tstamps "0b4e02cd")) +(comp (ref "R3") + (value "ledb.res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "ledb")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractLed.IndicatorLed")) + (property (name "edg_path") (value "ledb.res")) + (property (name "edg_short_path") (value "ledb.res")) + (property (name "edg_refdes") (value "R3")) + (property (name "edg_part") (value "0603WAF1001T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 1kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/ledb/") (tstamps "/040d0198/")) + (tstamps "0296014b")) +(comp (ref "R4") + (value "i2c_pull.scl_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "i2c_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.I2cPullup.I2cPullup")) + (property (name "edg_path") (value "i2c_pull.scl_res.res")) + (property (name "edg_short_path") (value "i2c_pull.scl_res")) + (property (name "edg_refdes") (value "R4")) + (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) + (tstamps "0ba902ec")) +(comp (ref "R5") + (value "i2c_pull.sda_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "i2c_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.I2cPullup.I2cPullup")) + (property (name "edg_path") (value "i2c_pull.sda_res.res")) + (property (name "edg_short_path") (value "i2c_pull.sda_res")) + (property (name "edg_refdes") (value "R5")) + (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/i2c_pull/") (tstamps "/0d3e031b/")) + (tstamps "0b7802e2")) +(comp (ref "TP1") + (value "_mcu_i2c_i2c_link.scl") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "i2c_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.I2cTestPoint")) + (property (name "edg_path") (value "i2c_tp.tp_scl.tp")) + (property (name "edg_short_path") (value "i2c_tp.tp_scl")) + (property (name "edg_refdes") (value "TP1")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_i2c_i2c_link.scl")) + (sheetpath (names "/i2c_tp/") (tstamps "/07770242/")) + (tstamps "08f50286")) +(comp (ref "TP2") + (value "_mcu_i2c_i2c_link.sda") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "i2c_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.I2cTestPoint")) + (property (name "edg_path") (value "i2c_tp.tp_sda.tp")) + (property (name "edg_short_path") (value "i2c_tp.tp_sda")) + (property (name "edg_refdes") (value "TP2")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_i2c_i2c_link.sda")) + (sheetpath (names "/i2c_tp/") (tstamps "/07770242/")) + (tstamps "08ec027c")) +(comp (ref "J2") + (value "i2c") + (footprint "Connector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "i2c.conn")) + (property (name "edg_short_path") (value "i2c")) + (property (name "edg_refdes") (value "J2")) + (property (name "edg_part") (value "B4B-PH-K (JST)")) + (property (name "edg_value") (value "B4B-PH-K")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "020500ff")) +(comp (ref "R6") + (value "ref_div.top_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "ref_div")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageDivider")) + (property (name "edg_path") (value "ref_div.div.top_res")) + (property (name "edg_short_path") (value "ref_div.top_res")) + (property (name "edg_refdes") (value "R6")) + (property (name "edg_part") (value "0603WAF1203T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 120kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/ref_div/") (tstamps "/0b7102e0/")) + (tstamps "0c0c02fd")) +(comp (ref "R7") + (value "ref_div.bottom_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "ref_div")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageDivider")) + (property (name "edg_path") (value "ref_div.div.bottom_res")) + (property (name "edg_short_path") (value "ref_div.bottom_res")) + (property (name "edg_refdes") (value "R7")) + (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/ref_div/") (tstamps "/0b7102e0/")) + (tstamps "175b043f")) +(comp (ref "U2") + (value "ref_buf.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-5") + (property (name "Sheetname") (value "ref_buf")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.OpampFollower")) + (property (name "edg_path") (value "ref_buf.amp.ic")) + (property (name "edg_short_path") (value "ref_buf.ic")) + (property (name "edg_refdes") (value "U2")) + (property (name "edg_part") (value "LMV321 (Texas Instruments)")) + (property (name "edg_value") (value "LMV321")) + (sheetpath (names "/ref_buf/") (tstamps "/0b7302da/")) + (tstamps "013700cd")) +(comp (ref "C1") + (value "ref_buf.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "ref_buf")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.OpampFollower")) + (property (name "edg_path") (value "ref_buf.amp.vdd_cap.cap")) + (property (name "edg_short_path") (value "ref_buf.vdd_cap")) + (property (name "edg_refdes") (value "C1")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/ref_buf/") (tstamps "/0b7302da/")) + (tstamps "0b6402d2")) +(comp (ref "TP3") + (value "_ref_buf_output_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "ref_tp.tp")) + (property (name "edg_short_path") (value "ref_tp")) + (property (name "edg_refdes") (value "TP3")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_ref_buf_output_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "08b80281")) +(comp (ref "J3") + (value "hall") + (footprint "Connector_JST:JST_PH_B5B-PH-K_1x05_P2.00mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "hall.conn")) + (property (name "edg_short_path") (value "hall")) + (property (name "edg_refdes") (value "J3")) + (property (name "edg_part") (value "B5B-PH-K (JST)")) + (property (name "edg_value") (value "B5B-PH-K")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "040b01a2")) +(comp (ref "R8") + (value "hall_pull.res[u]") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "hall_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) + (property (name "edg_path") (value "hall_pull.res[u].res")) + (property (name "edg_short_path") (value "hall_pull.res[u]")) + (property (name "edg_refdes") (value "R8")) + (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) + (tstamps "08cf0278")) +(comp (ref "R9") + (value "hall_pull.res[v]") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "hall_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) + (property (name "edg_path") (value "hall_pull.res[v].res")) + (property (name "edg_short_path") (value "hall_pull.res[v]")) + (property (name "edg_refdes") (value "R9")) + (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) + (tstamps "08d10279")) +(comp (ref "R10") + (value "hall_pull.res[w]") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "hall_pull")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractResistor.PullupResistorArray")) + (property (name "edg_path") (value "hall_pull.res[w].res")) + (property (name "edg_short_path") (value "hall_pull.res[w]")) + (property (name "edg_refdes") (value "R10")) + (property (name "edg_part") (value "0603WAF4701T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 4.7kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/hall_pull/") (tstamps "/127303be/")) + (tstamps "08d3027a")) +(comp (ref "TP4") + (value "_hall_phases_link.u") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "hall_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "hall_tp.tp[u].tp")) + (property (name "edg_short_path") (value "hall_tp.tp[u]")) + (property (name "edg_refdes") (value "TP4")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_hall_phases_link.u")) + (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) + (tstamps "06610212")) +(comp (ref "TP5") + (value "_hall_phases_link.v") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "hall_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "hall_tp.tp[v].tp")) + (property (name "edg_short_path") (value "hall_tp.tp[v]")) + (property (name "edg_refdes") (value "TP5")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_hall_phases_link.v")) + (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) + (tstamps "06630213")) +(comp (ref "TP6") + (value "_hall_phases_link.w") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "hall_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "hall_tp.tp[w].tp")) + (property (name "edg_short_path") (value "hall_tp.tp[w]")) + (property (name "edg_refdes") (value "TP6")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_hall_phases_link.w")) + (sheetpath (names "/hall_tp/") (tstamps "/0b6602e5/")) + (tstamps "06650214")) +(comp (ref "R11") + (value "vsense.top_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "vsense")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageSenseDivider")) + (property (name "edg_path") (value "vsense.div.top_res")) + (property (name "edg_short_path") (value "vsense.top_res")) + (property (name "edg_refdes") (value "R11")) + (property (name "edg_part") (value "0603WAF6802T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 68kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/vsense/") (tstamps "/09320295/")) + (tstamps "0c0c02fd")) +(comp (ref "R12") + (value "vsense.bottom_res") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "vsense")) + (property (name "Sheetfile") (value "edg.abstract_parts.ResistiveDivider.VoltageSenseDivider")) + (property (name "edg_path") (value "vsense.div.bottom_res")) + (property (name "edg_short_path") (value "vsense.bottom_res")) + (property (name "edg_refdes") (value "R12")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/vsense/") (tstamps "/09320295/")) + (tstamps "175b043f")) +(comp (ref "TP7") + (value "_vsense_output_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "vsense_tp.tp")) + (property (name "edg_short_path") (value "vsense_tp")) + (property (name "edg_refdes") (value "TP7")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_vsense_output_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "136603d8")) +(comp (ref "R13") + (value "isense.sense") + (footprint "Resistor_SMD:R_1206_3216Metric") + (property (name "Sheetname") (value "isense")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCurrentSensor.OpampCurrentSensor")) + (property (name "edg_path") (value "isense.sense.res.res")) + (property (name "edg_short_path") (value "isense.sense")) + (property (name "edg_refdes") (value "R13")) + (property (name "edg_part") (value "SMF12M1FR050T (SART(Nanjing Sart Tech))")) + (property (name "edg_value") (value "1W 0.05Ω ±50ppm/℃ ±1% 1206 Current Sense Resistors/Shunt Resistors ROHS")) + (sheetpath (names "/isense/") (tstamps "/08e40288/")) + (tstamps "066d021f")) +(comp (ref "U3") + (value "isense.amp.amp.ic") + (footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Opax197.Opa197")) + (property (name "edg_path") (value "isense.amp.amp.ic")) + (property (name "edg_short_path") (value "isense.amp.amp.ic")) + (property (name "edg_refdes") (value "U3")) + (property (name "edg_part") (value "OPA197IDR (Texas Instruments)")) + (property (name "edg_value") (value "OPA197IDR")) + (sheetpath (names "/isense/amp/amp/") (tstamps "/08e40288/0270013f/0270013f/")) + (tstamps "013700cd")) +(comp (ref "C2") + (value "isense.amp.amp.vdd_cap") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Opax197.Opa197")) + (property (name "edg_path") (value "isense.amp.amp.vdd_cap.cap")) + (property (name "edg_short_path") (value "isense.amp.amp.vdd_cap")) + (property (name "edg_refdes") (value "C2")) + (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/isense/amp/amp/") (tstamps "/08e40288/0270013f/0270013f/")) + (tstamps "0b6402d2")) +(comp (ref "R14") + (value "isense.amp.r1") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) + (property (name "edg_path") (value "isense.amp.r1")) + (property (name "edg_short_path") (value "isense.amp.r1")) + (property (name "edg_refdes") (value "R14")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) + (tstamps "011700a4")) +(comp (ref "R15") + (value "isense.amp.r2") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) + (property (name "edg_path") (value "isense.amp.r2")) + (property (name "edg_short_path") (value "isense.amp.r2")) + (property (name "edg_refdes") (value "R15")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) + (tstamps "011800a5")) +(comp (ref "R16") + (value "isense.amp.rf") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) + (property (name "edg_path") (value "isense.amp.rf")) + (property (name "edg_short_path") (value "isense.amp.rf")) + (property (name "edg_refdes") (value "R16")) + (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) + (tstamps "014c00d9")) +(comp (ref "R17") + (value "isense.amp.rg") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.DifferentialAmplifier")) + (property (name "edg_path") (value "isense.amp.rg")) + (property (name "edg_short_path") (value "isense.amp.rg")) + (property (name "edg_refdes") (value "R17")) + (property (name "edg_part") (value "0603WAF1003T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 100kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/isense/amp/") (tstamps "/08e40288/0270013f/")) + (tstamps "014d00da")) +(comp (ref "TP8") + (value "_isense_out_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "isense_tp.tp")) + (property (name "edg_short_path") (value "isense_tp")) + (property (name "edg_refdes") (value "TP8")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_isense_out_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "12f103cb")) +(comp (ref "R18") + (value "isense_clamp") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "isense_clamp.res")) + (property (name "edg_short_path") (value "isense_clamp")) + (property (name "edg_refdes") (value "R18")) + (property (name "edg_part") (value "0603WAF1002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 10kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "205a04f4")) +(comp (ref "U4") + (value "bldc_drv.ic") + (footprint "Package_SO:HTSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP2.85x5.4mm_ThermalVias") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.ic")) + (property (name "edg_short_path") (value "bldc_drv.ic")) + (property (name "edg_refdes") (value "U4")) + (property (name "edg_part") (value "DRV8313PWP (Texas Instruments)")) + (property (name "edg_value") (value "DRV8313PWP")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "013700cd")) +(comp (ref "C3") + (value "bldc_drv.vm_cap_bulk") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.vm_cap_bulk.cap")) + (property (name "edg_short_path") (value "bldc_drv.vm_cap_bulk")) + (property (name "edg_refdes") (value "C3")) + (property (name "edg_part") (value "GRM21BR61H106KE43L (Murata Electronics)")) + (property (name "edg_value") (value "50V 10uF X5R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "1b1a0484")) +(comp (ref "C4") + (value "bldc_drv.vm_cap1") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.vm_cap1.cap")) + (property (name "edg_short_path") (value "bldc_drv.vm_cap1")) + (property (name "edg_refdes") (value "C4")) + (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "0b6a02a8")) +(comp (ref "C5") + (value "bldc_drv.vm_cap2") + (footprint "Capacitor_SMD:C_0805_2012Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.vm_cap2.cap")) + (property (name "edg_short_path") (value "bldc_drv.vm_cap2")) + (property (name "edg_refdes") (value "C5")) + (property (name "edg_part") (value "CL21B104KCFNNNE (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "100V 100nF X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "0b6b02a9")) +(comp (ref "C6") + (value "bldc_drv.v3p3_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.v3p3_cap.cap")) + (property (name "edg_short_path") (value "bldc_drv.v3p3_cap")) + (property (name "edg_refdes") (value "C6")) + (property (name "edg_part") (value "CL10B474KA8NNNC (Samsung Electro-Mechanics)")) + (property (name "edg_value") (value "25V 470nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "0c9302e0")) +(comp (ref "C7") + (value "bldc_drv.cp_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.cp_cap")) + (property (name "edg_short_path") (value "bldc_drv.cp_cap")) + (property (name "edg_refdes") (value "C7")) + (property (name "edg_part") (value "0603B103K500NT (FH(Guangdong Fenghua Advanced Tech))")) + (property (name "edg_value") (value "50V 10nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "085f0267")) +(comp (ref "C8") + (value "bldc_drv.vcp_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.vcp_cap")) + (property (name "edg_short_path") (value "bldc_drv.vcp_cap")) + (property (name "edg_refdes") (value "C8")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "0b9a02dd")) +(comp (ref "R19") + (value "bldc_drv.pgnd_res[1]") + (footprint "Resistor_SMD:R_2512_6332Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.pgnd_res[1].res.res")) + (property (name "edg_short_path") (value "bldc_drv.pgnd_res[1]")) + (property (name "edg_refdes") (value "R19")) + (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) + (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "1ab9043c")) +(comp (ref "R20") + (value "bldc_drv.pgnd_res[2]") + (footprint "Resistor_SMD:R_2512_6332Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.pgnd_res[2].res.res")) + (property (name "edg_short_path") (value "bldc_drv.pgnd_res[2]")) + (property (name "edg_refdes") (value "R20")) + (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) + (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "1abb043d")) +(comp (ref "R21") + (value "bldc_drv.pgnd_res[3]") + (footprint "Resistor_SMD:R_2512_6332Metric") + (property (name "Sheetname") (value "bldc_drv")) + (property (name "Sheetfile") (value "edg.parts.Bldc_Drv8313.Drv8313")) + (property (name "edg_path") (value "bldc_drv.pgnd_res[3].res.res")) + (property (name "edg_short_path") (value "bldc_drv.pgnd_res[3]")) + (property (name "edg_refdes") (value "R21")) + (property (name "edg_part") (value "RTT25R051FTE (RALEC)")) + (property (name "edg_value") (value "1W 0.051Ω ±500ppm/℃ ±1% 2512 Current Sense Resistors/Shunt Resistors ROHS")) + (sheetpath (names "/bldc_drv/") (tstamps "/0e550341/")) + (tstamps "1abd043e")) +(comp (ref "TP9") + (value "_mcu_gpio_bldc_fault_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "bldc_fault_tp.tp")) + (property (name "edg_short_path") (value "bldc_fault_tp")) + (property (name "edg_refdes") (value "TP9")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_fault_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "248e0554")) +(comp (ref "TP10") + (value "_mcu_gpio_bldc_en_link.1") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_en_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_en_tp.tp[1].tp")) + (property (name "edg_short_path") (value "bldc_en_tp.tp[1]")) + (property (name "edg_refdes") (value "TP10")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.1")) + (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) + (tstamps "05d901ce")) +(comp (ref "TP11") + (value "_mcu_gpio_bldc_en_link.2") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_en_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_en_tp.tp[2].tp")) + (property (name "edg_short_path") (value "bldc_en_tp.tp[2]")) + (property (name "edg_refdes") (value "TP11")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.2")) + (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) + (tstamps "05db01cf")) +(comp (ref "TP12") + (value "_mcu_gpio_bldc_en_link.3") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_en_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_en_tp.tp[3].tp")) + (property (name "edg_short_path") (value "bldc_en_tp.tp[3]")) + (property (name "edg_refdes") (value "TP12")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_en_link.3")) + (sheetpath (names "/bldc_en_tp/") (tstamps "/15df040b/")) + (tstamps "05dd01d0")) +(comp (ref "TP13") + (value "_mcu_gpio_bldc_in_link.1") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_in_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_in_tp.tp[1].tp")) + (property (name "edg_short_path") (value "bldc_in_tp.tp[1]")) + (property (name "edg_refdes") (value "TP13")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.1")) + (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) + (tstamps "05d901ce")) +(comp (ref "TP14") + (value "_mcu_gpio_bldc_in_link.2") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_in_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_in_tp.tp[2].tp")) + (property (name "edg_short_path") (value "bldc_in_tp.tp[2]")) + (property (name "edg_refdes") (value "TP14")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.2")) + (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) + (tstamps "05db01cf")) +(comp (ref "TP15") + (value "_mcu_gpio_bldc_in_link.3") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "bldc_in_tp")) + (property (name "Sheetfile") (value "edg.abstract_parts.AbstractTestPoint.DigitalArrayTestPoint")) + (property (name "edg_path") (value "bldc_in_tp.tp[3].tp")) + (property (name "edg_short_path") (value "bldc_in_tp.tp[3]")) + (property (name "edg_refdes") (value "TP15")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_mcu_gpio_bldc_in_link.3")) + (sheetpath (names "/bldc_in_tp/") (tstamps "/15f3040f/")) + (tstamps "05dd01d0")) +(comp (ref "J4") + (value "bldc") + (footprint "Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_Vertical") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "bldc.conn")) + (property (name "edg_short_path") (value "bldc")) + (property (name "edg_refdes") (value "J4")) + (property (name "edg_part") (value "B3B-PH-K (JST)")) + (property (name "edg_value") (value "B3B-PH-K")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "03fb0196")) +(comp (ref "U5") + (value "curr_amp[1].amp.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-5") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[1].amp.ic")) + (property (name "edg_short_path") (value "curr_amp[1].amp.ic")) + (property (name "edg_refdes") (value "U5")) + (property (name "edg_part") (value "LMV321 (Texas Instruments)")) + (property (name "edg_value") (value "LMV321")) + (sheetpath (names "/curr_amp[1]/amp/") (tstamps "/1b000443/0270013f/")) + (tstamps "013700cd")) +(comp (ref "C9") + (value "curr_amp[1].amp.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[1].amp.vdd_cap.cap")) + (property (name "edg_short_path") (value "curr_amp[1].amp.vdd_cap")) + (property (name "edg_refdes") (value "C9")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/curr_amp[1]/amp/") (tstamps "/1b000443/0270013f/")) + (tstamps "0b6402d2")) +(comp (ref "R22") + (value "curr_amp[1].r1") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[1].r1")) + (property (name "edg_short_path") (value "curr_amp[1].r1")) + (property (name "edg_refdes") (value "R22")) + (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[1]/") (tstamps "/1b000443/")) + (tstamps "011700a4")) +(comp (ref "R23") + (value "curr_amp[1].r2") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[1]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[1].r2")) + (property (name "edg_short_path") (value "curr_amp[1].r2")) + (property (name "edg_refdes") (value "R23")) + (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[1]/") (tstamps "/1b000443/")) + (tstamps "011800a5")) +(comp (ref "TP16") + (value "_curr_amp[1]_output_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "curr_tp[1].tp")) + (property (name "edg_short_path") (value "curr_tp[1]")) + (property (name "edg_refdes") (value "TP16")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_curr_amp[1]_output_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "16c103e9")) +(comp (ref "U6") + (value "curr_amp[2].amp.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-5") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[2].amp.ic")) + (property (name "edg_short_path") (value "curr_amp[2].amp.ic")) + (property (name "edg_refdes") (value "U6")) + (property (name "edg_part") (value "LMV321 (Texas Instruments)")) + (property (name "edg_value") (value "LMV321")) + (sheetpath (names "/curr_amp[2]/amp/") (tstamps "/1b020444/0270013f/")) + (tstamps "013700cd")) +(comp (ref "C10") + (value "curr_amp[2].amp.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[2].amp.vdd_cap.cap")) + (property (name "edg_short_path") (value "curr_amp[2].amp.vdd_cap")) + (property (name "edg_refdes") (value "C10")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/curr_amp[2]/amp/") (tstamps "/1b020444/0270013f/")) + (tstamps "0b6402d2")) +(comp (ref "R24") + (value "curr_amp[2].r1") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[2].r1")) + (property (name "edg_short_path") (value "curr_amp[2].r1")) + (property (name "edg_refdes") (value "R24")) + (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[2]/") (tstamps "/1b020444/")) + (tstamps "011700a4")) +(comp (ref "R25") + (value "curr_amp[2].r2") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[2]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[2].r2")) + (property (name "edg_short_path") (value "curr_amp[2].r2")) + (property (name "edg_refdes") (value "R25")) + (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[2]/") (tstamps "/1b020444/")) + (tstamps "011800a5")) +(comp (ref "TP17") + (value "_curr_amp[2]_output_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "curr_tp[2].tp")) + (property (name "edg_short_path") (value "curr_tp[2]")) + (property (name "edg_refdes") (value "TP17")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_curr_amp[2]_output_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "16c303ea")) +(comp (ref "U7") + (value "curr_amp[3].amp.ic") + (footprint "Package_TO_SOT_SMD:SOT-23-5") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[3].amp.ic")) + (property (name "edg_short_path") (value "curr_amp[3].amp.ic")) + (property (name "edg_refdes") (value "U7")) + (property (name "edg_part") (value "LMV321 (Texas Instruments)")) + (property (name "edg_value") (value "LMV321")) + (sheetpath (names "/curr_amp[3]/amp/") (tstamps "/1b040445/0270013f/")) + (tstamps "013700cd")) +(comp (ref "C11") + (value "curr_amp[3].amp.vdd_cap") + (footprint "Capacitor_SMD:C_0603_1608Metric") + (property (name "Sheetname") (value "amp")) + (property (name "Sheetfile") (value "edg.parts.Opamp_Lmv321.Lmv321")) + (property (name "edg_path") (value "curr_amp[3].amp.vdd_cap.cap")) + (property (name "edg_short_path") (value "curr_amp[3].amp.vdd_cap")) + (property (name "edg_refdes") (value "C11")) + (property (name "edg_part") (value "CC0603KRX7R9BB104 (YAGEO)")) + (property (name "edg_value") (value "50V 100nF X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHS")) + (sheetpath (names "/curr_amp[3]/amp/") (tstamps "/1b040445/0270013f/")) + (tstamps "0b6402d2")) +(comp (ref "R26") + (value "curr_amp[3].r1") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[3].r1")) + (property (name "edg_short_path") (value "curr_amp[3].r1")) + (property (name "edg_refdes") (value "R26")) + (property (name "edg_part") (value "0603WAF3903T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 390kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[3]/") (tstamps "/1b040445/")) + (tstamps "011700a4")) +(comp (ref "R27") + (value "curr_amp[3].r2") + (footprint "Resistor_SMD:R_0603_1608Metric") + (property (name "Sheetname") (value "curr_amp[3]")) + (property (name "Sheetfile") (value "edg.abstract_parts.OpampCircuits.Amplifier")) + (property (name "edg_path") (value "curr_amp[3].r2")) + (property (name "edg_short_path") (value "curr_amp[3].r2")) + (property (name "edg_refdes") (value "R27")) + (property (name "edg_part") (value "0603WAF2002T5E (UNI-ROYAL(Uniroyal Elec))")) + (property (name "edg_value") (value "±1% 1/10W Thick Film Resistors 75V ±100ppm/℃ -55℃~+155℃ 20kΩ 0603 Chip Resistor - Surface Mount ROHS")) + (sheetpath (names "/curr_amp[3]/") (tstamps "/1b040445/")) + (tstamps "011800a5")) +(comp (ref "TP18") + (value "_curr_amp[3]_output_link") + (footprint "edg:TestPoint_TE_RCT_0805") + (property (name "Sheetname") (value "")) + (property (name "Sheetfile") (value "")) + (property (name "edg_path") (value "curr_tp[3].tp")) + (property (name "edg_short_path") (value "curr_tp[3]")) + (property (name "edg_refdes") (value "TP18")) + (property (name "edg_part") (value "5015 (Keystone)")) + (property (name "edg_value") (value "_curr_amp[3]_output_link")) + (sheetpath (names "/") (tstamps "/")) + (tstamps "16c503eb"))) +(nets +(net (code 1) (name "vusb") + (node (ref U1) (pin 26)) + (node (ref J3) (pin 1))) +(net (code 2) (name "v3v3") + (node (ref U1) (pin 2)) + (node (ref J2) (pin 2)) + (node (ref U2) (pin 5)) + (node (ref R6) (pin 1)) + (node (ref U5) (pin 5)) + (node (ref U6) (pin 5)) + (node (ref U7) (pin 5)) + (node (ref R4) (pin 1)) + (node (ref R5) (pin 1)) + (node (ref R8) (pin 1)) + (node (ref R9) (pin 1)) + (node (ref R10) (pin 1)) + (node (ref C1) (pin 1)) + (node (ref C9) (pin 1)) + (node (ref C10) (pin 1)) + (node (ref C11) (pin 1))) +(net (code 3) (name "gnd") + (node (ref U1) (pin 4)) + (node (ref J1) (pin 1)) + (node (ref SW1) (pin 2)) + (node (ref R1) (pin 2)) + (node (ref R2) (pin 2)) + (node (ref R3) (pin 2)) + (node (ref J2) (pin 1)) + (node (ref J3) (pin 5)) + (node (ref U4) (pin 12)) + (node (ref U4) (pin 13)) + (node (ref U4) (pin 14)) + (node (ref U4) (pin 19)) + (node (ref U4) (pin 20)) + (node (ref U4) (pin 21)) + (node (ref U4) (pin 28)) + (node (ref U4) (pin 29)) + (node (ref R7) (pin 2)) + (node (ref U2) (pin 2)) + (node (ref R12) (pin 2)) + (node (ref U3) (pin 4)) + (node (ref R23) (pin 2)) + (node (ref R25) (pin 2)) + (node (ref R27) (pin 2)) + (node (ref C3) (pin 2)) + (node (ref C4) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref U5) (pin 2)) + (node (ref U6) (pin 2)) + (node (ref U7) (pin 2)) + (node (ref C1) (pin 2)) + (node (ref C2) (pin 2)) + (node (ref R19) (pin 1)) + (node (ref R20) (pin 1)) + (node (ref R21) (pin 1)) + (node (ref C9) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref C11) (pin 2))) +(net (code 4) (name "sw1.out") + (node (ref U1) (pin 20)) + (node (ref SW1) (pin 1))) +(net (code 5) (name "ledr.signal") + (node (ref U1) (pin 16)) + (node (ref D1) (pin 2))) +(net (code 6) (name "ledg.signal") + (node (ref U1) (pin 7)) + (node (ref D2) (pin 2))) +(net (code 7) (name "ledb.signal") + (node (ref U1) (pin 3)) + (node (ref D3) (pin 2))) +(net (code 8) (name "i2c_pull.i2c.scl") + (node (ref U1) (pin 22)) + (node (ref R4) (pin 2)) + (node (ref TP1) (pin 1)) + (node (ref J2) (pin 4))) +(net (code 9) (name "i2c_pull.i2c.sda") + (node (ref U1) (pin 21)) + (node (ref J2) (pin 3)) + (node (ref R5) (pin 2)) + (node (ref TP2) (pin 1))) +(net (code 10) (name "ref_div.output") + (node (ref U2) (pin 1)) + (node (ref R6) (pin 2)) + (node (ref R7) (pin 1))) +(net (code 11) (name "ref_buf.output") + (node (ref U2) (pin 3)) + (node (ref TP3) (pin 1)) + (node (ref R17) (pin 1)) + (node (ref U2) (pin 4))) +(net (code 12) (name "hall.phases.u") + (node (ref U1) (pin 23)) + (node (ref J3) (pin 2)) + (node (ref R8) (pin 2)) + (node (ref TP4) (pin 1))) +(net (code 13) (name "hall.phases.v") + (node (ref U1) (pin 24)) + (node (ref J3) (pin 3)) + (node (ref R9) (pin 2)) + (node (ref TP5) (pin 1))) +(net (code 14) (name "hall.phases.w") + (node (ref U1) (pin 25)) + (node (ref J3) (pin 4)) + (node (ref R10) (pin 2)) + (node (ref TP6) (pin 1))) +(net (code 15) (name "motor_pwr.pwr") + (node (ref J1) (pin 2)) + (node (ref R11) (pin 1)) + (node (ref U3) (pin 7)) + (node (ref R13) (pin 1)) + (node (ref C2) (pin 1)) + (node (ref R15) (pin 1))) +(net (code 16) (name "vsense.output") + (node (ref U1) (pin 6)) + (node (ref TP7) (pin 1)) + (node (ref R11) (pin 2)) + (node (ref R12) (pin 1))) +(net (code 17) (name "isense.out") + (node (ref TP8) (pin 1)) + (node (ref R18) (pin 1)) + (node (ref R16) (pin 1)) + (node (ref U3) (pin 6))) +(net (code 18) (name "isense_clamp.signal_out") + (node (ref U1) (pin 5)) + (node (ref R18) (pin 2))) +(net (code 19) (name "isense.pwr_out") + (node (ref U4) (pin 4)) + (node (ref U4) (pin 11)) + (node (ref R13) (pin 2)) + (node (ref C8) (pin 2)) + (node (ref C3) (pin 1)) + (node (ref C4) (pin 1)) + (node (ref C5) (pin 1)) + (node (ref R14) (pin 1))) +(net (code 20) (name "bldc_drv.nreset") + (node (ref U1) (pin 18)) + (node (ref U4) (pin 16))) +(net (code 21) (name "bldc_drv.nfault") + (node (ref U1) (pin 19)) + (node (ref U4) (pin 18)) + (node (ref TP9) (pin 1))) +(net (code 22) (name "mcu.gpio.bldc_en_1") + (node (ref U1) (pin 12)) + (node (ref U4) (pin 26)) + (node (ref TP10) (pin 1))) +(net (code 23) (name "mcu.gpio.bldc_en_2") + (node (ref U1) (pin 14)) + (node (ref U4) (pin 24)) + (node (ref TP11) (pin 1))) +(net (code 24) (name "mcu.gpio.bldc_en_3") + (node (ref U1) (pin 17)) + (node (ref U4) (pin 22)) + (node (ref TP12) (pin 1))) +(net (code 25) (name "mcu.gpio.bldc_in_1") + (node (ref U1) (pin 11)) + (node (ref U4) (pin 27)) + (node (ref TP13) (pin 1))) +(net (code 26) (name "mcu.gpio.bldc_in_2") + (node (ref U1) (pin 13)) + (node (ref U4) (pin 25)) + (node (ref TP14) (pin 1))) +(net (code 27) (name "mcu.gpio.bldc_in_3") + (node (ref U1) (pin 15)) + (node (ref U4) (pin 23)) + (node (ref TP15) (pin 1))) +(net (code 28) (name "bldc_drv.outs.1") + (node (ref U4) (pin 5)) + (node (ref J4) (pin 1))) +(net (code 29) (name "bldc_drv.outs.2") + (node (ref U4) (pin 8)) + (node (ref J4) (pin 2))) +(net (code 30) (name "bldc_drv.outs.3") + (node (ref U4) (pin 9)) + (node (ref J4) (pin 3))) +(net (code 31) (name "curr_amp[1].input") + (node (ref U5) (pin 1)) + (node (ref R19) (pin 2)) + (node (ref U4) (pin 6))) +(net (code 32) (name "curr_amp[1].output") + (node (ref U1) (pin 10)) + (node (ref TP16) (pin 1)) + (node (ref R22) (pin 1)) + (node (ref U5) (pin 4))) +(net (code 33) (name "curr_amp[2].input") + (node (ref U6) (pin 1)) + (node (ref R20) (pin 2)) + (node (ref U4) (pin 7))) +(net (code 34) (name "curr_amp[2].output") + (node (ref U1) (pin 9)) + (node (ref TP17) (pin 1)) + (node (ref R24) (pin 1)) + (node (ref U6) (pin 4))) +(net (code 35) (name "curr_amp[3].input") + (node (ref U7) (pin 1)) + (node (ref R21) (pin 2)) + (node (ref U4) (pin 10))) +(net (code 36) (name "curr_amp[3].output") + (node (ref U1) (pin 8)) + (node (ref TP18) (pin 1)) + (node (ref R26) (pin 1)) + (node (ref U7) (pin 4))) +(net (code 37) (name "ledr.res.a") + (node (ref R1) (pin 1)) + (node (ref D1) (pin 1))) +(net (code 38) (name "ledg.res.a") + (node (ref R2) (pin 1)) + (node (ref D2) (pin 1))) +(net (code 39) (name "ledb.res.a") + (node (ref R3) (pin 1)) + (node (ref D3) (pin 1))) +(net (code 40) (name "isense.amp.r2.b") + (node (ref R15) (pin 2)) + (node (ref U3) (pin 3)) + (node (ref R17) (pin 2))) +(net (code 41) (name "isense.amp.r1.b") + (node (ref R14) (pin 2)) + (node (ref U3) (pin 2)) + (node (ref R16) (pin 2))) +(net (code 42) (name "bldc_drv.ic.v3p3") + (node (ref U4) (pin 15)) + (node (ref C6) (pin 1)) + (node (ref U4) (pin 17))) +(net (code 43) (name "bldc_drv.cp_cap.pos") + (node (ref C7) (pin 1)) + (node (ref U4) (pin 2))) +(net (code 44) (name "bldc_drv.cp_cap.neg") + (node (ref C7) (pin 2)) + (node (ref U4) (pin 1))) +(net (code 45) (name "bldc_drv.vcp_cap.pos") + (node (ref C8) (pin 1)) + (node (ref U4) (pin 3))) +(net (code 46) (name "curr_amp[1].r2.a") + (node (ref R23) (pin 1)) + (node (ref U5) (pin 3)) + (node (ref R22) (pin 2))) +(net (code 47) (name "curr_amp[2].r2.a") + (node (ref R25) (pin 1)) + (node (ref U6) (pin 3)) + (node (ref R24) (pin 2))) +(net (code 48) (name "curr_amp[3].r2.a") + (node (ref R27) (pin 1)) + (node (ref U7) (pin 3)) + (node (ref R26) (pin 2)))) +) \ No newline at end of file From 643c4dae65f8e6fe7e8b126460ef1fbda03a094e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:28:27 -0700 Subject: [PATCH 08/11] make with_elt_initializeres private --- edg/abstract_parts/PinMappable.py | 2 +- edg/core/Ports.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/edg/abstract_parts/PinMappable.py b/edg/abstract_parts/PinMappable.py index e63aa23b6..70fa4e29a 100644 --- a/edg/abstract_parts/PinMappable.py +++ b/edg/abstract_parts/PinMappable.py @@ -413,7 +413,7 @@ def try_allocate_resource( ): # apply transform to search for the resource type, if needed inner_models[inner_name] = self.transforms[type(inner_model)][1](inner_models[inner_name]) sub_assignments.check_empty() - resource_model = resource_model.with_elt_initializers(inner_models) + resource_model = resource_model._with_elt_initializers(inner_models) allocated_resource = AllocatedResource(resource_model, port_name, resource_name, inner_pin_map) return allocated_resource else: diff --git a/edg/core/Ports.py b/edg/core/Ports.py index 22d95a066..c175c88c0 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -277,7 +277,7 @@ def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr initializers.extend(port._get_initializers(path_prefix + [name])) return initializers - def with_elt_initializers(self: SelfType, replace_elts: dict[str, "Port"]) -> SelfType: + def _with_elt_initializers(self: SelfType, replace_elts: dict[str, "Port"]) -> SelfType: """Clones model-typed self, except adding initializers to elements from the input dict. Those elements must be empty.""" assert self._parent is None, "self must not be bound" From 0fbd22637eb7adbf7aa181545936e7ad713d72be Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:33:24 -0700 Subject: [PATCH 09/11] blacken --- edg/core/Ports.py | 4 +- edg/edgir/common_pb2.py | 12 +- edg/edgir/common_pb2.pyi | 205 ++++++---- edg/edgir/elem_pb2.py | 13 +- edg/edgir/elem_pb2.pyi | 619 +++++++++++++++++-------------- edg/edgir/expr_pb2.py | 13 +- edg/edgir/expr_pb2.pyi | 720 ++++++++++++++++++++---------------- edg/edgir/impl_pb2.py | 11 +- edg/edgir/impl_pb2.pyi | 68 ++-- edg/edgir/init_pb2.py | 11 +- edg/edgir/init_pb2.pyi | 124 ++++--- edg/edgir/lit_pb2.py | 13 +- edg/edgir/lit_pb2.pyi | 209 ++++++----- edg/edgir/name_pb2.py | 11 +- edg/edgir/name_pb2.pyi | 45 +-- edg/edgir/ref_pb2.py | 11 +- edg/edgir/ref_pb2.pyi | 128 ++++--- edg/edgir/schema_pb2.py | 13 +- edg/edgir/schema_pb2.pyi | 171 +++++---- edg/edgrpc/compiler_pb2.py | 11 +- edg/edgrpc/compiler_pb2.pyi | 113 +++--- edg/edgrpc/hdl_pb2.py | 13 +- edg/edgrpc/hdl_pb2.pyi | 599 +++++++++++++++++------------- 23 files changed, 1760 insertions(+), 1377 deletions(-) diff --git a/edg/core/Ports.py b/edg/core/Ports.py index c175c88c0..70d3bccb6 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -273,7 +273,7 @@ def _get_initializers(self, path_prefix: List[str]) -> List[Tuple[ConstraintExpr if param.initializer is not None ] self._ports.finalize() - for (name, port) in self._ports.items(): + for name, port in self._ports.items(): initializers.extend(port._get_initializers(path_prefix + [name])) return initializers @@ -316,6 +316,7 @@ def Parameter(self, tpe: U) -> U: return elt T = TypeVar("T", bound="Port") + def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: """Registers a field for this Bundle""" if not isinstance(tpe, Port): @@ -331,4 +332,3 @@ def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: @deprecated(reason="merged with Port, use Port instead") class Bundle(Port[PortLinkType], Generic[PortLinkType]): SelfType = TypeVar("SelfType", bound="Bundle") - diff --git a/edg/edgir/common_pb2.py b/edg/edgir/common_pb2.py index 01c1565e4..a88fe9b8c 100644 --- a/edg/edgir/common_pb2.py +++ b/edg/edgir/common_pb2.py @@ -1,16 +1,20 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12edgir/common.proto\x12\x0cedgir.common"\x95\x03\n\x08Metadata\x12&\n\x07unknown\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12\x0f\n\x05known\x18\x02 \x01(\tH\x00\x121\n\x07members\x18e \x01(\x0b2\x1e.edgir.common.Metadata.MembersH\x01\x12\x13\n\ttext_leaf\x18f \x01(\tH\x01\x12\x12\n\x08bin_leaf\x18g \x01(\x0cH\x01\x125\n\x0esource_locator\x18n \x01(\x0b2\x1b.edgir.common.SourceLocatorH\x01\x12$\n\x05error\x18p \x01(\x0b2\x13.edgir.common.ErrorH\x01\x1a\x86\x01\n\x07Members\x126\n\x04node\x18\n \x03(\x0b2(.edgir.common.Metadata.Members.NodeEntry\x1aC\n\tNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b2\x16.edgir.common.Metadata:\x028\x01B\x06\n\x04typeB\x06\n\x04meta"\xc9\x01\n\rSourceLocator\x12\x14\n\x0cfile_package\x18\x01 \x01(\t\x12\x13\n\x0bline_offset\x18\x02 \x01(\x05\x12\x12\n\ncol_offset\x18\x03 \x01(\x05\x12;\n\x0bsource_type\x18\x04 \x01(\x0e2&.edgir.common.SourceLocator.SourceType"<\n\nSourceType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0e\n\nDEFINITION\x10\x01\x12\x11\n\rINSTANTIATION\x10\x02"X\n\x05Error\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\x12+\n\x06source\x18\x02 \x03(\x0b2\x1b.edgir.common.SourceLocator"\x07\n\x05Emptyb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x12edgir/common.proto\x12\x0cedgir.common"\x95\x03\n\x08Metadata\x12&\n\x07unknown\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12\x0f\n\x05known\x18\x02 \x01(\tH\x00\x121\n\x07members\x18e \x01(\x0b2\x1e.edgir.common.Metadata.MembersH\x01\x12\x13\n\ttext_leaf\x18f \x01(\tH\x01\x12\x12\n\x08bin_leaf\x18g \x01(\x0cH\x01\x125\n\x0esource_locator\x18n \x01(\x0b2\x1b.edgir.common.SourceLocatorH\x01\x12$\n\x05error\x18p \x01(\x0b2\x13.edgir.common.ErrorH\x01\x1a\x86\x01\n\x07Members\x126\n\x04node\x18\n \x03(\x0b2(.edgir.common.Metadata.Members.NodeEntry\x1aC\n\tNodeEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12%\n\x05value\x18\x02 \x01(\x0b2\x16.edgir.common.Metadata:\x028\x01B\x06\n\x04typeB\x06\n\x04meta"\xc9\x01\n\rSourceLocator\x12\x14\n\x0cfile_package\x18\x01 \x01(\t\x12\x13\n\x0bline_offset\x18\x02 \x01(\x05\x12\x12\n\ncol_offset\x18\x03 \x01(\x05\x12;\n\x0bsource_type\x18\x04 \x01(\x0e2&.edgir.common.SourceLocator.SourceType"<\n\nSourceType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0e\n\nDEFINITION\x10\x01\x12\x11\n\rINSTANTIATION\x10\x02"X\n\x05Error\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x03 \x01(\t\x12+\n\x06source\x18\x02 \x03(\x0b2\x1b.edgir.common.SourceLocator"\x07\n\x05Emptyb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.common_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.common_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _METADATA_MEMBERS_NODEENTRY._options = None - _METADATA_MEMBERS_NODEENTRY._serialized_options = b'8\x01' + _METADATA_MEMBERS_NODEENTRY._serialized_options = b"8\x01" _METADATA._serialized_start = 37 _METADATA._serialized_end = 442 _METADATA_MEMBERS._serialized_start = 292 @@ -24,4 +28,4 @@ _ERROR._serialized_start = 648 _ERROR._serialized_end = 736 _EMPTY._serialized_start = 738 - _EMPTY._serialized_end = 745 \ No newline at end of file + _EMPTY._serialized_end = 745 diff --git a/edg/edgir/common_pb2.pyi b/edg/edgir/common_pb2.pyi index bad85ffc9..4fa8ab79c 100644 --- a/edg/edgir/common_pb2.pyi +++ b/edg/edgir/common_pb2.pyi @@ -7,6 +7,7 @@ Package : edg.common This is where we keep shared types that we reuse and don't have a good place for. """ + from collections import abc as _abc from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -15,6 +16,7 @@ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -24,6 +26,7 @@ DESCRIPTOR: _descriptor.FileDescriptor @_typing.final class Metadata(_message.Message): """* Arbitrary metadata stored in tree form.""" + DESCRIPTOR: _descriptor.Descriptor @_typing.final @@ -38,31 +41,24 @@ class Metadata(_message.Message): key: _builtins.str @_builtins.property - def value(self) -> Global___Metadata: - ... + def value(self) -> Global___Metadata: ... + def __init__(self, *, key: _builtins.str = ..., value: Global___Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, key: _builtins.str=..., value: Global___Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... NODE_FIELD_NUMBER: _builtins.int @_builtins.property - def node(self) -> _containers.MessageMap[_builtins.str, Global___Metadata]: - ... + def node(self) -> _containers.MessageMap[_builtins.str, Global___Metadata]: ... + def __init__(self, *, node: _abc.Mapping[_builtins.str, Global___Metadata] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["node", b"node"] - def __init__(self, *, node: _abc.Mapping[_builtins.str, Global___Metadata] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['node', b'node'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... UNKNOWN_FIELD_NUMBER: _builtins.int KNOWN_FIELD_NUMBER: _builtins.int MEMBERS_FIELD_NUMBER: _builtins.int @@ -73,16 +69,12 @@ class Metadata(_message.Message): known: _builtins.str text_leaf: _builtins.str bin_leaf: _builtins.bytes - '* I wanted to split binary and text data, since we might\n just want to dump a raw file/image/datasheet in here\n for safekeeping.\n\n Mixing up binary and textual formats is just a recipe\n for trouble.\n ' + "* I wanted to split binary and text data, since we might\n just want to dump a raw file/image/datasheet in here\n for safekeeping.\n\n Mixing up binary and textual formats is just a recipe\n for trouble.\n " @_builtins.property - def unknown(self) -> Global___Empty: - ... - + def unknown(self) -> Global___Empty: ... @_builtins.property - def members(self) -> Global___Metadata.Members: - ... - + def members(self) -> Global___Metadata.Members: ... @_builtins.property def source_locator(self) -> Global___SourceLocator: """Defined formats @@ -91,31 +83,74 @@ class Metadata(_message.Message): """ @_builtins.property - def error(self) -> Global___Error: - ... - - def __init__(self, *, unknown: Global___Empty | None=..., known: _builtins.str=..., members: Global___Metadata.Members | None=..., text_leaf: _builtins.str=..., bin_leaf: _builtins.bytes=..., source_locator: Global___SourceLocator | None=..., error: Global___Error | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['bin_leaf', b'bin_leaf', 'error', b'error', 'known', b'known', 'members', b'members', 'meta', b'meta', 'source_locator', b'source_locator', 'text_leaf', b'text_leaf', 'type', b'type', 'unknown', b'unknown'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['bin_leaf', b'bin_leaf', 'error', b'error', 'known', b'known', 'members', b'members', 'meta', b'meta', 'source_locator', b'source_locator', 'text_leaf', b'text_leaf', 'type', b'type', 'unknown', b'unknown'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_meta: _TypeAlias = _typing.Literal['members', 'text_leaf', 'bin_leaf', 'source_locator', 'error'] - _WhichOneofArgType_meta: _TypeAlias = _typing.Literal['meta', b'meta'] - _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['unknown', 'known'] - _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + def error(self) -> Global___Error: ... + def __init__( + self, + *, + unknown: Global___Empty | None = ..., + known: _builtins.str = ..., + members: Global___Metadata.Members | None = ..., + text_leaf: _builtins.str = ..., + bin_leaf: _builtins.bytes = ..., + source_locator: Global___SourceLocator | None = ..., + error: Global___Error | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "bin_leaf", + b"bin_leaf", + "error", + b"error", + "known", + b"known", + "members", + b"members", + "meta", + b"meta", + "source_locator", + b"source_locator", + "text_leaf", + b"text_leaf", + "type", + b"type", + "unknown", + b"unknown", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "bin_leaf", + b"bin_leaf", + "error", + b"error", + "known", + b"known", + "members", + b"members", + "meta", + b"meta", + "source_locator", + b"source_locator", + "text_leaf", + b"text_leaf", + "type", + b"type", + "unknown", + b"unknown", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_meta: _TypeAlias = _typing.Literal[ + "members", "text_leaf", "bin_leaf", "source_locator", "error" + ] + _WhichOneofArgType_meta: _TypeAlias = _typing.Literal["meta", b"meta"] + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal["unknown", "known"] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal["type", b"type"] @_typing.overload - def WhichOneof(self, oneof_group: _WhichOneofArgType_meta) -> _WhichOneofReturnType_meta | None: - ... - + def WhichOneof(self, oneof_group: _WhichOneofArgType_meta) -> _WhichOneofReturnType_meta | None: ... @_typing.overload - def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: - ... + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: ... + Global___Metadata: _TypeAlias = Metadata @_typing.final @@ -124,45 +159,62 @@ class SourceLocator(_message.Message): * For locating source data """ + DESCRIPTOR: _descriptor.Descriptor class _SourceType: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType - class _SourceTypeEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[SourceLocator._SourceType.ValueType], _builtins.type): + class _SourceTypeEnumTypeWrapper( + _enum_type_wrapper._EnumTypeWrapper[SourceLocator._SourceType.ValueType], _builtins.type + ): DESCRIPTOR: _descriptor.EnumDescriptor UNKNOWN: SourceLocator._SourceType.ValueType DEFINITION: SourceLocator._SourceType.ValueType - 'source defining this class, would be present in library' + "source defining this class, would be present in library" INSTANTIATION: SourceLocator._SourceType.ValueType - 'source of instantiation, would be present in design' + "source of instantiation, would be present in design" - class SourceType(_SourceType, metaclass=_SourceTypeEnumTypeWrapper): - ... + class SourceType(_SourceType, metaclass=_SourceTypeEnumTypeWrapper): ... UNKNOWN: SourceLocator.SourceType.ValueType DEFINITION: SourceLocator.SourceType.ValueType - 'source defining this class, would be present in library' + "source defining this class, would be present in library" INSTANTIATION: SourceLocator.SourceType.ValueType - 'source of instantiation, would be present in design' + "source of instantiation, would be present in design" FILE_PACKAGE_FIELD_NUMBER: _builtins.int LINE_OFFSET_FIELD_NUMBER: _builtins.int COL_OFFSET_FIELD_NUMBER: _builtins.int SOURCE_TYPE_FIELD_NUMBER: _builtins.int file_package: _builtins.str - 'package name (portable, not tied to an absolute path) that locates the file' + "package name (portable, not tied to an absolute path) that locates the file" line_offset: _builtins.int - 'line number' + "line number" col_offset: _builtins.int - 'character offset within the line' + "character offset within the line" source_type: Global___SourceLocator.SourceType.ValueType - def __init__(self, *, file_package: _builtins.str=..., line_offset: _builtins.int=..., col_offset: _builtins.int=..., source_type: Global___SourceLocator.SourceType.ValueType=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['col_offset', b'col_offset', 'file_package', b'file_package', 'line_offset', b'line_offset', 'source_type', b'source_type'] + def __init__( + self, + *, + file_package: _builtins.str = ..., + line_offset: _builtins.int = ..., + col_offset: _builtins.int = ..., + source_type: Global___SourceLocator.SourceType.ValueType = ..., + ) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "col_offset", + b"col_offset", + "file_package", + b"file_package", + "line_offset", + b"line_offset", + "source_type", + b"source_type", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___SourceLocator: _TypeAlias = SourceLocator @_typing.final @@ -170,32 +222,41 @@ class Error(_message.Message): """* Used to communicate results of analysis / checking passes. Limited to Block and Link objects. """ + DESCRIPTOR: _descriptor.Descriptor MESSAGE_FIELD_NUMBER: _builtins.int TRACEBACK_FIELD_NUMBER: _builtins.int SOURCE_FIELD_NUMBER: _builtins.int message: _builtins.str - 'free-form error message' + "free-form error message" traceback: _builtins.str - 'full traceback TODO: should there be a structured stack trace?' + "full traceback TODO: should there be a structured stack trace?" @_builtins.property def source(self) -> _containers.RepeatedCompositeFieldContainer[Global___SourceLocator]: """source locator, eg line of failing constraint""" - def __init__(self, *, message: _builtins.str=..., traceback: _builtins.str=..., source: _abc.Iterable[Global___SourceLocator] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['message', b'message', 'source', b'source', 'traceback', b'traceback'] + def __init__( + self, + *, + message: _builtins.str = ..., + traceback: _builtins.str = ..., + source: _abc.Iterable[Global___SourceLocator] | None = ..., + ) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "message", b"message", "source", b"source", "traceback", b"traceback" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Error: _TypeAlias = Error @_typing.final class Empty(_message.Message): """* Placeholder until I figure out how to import properly""" + DESCRIPTOR: _descriptor.Descriptor - def __init__(self) -> None: - ... -Global___Empty: _TypeAlias = Empty \ No newline at end of file + def __init__(self) -> None: ... + +Global___Empty: _TypeAlias = Empty diff --git a/edg/edgir/elem_pb2.py b/edg/edgir/elem_pb2.py index 1848baf86..5b5633fd0 100644 --- a/edg/edgir/elem_pb2.py +++ b/edg/edgir/elem_pb2.py @@ -1,20 +1,25 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import init_pb2 as edgir_dot_init__pb2 from ..edgir import expr_pb2 as edgir_dot_expr__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\xbf\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05ports\x18* \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xb0\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xc4\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgir/elem.proto\x12\nedgir.elem\x1a\x12edgir/common.proto\x1a\x10edgir/init.proto\x1a\x10edgir/expr.proto\x1a\x0fedgir/ref.proto"@\n\x0cNamedValInit\x12\x0c\n\x04name\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.init.ValInit"D\n\x0eNamedValueExpr\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"B\n\rNamedPortLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.PortLike"D\n\x0eNamedBlockLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.elem.BlockLike"B\n\rNamedLinkLike\x12\x0c\n\x04name\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b2\x14.edgir.elem.LinkLike"\xbf\x02\n\x04Port\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12/\n\x0bconstraints\x18) \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05ports\x18* \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xca\x01\n\tPortArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x05ports\x18\x0e \x01(\x0b2\x1b.edgir.elem.PortArray.PortsH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a1\n\x05Ports\x12(\n\x05ports\x18( \x03(\x0b2\x19.edgir.elem.NamedPortLikeB\n\n\x08contains"\xb0\x01\n\x08PortLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04port\x18\x03 \x01(\x0b2\x10.edgir.elem.PortH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.PortArrayH\x00B\x04\n\x02is"=\n\tParameter\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04unit\x18\x02 \x01(\t"a\n\x18StringDescriptionElement\x12\x0e\n\x04text\x18\x01 \x01(\tH\x00\x12&\n\x05param\x18\x02 \x01(\x0b2\x15.edgir.elem.ParameterH\x00B\r\n\x0bElementType"\xc4\x06\n\x0eHierarchyBlock\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12E\n\x0eparam_defaults\x18\x0f \x03(\x0b2-.edgir.elem.HierarchyBlock.ParamDefaultsEntry\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12*\n\x06blocks\x18* \x03(\x0b2\x1a.edgir.elem.NamedBlockLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18, \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x17 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x14 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12/\n\x0fprerefine_class\x18\x15 \x01(\x0b2\x16.edgir.ref.LibraryPath\x120\n\x10prerefine_mixins\x18\x19 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\tgenerator\x18\x16 \x01(\x0b2\x15.edgir.elem.Generator\x12\x13\n\x0bis_abstract\x18\x1e \x01(\x08\x122\n\x12default_refinement\x18\x1f \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement\x1aK\n\x12ParamDefaultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01":\n\tGenerator\x12-\n\x0frequired_params\x18\x02 \x03(\x0b2\x14.edgir.ref.LocalPath"\\\n\x0cBlockLibrary\x12$\n\x04base\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12&\n\x06mixins\x18\x03 \x03(\x0b2\x16.edgir.ref.LibraryPath"\x9c\x01\n\tBlockLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12,\n\x08lib_elem\x18\x05 \x01(\x0b2\x18.edgir.elem.BlockLibraryH\x00\x12/\n\thierarchy\x18\x04 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00B\x06\n\x04type"\xa4\x03\n\x04Link\x12(\n\x06params\x18( \x03(\x0b2\x18.edgir.elem.NamedValInit\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12,\n\x0csuperclasses\x18\x15 \x03(\x0b2\x16.edgir.ref.LibraryPath\x122\n\x12super_superclasses\x18\x18 \x03(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x129\n\x0bdescription\x18\x01 \x03(\x0b2$.edgir.elem.StringDescriptionElement"\xe2\x01\n\tLinkArray\x12*\n\nself_class\x18\x14 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\x05ports\x18) \x03(\x0b2\x19.edgir.elem.NamedPortLike\x12/\n\x0bconstraints\x18* \x03(\x0b2\x1a.edgir.elem.NamedValueExpr\x12(\n\x05links\x18+ \x03(\x0b2\x19.edgir.elem.NamedLinkLike\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"\xb2\x01\n\x08LinkLike\x12(\n\tundefined\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12*\n\x08lib_elem\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12 \n\x04link\x18\x03 \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12&\n\x05array\x18\x04 \x01(\x0b2\x15.edgir.elem.LinkArrayH\x00B\x06\n\x04typeb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.elem_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.elem_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._options = None - _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_options = b'8\x01' + _HIERARCHYBLOCK_PARAMDEFAULTSENTRY._serialized_options = b"8\x01" _NAMEDVALINIT._serialized_start = 105 _NAMEDVALINIT._serialized_end = 169 _NAMEDVALUEEXPR._serialized_start = 171 @@ -52,4 +57,4 @@ _LINKARRAY._serialized_start = 2891 _LINKARRAY._serialized_end = 3117 _LINKLIKE._serialized_start = 3120 - _LINKLIKE._serialized_end = 3298 \ No newline at end of file + _LINKLIKE._serialized_end = 3298 diff --git a/edg/edgir/elem_pb2.pyi b/edg/edgir/elem_pb2.pyi index 9c09803fc..4922395ee 100644 --- a/edg/edgir/elem_pb2.pyi +++ b/edg/edgir/elem_pb2.pyi @@ -13,6 +13,7 @@ We don't strictly differentiate between library elements and elements within a design within the protobuf. In general, when there is a library element, we """ + from collections import abc as _abc from edgir import common_pb2 as _common_pb2 from edgir import expr_pb2 as _expr_pb2 @@ -24,6 +25,7 @@ from google.protobuf.internal import containers as _containers import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -36,25 +38,22 @@ class NamedValInit(_message.Message): are unordered (whereas we want to preserve ordering to preserve design intent through the compiler), we use a sequence of these pairs. """ + DESCRIPTOR: _descriptor.Descriptor NAME_FIELD_NUMBER: _builtins.int VALUE_FIELD_NUMBER: _builtins.int name: _builtins.str @_builtins.property - def value(self) -> _init_pb2.ValInit: - ... + def value(self) -> _init_pb2.ValInit: ... + def __init__(self, *, name: _builtins.str = ..., value: _init_pb2.ValInit | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, name: _builtins.str=..., value: _init_pb2.ValInit | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___NamedValInit: _TypeAlias = NamedValInit @_typing.final @@ -65,19 +64,15 @@ class NamedValueExpr(_message.Message): name: _builtins.str @_builtins.property - def value(self) -> _expr_pb2.ValueExpr: - ... + def value(self) -> _expr_pb2.ValueExpr: ... + def __init__(self, *, name: _builtins.str = ..., value: _expr_pb2.ValueExpr | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, name: _builtins.str=..., value: _expr_pb2.ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___NamedValueExpr: _TypeAlias = NamedValueExpr @_typing.final @@ -88,19 +83,15 @@ class NamedPortLike(_message.Message): name: _builtins.str @_builtins.property - def value(self) -> Global___PortLike: - ... + def value(self) -> Global___PortLike: ... + def __init__(self, *, name: _builtins.str = ..., value: Global___PortLike | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, name: _builtins.str=..., value: Global___PortLike | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___NamedPortLike: _TypeAlias = NamedPortLike @_typing.final @@ -111,19 +102,15 @@ class NamedBlockLike(_message.Message): name: _builtins.str @_builtins.property - def value(self) -> Global___BlockLike: - ... + def value(self) -> Global___BlockLike: ... + def __init__(self, *, name: _builtins.str = ..., value: Global___BlockLike | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, name: _builtins.str=..., value: Global___BlockLike | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___NamedBlockLike: _TypeAlias = NamedBlockLike @_typing.final @@ -134,19 +121,15 @@ class NamedLinkLike(_message.Message): name: _builtins.str @_builtins.property - def value(self) -> Global___LinkLike: - ... + def value(self) -> Global___LinkLike: ... + def __init__(self, *, name: _builtins.str = ..., value: Global___LinkLike | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, name: _builtins.str=..., value: Global___LinkLike | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___NamedLinkLike: _TypeAlias = NamedLinkLike @_typing.final @@ -161,21 +144,13 @@ class Port(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: - ... - + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: ... @_builtins.property - def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: - ... - + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: ... @_builtins.property - def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: - ... - + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: ... @_builtins.property - def self_class(self) -> _ref_pb2.LibraryPath: - ... - + def self_class(self) -> _ref_pb2.LibraryPath: ... @_builtins.property def superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """superclasses, may be empty""" @@ -188,16 +163,39 @@ class Port(_message.Message): def meta(self) -> _common_pb2.Metadata: """TODO: this provides type hierarchy data only, inheritance semantics are currently undefined""" - def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'meta', b'meta', 'params', b'params', 'ports', b'ports', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] + def __init__( + self, + *, + params: _abc.Iterable[Global___NamedValInit] | None = ..., + constraints: _abc.Iterable[Global___NamedValueExpr] | None = ..., + ports: _abc.Iterable[Global___NamedPortLike] | None = ..., + self_class: _ref_pb2.LibraryPath | None = ..., + superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "self_class", b"self_class"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "constraints", + b"constraints", + "meta", + b"meta", + "params", + b"params", + "ports", + b"ports", + "self_class", + b"self_class", + "super_superclasses", + b"super_superclasses", + "superclasses", + b"superclasses", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Port: _TypeAlias = Port @_typing.final @@ -210,15 +208,12 @@ class PortArray(_message.Message): PORTS_FIELD_NUMBER: _builtins.int @_builtins.property - def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: - ... + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: ... + def __init__(self, *, ports: _abc.Iterable[Global___NamedPortLike] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["ports", b"ports"] - def __init__(self, *, ports: _abc.Iterable[Global___NamedPortLike] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['ports', b'ports'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... SELF_CLASS_FIELD_NUMBER: _builtins.int PORTS_FIELD_NUMBER: _builtins.int META_FIELD_NUMBER: _builtins.int @@ -230,33 +225,37 @@ class PortArray(_message.Message): """ @_builtins.property - def ports(self) -> Global___PortArray.Ports: - ... - + def ports(self) -> Global___PortArray.Ports: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + self_class: _ref_pb2.LibraryPath | None = ..., + ports: Global___PortArray.Ports | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "contains", b"contains", "meta", b"meta", "ports", b"ports", "self_class", b"self_class" + ] - def __init__(self, *, self_class: _ref_pb2.LibraryPath | None=..., ports: Global___PortArray.Ports | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['contains', b'contains', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "contains", b"contains", "meta", b"meta", "ports", b"ports", "self_class", b"self_class" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['contains', b'contains', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_contains: _TypeAlias = _typing.Literal["ports"] + _WhichOneofArgType_contains: _TypeAlias = _typing.Literal["contains", b"contains"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_contains: _TypeAlias = _typing.Literal['ports'] - _WhichOneofArgType_contains: _TypeAlias = _typing.Literal['contains', b'contains'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_contains) -> _WhichOneofReturnType_contains | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_contains) -> _WhichOneofReturnType_contains | None: - ... Global___PortArray: _TypeAlias = PortArray @_typing.final class PortLike(_message.Message): """* Wrapper for different port like elements""" + DESCRIPTOR: _descriptor.Descriptor UNDEFINED_FIELD_NUMBER: _builtins.int LIB_ELEM_FIELD_NUMBER: _builtins.int @@ -264,36 +263,38 @@ class PortLike(_message.Message): ARRAY_FIELD_NUMBER: _builtins.int @_builtins.property - def undefined(self) -> _common_pb2.Empty: - ... - + def undefined(self) -> _common_pb2.Empty: ... @_builtins.property - def lib_elem(self) -> _ref_pb2.LibraryPath: - ... - + def lib_elem(self) -> _ref_pb2.LibraryPath: ... @_builtins.property def port(self) -> Global___Port: """* 'port' disallowed w/in the library""" @_builtins.property - def array(self) -> Global___PortArray: - ... + def array(self) -> Global___PortArray: ... + def __init__( + self, + *, + undefined: _common_pb2.Empty | None = ..., + lib_elem: _ref_pb2.LibraryPath | None = ..., + port: Global___Port | None = ..., + array: Global___PortArray | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "array", b"array", "is", b"is", "lib_elem", b"lib_elem", "port", b"port", "undefined", b"undefined" + ] - def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: _ref_pb2.LibraryPath | None=..., port: Global___Port | None=..., array: Global___PortArray | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'is', b'is', 'lib_elem', b'lib_elem', 'port', b'port', 'undefined', b'undefined'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "array", b"array", "is", b"is", "lib_elem", b"lib_elem", "port", b"port", "undefined", b"undefined" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'is', b'is', 'lib_elem', b'lib_elem', 'port', b'port', 'undefined', b'undefined'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_is: _TypeAlias = _typing.Literal["undefined", "lib_elem", "port", "array"] + _WhichOneofArgType_is: _TypeAlias = _typing.Literal["is", b"is"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_is: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'port', 'array'] - _WhichOneofArgType_is: _TypeAlias = _typing.Literal['is', b'is'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_is) -> _WhichOneofReturnType_is | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_is) -> _WhichOneofReturnType_is | None: - ... Global___PortLike: _TypeAlias = PortLike @_typing.final @@ -304,19 +305,15 @@ class Parameter(_message.Message): unit: _builtins.str @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... + def path(self) -> _ref_pb2.LocalPath: ... + def __init__(self, *, path: _ref_pb2.LocalPath | None = ..., unit: _builtins.str = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["path", b"path"] - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., unit: _builtins.str=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "unit", b"unit"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'unit', b'unit'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Parameter: _TypeAlias = Parameter @_typing.final @@ -327,24 +324,19 @@ class StringDescriptionElement(_message.Message): text: _builtins.str @_builtins.property - def param(self) -> Global___Parameter: - ... + def param(self) -> Global___Parameter: ... + def __init__(self, *, text: _builtins.str = ..., param: Global___Parameter | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["ElementType", b"ElementType", "param", b"param", "text", b"text"] - def __init__(self, *, text: _builtins.str=..., param: Global___Parameter | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['ElementType', b'ElementType', 'param', b'param', 'text', b'text'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["ElementType", b"ElementType", "param", b"param", "text", b"text"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['ElementType', b'ElementType', 'param', b'param', 'text', b'text'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_ElementType: _TypeAlias = _typing.Literal["text", "param"] + _WhichOneofArgType_ElementType: _TypeAlias = _typing.Literal["ElementType", b"ElementType"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_ElementType: _TypeAlias = _typing.Literal['text', 'param'] - _WhichOneofArgType_ElementType: _TypeAlias = _typing.Literal['ElementType', b'ElementType'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_ElementType) -> _WhichOneofReturnType_ElementType | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_ElementType) -> _WhichOneofReturnType_ElementType | None: - ... Global___StringDescriptionElement: _TypeAlias = StringDescriptionElement @_typing.final @@ -359,19 +351,15 @@ class HierarchyBlock(_message.Message): key: _builtins.str @_builtins.property - def value(self) -> _expr_pb2.ValueExpr: - ... + def value(self) -> _expr_pb2.ValueExpr: ... + def __init__(self, *, key: _builtins.str = ..., value: _expr_pb2.ValueExpr | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, key: _builtins.str=..., value: _expr_pb2.ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... PARAMS_FIELD_NUMBER: _builtins.int PARAM_DEFAULTS_FIELD_NUMBER: _builtins.int PORTS_FIELD_NUMBER: _builtins.int @@ -389,12 +377,10 @@ class HierarchyBlock(_message.Message): META_FIELD_NUMBER: _builtins.int DESCRIPTION_FIELD_NUMBER: _builtins.int is_abstract: _builtins.bool - 'true if self_class is abstract, and should error if used in a design' + "true if self_class is abstract, and should error if used in a design" @_builtins.property - def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: - ... - + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: ... @_builtins.property def param_defaults(self) -> _containers.MessageMap[_builtins.str, _expr_pb2.ValueExpr]: """Refinements may introduce new parameters which would not be assigned a value in the parent class. @@ -403,9 +389,7 @@ class HierarchyBlock(_message.Message): """ @_builtins.property - def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: - ... - + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: ... @_builtins.property def blocks(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedBlockLike]: """* Bridges, which adapt an edge port to a link port - eg, edge VoltageSink to an internal link @@ -414,9 +398,7 @@ class HierarchyBlock(_message.Message): """ @_builtins.property - def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: - ... - + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: ... @_builtins.property def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: """* Connections between internal block and link ports are represented by connected constraints. @@ -452,23 +434,80 @@ class HierarchyBlock(_message.Message): """optional default refinement subclass, only valid for library blocks""" @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - @_builtins.property - def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: - ... - - def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., param_defaults: _abc.Mapping[_builtins.str, _expr_pb2.ValueExpr] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., blocks: _abc.Iterable[Global___NamedBlockLike] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., prerefine_class: _ref_pb2.LibraryPath | None=..., prerefine_mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., generator: Global___Generator | None=..., is_abstract: _builtins.bool=..., default_refinement: _ref_pb2.LibraryPath | None=..., meta: _common_pb2.Metadata | None=..., description: _abc.Iterable[Global___StringDescriptionElement] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['default_refinement', b'default_refinement', 'generator', b'generator', 'meta', b'meta', 'prerefine_class', b'prerefine_class', 'self_class', b'self_class'] + def meta(self) -> _common_pb2.Metadata: ... + @_builtins.property + def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: ... + def __init__( + self, + *, + params: _abc.Iterable[Global___NamedValInit] | None = ..., + param_defaults: _abc.Mapping[_builtins.str, _expr_pb2.ValueExpr] | None = ..., + ports: _abc.Iterable[Global___NamedPortLike] | None = ..., + blocks: _abc.Iterable[Global___NamedBlockLike] | None = ..., + links: _abc.Iterable[Global___NamedLinkLike] | None = ..., + constraints: _abc.Iterable[Global___NamedValueExpr] | None = ..., + self_class: _ref_pb2.LibraryPath | None = ..., + superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + prerefine_class: _ref_pb2.LibraryPath | None = ..., + prerefine_mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + generator: Global___Generator | None = ..., + is_abstract: _builtins.bool = ..., + default_refinement: _ref_pb2.LibraryPath | None = ..., + meta: _common_pb2.Metadata | None = ..., + description: _abc.Iterable[Global___StringDescriptionElement] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "default_refinement", + b"default_refinement", + "generator", + b"generator", + "meta", + b"meta", + "prerefine_class", + b"prerefine_class", + "self_class", + b"self_class", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "blocks", + b"blocks", + "constraints", + b"constraints", + "default_refinement", + b"default_refinement", + "description", + b"description", + "generator", + b"generator", + "is_abstract", + b"is_abstract", + "links", + b"links", + "meta", + b"meta", + "param_defaults", + b"param_defaults", + "params", + b"params", + "ports", + b"ports", + "prerefine_class", + b"prerefine_class", + "prerefine_mixins", + b"prerefine_mixins", + "self_class", + b"self_class", + "super_superclasses", + b"super_superclasses", + "superclasses", + b"superclasses", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['blocks', b'blocks', 'constraints', b'constraints', 'default_refinement', b'default_refinement', 'description', b'description', 'generator', b'generator', 'is_abstract', b'is_abstract', 'links', b'links', 'meta', b'meta', 'param_defaults', b'param_defaults', 'params', b'params', 'ports', b'ports', 'prerefine_class', b'prerefine_class', 'prerefine_mixins', b'prerefine_mixins', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___HierarchyBlock: _TypeAlias = HierarchyBlock @_typing.final @@ -482,12 +521,11 @@ class Generator(_message.Message): These parameters are the only ones accessible to the generator. """ - def __init__(self, *, required_params: _abc.Iterable[_ref_pb2.LocalPath] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['required_params', b'required_params'] + def __init__(self, *, required_params: _abc.Iterable[_ref_pb2.LocalPath] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["required_params", b"required_params"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Generator: _TypeAlias = Generator @_typing.final @@ -497,23 +535,19 @@ class BlockLibrary(_message.Message): MIXINS_FIELD_NUMBER: _builtins.int @_builtins.property - def base(self) -> _ref_pb2.LibraryPath: - ... - + def base(self) -> _ref_pb2.LibraryPath: ... @_builtins.property - def mixins(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: - ... + def mixins(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: ... + def __init__( + self, *, base: _ref_pb2.LibraryPath | None = ..., mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["base", b"base"] - def __init__(self, *, base: _ref_pb2.LibraryPath | None=..., mixins: _abc.Iterable[_ref_pb2.LibraryPath] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['base', b'base'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["base", b"base", "mixins", b"mixins"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['base', b'base', 'mixins', b'mixins'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BlockLibrary: _TypeAlias = BlockLibrary @_typing.final @@ -524,32 +558,35 @@ class BlockLike(_message.Message): HIERARCHY_FIELD_NUMBER: _builtins.int @_builtins.property - def undefined(self) -> _common_pb2.Empty: - ... - + def undefined(self) -> _common_pb2.Empty: ... @_builtins.property - def lib_elem(self) -> Global___BlockLibrary: - ... - + def lib_elem(self) -> Global___BlockLibrary: ... @_builtins.property def hierarchy(self) -> Global___HierarchyBlock: """* not allowed w/in the library""" - def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: Global___BlockLibrary | None=..., hierarchy: Global___HierarchyBlock | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['hierarchy', b'hierarchy', 'lib_elem', b'lib_elem', 'type', b'type', 'undefined', b'undefined'] + def __init__( + self, + *, + undefined: _common_pb2.Empty | None = ..., + lib_elem: Global___BlockLibrary | None = ..., + hierarchy: Global___HierarchyBlock | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "hierarchy", b"hierarchy", "lib_elem", b"lib_elem", "type", b"type", "undefined", b"undefined" + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "hierarchy", b"hierarchy", "lib_elem", b"lib_elem", "type", b"type", "undefined", b"undefined" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['hierarchy', b'hierarchy', 'lib_elem', b'lib_elem', 'type', b'type', 'undefined', b'undefined'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal["undefined", "lib_elem", "hierarchy"] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal["type", b"type"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'hierarchy'] - _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: - ... Global___BlockLike: _TypeAlias = BlockLike @_typing.final @@ -566,25 +603,15 @@ class Link(_message.Message): DESCRIPTION_FIELD_NUMBER: _builtins.int @_builtins.property - def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: - ... - + def params(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValInit]: ... @_builtins.property - def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: - ... - + def ports(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedPortLike]: ... @_builtins.property - def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: - ... - + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: ... @_builtins.property - def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: - ... - + def constraints(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedValueExpr]: ... @_builtins.property - def self_class(self) -> _ref_pb2.LibraryPath: - ... - + def self_class(self) -> _ref_pb2.LibraryPath: ... @_builtins.property def superclasses(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: """superclasses, may be empty""" @@ -598,19 +625,46 @@ class Link(_message.Message): """TODO: this provides type hierarchy data only, inheritance semantics are currently undefined""" @_builtins.property - def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: - ... - - def __init__(self, *, params: _abc.Iterable[Global___NamedValInit] | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., self_class: _ref_pb2.LibraryPath | None=..., superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None=..., meta: _common_pb2.Metadata | None=..., description: _abc.Iterable[Global___StringDescriptionElement] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] + def description(self) -> _containers.RepeatedCompositeFieldContainer[Global___StringDescriptionElement]: ... + def __init__( + self, + *, + params: _abc.Iterable[Global___NamedValInit] | None = ..., + ports: _abc.Iterable[Global___NamedPortLike] | None = ..., + links: _abc.Iterable[Global___NamedLinkLike] | None = ..., + constraints: _abc.Iterable[Global___NamedValueExpr] | None = ..., + self_class: _ref_pb2.LibraryPath | None = ..., + superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + super_superclasses: _abc.Iterable[_ref_pb2.LibraryPath] | None = ..., + meta: _common_pb2.Metadata | None = ..., + description: _abc.Iterable[Global___StringDescriptionElement] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "self_class", b"self_class"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "constraints", + b"constraints", + "description", + b"description", + "links", + b"links", + "meta", + b"meta", + "params", + b"params", + "ports", + b"ports", + "self_class", + b"self_class", + "super_superclasses", + b"super_superclasses", + "superclasses", + b"superclasses", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'description', b'description', 'links', b'links', 'meta', b'meta', 'params', b'params', 'ports', b'ports', 'self_class', b'self_class', 'super_superclasses', b'super_superclasses', 'superclasses', b'superclasses'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Link: _TypeAlias = Link @_typing.final @@ -639,23 +693,36 @@ class LinkArray(_message.Message): """includes all exported constraints to map link ports to my ports""" @_builtins.property - def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: - ... + def links(self) -> _containers.RepeatedCompositeFieldContainer[Global___NamedLinkLike]: ... + @_builtins.property + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + self_class: _ref_pb2.LibraryPath | None = ..., + ports: _abc.Iterable[Global___NamedPortLike] | None = ..., + constraints: _abc.Iterable[Global___NamedValueExpr] | None = ..., + links: _abc.Iterable[Global___NamedLinkLike] | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "self_class", b"self_class"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "constraints", + b"constraints", + "links", + b"links", + "meta", + b"meta", + "ports", + b"ports", + "self_class", + b"self_class", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, self_class: _ref_pb2.LibraryPath | None=..., ports: _abc.Iterable[Global___NamedPortLike] | None=..., constraints: _abc.Iterable[Global___NamedValueExpr] | None=..., links: _abc.Iterable[Global___NamedLinkLike] | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'self_class', b'self_class'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['constraints', b'constraints', 'links', b'links', 'meta', b'meta', 'ports', b'ports', 'self_class', b'self_class'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___LinkArray: _TypeAlias = LinkArray @_typing.final @@ -667,34 +734,36 @@ class LinkLike(_message.Message): ARRAY_FIELD_NUMBER: _builtins.int @_builtins.property - def undefined(self) -> _common_pb2.Empty: - ... - + def undefined(self) -> _common_pb2.Empty: ... @_builtins.property - def lib_elem(self) -> _ref_pb2.LibraryPath: - ... - + def lib_elem(self) -> _ref_pb2.LibraryPath: ... @_builtins.property def link(self) -> Global___Link: """* not allowed w/in the library""" @_builtins.property - def array(self) -> Global___LinkArray: - ... + def array(self) -> Global___LinkArray: ... + def __init__( + self, + *, + undefined: _common_pb2.Empty | None = ..., + lib_elem: _ref_pb2.LibraryPath | None = ..., + link: Global___Link | None = ..., + array: Global___LinkArray | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "array", b"array", "lib_elem", b"lib_elem", "link", b"link", "type", b"type", "undefined", b"undefined" + ] - def __init__(self, *, undefined: _common_pb2.Empty | None=..., lib_elem: _ref_pb2.LibraryPath | None=..., link: Global___Link | None=..., array: Global___LinkArray | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'lib_elem', b'lib_elem', 'link', b'link', 'type', b'type', 'undefined', b'undefined'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "array", b"array", "lib_elem", b"lib_elem", "link", b"link", "type", b"type", "undefined", b"undefined" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'lib_elem', b'lib_elem', 'link', b'link', 'type', b'type', 'undefined', b'undefined'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal["undefined", "lib_elem", "link", "array"] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal["type", b"type"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['undefined', 'lib_elem', 'link', 'array'] - _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: - ... -Global___LinkLike: _TypeAlias = LinkLike \ No newline at end of file +Global___LinkLike: _TypeAlias = LinkLike diff --git a/edg/edgir/expr_pb2.py b/edg/edgir/expr_pb2.py index 110e1660f..6b0f7950b 100644 --- a/edg/edgir/expr_pb2.py +++ b/edg/edgir/expr_pb2.py @@ -1,19 +1,24 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\x9f\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xb7\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"2\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgir/expr.proto\x12\nedgir.expr\x1a\x0fedgir/ref.proto\x1a\x12edgir/common.proto\x1a\x0fedgir/lit.proto"\xb4\x01\n\tUnaryExpr\x12$\n\x02op\x18\x01 \x01(\x0e2\x18.edgir.expr.UnaryExpr.Op\x12"\n\x03val\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"]\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06NEGATE\x10\x01\x12\x07\n\x03NOT\x10\x02\x12\n\n\x06INVERT\x10\x03\x12\x07\n\x03MIN\x10\x04\x12\x07\n\x03MAX\x10\x05\x12\n\n\x06CENTER\x10\x06\x12\t\n\x05WIDTH\x10\x07"\x9f\x02\n\x0cUnarySetExpr\x12\'\n\x02op\x18\x01 \x01(\x0e2\x1b.edgir.expr.UnarySetExpr.Op\x12#\n\x04vals\x18\x04 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xc0\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03SUM\x10\x01\x12\x0c\n\x08ALL_TRUE\x10\x02\x12\x0c\n\x08ANY_TRUE\x10\x03\x12\n\n\x06ALL_EQ\x10\x04\x12\x0e\n\nALL_UNIQUE\x10\x05\x12\x0b\n\x07MAXIMUM\x10\n\x12\x0b\n\x07MINIMUM\x10\x0b\x12\x0f\n\x0bSET_EXTRACT\x10\x0c\x12\x10\n\x0cINTERSECTION\x10\r\x12\x08\n\x04HULL\x10\x0e\x12\n\n\x06NEGATE\x10\x14\x12\n\n\x06INVERT\x10\x15\x12\x0b\n\x07FLATTEN\x10\x1e"\xd4\x02\n\nBinaryExpr\x12%\n\x02op\x18\x01 \x01(\x0e2\x19.edgir.expr.BinaryExpr.Op\x12"\n\x03lhs\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"\xd6\x01\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\x0f\n\x0bSHRINK_MULT\x107\x12\x07\n\x03AND\x10\x14\x12\x06\n\x02OR\x10\x15\x12\x07\n\x03XOR\x10\x16\x12\x0b\n\x07IMPLIES\x10\x17\x12\x06\n\x02EQ\x10\x1e\x12\x07\n\x03NEQ\x10\x1f\x12\x06\n\x02GT\x10(\x12\x07\n\x03GTE\x10)\x12\x06\n\x02LT\x10*\x12\x07\n\x03LTE\x10,\x12\x07\n\x03MAX\x10-\x12\x07\n\x03MIN\x10.\x12\x10\n\x0cINTERSECTION\x103\x12\x08\n\x04HULL\x106\x12\n\n\x06WITHIN\x105\x12\t\n\x05RANGE\x10\x01"\xb7\x01\n\rBinarySetExpr\x12(\n\x02op\x18\x01 \x01(\x0e2\x1c.edgir.expr.BinarySetExpr.Op\x12$\n\x05lhset\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03rhs\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr"2\n\x02Op\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03ADD\x10\n\x12\x08\n\x04MULT\x10\x0c\x12\n\n\x06CONCAT\x10\x14"0\n\tArrayExpr\x12#\n\x04vals\x18\x01 \x03(\x0b2\x15.edgir.expr.ValueExpr"[\n\tRangeExpr\x12&\n\x07minimum\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12&\n\x07maximum\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x80\x01\n\nStructExpr\x12.\n\x04vals\x18\x01 \x03(\x0b2 .edgir.expr.StructExpr.ValsEntry\x1aB\n\tValsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr:\x028\x01"\xa3\x01\n\x0eIfThenElseExpr\x12#\n\x04cond\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03tru\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x03fal\x18\x03 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"]\n\x0bExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12$\n\x05index\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"^\n\x0eMapExtractExpr\x12(\n\tcontainer\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12"\n\x04path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPath"\x91\x01\n\rConnectedExpr\x12)\n\nblock_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12(\n\tlink_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12+\n\x08expanded\x18\x03 \x03(\x0b2\x19.edgir.expr.ConnectedExpr"\x9c\x01\n\x0cExportedExpr\x12,\n\rexterior_port\x18\x01 \x01(\x0b2\x15.edgir.expr.ValueExpr\x122\n\x13internal_block_port\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr\x12*\n\x08expanded\x18\x03 \x03(\x0b2\x18.edgir.expr.ExportedExpr"S\n\nAssignExpr\x12!\n\x03dst\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x03src\x18\x02 \x01(\x0b2\x15.edgir.expr.ValueExpr"\x97\x07\n\tValueExpr\x12&\n\x07literal\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLitH\x00\x12(\n\x06binary\x18\x02 \x01(\x0b2\x16.edgir.expr.BinaryExprH\x00\x12/\n\nbinary_set\x18\x12 \x01(\x0b2\x19.edgir.expr.BinarySetExprH\x00\x12&\n\x05unary\x18\x03 \x01(\x0b2\x15.edgir.expr.UnaryExprH\x00\x12-\n\tunary_set\x18\x04 \x01(\x0b2\x18.edgir.expr.UnarySetExprH\x00\x12&\n\x05array\x18\x06 \x01(\x0b2\x15.edgir.expr.ArrayExprH\x00\x12(\n\x06struct\x18\x07 \x01(\x0b2\x16.edgir.expr.StructExprH\x00\x12&\n\x05range\x18\x08 \x01(\x0b2\x15.edgir.expr.RangeExprH\x00\x120\n\nifThenElse\x18\n \x01(\x0b2\x1a.edgir.expr.IfThenElseExprH\x00\x12*\n\x07extract\x18\x0c \x01(\x0b2\x17.edgir.expr.ExtractExprH\x00\x121\n\x0bmap_extract\x18\x0e \x01(\x0b2\x1a.edgir.expr.MapExtractExprH\x00\x12.\n\tconnected\x18\x0f \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x12,\n\x08exported\x18\x10 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x123\n\x0econnectedArray\x18\x13 \x01(\x0b2\x19.edgir.expr.ConnectedExprH\x00\x121\n\rexportedArray\x18\x14 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12(\n\x06assign\x18\x11 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x122\n\x0eexportedTunnel\x18\x15 \x01(\x0b2\x18.edgir.expr.ExportedExprH\x00\x12.\n\x0cassignTunnel\x18\x16 \x01(\x0b2\x16.edgir.expr.AssignExprH\x00\x12#\n\x03ref\x18c \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04exprb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.expr_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.expr_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _STRUCTEXPR_VALSENTRY._options = None - _STRUCTEXPR_VALSENTRY._serialized_options = b'8\x01' + _STRUCTEXPR_VALSENTRY._serialized_options = b"8\x01" _UNARYEXPR._serialized_start = 87 _UNARYEXPR._serialized_end = 267 _UNARYEXPR_OP._serialized_start = 174 @@ -51,4 +56,4 @@ _ASSIGNEXPR._serialized_start = 2026 _ASSIGNEXPR._serialized_end = 2109 _VALUEEXPR._serialized_start = 2112 - _VALUEEXPR._serialized_end = 3031 \ No newline at end of file + _VALUEEXPR._serialized_end = 3031 diff --git a/edg/edgir/expr_pb2.pyi b/edg/edgir/expr_pb2.pyi index d08af5a6b..47241f6f9 100644 --- a/edg/edgir/expr_pb2.pyi +++ b/edg/edgir/expr_pb2.pyi @@ -25,6 +25,7 @@ in a small number number of places to help classify types into groups. I don't think we should be using sorts at all in this module, but it's defined for the sake on completeness. """ + from collections import abc as _abc from edgir import common_pb2 as _common_pb2 from edgir import lit_pb2 as _lit_pb2 @@ -36,6 +37,7 @@ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -47,62 +49,57 @@ class UnaryExpr(_message.Message): DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[UnaryExpr._Op.ValueType], _builtins.type): DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: UnaryExpr._Op.ValueType NEGATE: UnaryExpr._Op.ValueType - '* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n ' + "* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n " NOT: UnaryExpr._Op.ValueType - '* Not :: Bool -> Bool' + "* Not :: Bool -> Bool" INVERT: UnaryExpr._Op.ValueType - '* Invert :: Float -> Float\n :: Range Float -> Range Float\n ' + "* Invert :: Float -> Float\n :: Range Float -> Range Float\n " MIN: UnaryExpr._Op.ValueType - '* Min :: Range a -> a' + "* Min :: Range a -> a" MAX: UnaryExpr._Op.ValueType - '* Max :: Range a -> a' + "* Max :: Range a -> a" CENTER: UnaryExpr._Op.ValueType - '* Center :: Range a -> a' + "* Center :: Range a -> a" WIDTH: UnaryExpr._Op.ValueType - '* Width :: Range a -> a' + "* Width :: Range a -> a" - class Op(_Op, metaclass=_OpEnumTypeWrapper): - ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): ... UNDEFINED: UnaryExpr.Op.ValueType NEGATE: UnaryExpr.Op.ValueType - '* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n ' + "* Negate :: Numeric a => a -> a\n :: Numeric a => Range a -> Range a\n " NOT: UnaryExpr.Op.ValueType - '* Not :: Bool -> Bool' + "* Not :: Bool -> Bool" INVERT: UnaryExpr.Op.ValueType - '* Invert :: Float -> Float\n :: Range Float -> Range Float\n ' + "* Invert :: Float -> Float\n :: Range Float -> Range Float\n " MIN: UnaryExpr.Op.ValueType - '* Min :: Range a -> a' + "* Min :: Range a -> a" MAX: UnaryExpr.Op.ValueType - '* Max :: Range a -> a' + "* Max :: Range a -> a" CENTER: UnaryExpr.Op.ValueType - '* Center :: Range a -> a' + "* Center :: Range a -> a" WIDTH: UnaryExpr.Op.ValueType - '* Width :: Range a -> a' + "* Width :: Range a -> a" OP_FIELD_NUMBER: _builtins.int VAL_FIELD_NUMBER: _builtins.int op: Global___UnaryExpr.Op.ValueType @_builtins.property - def val(self) -> Global___ValueExpr: - ... + def val(self) -> Global___ValueExpr: ... + def __init__(self, *, op: Global___UnaryExpr.Op.ValueType = ..., val: Global___ValueExpr | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["val", b"val"] - def __init__(self, *, op: Global___UnaryExpr.Op.ValueType=..., val: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["op", b"op", "val", b"val"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['op', b'op', 'val', b'val'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___UnaryExpr: _TypeAlias = UnaryExpr @_typing.final @@ -110,86 +107,83 @@ class UnarySetExpr(_message.Message): DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[UnarySetExpr._Op.ValueType], _builtins.type): DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: UnarySetExpr._Op.ValueType SUM: UnarySetExpr._Op.ValueType - '* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n ' + "* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n " ALL_TRUE: UnarySetExpr._Op.ValueType - '* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n ' + "* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n " ANY_TRUE: UnarySetExpr._Op.ValueType - '* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n ' + "* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n " ALL_EQ: UnarySetExpr._Op.ValueType - '* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n ' + "* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n " ALL_UNIQUE: UnarySetExpr._Op.ValueType - '* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n ' + "* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n " MAXIMUM: UnarySetExpr._Op.ValueType - 'SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' + "SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " MINIMUM: UnarySetExpr._Op.ValueType - '* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' + "* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " SET_EXTRACT: UnarySetExpr._Op.ValueType - '* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n ' + "* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n " INTERSECTION: UnarySetExpr._Op.ValueType - '* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n ' + "* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n " HULL: UnarySetExpr._Op.ValueType - '* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n ' + "* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n " NEGATE: UnarySetExpr._Op.ValueType - '* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n ' + "* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n " INVERT: UnarySetExpr._Op.ValueType - '* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n ' + "* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n " FLATTEN: UnarySetExpr._Op.ValueType - 'Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n ' + "Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n " - class Op(_Op, metaclass=_OpEnumTypeWrapper): - ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): ... UNDEFINED: UnarySetExpr.Op.ValueType SUM: UnarySetExpr.Op.ValueType - '* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n ' + "* Sum :: (Numeric a) => Set a -> a\n :: (Numeric a) => Set (Range a) -> Range a\n\n Sum({}) = 0\n " ALL_TRUE: UnarySetExpr.Op.ValueType - '* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n ' + "* All :: Set Bool -> Bool\n\n All inputs are true\n All({}) = True\n " ANY_TRUE: UnarySetExpr.Op.ValueType - '* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n ' + "* Any :: Set Bool -> Bool\n\n Any of the inputs are true\n Any({}) = False\n " ALL_EQ: UnarySetExpr.Op.ValueType - '* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n ' + "* AllEq :: (Equality a) => Set a -> Bool\n\n AllEq({}) = True\n " ALL_UNIQUE: UnarySetExpr.Op.ValueType - '* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n ' + "* AllUnique :: (Equality a) => Set a -> Bool\n\n AllUnique(EmptySet) = True\n " MAXIMUM: UnarySetExpr.Op.ValueType - 'SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' + "SIZE = 6;\n\n * Maximum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " MINIMUM: UnarySetExpr.Op.ValueType - '* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n ' + "* Minimum :: (Ordered a) => Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid.\n " SET_EXTRACT: UnarySetExpr.Op.ValueType - '* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n ' + "* SetExtract :: Set a -> a\n\n This op requires that the non-emptyness of the relevant set is assured\n before being valid. In addition this assumes all values in the set are equal.\n " INTERSECTION: UnarySetExpr.Op.ValueType - '* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n ' + "* Intersection :: Set (Range a) -> Range a\n\n May produce an empty range.\n Intersection({}) = [-inf, +inf]\n " HULL: UnarySetExpr.Op.ValueType - '* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n ' + "* Hull :: Set (Range a) -> Range a\n Returns the convex hull (union with all the inner missing bits filled in)\n Hull({}) = EmptyRange\n " NEGATE: UnarySetExpr.Op.ValueType - '* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n ' + "* Negate :: Numeric a => Set a -> Set a\n :: Numeric a => Set (Range a) -> Set (Range a)\n\n Pointwise negate\n " INVERT: UnarySetExpr.Op.ValueType - '* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n ' + "* Invert :: Set Float -> Set Float\n :: Set (Range Float) -> Set (Range Float)\n\n Pointwise Invert\n " FLATTEN: UnarySetExpr.Op.ValueType - 'Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n ' + "Flatten[A] : Set[Set[A]] -> Set[A]\n Given an array of array of elements, flattens the inner array.\n Alternatively stated, concatenates all of the elements of the outer arrary\n " OP_FIELD_NUMBER: _builtins.int VALS_FIELD_NUMBER: _builtins.int op: Global___UnarySetExpr.Op.ValueType @_builtins.property - def vals(self) -> Global___ValueExpr: - ... + def vals(self) -> Global___ValueExpr: ... + def __init__( + self, *, op: Global___UnarySetExpr.Op.ValueType = ..., vals: Global___ValueExpr | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["vals", b"vals"] - def __init__(self, *, op: Global___UnarySetExpr.Op.ValueType=..., vals: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["op", b"op", "vals", b"vals"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['op', b'op', 'vals', b'vals'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___UnarySetExpr: _TypeAlias = UnarySetExpr @_typing.final @@ -197,115 +191,114 @@ class BinaryExpr(_message.Message): DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[BinaryExpr._Op.ValueType], _builtins.type): DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: BinaryExpr._Op.ValueType ADD: BinaryExpr._Op.ValueType - '* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' + "* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " MULT: BinaryExpr._Op.ValueType - 'SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' + "SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " SHRINK_MULT: BinaryExpr._Op.ValueType - 'A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n ' + "A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n " AND: BinaryExpr._Op.ValueType - 'DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n ' + "DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n " OR: BinaryExpr._Op.ValueType - '* Or :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Or :: (lhs :: Bool, rhs :: Bool) -> Bool" XOR: BinaryExpr._Op.ValueType - '* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool" IMPLIES: BinaryExpr._Op.ValueType - '* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool" EQ: BinaryExpr._Op.ValueType - 'IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n ' + "IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n " NEQ: BinaryExpr._Op.ValueType - '* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool' + "* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool" GT: BinaryExpr._Op.ValueType - '* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" GTE: BinaryExpr._Op.ValueType - '* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" LT: BinaryExpr._Op.ValueType - '* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" LTE: BinaryExpr._Op.ValueType - '* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" MAX: BinaryExpr._Op.ValueType - '* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a' + "* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a" MIN: BinaryExpr._Op.ValueType - '* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a' + "* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a" INTERSECTION: BinaryExpr._Op.ValueType - 'UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n ' + "UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n " HULL: BinaryExpr._Op.ValueType - '* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n ' + "* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n " WITHIN: BinaryExpr._Op.ValueType "INTERSECTS = 52;\n\n * Within :: (Numeric a) => (lhs :: Range a, rhs :: Range a) -> Bool\n :: (Numeric a) => (lhs :: a, rhs :: Range a) -> Bool\n\n Whether the lhs range or point is entirely within (contained by) the rhs.\n Used to be named SUBSET changed to a name that doesn't also imply a set op.\n " RANGE: BinaryExpr._Op.ValueType - '* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a' + "* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a" - class Op(_Op, metaclass=_OpEnumTypeWrapper): - ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): ... UNDEFINED: BinaryExpr.Op.ValueType ADD: BinaryExpr.Op.ValueType - '* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' + "* Add :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " MULT: BinaryExpr.Op.ValueType - 'SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n ' + "SUB = 11; // Use ADD and NEGATE instead\n\n * Mult :: Numeric a => (lhs :: a, rhs :: a) -> a\n :: Numeric a => (lhs :: a, rhs :: Range a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: a) -> Range a\n :: Numeric a => (lhs :: Range a, rhs :: Range a) -> Range a\n " SHRINK_MULT: BinaryExpr.Op.ValueType - 'A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n ' + "A shrinking multiply operation for two Range types. Not commutative.\n See the documentation for shrink_multiply in the Python core HDL code for details.\n " AND: BinaryExpr.Op.ValueType - 'DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n ' + "DIV = 13; // Use MULT and INVERT instead\n\n * And :: (lhs :: Bool, rhs :: Bool) -> Bool\n " OR: BinaryExpr.Op.ValueType - '* Or :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Or :: (lhs :: Bool, rhs :: Bool) -> Bool" XOR: BinaryExpr.Op.ValueType - '* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Xor :: (lhs :: Bool, rhs :: Bool) -> Bool" IMPLIES: BinaryExpr.Op.ValueType - '* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool' + "* Implies :: (lhs :: Bool, rhs :: Bool) -> Bool" EQ: BinaryExpr.Op.ValueType - 'IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n ' + "IFF = 24; // Use EQ instead\n\n * Eq :: (Equality a) => (lhs :: a, rhs :: a) -> Bool\n " NEQ: BinaryExpr.Op.ValueType - '* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool' + "* Neq :: (Equality a) => (lhs :: a, rhs : a) -> Bool" GT: BinaryExpr.Op.ValueType - '* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* GT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" GTE: BinaryExpr.Op.ValueType - '* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* GTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" LT: BinaryExpr.Op.ValueType - '* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* LT :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" LTE: BinaryExpr.Op.ValueType - '* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool' + "* LTE :: (Comparable a) => (lhs :: a, rhs :: a) -> Bool" MAX: BinaryExpr.Op.ValueType - '* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a' + "* Max :: (Comparable a) => (lhs :: a, rhs :: a) -> a" MIN: BinaryExpr.Op.ValueType - '* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a' + "* Min :: (Comparable a) => (lhs :: a, rhs :: a) -> a" INTERSECTION: BinaryExpr.Op.ValueType - 'UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n ' + "UNION = 50;\n\n * Intersection :: (Numeric a) => (lhs : Range a, rhs : Range a) -> Range a\n " HULL: BinaryExpr.Op.ValueType - '* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n ' + "* Hull :: (lhs :: Range a, rhs :: Range a) -> Range a\n Given two input ranges, returns the convex hull (union with\n all the inner missing bits filled in)\n " WITHIN: BinaryExpr.Op.ValueType "INTERSECTS = 52;\n\n * Within :: (Numeric a) => (lhs :: Range a, rhs :: Range a) -> Bool\n :: (Numeric a) => (lhs :: a, rhs :: Range a) -> Bool\n\n Whether the lhs range or point is entirely within (contained by) the rhs.\n Used to be named SUBSET changed to a name that doesn't also imply a set op.\n " RANGE: BinaryExpr.Op.ValueType - '* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a' + "* Range :: (Comparable a) => (lower :: a, upper :: a) -> Range a" OP_FIELD_NUMBER: _builtins.int LHS_FIELD_NUMBER: _builtins.int RHS_FIELD_NUMBER: _builtins.int op: Global___BinaryExpr.Op.ValueType @_builtins.property - def lhs(self) -> Global___ValueExpr: - ... - + def lhs(self) -> Global___ValueExpr: ... @_builtins.property - def rhs(self) -> Global___ValueExpr: - ... + def rhs(self) -> Global___ValueExpr: ... + def __init__( + self, + *, + op: Global___BinaryExpr.Op.ValueType = ..., + lhs: Global___ValueExpr | None = ..., + rhs: Global___ValueExpr | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["lhs", b"lhs", "rhs", b"rhs"] - def __init__(self, *, op: Global___BinaryExpr.Op.ValueType=..., lhs: Global___ValueExpr | None=..., rhs: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['lhs', b'lhs', 'rhs', b'rhs'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["lhs", b"lhs", "op", b"op", "rhs", b"rhs"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['lhs', b'lhs', 'op', b'op', 'rhs', b'rhs'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BinaryExpr: _TypeAlias = BinaryExpr @_typing.final @@ -313,69 +306,66 @@ class BinarySetExpr(_message.Message): DESCRIPTOR: _descriptor.Descriptor class _Op: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType class _OpEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[BinarySetExpr._Op.ValueType], _builtins.type): DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: BinarySetExpr._Op.ValueType ADD: BinarySetExpr._Op.ValueType - '* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' + "* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " MULT: BinarySetExpr._Op.ValueType - '* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' + "* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " CONCAT: BinarySetExpr._Op.ValueType - 'String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n ' + "String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n " - class Op(_Op, metaclass=_OpEnumTypeWrapper): - ... + class Op(_Op, metaclass=_OpEnumTypeWrapper): ... UNDEFINED: BinarySetExpr.Op.ValueType ADD: BinarySetExpr.Op.ValueType - '* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' + "* Add :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " MULT: BinarySetExpr.Op.ValueType - '* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n ' + "* Mult :: Numeric a => (lhset : Set a, rhs : a) -> Set a\n :: Numeric a => (lhset : Set a, rhs : Range a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : a) -> Set (Range a)\n :: Numeric a => (lhset : Set (Range a), rhs : Range a) -> Set (Range a)\n " CONCAT: BinarySetExpr.Op.ValueType - 'String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n ' + "String concatenate operator\n Concatenate : (lhs: String, rhss: Set[String]) -> Set[String] (prepend lhs to all elements)\n : (lhss: Set[String], rhs: String) -> Set[String] (append rhs to all elements)\n " OP_FIELD_NUMBER: _builtins.int LHSET_FIELD_NUMBER: _builtins.int RHS_FIELD_NUMBER: _builtins.int op: Global___BinarySetExpr.Op.ValueType @_builtins.property - def lhset(self) -> Global___ValueExpr: - ... - + def lhset(self) -> Global___ValueExpr: ... @_builtins.property - def rhs(self) -> Global___ValueExpr: - ... + def rhs(self) -> Global___ValueExpr: ... + def __init__( + self, + *, + op: Global___BinarySetExpr.Op.ValueType = ..., + lhset: Global___ValueExpr | None = ..., + rhs: Global___ValueExpr | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["lhset", b"lhset", "rhs", b"rhs"] - def __init__(self, *, op: Global___BinarySetExpr.Op.ValueType=..., lhset: Global___ValueExpr | None=..., rhs: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['lhset', b'lhset', 'rhs', b'rhs'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["lhset", b"lhset", "op", b"op", "rhs", b"rhs"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['lhset', b'lhset', 'op', b'op', 'rhs', b'rhs'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BinarySetExpr: _TypeAlias = BinarySetExpr @_typing.final class ArrayExpr(_message.Message): """* Creates an array from element exprs""" + DESCRIPTOR: _descriptor.Descriptor VALS_FIELD_NUMBER: _builtins.int @_builtins.property - def vals(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueExpr]: - ... + def vals(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueExpr]: ... + def __init__(self, *, vals: _abc.Iterable[Global___ValueExpr] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["vals", b"vals"] - def __init__(self, *, vals: _abc.Iterable[Global___ValueExpr] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ArrayExpr: _TypeAlias = ArrayExpr @_typing.final @@ -383,28 +373,25 @@ class RangeExpr(_message.Message): """* Ranges have an expression form, allowing you to constrain them without specifying them fully """ + DESCRIPTOR: _descriptor.Descriptor MINIMUM_FIELD_NUMBER: _builtins.int MAXIMUM_FIELD_NUMBER: _builtins.int @_builtins.property - def minimum(self) -> Global___ValueExpr: - ... - + def minimum(self) -> Global___ValueExpr: ... @_builtins.property - def maximum(self) -> Global___ValueExpr: - ... + def maximum(self) -> Global___ValueExpr: ... + def __init__( + self, *, minimum: Global___ValueExpr | None = ..., maximum: Global___ValueExpr | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["maximum", b"maximum", "minimum", b"minimum"] - def __init__(self, *, minimum: Global___ValueExpr | None=..., maximum: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["maximum", b"maximum", "minimum", b"minimum"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___RangeExpr: _TypeAlias = RangeExpr @_typing.final @@ -412,6 +399,7 @@ class StructExpr(_message.Message): """* Structs have an expression form, allowing you to constrain them without specifying them fully """ + DESCRIPTOR: _descriptor.Descriptor @_typing.final @@ -422,36 +410,30 @@ class StructExpr(_message.Message): key: _builtins.str @_builtins.property - def value(self) -> Global___ValueExpr: - ... + def value(self) -> Global___ValueExpr: ... + def __init__(self, *, key: _builtins.str = ..., value: Global___ValueExpr | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, key: _builtins.str=..., value: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... VALS_FIELD_NUMBER: _builtins.int @_builtins.property - def vals(self) -> _containers.MessageMap[_builtins.str, Global___ValueExpr]: - ... + def vals(self) -> _containers.MessageMap[_builtins.str, Global___ValueExpr]: ... + def __init__(self, *, vals: _abc.Mapping[_builtins.str, Global___ValueExpr] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["vals", b"vals"] - def __init__(self, *, vals: _abc.Mapping[_builtins.str, Global___ValueExpr] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['vals', b'vals'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___StructExpr: _TypeAlias = StructExpr @_typing.final class IfThenElseExpr(_message.Message): """* IfThenElse :: (cond :: Bool, tru :: a, fal :: a) -> a""" + DESCRIPTOR: _descriptor.Descriptor COND_FIELD_NUMBER: _builtins.int TRU_FIELD_NUMBER: _builtins.int @@ -459,31 +441,28 @@ class IfThenElseExpr(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def cond(self) -> Global___ValueExpr: - ... - + def cond(self) -> Global___ValueExpr: ... @_builtins.property - def tru(self) -> Global___ValueExpr: - ... - + def tru(self) -> Global___ValueExpr: ... @_builtins.property - def fal(self) -> Global___ValueExpr: - ... - + def fal(self) -> Global___ValueExpr: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + cond: Global___ValueExpr | None = ..., + tru: Global___ValueExpr | None = ..., + fal: Global___ValueExpr | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["cond", b"cond", "fal", b"fal", "meta", b"meta", "tru", b"tru"] - def __init__(self, *, cond: Global___ValueExpr | None=..., tru: Global___ValueExpr | None=..., fal: Global___ValueExpr | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['cond', b'cond', 'fal', b'fal', 'meta', b'meta', 'tru', b'tru'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["cond", b"cond", "fal", b"fal", "meta", b"meta", "tru", b"tru"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['cond', b'cond', 'fal', b'fal', 'meta', b'meta', 'tru', b'tru'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___IfThenElseExpr: _TypeAlias = IfThenElseExpr @_typing.final @@ -492,60 +471,54 @@ class ExtractExpr(_message.Message): Extract :: (container :: Struct{index :: a}, index :: string) -> a Extract :: (container :: Range a , index :: {"minimum"|"maximum"}) -> a """ + DESCRIPTOR: _descriptor.Descriptor CONTAINER_FIELD_NUMBER: _builtins.int INDEX_FIELD_NUMBER: _builtins.int @_builtins.property - def container(self) -> Global___ValueExpr: - ... - + def container(self) -> Global___ValueExpr: ... @_builtins.property - def index(self) -> Global___ValueExpr: - ... + def index(self) -> Global___ValueExpr: ... + def __init__( + self, *, container: Global___ValueExpr | None = ..., index: Global___ValueExpr | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["container", b"container", "index", b"index"] - def __init__(self, *, container: Global___ValueExpr | None=..., index: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'index', b'index'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["container", b"container", "index", b"index"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'index', b'index'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ExtractExpr: _TypeAlias = ExtractExpr @_typing.final class MapExtractExpr(_message.Message): """/** MapExtract :: (container :: Array a , path :: LocalRef{from :: a, to :: b}) -> Array b - MapExtract :: (container :: Set a , path :: LocalRef{from :: a, to :: b}) -> Set b + MapExtract :: (container :: Set a , path :: LocalRef{from :: a, to :: b}) -> Set b - This expression can map over a container and return a container of - the relevant subexpression determined by a path. */ + This expression can map over a container and return a container of + the relevant subexpression determined by a path. */ """ + DESCRIPTOR: _descriptor.Descriptor CONTAINER_FIELD_NUMBER: _builtins.int PATH_FIELD_NUMBER: _builtins.int @_builtins.property - def container(self) -> Global___ValueExpr: - ... - + def container(self) -> Global___ValueExpr: ... @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... + def path(self) -> _ref_pb2.LocalPath: ... + def __init__( + self, *, container: Global___ValueExpr | None = ..., path: _ref_pb2.LocalPath | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["container", b"container", "path", b"path"] - def __init__(self, *, container: Global___ValueExpr | None=..., path: _ref_pb2.LocalPath | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'path', b'path'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["container", b"container", "path", b"path"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['container', b'container', 'path', b'path'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___MapExtractExpr: _TypeAlias = MapExtractExpr @_typing.final @@ -554,19 +527,16 @@ class ConnectedExpr(_message.Message): This tells us whether the specified ports are connected """ + DESCRIPTOR: _descriptor.Descriptor BLOCK_PORT_FIELD_NUMBER: _builtins.int LINK_PORT_FIELD_NUMBER: _builtins.int EXPANDED_FIELD_NUMBER: _builtins.int @_builtins.property - def block_port(self) -> Global___ValueExpr: - ... - + def block_port(self) -> Global___ValueExpr: ... @_builtins.property - def link_port(self) -> Global___ValueExpr: - ... - + def link_port(self) -> Global___ValueExpr: ... @_builtins.property def expanded(self) -> _containers.RepeatedCompositeFieldContainer[Global___ConnectedExpr]: """During compilation, ConnectedExpr may be expanded (allocate replaced with concrete path indices, @@ -575,16 +545,22 @@ class ConnectedExpr(_message.Message): while the original (parent) is not modified. """ - def __init__(self, *, block_port: Global___ValueExpr | None=..., link_port: Global___ValueExpr | None=..., expanded: _abc.Iterable[Global___ConnectedExpr] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['block_port', b'block_port', 'link_port', b'link_port'] + def __init__( + self, + *, + block_port: Global___ValueExpr | None = ..., + link_port: Global___ValueExpr | None = ..., + expanded: _abc.Iterable[Global___ConnectedExpr] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["block_port", b"block_port", "link_port", b"link_port"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "block_port", b"block_port", "expanded", b"expanded", "link_port", b"link_port" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['block_port', b'block_port', 'expanded', b'expanded', 'link_port', b'link_port'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ConnectedExpr: _TypeAlias = ConnectedExpr @_typing.final @@ -593,33 +569,38 @@ class ExportedExpr(_message.Message): This tells us whether the specified port is exported to the hierarchy block exterior port """ + DESCRIPTOR: _descriptor.Descriptor EXTERIOR_PORT_FIELD_NUMBER: _builtins.int INTERNAL_BLOCK_PORT_FIELD_NUMBER: _builtins.int EXPANDED_FIELD_NUMBER: _builtins.int @_builtins.property - def exterior_port(self) -> Global___ValueExpr: - ... - + def exterior_port(self) -> Global___ValueExpr: ... @_builtins.property - def internal_block_port(self) -> Global___ValueExpr: - ... - + def internal_block_port(self) -> Global___ValueExpr: ... @_builtins.property def expanded(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExportedExpr]: """see comment in ConnectedExpr""" - def __init__(self, *, exterior_port: Global___ValueExpr | None=..., internal_block_port: Global___ValueExpr | None=..., expanded: _abc.Iterable[Global___ExportedExpr] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['exterior_port', b'exterior_port', 'internal_block_port', b'internal_block_port'] + def __init__( + self, + *, + exterior_port: Global___ValueExpr | None = ..., + internal_block_port: Global___ValueExpr | None = ..., + expanded: _abc.Iterable[Global___ExportedExpr] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "exterior_port", b"exterior_port", "internal_block_port", b"internal_block_port" + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "expanded", b"expanded", "exterior_port", b"exterior_port", "internal_block_port", b"internal_block_port" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['expanded', b'expanded', 'exterior_port', b'exterior_port', 'internal_block_port', b'internal_block_port'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ExportedExpr: _TypeAlias = ExportedExpr @_typing.final @@ -627,28 +608,23 @@ class AssignExpr(_message.Message): """Variable assignment (from an expression value), which allows dataflow to be directioned and explicit. Assignments should not be cyclic. """ + DESCRIPTOR: _descriptor.Descriptor DST_FIELD_NUMBER: _builtins.int SRC_FIELD_NUMBER: _builtins.int @_builtins.property - def dst(self) -> _ref_pb2.LocalPath: - ... - + def dst(self) -> _ref_pb2.LocalPath: ... @_builtins.property - def src(self) -> Global___ValueExpr: - ... + def src(self) -> Global___ValueExpr: ... + def __init__(self, *, dst: _ref_pb2.LocalPath | None = ..., src: Global___ValueExpr | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["dst", b"dst", "src", b"src"] - def __init__(self, *, dst: _ref_pb2.LocalPath | None=..., src: Global___ValueExpr | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['dst', b'dst', 'src', b'src'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["dst", b"dst", "src", b"src"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['dst', b'dst', 'src', b'src'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___AssignExpr: _TypeAlias = AssignExpr @_typing.final @@ -676,49 +652,29 @@ class ValueExpr(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def literal(self) -> _lit_pb2.ValueLit: - ... - + def literal(self) -> _lit_pb2.ValueLit: ... @_builtins.property - def binary(self) -> Global___BinaryExpr: - ... - + def binary(self) -> Global___BinaryExpr: ... @_builtins.property - def binary_set(self) -> Global___BinarySetExpr: - ... - + def binary_set(self) -> Global___BinarySetExpr: ... @_builtins.property - def unary(self) -> Global___UnaryExpr: - ... - + def unary(self) -> Global___UnaryExpr: ... @_builtins.property - def unary_set(self) -> Global___UnarySetExpr: - ... - + def unary_set(self) -> Global___UnarySetExpr: ... @_builtins.property def array(self) -> Global___ArrayExpr: """SetExpr set = 5;""" @_builtins.property - def struct(self) -> Global___StructExpr: - ... - + def struct(self) -> Global___StructExpr: ... @_builtins.property - def range(self) -> Global___RangeExpr: - ... - + def range(self) -> Global___RangeExpr: ... @_builtins.property - def ifThenElse(self) -> Global___IfThenElseExpr: - ... - + def ifThenElse(self) -> Global___IfThenElseExpr: ... @_builtins.property - def extract(self) -> Global___ExtractExpr: - ... - + def extract(self) -> Global___ExtractExpr: ... @_builtins.property - def map_extract(self) -> Global___MapExtractExpr: - ... - + def map_extract(self) -> Global___MapExtractExpr: ... @_builtins.property def connected(self) -> Global___ConnectedExpr: """single port to single port connect""" @@ -736,9 +692,7 @@ class ValueExpr(_message.Message): """array to array export, where allocate means allocate a subarray""" @_builtins.property - def assign(self) -> Global___AssignExpr: - ... - + def assign(self) -> Global___AssignExpr: ... @_builtins.property def exportedTunnel(self) -> Global___ExportedExpr: """These Exprs support cross-hierarchy operations @@ -760,26 +714,148 @@ class ValueExpr(_message.Message): """ @_builtins.property - def ref(self) -> _ref_pb2.LocalPath: - ... - - @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, literal: _lit_pb2.ValueLit | None=..., binary: Global___BinaryExpr | None=..., binary_set: Global___BinarySetExpr | None=..., unary: Global___UnaryExpr | None=..., unary_set: Global___UnarySetExpr | None=..., array: Global___ArrayExpr | None=..., struct: Global___StructExpr | None=..., range: Global___RangeExpr | None=..., ifThenElse: Global___IfThenElseExpr | None=..., extract: Global___ExtractExpr | None=..., map_extract: Global___MapExtractExpr | None=..., connected: Global___ConnectedExpr | None=..., exported: Global___ExportedExpr | None=..., connectedArray: Global___ConnectedExpr | None=..., exportedArray: Global___ExportedExpr | None=..., assign: Global___AssignExpr | None=..., exportedTunnel: Global___ExportedExpr | None=..., assignTunnel: Global___AssignExpr | None=..., ref: _ref_pb2.LocalPath | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'assign', b'assign', 'assignTunnel', b'assignTunnel', 'binary', b'binary', 'binary_set', b'binary_set', 'connected', b'connected', 'connectedArray', b'connectedArray', 'exported', b'exported', 'exportedArray', b'exportedArray', 'exportedTunnel', b'exportedTunnel', 'expr', b'expr', 'extract', b'extract', 'ifThenElse', b'ifThenElse', 'literal', b'literal', 'map_extract', b'map_extract', 'meta', b'meta', 'range', b'range', 'ref', b'ref', 'struct', b'struct', 'unary', b'unary', 'unary_set', b'unary_set'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'assign', b'assign', 'assignTunnel', b'assignTunnel', 'binary', b'binary', 'binary_set', b'binary_set', 'connected', b'connected', 'connectedArray', b'connectedArray', 'exported', b'exported', 'exportedArray', b'exportedArray', 'exportedTunnel', b'exportedTunnel', 'expr', b'expr', 'extract', b'extract', 'ifThenElse', b'ifThenElse', 'literal', b'literal', 'map_extract', b'map_extract', 'meta', b'meta', 'range', b'range', 'ref', b'ref', 'struct', b'struct', 'unary', b'unary', 'unary_set', b'unary_set'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_expr: _TypeAlias = _typing.Literal['literal', 'binary', 'binary_set', 'unary', 'unary_set', 'array', 'struct', 'range', 'ifThenElse', 'extract', 'map_extract', 'connected', 'exported', 'connectedArray', 'exportedArray', 'assign', 'exportedTunnel', 'assignTunnel', 'ref'] - _WhichOneofArgType_expr: _TypeAlias = _typing.Literal['expr', b'expr'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_expr) -> _WhichOneofReturnType_expr | None: - ... -Global___ValueExpr: _TypeAlias = ValueExpr \ No newline at end of file + def ref(self) -> _ref_pb2.LocalPath: ... + @_builtins.property + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + literal: _lit_pb2.ValueLit | None = ..., + binary: Global___BinaryExpr | None = ..., + binary_set: Global___BinarySetExpr | None = ..., + unary: Global___UnaryExpr | None = ..., + unary_set: Global___UnarySetExpr | None = ..., + array: Global___ArrayExpr | None = ..., + struct: Global___StructExpr | None = ..., + range: Global___RangeExpr | None = ..., + ifThenElse: Global___IfThenElseExpr | None = ..., + extract: Global___ExtractExpr | None = ..., + map_extract: Global___MapExtractExpr | None = ..., + connected: Global___ConnectedExpr | None = ..., + exported: Global___ExportedExpr | None = ..., + connectedArray: Global___ConnectedExpr | None = ..., + exportedArray: Global___ExportedExpr | None = ..., + assign: Global___AssignExpr | None = ..., + exportedTunnel: Global___ExportedExpr | None = ..., + assignTunnel: Global___AssignExpr | None = ..., + ref: _ref_pb2.LocalPath | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "assign", + b"assign", + "assignTunnel", + b"assignTunnel", + "binary", + b"binary", + "binary_set", + b"binary_set", + "connected", + b"connected", + "connectedArray", + b"connectedArray", + "exported", + b"exported", + "exportedArray", + b"exportedArray", + "exportedTunnel", + b"exportedTunnel", + "expr", + b"expr", + "extract", + b"extract", + "ifThenElse", + b"ifThenElse", + "literal", + b"literal", + "map_extract", + b"map_extract", + "meta", + b"meta", + "range", + b"range", + "ref", + b"ref", + "struct", + b"struct", + "unary", + b"unary", + "unary_set", + b"unary_set", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "assign", + b"assign", + "assignTunnel", + b"assignTunnel", + "binary", + b"binary", + "binary_set", + b"binary_set", + "connected", + b"connected", + "connectedArray", + b"connectedArray", + "exported", + b"exported", + "exportedArray", + b"exportedArray", + "exportedTunnel", + b"exportedTunnel", + "expr", + b"expr", + "extract", + b"extract", + "ifThenElse", + b"ifThenElse", + "literal", + b"literal", + "map_extract", + b"map_extract", + "meta", + b"meta", + "range", + b"range", + "ref", + b"ref", + "struct", + b"struct", + "unary", + b"unary", + "unary_set", + b"unary_set", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_expr: _TypeAlias = _typing.Literal[ + "literal", + "binary", + "binary_set", + "unary", + "unary_set", + "array", + "struct", + "range", + "ifThenElse", + "extract", + "map_extract", + "connected", + "exported", + "connectedArray", + "exportedArray", + "assign", + "exportedTunnel", + "assignTunnel", + "ref", + ] + _WhichOneofArgType_expr: _TypeAlias = _typing.Literal["expr", b"expr"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_expr) -> _WhichOneofReturnType_expr | None: ... + +Global___ValueExpr: _TypeAlias = ValueExpr diff --git a/edg/edgir/impl_pb2.py b/edg/edgir/impl_pb2.py index 47e51e529..2392b5cbe 100644 --- a/edg/edgir/impl_pb2.py +++ b/edg/edgir/impl_pb2.py @@ -1,13 +1,18 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/impl.proto\x12\nedgir.impl\x1a\x12edgir/common.proto"1\n\tBlockImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08PortImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08LinkImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"7\n\x0fEnvironmentImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgir/impl.proto\x12\nedgir.impl\x1a\x12edgir/common.proto"1\n\tBlockImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08PortImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"0\n\x08LinkImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata"7\n\x0fEnvironmentImpl\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.impl_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.impl_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BLOCKIMPL._serialized_start = 52 @@ -17,4 +22,4 @@ _LINKIMPL._serialized_start = 153 _LINKIMPL._serialized_end = 201 _ENVIRONMENTIMPL._serialized_start = 203 - _ENVIRONMENTIMPL._serialized_end = 258 \ No newline at end of file + _ENVIRONMENTIMPL._serialized_end = 258 diff --git a/edg/edgir/impl_pb2.pyi b/edg/edgir/impl_pb2.pyi index a38a4ffdd..3169fd28a 100644 --- a/edg/edgir/impl_pb2.pyi +++ b/edg/edgir/impl_pb2.pyi @@ -10,12 +10,14 @@ stored. Fuck if I know what that will look like, so for now you just get a metadata block. """ + from edgir import common_pb2 as _common_pb2 from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -28,19 +30,15 @@ class BlockImpl(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BlockImpl: _TypeAlias = BlockImpl @_typing.final @@ -49,19 +47,15 @@ class PortImpl(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___PortImpl: _TypeAlias = PortImpl @_typing.final @@ -70,19 +64,15 @@ class LinkImpl(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___LinkImpl: _TypeAlias = LinkImpl @_typing.final @@ -91,17 +81,13 @@ class EnvironmentImpl(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... -Global___EnvironmentImpl: _TypeAlias = EnvironmentImpl \ No newline at end of file +Global___EnvironmentImpl: _TypeAlias = EnvironmentImpl diff --git a/edg/edgir/init_pb2.py b/edg/edgir/init_pb2.py index 92571bac8..6b6964627 100644 --- a/edg/edgir/init_pb2.py +++ b/edg/edgir/init_pb2.py @@ -1,14 +1,19 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/init.proto\x12\nedgir.init\x1a\x12edgir/common.proto"\xeb\x02\n\x07ValInit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07integer\x18\x02 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07boolean\x18\x03 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12#\n\x04text\x18\x04 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12"\n\x03set\x18\x08 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12%\n\x06struct\x18\t \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.init.ValInitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x05\n\x03valb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgir/init.proto\x12\nedgir.init\x1a\x12edgir/common.proto"\xeb\x02\n\x07ValInit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07integer\x18\x02 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12&\n\x07boolean\x18\x03 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12#\n\x04text\x18\x04 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12"\n\x03set\x18\x08 \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12%\n\x06struct\x18\t \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.common.EmptyH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.init.ValInitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x05\n\x03valb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.init_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.init_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _VALINIT._serialized_start = 53 - _VALINIT._serialized_end = 416 \ No newline at end of file + _VALINIT._serialized_end = 416 diff --git a/edg/edgir/init_pb2.pyi b/edg/edgir/init_pb2.pyi index 534446937..dce1504c7 100644 --- a/edg/edgir/init_pb2.pyi +++ b/edg/edgir/init_pb2.pyi @@ -11,12 +11,14 @@ creating a value. FIXME :: Does this make more sense in another file? """ + from edgir import common_pb2 as _common_pb2 from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -30,6 +32,7 @@ class ValInit(_message.Message): I think the frontend should have more type specific wrappers around this since the data required for each type can be different. """ + DESCRIPTOR: _descriptor.Descriptor FLOATING_FIELD_NUMBER: _builtins.int INTEGER_FIELD_NUMBER: _builtins.int @@ -42,54 +45,89 @@ class ValInit(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def floating(self) -> _common_pb2.Empty: - ... - + def floating(self) -> _common_pb2.Empty: ... @_builtins.property - def integer(self) -> _common_pb2.Empty: - ... - + def integer(self) -> _common_pb2.Empty: ... @_builtins.property - def boolean(self) -> _common_pb2.Empty: - ... - + def boolean(self) -> _common_pb2.Empty: ... @_builtins.property - def text(self) -> _common_pb2.Empty: - ... - + def text(self) -> _common_pb2.Empty: ... @_builtins.property - def set(self) -> _common_pb2.Empty: - ... - + def set(self) -> _common_pb2.Empty: ... @_builtins.property - def struct(self) -> _common_pb2.Empty: - ... - + def struct(self) -> _common_pb2.Empty: ... @_builtins.property - def range(self) -> _common_pb2.Empty: - ... - + def range(self) -> _common_pb2.Empty: ... @_builtins.property - def array(self) -> Global___ValInit: - ... - + def array(self) -> Global___ValInit: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, floating: _common_pb2.Empty | None=..., integer: _common_pb2.Empty | None=..., boolean: _common_pb2.Empty | None=..., text: _common_pb2.Empty | None=..., set: _common_pb2.Empty | None=..., struct: _common_pb2.Empty | None=..., range: _common_pb2.Empty | None=..., array: Global___ValInit | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'set', b'set', 'struct', b'struct', 'text', b'text', 'val', b'val'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'set', b'set', 'struct', b'struct', 'text', b'text', 'val', b'val'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_val: _TypeAlias = _typing.Literal['floating', 'integer', 'boolean', 'text', 'set', 'struct', 'range', 'array'] - _WhichOneofArgType_val: _TypeAlias = _typing.Literal['val', b'val'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_val) -> _WhichOneofReturnType_val | None: - ... -Global___ValInit: _TypeAlias = ValInit \ No newline at end of file + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + floating: _common_pb2.Empty | None = ..., + integer: _common_pb2.Empty | None = ..., + boolean: _common_pb2.Empty | None = ..., + text: _common_pb2.Empty | None = ..., + set: _common_pb2.Empty | None = ..., + struct: _common_pb2.Empty | None = ..., + range: _common_pb2.Empty | None = ..., + array: Global___ValInit | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "boolean", + b"boolean", + "floating", + b"floating", + "integer", + b"integer", + "meta", + b"meta", + "range", + b"range", + "set", + b"set", + "struct", + b"struct", + "text", + b"text", + "val", + b"val", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "boolean", + b"boolean", + "floating", + b"floating", + "integer", + b"integer", + "meta", + b"meta", + "range", + b"range", + "set", + b"set", + "struct", + b"struct", + "text", + b"text", + "val", + b"val", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_val: _TypeAlias = _typing.Literal[ + "floating", "integer", "boolean", "text", "set", "struct", "range", "array" + ] + _WhichOneofArgType_val: _TypeAlias = _typing.Literal["val", b"val"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_val) -> _WhichOneofReturnType_val | None: ... + +Global___ValInit: _TypeAlias = ValInit diff --git a/edg/edgir/lit_pb2.py b/edg/edgir/lit_pb2.py index 96d84789c..5fa7a1533 100644 --- a/edg/edgir/lit_pb2.py +++ b/edg/edgir/lit_pb2.py @@ -1,17 +1,22 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fedgir/lit.proto\x12\tedgir.lit\x1a\x12edgir/common.proto"\x17\n\x08FloatLit\x12\x0b\n\x03val\x18\x01 \x01(\x01"\x15\n\x06IntLit\x12\x0b\n\x03val\x18\x01 \x01(\x12"\x16\n\x07BoolLit\x12\x0b\n\x03val\x18\x01 \x01(\x08"\x16\n\x07TextLit\x12\x0b\n\x03val\x18\x01 \x01(\t"V\n\x08RangeLit\x12$\n\x07minimum\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLit\x12$\n\x07maximum\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"\x84\x01\n\tStructLit\x122\n\x07members\x18\x01 \x03(\x0b2!.edgir.lit.StructLit.MembersEntry\x1aC\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit:\x028\x01"-\n\x08ArrayLit\x12!\n\x04elts\x18\x01 \x03(\x0b2\x13.edgir.lit.ValueLit"\xc6\x02\n\x08ValueLit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.lit.FloatLitH\x00\x12$\n\x07integer\x18\x02 \x01(\x0b2\x11.edgir.lit.IntLitH\x00\x12%\n\x07boolean\x18\x03 \x01(\x0b2\x12.edgir.lit.BoolLitH\x00\x12"\n\x04text\x18\x04 \x01(\x0b2\x12.edgir.lit.TextLitH\x00\x12&\n\x06struct\x18\t \x01(\x0b2\x14.edgir.lit.StructLitH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.lit.RangeLitH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.lit.ArrayLitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04typeb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x0fedgir/lit.proto\x12\tedgir.lit\x1a\x12edgir/common.proto"\x17\n\x08FloatLit\x12\x0b\n\x03val\x18\x01 \x01(\x01"\x15\n\x06IntLit\x12\x0b\n\x03val\x18\x01 \x01(\x12"\x16\n\x07BoolLit\x12\x0b\n\x03val\x18\x01 \x01(\x08"\x16\n\x07TextLit\x12\x0b\n\x03val\x18\x01 \x01(\t"V\n\x08RangeLit\x12$\n\x07minimum\x18\x01 \x01(\x0b2\x13.edgir.lit.ValueLit\x12$\n\x07maximum\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"\x84\x01\n\tStructLit\x122\n\x07members\x18\x01 \x03(\x0b2!.edgir.lit.StructLit.MembersEntry\x1aC\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit:\x028\x01"-\n\x08ArrayLit\x12!\n\x04elts\x18\x01 \x03(\x0b2\x13.edgir.lit.ValueLit"\xc6\x02\n\x08ValueLit\x12\'\n\x08floating\x18\x01 \x01(\x0b2\x13.edgir.lit.FloatLitH\x00\x12$\n\x07integer\x18\x02 \x01(\x0b2\x11.edgir.lit.IntLitH\x00\x12%\n\x07boolean\x18\x03 \x01(\x0b2\x12.edgir.lit.BoolLitH\x00\x12"\n\x04text\x18\x04 \x01(\x0b2\x12.edgir.lit.TextLitH\x00\x12&\n\x06struct\x18\t \x01(\x0b2\x14.edgir.lit.StructLitH\x00\x12$\n\x05range\x18\n \x01(\x0b2\x13.edgir.lit.RangeLitH\x00\x12$\n\x05array\x18\x0b \x01(\x0b2\x13.edgir.lit.ArrayLitH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x06\n\x04typeb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.lit_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.lit_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _STRUCTLIT_MEMBERSENTRY._options = None - _STRUCTLIT_MEMBERSENTRY._serialized_options = b'8\x01' + _STRUCTLIT_MEMBERSENTRY._serialized_options = b"8\x01" _FLOATLIT._serialized_start = 50 _FLOATLIT._serialized_end = 73 _INTLIT._serialized_start = 75 @@ -29,4 +34,4 @@ _ARRAYLIT._serialized_start = 369 _ARRAYLIT._serialized_end = 414 _VALUELIT._serialized_start = 417 - _VALUELIT._serialized_end = 743 \ No newline at end of file + _VALUELIT._serialized_end = 743 diff --git a/edg/edgir/lit_pb2.pyi b/edg/edgir/lit_pb2.pyi index 7d821ab3c..1ed644162 100644 --- a/edg/edgir/lit_pb2.pyi +++ b/edg/edgir/lit_pb2.pyi @@ -7,6 +7,7 @@ Package : edg.lit Literals for assorted priitive types, i.e fixed constant values. """ + from collections import abc as _abc from edgir import common_pb2 as _common_pb2 from google.protobuf import descriptor as _descriptor @@ -15,6 +16,7 @@ from google.protobuf.internal import containers as _containers import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -26,16 +28,16 @@ class FloatLit(_message.Message): """* The core expression primitives we start with are the value literals that we can use """ + DESCRIPTOR: _descriptor.Descriptor VAL_FIELD_NUMBER: _builtins.int val: _builtins.float - def __init__(self, *, val: _builtins.float=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + def __init__(self, *, val: _builtins.float = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["val", b"val"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___FloatLit: _TypeAlias = FloatLit @_typing.final @@ -44,12 +46,11 @@ class IntLit(_message.Message): VAL_FIELD_NUMBER: _builtins.int val: _builtins.int - def __init__(self, *, val: _builtins.int=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + def __init__(self, *, val: _builtins.int = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["val", b"val"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___IntLit: _TypeAlias = IntLit @_typing.final @@ -58,12 +59,11 @@ class BoolLit(_message.Message): VAL_FIELD_NUMBER: _builtins.int val: _builtins.bool - def __init__(self, *, val: _builtins.bool=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + def __init__(self, *, val: _builtins.bool = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["val", b"val"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BoolLit: _TypeAlias = BoolLit @_typing.final @@ -72,12 +72,11 @@ class TextLit(_message.Message): VAL_FIELD_NUMBER: _builtins.int val: _builtins.str - def __init__(self, *, val: _builtins.str=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['val', b'val'] + def __init__(self, *, val: _builtins.str = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["val", b"val"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___TextLit: _TypeAlias = TextLit @_typing.final @@ -87,23 +86,17 @@ class RangeLit(_message.Message): MAXIMUM_FIELD_NUMBER: _builtins.int @_builtins.property - def minimum(self) -> Global___ValueLit: - ... - + def minimum(self) -> Global___ValueLit: ... @_builtins.property - def maximum(self) -> Global___ValueLit: - ... + def maximum(self) -> Global___ValueLit: ... + def __init__(self, *, minimum: Global___ValueLit | None = ..., maximum: Global___ValueLit | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["maximum", b"maximum", "minimum", b"minimum"] - def __init__(self, *, minimum: Global___ValueLit | None=..., maximum: Global___ValueLit | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["maximum", b"maximum", "minimum", b"minimum"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['maximum', b'maximum', 'minimum', b'minimum'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___RangeLit: _TypeAlias = RangeLit @_typing.final @@ -118,31 +111,24 @@ class StructLit(_message.Message): key: _builtins.str @_builtins.property - def value(self) -> Global___ValueLit: - ... + def value(self) -> Global___ValueLit: ... + def __init__(self, *, key: _builtins.str = ..., value: Global___ValueLit | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, key: _builtins.str=..., value: Global___ValueLit | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... MEMBERS_FIELD_NUMBER: _builtins.int @_builtins.property - def members(self) -> _containers.MessageMap[_builtins.str, Global___ValueLit]: - ... + def members(self) -> _containers.MessageMap[_builtins.str, Global___ValueLit]: ... + def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___ValueLit] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["members", b"members"] - def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___ValueLit] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['members', b'members'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___StructLit: _TypeAlias = StructLit @_typing.final @@ -151,15 +137,12 @@ class ArrayLit(_message.Message): ELTS_FIELD_NUMBER: _builtins.int @_builtins.property - def elts(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueLit]: - ... + def elts(self) -> _containers.RepeatedCompositeFieldContainer[Global___ValueLit]: ... + def __init__(self, *, elts: _abc.Iterable[Global___ValueLit] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["elts", b"elts"] - def __init__(self, *, elts: _abc.Iterable[Global___ValueLit] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['elts', b'elts'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ArrayLit: _TypeAlias = ArrayLit @_typing.final @@ -175,50 +158,82 @@ class ValueLit(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def floating(self) -> Global___FloatLit: - ... - + def floating(self) -> Global___FloatLit: ... @_builtins.property - def integer(self) -> Global___IntLit: - ... - + def integer(self) -> Global___IntLit: ... @_builtins.property - def boolean(self) -> Global___BoolLit: - ... - + def boolean(self) -> Global___BoolLit: ... @_builtins.property - def text(self) -> Global___TextLit: - ... - + def text(self) -> Global___TextLit: ... @_builtins.property - def struct(self) -> Global___StructLit: - ... - + def struct(self) -> Global___StructLit: ... @_builtins.property - def range(self) -> Global___RangeLit: - ... - + def range(self) -> Global___RangeLit: ... @_builtins.property - def array(self) -> Global___ArrayLit: - ... - + def array(self) -> Global___ArrayLit: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, floating: Global___FloatLit | None=..., integer: Global___IntLit | None=..., boolean: Global___BoolLit | None=..., text: Global___TextLit | None=..., struct: Global___StructLit | None=..., range: Global___RangeLit | None=..., array: Global___ArrayLit | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'struct', b'struct', 'text', b'text', 'type', b'type'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['array', b'array', 'boolean', b'boolean', 'floating', b'floating', 'integer', b'integer', 'meta', b'meta', 'range', b'range', 'struct', b'struct', 'text', b'text', 'type', b'type'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['floating', 'integer', 'boolean', 'text', 'struct', 'range', 'array'] - _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: - ... -Global___ValueLit: _TypeAlias = ValueLit \ No newline at end of file + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + floating: Global___FloatLit | None = ..., + integer: Global___IntLit | None = ..., + boolean: Global___BoolLit | None = ..., + text: Global___TextLit | None = ..., + struct: Global___StructLit | None = ..., + range: Global___RangeLit | None = ..., + array: Global___ArrayLit | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "boolean", + b"boolean", + "floating", + b"floating", + "integer", + b"integer", + "meta", + b"meta", + "range", + b"range", + "struct", + b"struct", + "text", + b"text", + "type", + b"type", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "array", + b"array", + "boolean", + b"boolean", + "floating", + b"floating", + "integer", + b"integer", + "meta", + b"meta", + "range", + b"range", + "struct", + b"struct", + "text", + b"text", + "type", + b"type", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal[ + "floating", "integer", "boolean", "text", "struct", "range", "array" + ] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal["type", b"type"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: ... + +Global___ValueLit: _TypeAlias = ValueLit diff --git a/edg/edgir/name_pb2.py b/edg/edgir/name_pb2.py index 1b64ac05f..5d32702a7 100644 --- a/edg/edgir/name_pb2.py +++ b/edg/edgir/name_pb2.py @@ -1,16 +1,21 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgir/name.proto\x12\nedgir.name\x1a\x12edgir/common.proto"O\n\tNamespace\x12\x0f\n\x05basic\x18\x01 \x01(\tH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x0b\n\tnamespace"A\n\x0bLibraryName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgir/name.proto\x12\nedgir.name\x1a\x12edgir/common.proto"O\n\tNamespace\x12\x0f\n\x05basic\x18\x01 \x01(\tH\x00\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.MetadataB\x0b\n\tnamespace"A\n\x0bLibraryName\x12\x0c\n\x04name\x18\x02 \x01(\t\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadatab\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.name_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.name_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _NAMESPACE._serialized_start = 52 _NAMESPACE._serialized_end = 131 _LIBRARYNAME._serialized_start = 133 - _LIBRARYNAME._serialized_end = 198 \ No newline at end of file + _LIBRARYNAME._serialized_end = 198 diff --git a/edg/edgir/name_pb2.pyi b/edg/edgir/name_pb2.pyi index 50564b2fe..5b30f799c 100644 --- a/edg/edgir/name_pb2.pyi +++ b/edg/edgir/name_pb2.pyi @@ -10,12 +10,14 @@ There are three major classes of name in edg: - LocalNames, which help organize elements relative to each other. - LibraryNames, which we use to identify specific libraries. """ + from edgir import common_pb2 as _common_pb2 from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -29,6 +31,7 @@ class Namespace(_message.Message): over items in the library. It lets us group elements in categories that are orthogonal to the usual Block, Port, Link, ontology. """ + DESCRIPTOR: _descriptor.Descriptor BASIC_FIELD_NUMBER: _builtins.int META_FIELD_NUMBER: _builtins.int @@ -36,24 +39,19 @@ class Namespace(_message.Message): "* Basic namespaces are a way to organize library elements into a\n useful hirearchy (e.g. 'Core.*' for the most primitive definitions\n that we define, or 'NXP.*' for NXP made components.)\n\n Basic namespaces should have the following properties:\n\n - First char is a capital letter\n - All other chars must be letters, numbers, '-', '<', '>'\n - CamelCase is preffered, don't use any symbols in the name\n if possible.\n " @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, basic: _builtins.str = ..., meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["basic", b"basic", "meta", b"meta", "namespace", b"namespace"] - def __init__(self, *, basic: _builtins.str=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['basic', b'basic', 'meta', b'meta', 'namespace', b'namespace'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["basic", b"basic", "meta", b"meta", "namespace", b"namespace"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['basic', b'basic', 'meta', b'meta', 'namespace', b'namespace'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_namespace: _TypeAlias = _typing.Literal["basic"] + _WhichOneofArgType_namespace: _TypeAlias = _typing.Literal["namespace", b"namespace"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_namespace: _TypeAlias = _typing.Literal['basic'] - _WhichOneofArgType_namespace: _TypeAlias = _typing.Literal['namespace', b'namespace'] + def WhichOneof(self, oneof_group: _WhichOneofArgType_namespace) -> _WhichOneofReturnType_namespace | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_namespace) -> _WhichOneofReturnType_namespace | None: - ... Global___Namespace: _TypeAlias = Namespace @_typing.final @@ -63,6 +61,7 @@ class LibraryName(_message.Message): This can be the initial element in a path or reference. """ + DESCRIPTOR: _descriptor.Descriptor NAME_FIELD_NUMBER: _builtins.int META_FIELD_NUMBER: _builtins.int @@ -70,17 +69,13 @@ class LibraryName(_message.Message): "* Since libraries allow for inheritance, we will often want to say\n this element, defined in *this* particular library.\n\n In those cases we want to be able to specify the relevant library\n by its identifier.\n\n Otherwise we assume it's somehow implicit which library we're\n talking about.\n " @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__(self, *, name: _builtins.str = ..., meta: _common_pb2.Metadata | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, name: _builtins.str=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "name", b"name"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'name', b'name'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... -Global___LibraryName: _TypeAlias = LibraryName \ No newline at end of file +Global___LibraryName: _TypeAlias = LibraryName diff --git a/edg/edgir/ref_pb2.py b/edg/edgir/ref_pb2.py index 154cb44fb..ee4f3fd9c 100644 --- a/edg/edgir/ref_pb2.py +++ b/edg/edgir/ref_pb2.py @@ -1,14 +1,19 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import name_pb2 as edgir_dot_name__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fedgir/ref.proto\x12\tedgir.ref\x1a\x12edgir/common.proto\x1a\x10edgir/name.proto"f\n\tLocalStep\x12-\n\x0ereserved_param\x18\x01 \x01(\x0e2\x13.edgir.ref.ReservedH\x00\x12\x12\n\x08allocate\x18\x02 \x01(\tH\x00\x12\x0e\n\x04name\x18\x03 \x01(\tH\x00B\x06\n\x04step"W\n\tLocalPath\x12#\n\x05steps\x18\x01 \x03(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata"\xa8\x01\n\x0bLibraryPath\x12&\n\x05start\x18\x01 \x01(\x0b2\x17.edgir.name.LibraryName\x12$\n\x05steps\x18\x02 \x03(\x0b2\x15.edgir.name.Namespace\x12$\n\x06target\x18\x03 \x01(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata*r\n\x08Reserved\x12\r\n\tUNDEFINED\x10\x00\x12\x12\n\x0eCONNECTED_LINK\x10\x01\x12\x10\n\x0cIS_CONNECTED\x10(\x12\n\n\x06LENGTH\x10*\x12\x08\n\x04NAME\x10,\x12\x0c\n\x08ELEMENTS\x10-\x12\r\n\tALLOCATED\x10.b\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x0fedgir/ref.proto\x12\tedgir.ref\x1a\x12edgir/common.proto\x1a\x10edgir/name.proto"f\n\tLocalStep\x12-\n\x0ereserved_param\x18\x01 \x01(\x0e2\x13.edgir.ref.ReservedH\x00\x12\x12\n\x08allocate\x18\x02 \x01(\tH\x00\x12\x0e\n\x04name\x18\x03 \x01(\tH\x00B\x06\n\x04step"W\n\tLocalPath\x12#\n\x05steps\x18\x01 \x03(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata"\xa8\x01\n\x0bLibraryPath\x12&\n\x05start\x18\x01 \x01(\x0b2\x17.edgir.name.LibraryName\x12$\n\x05steps\x18\x02 \x03(\x0b2\x15.edgir.name.Namespace\x12$\n\x06target\x18\x03 \x01(\x0b2\x14.edgir.ref.LocalStep\x12%\n\x04meta\x18\xff\x01 \x01(\x0b2\x16.edgir.common.Metadata*r\n\x08Reserved\x12\r\n\tUNDEFINED\x10\x00\x12\x12\n\x0eCONNECTED_LINK\x10\x01\x12\x10\n\x0cIS_CONNECTED\x10(\x12\n\n\x06LENGTH\x10*\x12\x08\n\x04NAME\x10,\x12\x0c\n\x08ELEMENTS\x10-\x12\r\n\tALLOCATED\x10.b\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.ref_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.ref_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _RESERVED._serialized_start = 432 @@ -18,4 +23,4 @@ _LOCALPATH._serialized_start = 172 _LOCALPATH._serialized_end = 259 _LIBRARYPATH._serialized_start = 262 - _LIBRARYPATH._serialized_end = 430 \ No newline at end of file + _LIBRARYPATH._serialized_end = 430 diff --git a/edg/edgir/ref_pb2.pyi b/edg/edgir/ref_pb2.pyi index 4cb753aaf..992c4f924 100644 --- a/edg/edgir/ref_pb2.pyi +++ b/edg/edgir/ref_pb2.pyi @@ -11,6 +11,7 @@ referencing different elements in a designs or libraries. We enforce certain structural properties by having a series of nested 'steps' that determine the next step in a path reference. """ + from collections import abc as _abc from edgir import common_pb2 as _common_pb2 from edgir import name_pb2 as _name_pb2 @@ -21,6 +22,7 @@ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -28,41 +30,42 @@ else: DESCRIPTOR: _descriptor.FileDescriptor class _Reserved: - ValueType = _typing.NewType('ValueType', _builtins.int) + ValueType = _typing.NewType("ValueType", _builtins.int) V: _TypeAlias = ValueType class _ReservedEnumTypeWrapper(_enum_type_wrapper._EnumTypeWrapper[_Reserved.ValueType], _builtins.type): DESCRIPTOR: _descriptor.EnumDescriptor UNDEFINED: _Reserved.ValueType CONNECTED_LINK: _Reserved.ValueType - '* Directions we could move' + "* Directions we could move" IS_CONNECTED: _Reserved.ValueType - '* reserved parameters\n true implies CONNECTED_LINK resolves; not available on PortArray\n ' + "* reserved parameters\n true implies CONNECTED_LINK resolves; not available on PortArray\n " LENGTH: _Reserved.ValueType - ' EXISTS = 41;\n available on PortArray and LinkArray\n ' + " EXISTS = 41;\n available on PortArray and LinkArray\n " NAME: _Reserved.ValueType ELEMENTS: _Reserved.ValueType - 'available on PortArray and LinkArray, returns a list of string of element names' + "available on PortArray and LinkArray, returns a list of string of element names" ALLOCATED: _Reserved.ValueType - 'cannot be used as a generator dependency\n available on PortArray, returns a list of string of incoming connection names,\n ' + "cannot be used as a generator dependency\n available on PortArray, returns a list of string of incoming connection names,\n " class Reserved(_Reserved, metaclass=_ReservedEnumTypeWrapper): """* These are reserved terms that we'll end up using in various places. I'd rather have these in the block/link/bridges where they're going to exist, but that's not possible without polymorphism protibuf doesn't have """ + UNDEFINED: Reserved.ValueType CONNECTED_LINK: Reserved.ValueType -'* Directions we could move' +"* Directions we could move" IS_CONNECTED: Reserved.ValueType -'* reserved parameters\ntrue implies CONNECTED_LINK resolves; not available on PortArray\n' +"* reserved parameters\ntrue implies CONNECTED_LINK resolves; not available on PortArray\n" LENGTH: Reserved.ValueType -' EXISTS = 41;\navailable on PortArray and LinkArray\n' +" EXISTS = 41;\navailable on PortArray and LinkArray\n" NAME: Reserved.ValueType ELEMENTS: Reserved.ValueType -'available on PortArray and LinkArray, returns a list of string of element names' +"available on PortArray and LinkArray, returns a list of string of element names" ALLOCATED: Reserved.ValueType -'cannot be used as a generator dependency\navailable on PortArray, returns a list of string of incoming connection names,\n' +"cannot be used as a generator dependency\navailable on PortArray, returns a list of string of incoming connection names,\n" Global___Reserved: _TypeAlias = Reserved @_typing.final @@ -73,31 +76,39 @@ class LocalStep(_message.Message): The directions encode the type of thing we are referencing, but to the user all of these look just like local variables """ + DESCRIPTOR: _descriptor.Descriptor RESERVED_PARAM_FIELD_NUMBER: _builtins.int ALLOCATE_FIELD_NUMBER: _builtins.int NAME_FIELD_NUMBER: _builtins.int reserved_param: Global___Reserved.ValueType allocate: _builtins.str - 'Allocates a new element in an array, valid for arrays only.\n Empty string means automatically allocated, while a non-empty string is a suggested name.\n ' + "Allocates a new element in an array, valid for arrays only.\n Empty string means automatically allocated, while a non-empty string is a suggested name.\n " name: _builtins.str "*\n A local name is what something is called in the context of its parent,\n whether that parent is a namespace (as in the library) or some other\n element (as in a design or heirarchy block).\n\n localNames should have the following properties:\n\n - First char is a lower case letter\n - All other chars must be letters, numbers, '-', '<', '>'\n - lowerCamelCase is preffered, don't use any symbols in the name\n if possible.\n\n These are style guidelines, literally any string will work.\n " - def __init__(self, *, reserved_param: Global___Reserved.ValueType=..., allocate: _builtins.str=..., name: _builtins.str=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['allocate', b'allocate', 'name', b'name', 'reserved_param', b'reserved_param', 'step', b'step'] + def __init__( + self, + *, + reserved_param: Global___Reserved.ValueType = ..., + allocate: _builtins.str = ..., + name: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "allocate", b"allocate", "name", b"name", "reserved_param", b"reserved_param", "step", b"step" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['allocate', b'allocate', 'name', b'name', 'reserved_param', b'reserved_param', 'step', b'step'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "allocate", b"allocate", "name", b"name", "reserved_param", b"reserved_param", "step", b"step" + ] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_step: _TypeAlias = _typing.Literal['reserved_param', 'allocate', 'name'] - _WhichOneofArgType_step: _TypeAlias = _typing.Literal['step', b'step'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_step: _TypeAlias = _typing.Literal["reserved_param", "allocate", "name"] + _WhichOneofArgType_step: _TypeAlias = _typing.Literal["step", b"step"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_step) -> _WhichOneofReturnType_step | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_step) -> _WhichOneofReturnType_step | None: - ... Global___LocalStep: _TypeAlias = LocalStep @_typing.final @@ -105,28 +116,25 @@ class LocalPath(_message.Message): """* This is a path from a local context to some other local context. To be used as a reference. """ + DESCRIPTOR: _descriptor.Descriptor STEPS_FIELD_NUMBER: _builtins.int META_FIELD_NUMBER: _builtins.int @_builtins.property - def steps(self) -> _containers.RepeatedCompositeFieldContainer[Global___LocalStep]: - ... - + def steps(self) -> _containers.RepeatedCompositeFieldContainer[Global___LocalStep]: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, *, steps: _abc.Iterable[Global___LocalStep] | None = ..., meta: _common_pb2.Metadata | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta"] - def __init__(self, *, steps: _abc.Iterable[Global___LocalStep] | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "steps", b"steps"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'steps', b'steps'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___LocalPath: _TypeAlias = LocalPath @_typing.final @@ -134,6 +142,7 @@ class LibraryPath(_message.Message): """* This is a path to an element within a library from the root of a library. To be used as a way to reference such elements. """ + DESCRIPTOR: _descriptor.Descriptor START_FIELD_NUMBER: _builtins.int STEPS_FIELD_NUMBER: _builtins.int @@ -141,29 +150,28 @@ class LibraryPath(_message.Message): META_FIELD_NUMBER: _builtins.int @_builtins.property - def start(self) -> _name_pb2.LibraryName: - ... - + def start(self) -> _name_pb2.LibraryName: ... @_builtins.property - def steps(self) -> _containers.RepeatedCompositeFieldContainer[_name_pb2.Namespace]: - ... - + def steps(self) -> _containers.RepeatedCompositeFieldContainer[_name_pb2.Namespace]: ... @_builtins.property - def target(self) -> Global___LocalStep: - ... - + def target(self) -> Global___LocalStep: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, start: _name_pb2.LibraryName | None=..., steps: _abc.Iterable[_name_pb2.Namespace] | None=..., target: Global___LocalStep | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'start', b'start', 'target', b'target'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['meta', b'meta', 'start', b'start', 'steps', b'steps', 'target', b'target'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... -Global___LibraryPath: _TypeAlias = LibraryPath \ No newline at end of file + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + start: _name_pb2.LibraryName | None = ..., + steps: _abc.Iterable[_name_pb2.Namespace] | None = ..., + target: Global___LocalStep | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["meta", b"meta", "start", b"start", "target", b"target"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "meta", b"meta", "start", b"start", "steps", b"steps", "target", b"target" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + +Global___LibraryPath: _TypeAlias = LibraryPath diff --git a/edg/edgir/schema_pb2.py b/edg/edgir/schema_pb2.py index 46253e26c..515fd4516 100644 --- a/edg/edgir/schema_pb2.py +++ b/edg/edgir/schema_pb2.py @@ -1,18 +1,23 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import common_pb2 as edgir_dot_common__pb2 from ..edgir import elem_pb2 as edgir_dot_elem__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12edgir/schema.proto\x12\x0cedgir.schema\x1a\x12edgir/common.proto\x1a\x10edgir/elem.proto"\xf5\x03\n\x07Library\x12*\n\x02id\x18\x01 \x01(\x0b2\x1e.edgir.schema.Library.LibIdent\x12\x0f\n\x07imports\x18\x02 \x03(\t\x12&\n\x04root\x18\n \x01(\x0b2\x18.edgir.schema.Library.NS\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a\xc4\x02\n\x02NS\x126\n\x07members\x18\x01 \x03(\x0b2%.edgir.schema.Library.NS.MembersEntry\x1a\xb7\x01\n\x03Val\x12 \n\x04port\x18\n \x01(\x0b2\x10.edgir.elem.PortH\x00\x125\n\x0fhierarchy_block\x18\r \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00\x12 \n\x04link\x18\x0e \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12-\n\tnamespace\x18\x14 \x01(\x0b2\x18.edgir.schema.Library.NSH\x00B\x06\n\x04type\x1aL\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val:\x028\x01\x1a\x18\n\x08LibIdent\x12\x0c\n\x04name\x18\x01 \x01(\t"6\n\x06Design\x12,\n\x08contents\x18\x02 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x12edgir/schema.proto\x12\x0cedgir.schema\x1a\x12edgir/common.proto\x1a\x10edgir/elem.proto"\xf5\x03\n\x07Library\x12*\n\x02id\x18\x01 \x01(\x0b2\x1e.edgir.schema.Library.LibIdent\x12\x0f\n\x07imports\x18\x02 \x03(\t\x12&\n\x04root\x18\n \x01(\x0b2\x18.edgir.schema.Library.NS\x12$\n\x04meta\x18\x7f \x01(\x0b2\x16.edgir.common.Metadata\x1a\xc4\x02\n\x02NS\x126\n\x07members\x18\x01 \x03(\x0b2%.edgir.schema.Library.NS.MembersEntry\x1a\xb7\x01\n\x03Val\x12 \n\x04port\x18\n \x01(\x0b2\x10.edgir.elem.PortH\x00\x125\n\x0fhierarchy_block\x18\r \x01(\x0b2\x1a.edgir.elem.HierarchyBlockH\x00\x12 \n\x04link\x18\x0e \x01(\x0b2\x10.edgir.elem.LinkH\x00\x12-\n\tnamespace\x18\x14 \x01(\x0b2\x18.edgir.schema.Library.NSH\x00B\x06\n\x04type\x1aL\n\x0cMembersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val:\x028\x01\x1a\x18\n\x08LibIdent\x12\x0c\n\x04name\x18\x01 \x01(\t"6\n\x06Design\x12,\n\x08contents\x18\x02 \x01(\x0b2\x1a.edgir.elem.HierarchyBlockb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgir.schema_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgir.schema_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _LIBRARY_NS_MEMBERSENTRY._options = None - _LIBRARY_NS_MEMBERSENTRY._serialized_options = b'8\x01' + _LIBRARY_NS_MEMBERSENTRY._serialized_options = b"8\x01" _LIBRARY._serialized_start = 75 _LIBRARY._serialized_end = 576 _LIBRARY_NS._serialized_start = 226 @@ -24,4 +29,4 @@ _LIBRARY_LIBIDENT._serialized_start = 552 _LIBRARY_LIBIDENT._serialized_end = 576 _DESIGN._serialized_start = 578 - _DESIGN._serialized_end = 632 \ No newline at end of file + _DESIGN._serialized_end = 632 diff --git a/edg/edgir/schema_pb2.pyi b/edg/edgir/schema_pb2.pyi index eeb7ebf64..3080870ab 100644 --- a/edg/edgir/schema_pb2.pyi +++ b/edg/edgir/schema_pb2.pyi @@ -8,6 +8,7 @@ Package : edg.schema These types contain the highest level data structures we use to describe sets of blocks, ports, and links. """ + from collections import abc as _abc from edgir import common_pb2 as _common_pb2 from edgir import elem_pb2 as _elem_pb2 @@ -17,6 +18,7 @@ from google.protobuf.internal import containers as _containers import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -35,11 +37,13 @@ class Library(_message.Message): or definitional conflicts. This means that we can shuffle around partial libraries, for merging, modification, etc.. """ + DESCRIPTOR: _descriptor.Descriptor @_typing.final class NS(_message.Message): """* Library Namespace, avoiding collision w/ edg.name.Namespace""" + DESCRIPTOR: _descriptor.Descriptor @_typing.final @@ -51,36 +55,53 @@ class Library(_message.Message): NAMESPACE_FIELD_NUMBER: _builtins.int @_builtins.property - def port(self) -> _elem_pb2.Port: - ... - + def port(self) -> _elem_pb2.Port: ... @_builtins.property - def hierarchy_block(self) -> _elem_pb2.HierarchyBlock: - ... - + def hierarchy_block(self) -> _elem_pb2.HierarchyBlock: ... @_builtins.property - def link(self) -> _elem_pb2.Link: - ... - + def link(self) -> _elem_pb2.Link: ... @_builtins.property - def namespace(self) -> Global___Library.NS: - ... - - def __init__(self, *, port: _elem_pb2.Port | None=..., hierarchy_block: _elem_pb2.HierarchyBlock | None=..., link: _elem_pb2.Link | None=..., namespace: Global___Library.NS | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['hierarchy_block', b'hierarchy_block', 'link', b'link', 'namespace', b'namespace', 'port', b'port', 'type', b'type'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['hierarchy_block', b'hierarchy_block', 'link', b'link', 'namespace', b'namespace', 'port', b'port', 'type', b'type'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_type: _TypeAlias = _typing.Literal['port', 'hierarchy_block', 'link', 'namespace'] - _WhichOneofArgType_type: _TypeAlias = _typing.Literal['type', b'type'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: - ... + def namespace(self) -> Global___Library.NS: ... + def __init__( + self, + *, + port: _elem_pb2.Port | None = ..., + hierarchy_block: _elem_pb2.HierarchyBlock | None = ..., + link: _elem_pb2.Link | None = ..., + namespace: Global___Library.NS | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "hierarchy_block", + b"hierarchy_block", + "link", + b"link", + "namespace", + b"namespace", + "port", + b"port", + "type", + b"type", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "hierarchy_block", + b"hierarchy_block", + "link", + b"link", + "namespace", + b"namespace", + "port", + b"port", + "type", + b"type", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_type: _TypeAlias = _typing.Literal["port", "hierarchy_block", "link", "namespace"] + _WhichOneofArgType_type: _TypeAlias = _typing.Literal["type", b"type"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_type) -> _WhichOneofReturnType_type | None: ... @_typing.final class MembersEntry(_message.Message): @@ -90,83 +111,75 @@ class Library(_message.Message): key: _builtins.str @_builtins.property - def value(self) -> Global___Library.NS.Val: - ... + def value(self) -> Global___Library.NS.Val: ... + def __init__(self, *, key: _builtins.str = ..., value: Global___Library.NS.Val | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["value", b"value"] - def __init__(self, *, key: _builtins.str=..., value: Global___Library.NS.Val | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... MEMBERS_FIELD_NUMBER: _builtins.int @_builtins.property - def members(self) -> _containers.MessageMap[_builtins.str, Global___Library.NS.Val]: - ... + def members(self) -> _containers.MessageMap[_builtins.str, Global___Library.NS.Val]: ... + def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___Library.NS.Val] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["members", b"members"] - def __init__(self, *, members: _abc.Mapping[_builtins.str, Global___Library.NS.Val] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['members', b'members'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... @_typing.final class LibIdent(_message.Message): """* How we identify a library within a set. Will probably evolve to capture more metadata. """ + DESCRIPTOR: _descriptor.Descriptor NAME_FIELD_NUMBER: _builtins.int name: _builtins.str - def __init__(self, *, name: _builtins.str=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name'] + def __init__(self, *, name: _builtins.str = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... ID_FIELD_NUMBER: _builtins.int IMPORTS_FIELD_NUMBER: _builtins.int ROOT_FIELD_NUMBER: _builtins.int META_FIELD_NUMBER: _builtins.int @_builtins.property - def id(self) -> Global___Library.LibIdent: - ... - + def id(self) -> Global___Library.LibIdent: ... @_builtins.property - def imports(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: - ... - + def imports(self) -> _containers.RepeatedScalarFieldContainer[_builtins.str]: ... @_builtins.property - def root(self) -> Global___Library.NS: - ... - + def root(self) -> Global___Library.NS: ... @_builtins.property - def meta(self) -> _common_pb2.Metadata: - ... - - def __init__(self, *, id: Global___Library.LibIdent | None=..., imports: _abc.Iterable[_builtins.str] | None=..., root: Global___Library.NS | None=..., meta: _common_pb2.Metadata | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['id', b'id', 'meta', b'meta', 'root', b'root'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['id', b'id', 'imports', b'imports', 'meta', b'meta', 'root', b'root'] + def meta(self) -> _common_pb2.Metadata: ... + def __init__( + self, + *, + id: Global___Library.LibIdent | None = ..., + imports: _abc.Iterable[_builtins.str] | None = ..., + root: Global___Library.NS | None = ..., + meta: _common_pb2.Metadata | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["id", b"id", "meta", b"meta", "root", b"root"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "id", b"id", "imports", b"imports", "meta", b"meta", "root", b"root" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Library: _TypeAlias = Library @_typing.final class Design(_message.Message): """* This is a Design for an embedded system at some level of abstraction.""" + DESCRIPTOR: _descriptor.Descriptor CONTENTS_FIELD_NUMBER: _builtins.int @@ -174,14 +187,12 @@ class Design(_message.Message): def contents(self) -> _elem_pb2.HierarchyBlock: """* Delegate the actual contents of the design to a hierarchy block, for which ports are ignored""" - def __init__(self, *, contents: _elem_pb2.HierarchyBlock | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['contents', b'contents'] + def __init__(self, *, contents: _elem_pb2.HierarchyBlock | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["contents", b"contents"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["contents", b"contents"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['contents', b'contents'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... -Global___Design: _TypeAlias = Design \ No newline at end of file +Global___Design: _TypeAlias = Design diff --git a/edg/edgrpc/compiler_pb2.py b/edg/edgrpc/compiler_pb2.py index 235d99647..a72494fbd 100644 --- a/edg/edgrpc/compiler_pb2.py +++ b/edg/edgrpc/compiler_pb2.py @@ -1,16 +1,21 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import schema_pb2 as edgir_dot_schema__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 from ..edgrpc import hdl_pb2 as edgrpc_dot_hdl__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15edgrpc/compiler.proto\x12\x0fedgrpc.compiler\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x0fedgir/lit.proto\x1a\x10edgrpc/hdl.proto"^\n\x0bErrorRecord\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0f\n\x07details\x18\x04 \x01(\t"e\n\x0fCompilerRequest\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"\xf2\x01\n\x0eCompilerResult\x12$\n\x06design\x18\x01 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x06errors\x18\x04 \x03(\x0b2\x1c.edgrpc.compiler.ErrorRecord\x12;\n\x0csolvedValues\x18\x02 \x03(\x0b2%.edgrpc.compiler.CompilerResult.Value\x1aO\n\x05Value\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLitb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x15edgrpc/compiler.proto\x12\x0fedgrpc.compiler\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x0fedgir/lit.proto\x1a\x10edgrpc/hdl.proto"^\n\x0bErrorRecord\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0f\n\x07details\x18\x04 \x01(\t"e\n\x0fCompilerRequest\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"\xf2\x01\n\x0eCompilerResult\x12$\n\x06design\x18\x01 \x01(\x0b2\x14.edgir.schema.Design\x12,\n\x06errors\x18\x04 \x03(\x0b2\x1c.edgrpc.compiler.ErrorRecord\x12;\n\x0csolvedValues\x18\x02 \x03(\x0b2%.edgrpc.compiler.CompilerResult.Value\x1aO\n\x05Value\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLitb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgrpc.compiler_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgrpc.compiler_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _ERRORRECORD._serialized_start = 114 @@ -20,4 +25,4 @@ _COMPILERRESULT._serialized_start = 314 _COMPILERRESULT._serialized_end = 556 _COMPILERRESULT_VALUE._serialized_start = 477 - _COMPILERRESULT_VALUE._serialized_end = 556 \ No newline at end of file + _COMPILERRESULT_VALUE._serialized_end = 556 diff --git a/edg/edgrpc/compiler_pb2.pyi b/edg/edgrpc/compiler_pb2.pyi index 09f4d7453..88dd418b3 100644 --- a/edg/edgrpc/compiler_pb2.pyi +++ b/edg/edgrpc/compiler_pb2.pyi @@ -6,6 +6,7 @@ Interface to the HDL (eg, library fetch) is not included here. This no longer uses gRPC to avoid complexity of sockets. """ + from collections import abc as _abc from edgir import lit_pb2 as _lit_pb2 from edgir import ref_pb2 as _ref_pb2 @@ -17,6 +18,7 @@ from google.protobuf.internal import containers as _containers import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -31,26 +33,33 @@ class ErrorRecord(_message.Message): NAME_FIELD_NUMBER: _builtins.int DETAILS_FIELD_NUMBER: _builtins.int kind: _builtins.str - 'kind of error, eg failed to generate' + "kind of error, eg failed to generate" name: _builtins.str - 'constraint name / short description' + "constraint name / short description" details: _builtins.str - 'longer description, optional' + "longer description, optional" @_builtins.property def path(self) -> _ref_pb2.LocalPath: """link / block / port, cannot be the constraint""" - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., kind: _builtins.str=..., name: _builtins.str=..., details: _builtins.str=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path'] + def __init__( + self, + *, + path: _ref_pb2.LocalPath | None = ..., + kind: _builtins.str = ..., + name: _builtins.str = ..., + details: _builtins.str = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["path", b"path"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "details", b"details", "kind", b"kind", "name", b"name", "path", b"path" + ] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['details', b'details', 'kind', b'kind', 'name', b'name', 'path', b'path'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ErrorRecord: _TypeAlias = ErrorRecord @_typing.final @@ -60,23 +69,19 @@ class CompilerRequest(_message.Message): REFINEMENTS_FIELD_NUMBER: _builtins.int @_builtins.property - def design(self) -> _schema_pb2.Design: - ... - + def design(self) -> _schema_pb2.Design: ... @_builtins.property - def refinements(self) -> _hdl_pb2.Refinements: - ... + def refinements(self) -> _hdl_pb2.Refinements: ... + def __init__( + self, *, design: _schema_pb2.Design | None = ..., refinements: _hdl_pb2.Refinements | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["design", b"design", "refinements", b"refinements"] - def __init__(self, *, design: _schema_pb2.Design | None=..., refinements: _hdl_pb2.Refinements | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinements', b'refinements'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["design", b"design", "refinements", b"refinements"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinements', b'refinements'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___CompilerRequest: _TypeAlias = CompilerRequest @_typing.final @@ -90,47 +95,41 @@ class CompilerResult(_message.Message): VALUE_FIELD_NUMBER: _builtins.int @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... - + def path(self) -> _ref_pb2.LocalPath: ... @_builtins.property - def value(self) -> _lit_pb2.ValueLit: - ... + def value(self) -> _lit_pb2.ValueLit: ... + def __init__(self, *, path: _ref_pb2.LocalPath | None = ..., value: _lit_pb2.ValueLit | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "value", b"value"] - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., value: _lit_pb2.ValueLit | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... DESIGN_FIELD_NUMBER: _builtins.int ERRORS_FIELD_NUMBER: _builtins.int SOLVEDVALUES_FIELD_NUMBER: _builtins.int @_builtins.property - def design(self) -> _schema_pb2.Design: - ... - + def design(self) -> _schema_pb2.Design: ... @_builtins.property - def errors(self) -> _containers.RepeatedCompositeFieldContainer[Global___ErrorRecord]: - ... - + def errors(self) -> _containers.RepeatedCompositeFieldContainer[Global___ErrorRecord]: ... @_builtins.property - def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___CompilerResult.Value]: - ... - - def __init__(self, *, design: _schema_pb2.Design | None=..., errors: _abc.Iterable[Global___ErrorRecord] | None=..., solvedValues: _abc.Iterable[Global___CompilerResult.Value] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'errors', b'errors', 'solvedValues', b'solvedValues'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... -Global___CompilerResult: _TypeAlias = CompilerResult \ No newline at end of file + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___CompilerResult.Value]: ... + def __init__( + self, + *, + design: _schema_pb2.Design | None = ..., + errors: _abc.Iterable[Global___ErrorRecord] | None = ..., + solvedValues: _abc.Iterable[Global___CompilerResult.Value] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["design", b"design"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "design", b"design", "errors", b"errors", "solvedValues", b"solvedValues" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + +Global___CompilerResult: _TypeAlias = CompilerResult diff --git a/edg/edgrpc/hdl_pb2.py b/edg/edgrpc/hdl_pb2.py index 499d3c6e4..97b2a4a65 100644 --- a/edg/edgrpc/hdl_pb2.py +++ b/edg/edgrpc/hdl_pb2.py @@ -1,20 +1,25 @@ """Generated protocol buffer code.""" + from google.protobuf.internal import builder as _builder from google.protobuf import descriptor as _descriptor from google.protobuf import descriptor_pool as _descriptor_pool from google.protobuf import symbol_database as _symbol_database + _sym_db = _symbol_database.Default() from ..edgir import schema_pb2 as edgir_dot_schema__pb2 from ..edgir import ref_pb2 as edgir_dot_ref__pb2 from ..edgir import elem_pb2 as edgir_dot_elem__pb2 from ..edgir import lit_pb2 as edgir_dot_lit__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10edgrpc/hdl.proto\x12\nedgrpc.hdl\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x10edgir/elem.proto\x1a\x0fedgir/lit.proto"\xb6\x04\n\x0bRefinements\x124\n\nsubclasses\x18\x01 \x03(\x0b2 .edgrpc.hdl.Refinements.Subclass\x12-\n\x06values\x18\x02 \x03(\x0b2\x1d.edgrpc.hdl.Refinements.Value\x1a\x8e\x01\n\x08Subclass\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12%\n\x03cls\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12+\n\x0breplacement\x18\x03 \x01(\x0b2\x16.edgir.ref.LibraryPathB\x08\n\x06source\x1a\xb0\x02\n\x05Value\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12A\n\tcls_param\x18\x02 \x01(\x0b2,.edgrpc.hdl.Refinements.Value.ClassParamPathH\x00\x12#\n\x04expr\x18\x03 \x01(\x0b2\x13.edgir.lit.ValueLitH\x01\x12%\n\x05param\x18\x04 \x01(\x0b2\x14.edgir.ref.LocalPathH\x01\x1a_\n\x0eClassParamPath\x12#\n\x03cls\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\nparam_path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPathB\x08\n\x06sourceB\x07\n\x05value"\x1a\n\nModuleName\x12\x0c\n\x04name\x18\x01 \x01(\t"8\n\rIndexResponse\x12\'\n\x07indexed\x18\x01 \x03(\x0b2\x16.edgir.ref.LibraryPath"9\n\x0eLibraryRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath"n\n\x0fLibraryResponse\x12-\n\x07element\x18\x01 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"S\n\tExprValue\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"b\n\x10GeneratorRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12%\n\x06values\x18\x04 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"B\n\x11GeneratorResponse\x12-\n\tgenerated\x18\x01 \x01(\x0b2\x1a.edgir.elem.HierarchyBlock"\x97\x01\n\x11RefinementRequest\x12/\n\x0frefinement_pass\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue">\n\x12RefinementResponse\x12(\n\tnewValues\x18\x01 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"\xfc\x01\n\x0eBackendRequest\x12\'\n\x07backend\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue\x12<\n\targuments\x18\x04 \x03(\x0b2).edgrpc.hdl.BackendRequest.ArgumentsEntry\x1a0\n\x0eArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x028\x01"\x8e\x01\n\x0fBackendResponse\x123\n\x07results\x18\x01 \x03(\x0b2".edgrpc.hdl.BackendResponse.Result\x1aF\n\x06Result\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0e\n\x04text\x18\x02 \x01(\tH\x00B\x08\n\x06result"1\n\rErrorResponse\x12\r\n\x05error\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x02 \x01(\t"\xc8\x02\n\nHdlRequest\x12.\n\x0cindex_module\x18\x01 \x01(\x0b2\x16.edgrpc.hdl.ModuleNameH\x00\x129\n\x13get_library_element\x18\x02 \x01(\x0b2\x1a.edgrpc.hdl.LibraryRequestH\x00\x12;\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1c.edgrpc.hdl.GeneratorRequestH\x00\x127\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1d.edgrpc.hdl.RefinementRequestH\x00\x121\n\x0brun_backend\x18\x04 \x01(\x0b2\x1a.edgrpc.hdl.BackendRequestH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00B\t\n\x07request"\xfd\x02\n\x0bHdlResponse\x121\n\x0cindex_module\x18\x01 \x01(\x0b2\x19.edgrpc.hdl.IndexResponseH\x00\x12:\n\x13get_library_element\x18\x02 \x01(\x0b2\x1b.edgrpc.hdl.LibraryResponseH\x00\x12<\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1d.edgrpc.hdl.GeneratorResponseH\x00\x128\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1e.edgrpc.hdl.RefinementResponseH\x00\x122\n\x0brun_backend\x18\x04 \x01(\x0b2\x1b.edgrpc.hdl.BackendResponseH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00\x12*\n\x05error\x18c \x01(\x0b2\x19.edgrpc.hdl.ErrorResponseH\x00B\n\n\x08responseb\x06proto3') + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile( + b'\n\x10edgrpc/hdl.proto\x12\nedgrpc.hdl\x1a\x12edgir/schema.proto\x1a\x0fedgir/ref.proto\x1a\x10edgir/elem.proto\x1a\x0fedgir/lit.proto"\xb6\x04\n\x0bRefinements\x124\n\nsubclasses\x18\x01 \x03(\x0b2 .edgrpc.hdl.Refinements.Subclass\x12-\n\x06values\x18\x02 \x03(\x0b2\x1d.edgrpc.hdl.Refinements.Value\x1a\x8e\x01\n\x08Subclass\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12%\n\x03cls\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPathH\x00\x12+\n\x0breplacement\x18\x03 \x01(\x0b2\x16.edgir.ref.LibraryPathB\x08\n\x06source\x1a\xb0\x02\n\x05Value\x12$\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPathH\x00\x12A\n\tcls_param\x18\x02 \x01(\x0b2,.edgrpc.hdl.Refinements.Value.ClassParamPathH\x00\x12#\n\x04expr\x18\x03 \x01(\x0b2\x13.edgir.lit.ValueLitH\x01\x12%\n\x05param\x18\x04 \x01(\x0b2\x14.edgir.ref.LocalPathH\x01\x1a_\n\x0eClassParamPath\x12#\n\x03cls\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12(\n\nparam_path\x18\x02 \x01(\x0b2\x14.edgir.ref.LocalPathB\x08\n\x06sourceB\x07\n\x05value"\x1a\n\nModuleName\x12\x0c\n\x04name\x18\x01 \x01(\t"8\n\rIndexResponse\x12\'\n\x07indexed\x18\x01 \x03(\x0b2\x16.edgir.ref.LibraryPath"9\n\x0eLibraryRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath"n\n\x0fLibraryResponse\x12-\n\x07element\x18\x01 \x01(\x0b2\x1c.edgir.schema.Library.NS.Val\x12,\n\x0brefinements\x18\x03 \x01(\x0b2\x17.edgrpc.hdl.Refinements"S\n\tExprValue\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12"\n\x05value\x18\x02 \x01(\x0b2\x13.edgir.lit.ValueLit"b\n\x10GeneratorRequest\x12\'\n\x07element\x18\x02 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12%\n\x06values\x18\x04 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"B\n\x11GeneratorResponse\x12-\n\tgenerated\x18\x01 \x01(\x0b2\x1a.edgir.elem.HierarchyBlock"\x97\x01\n\x11RefinementRequest\x12/\n\x0frefinement_pass\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue">\n\x12RefinementResponse\x12(\n\tnewValues\x18\x01 \x03(\x0b2\x15.edgrpc.hdl.ExprValue"\xfc\x01\n\x0eBackendRequest\x12\'\n\x07backend\x18\x01 \x01(\x0b2\x16.edgir.ref.LibraryPath\x12$\n\x06design\x18\x02 \x01(\x0b2\x14.edgir.schema.Design\x12+\n\x0csolvedValues\x18\x03 \x03(\x0b2\x15.edgrpc.hdl.ExprValue\x12<\n\targuments\x18\x04 \x03(\x0b2).edgrpc.hdl.BackendRequest.ArgumentsEntry\x1a0\n\x0eArgumentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x028\x01"\x8e\x01\n\x0fBackendResponse\x123\n\x07results\x18\x01 \x03(\x0b2".edgrpc.hdl.BackendResponse.Result\x1aF\n\x06Result\x12"\n\x04path\x18\x01 \x01(\x0b2\x14.edgir.ref.LocalPath\x12\x0e\n\x04text\x18\x02 \x01(\tH\x00B\x08\n\x06result"1\n\rErrorResponse\x12\r\n\x05error\x18\x01 \x01(\t\x12\x11\n\ttraceback\x18\x02 \x01(\t"\xc8\x02\n\nHdlRequest\x12.\n\x0cindex_module\x18\x01 \x01(\x0b2\x16.edgrpc.hdl.ModuleNameH\x00\x129\n\x13get_library_element\x18\x02 \x01(\x0b2\x1a.edgrpc.hdl.LibraryRequestH\x00\x12;\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1c.edgrpc.hdl.GeneratorRequestH\x00\x127\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1d.edgrpc.hdl.RefinementRequestH\x00\x121\n\x0brun_backend\x18\x04 \x01(\x0b2\x1a.edgrpc.hdl.BackendRequestH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00B\t\n\x07request"\xfd\x02\n\x0bHdlResponse\x121\n\x0cindex_module\x18\x01 \x01(\x0b2\x19.edgrpc.hdl.IndexResponseH\x00\x12:\n\x13get_library_element\x18\x02 \x01(\x0b2\x1b.edgrpc.hdl.LibraryResponseH\x00\x12<\n\x13elaborate_generator\x18\x03 \x01(\x0b2\x1d.edgrpc.hdl.GeneratorResponseH\x00\x128\n\x0erun_refinement\x18\x05 \x01(\x0b2\x1e.edgrpc.hdl.RefinementResponseH\x00\x122\n\x0brun_backend\x18\x04 \x01(\x0b2\x1b.edgrpc.hdl.BackendResponseH\x00\x12\x1b\n\x11get_proto_version\x18Z \x01(\rH\x00\x12*\n\x05error\x18c \x01(\x0b2\x19.edgrpc.hdl.ErrorResponseH\x00B\n\n\x08responseb\x06proto3' +) _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'edgrpc.hdl_pb2', globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "edgrpc.hdl_pb2", globals()) if _descriptor._USE_C_DESCRIPTORS == False: DESCRIPTOR._options = None _BACKENDREQUEST_ARGUMENTSENTRY._options = None - _BACKENDREQUEST_ARGUMENTSENTRY._serialized_options = b'8\x01' + _BACKENDREQUEST_ARGUMENTSENTRY._serialized_options = b"8\x01" _REFINEMENTS._serialized_start = 105 _REFINEMENTS._serialized_end = 671 _REFINEMENTS_SUBCLASS._serialized_start = 222 @@ -54,4 +59,4 @@ _HDLREQUEST._serialized_start = 1853 _HDLREQUEST._serialized_end = 2181 _HDLRESPONSE._serialized_start = 2184 - _HDLRESPONSE._serialized_end = 2565 \ No newline at end of file + _HDLRESPONSE._serialized_end = 2565 diff --git a/edg/edgrpc/hdl_pb2.pyi b/edg/edgrpc/hdl_pb2.pyi index 14ede7317..6f22f752f 100644 --- a/edg/edgrpc/hdl_pb2.pyi +++ b/edg/edgrpc/hdl_pb2.pyi @@ -4,6 +4,7 @@ isort:skip_file * Defines messages for a service provided in Python that exposes HDL-to-edgir elaboration for a compiler in a different process / language. """ + from collections import abc as _abc from edgir import elem_pb2 as _elem_pb2 from edgir import lit_pb2 as _lit_pb2 @@ -15,6 +16,7 @@ from google.protobuf.internal import containers as _containers import builtins as _builtins import sys import typing as _typing + if sys.version_info >= (3, 10): from typing import TypeAlias as _TypeAlias else: @@ -33,32 +35,32 @@ class Refinements(_message.Message): REPLACEMENT_FIELD_NUMBER: _builtins.int @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... - + def path(self) -> _ref_pb2.LocalPath: ... @_builtins.property - def cls(self) -> _ref_pb2.LibraryPath: - ... - + def cls(self) -> _ref_pb2.LibraryPath: ... @_builtins.property - def replacement(self) -> _ref_pb2.LibraryPath: - ... - - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., cls: _ref_pb2.LibraryPath | None=..., replacement: _ref_pb2.LibraryPath | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'path', b'path', 'replacement', b'replacement', 'source', b'source'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'path', b'path', 'replacement', b'replacement', 'source', b'source'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_source: _TypeAlias = _typing.Literal['path', 'cls'] - _WhichOneofArgType_source: _TypeAlias = _typing.Literal['source', b'source'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: - ... + def replacement(self) -> _ref_pb2.LibraryPath: ... + def __init__( + self, + *, + path: _ref_pb2.LocalPath | None = ..., + cls: _ref_pb2.LibraryPath | None = ..., + replacement: _ref_pb2.LibraryPath | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "cls", b"cls", "path", b"path", "replacement", b"replacement", "source", b"source" + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "cls", b"cls", "path", b"path", "replacement", b"replacement", "source", b"source" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_source: _TypeAlias = _typing.Literal["path", "cls"] + _WhichOneofArgType_source: _TypeAlias = _typing.Literal["source", b"source"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: ... @_typing.final class Value(_message.Message): @@ -71,36 +73,28 @@ class Refinements(_message.Message): PARAM_PATH_FIELD_NUMBER: _builtins.int @_builtins.property - def cls(self) -> _ref_pb2.LibraryPath: - ... - + def cls(self) -> _ref_pb2.LibraryPath: ... @_builtins.property - def param_path(self) -> _ref_pb2.LocalPath: - ... + def param_path(self) -> _ref_pb2.LocalPath: ... + def __init__( + self, *, cls: _ref_pb2.LibraryPath | None = ..., param_path: _ref_pb2.LocalPath | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["cls", b"cls", "param_path", b"param_path"] - def __init__(self, *, cls: _ref_pb2.LibraryPath | None=..., param_path: _ref_pb2.LocalPath | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'param_path', b'param_path'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["cls", b"cls", "param_path", b"param_path"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['cls', b'cls', 'param_path', b'param_path'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... PATH_FIELD_NUMBER: _builtins.int CLS_PARAM_FIELD_NUMBER: _builtins.int EXPR_FIELD_NUMBER: _builtins.int PARAM_FIELD_NUMBER: _builtins.int @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... - + def path(self) -> _ref_pb2.LocalPath: ... @_builtins.property - def cls_param(self) -> Global___Refinements.Value.ClassParamPath: - ... - + def cls_param(self) -> Global___Refinements.Value.ClassParamPath: ... @_builtins.property def expr(self) -> _lit_pb2.ValueLit: """set to a specific value""" @@ -109,45 +103,73 @@ class Refinements(_message.Message): def param(self) -> _ref_pb2.LocalPath: """set to a value of another parameter - invalid for classes for now""" - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., cls_param: Global___Refinements.Value.ClassParamPath | None=..., expr: _lit_pb2.ValueLit | None=..., param: _ref_pb2.LocalPath | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['cls_param', b'cls_param', 'expr', b'expr', 'param', b'param', 'path', b'path', 'source', b'source', 'value', b'value'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['cls_param', b'cls_param', 'expr', b'expr', 'param', b'param', 'path', b'path', 'source', b'source', 'value', b'value'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_source: _TypeAlias = _typing.Literal['path', 'cls_param'] - _WhichOneofArgType_source: _TypeAlias = _typing.Literal['source', b'source'] - _WhichOneofReturnType_value: _TypeAlias = _typing.Literal['expr', 'param'] - _WhichOneofArgType_value: _TypeAlias = _typing.Literal['value', b'value'] + def __init__( + self, + *, + path: _ref_pb2.LocalPath | None = ..., + cls_param: Global___Refinements.Value.ClassParamPath | None = ..., + expr: _lit_pb2.ValueLit | None = ..., + param: _ref_pb2.LocalPath | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "cls_param", + b"cls_param", + "expr", + b"expr", + "param", + b"param", + "path", + b"path", + "source", + b"source", + "value", + b"value", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "cls_param", + b"cls_param", + "expr", + b"expr", + "param", + b"param", + "path", + b"path", + "source", + b"source", + "value", + b"value", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_source: _TypeAlias = _typing.Literal["path", "cls_param"] + _WhichOneofArgType_source: _TypeAlias = _typing.Literal["source", b"source"] + _WhichOneofReturnType_value: _TypeAlias = _typing.Literal["expr", "param"] + _WhichOneofArgType_value: _TypeAlias = _typing.Literal["value", b"value"] @_typing.overload - def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: - ... - + def WhichOneof(self, oneof_group: _WhichOneofArgType_source) -> _WhichOneofReturnType_source | None: ... @_typing.overload - def WhichOneof(self, oneof_group: _WhichOneofArgType_value) -> _WhichOneofReturnType_value | None: - ... + def WhichOneof(self, oneof_group: _WhichOneofArgType_value) -> _WhichOneofReturnType_value | None: ... + SUBCLASSES_FIELD_NUMBER: _builtins.int VALUES_FIELD_NUMBER: _builtins.int @_builtins.property - def subclasses(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Subclass]: - ... - + def subclasses(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Subclass]: ... @_builtins.property - def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Value]: - ... + def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___Refinements.Value]: ... + def __init__( + self, + *, + subclasses: _abc.Iterable[Global___Refinements.Subclass] | None = ..., + values: _abc.Iterable[Global___Refinements.Value] | None = ..., + ) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["subclasses", b"subclasses", "values", b"values"] - def __init__(self, *, subclasses: _abc.Iterable[Global___Refinements.Subclass] | None=..., values: _abc.Iterable[Global___Refinements.Value] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['subclasses', b'subclasses', 'values', b'values'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___Refinements: _TypeAlias = Refinements @_typing.final @@ -156,12 +178,11 @@ class ModuleName(_message.Message): NAME_FIELD_NUMBER: _builtins.int name: _builtins.str - def __init__(self, *, name: _builtins.str=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['name', b'name'] + def __init__(self, *, name: _builtins.str = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["name", b"name"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ModuleName: _TypeAlias = ModuleName @_typing.final @@ -170,15 +191,12 @@ class IndexResponse(_message.Message): INDEXED_FIELD_NUMBER: _builtins.int @_builtins.property - def indexed(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: - ... + def indexed(self) -> _containers.RepeatedCompositeFieldContainer[_ref_pb2.LibraryPath]: ... + def __init__(self, *, indexed: _abc.Iterable[_ref_pb2.LibraryPath] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["indexed", b"indexed"] - def __init__(self, *, indexed: _abc.Iterable[_ref_pb2.LibraryPath] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['indexed', b'indexed'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___IndexResponse: _TypeAlias = IndexResponse @_typing.final @@ -190,16 +208,14 @@ class LibraryRequest(_message.Message): def element(self) -> _ref_pb2.LibraryPath: """library element asked for""" - def __init__(self, *, element: _ref_pb2.LibraryPath | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] + def __init__(self, *, element: _ref_pb2.LibraryPath | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["element", b"element"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["element", b"element"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___LibraryRequest: _TypeAlias = LibraryRequest @_typing.final @@ -209,23 +225,21 @@ class LibraryResponse(_message.Message): REFINEMENTS_FIELD_NUMBER: _builtins.int @_builtins.property - def element(self) -> _schema_pb2.Library.NS.Val: - ... - + def element(self) -> _schema_pb2.Library.NS.Val: ... @_builtins.property def refinements(self) -> Global___Refinements: """only valid if element is a top-level block""" - def __init__(self, *, element: _schema_pb2.Library.NS.Val | None=..., refinements: Global___Refinements | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'refinements', b'refinements'] + def __init__( + self, *, element: _schema_pb2.Library.NS.Val | None = ..., refinements: Global___Refinements | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["element", b"element", "refinements", b"refinements"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["element", b"element", "refinements", b"refinements"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'refinements', b'refinements'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___LibraryResponse: _TypeAlias = LibraryResponse @_typing.final @@ -235,23 +249,17 @@ class ExprValue(_message.Message): VALUE_FIELD_NUMBER: _builtins.int @_builtins.property - def path(self) -> _ref_pb2.LocalPath: - ... - + def path(self) -> _ref_pb2.LocalPath: ... @_builtins.property - def value(self) -> _lit_pb2.ValueLit: - ... + def value(self) -> _lit_pb2.ValueLit: ... + def __init__(self, *, path: _ref_pb2.LocalPath | None = ..., value: _lit_pb2.ValueLit | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "value", b"value"] - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., value: _lit_pb2.ValueLit | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "value", b"value"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'value', b'value'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ExprValue: _TypeAlias = ExprValue @_typing.final @@ -265,19 +273,17 @@ class GeneratorRequest(_message.Message): """path of library element containing the generator""" @_builtins.property - def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: - ... + def values(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: ... + def __init__( + self, *, element: _ref_pb2.LibraryPath | None = ..., values: _abc.Iterable[Global___ExprValue] | None = ... + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["element", b"element"] - def __init__(self, *, element: _ref_pb2.LibraryPath | None=..., values: _abc.Iterable[Global___ExprValue] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['element', b'element'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["element", b"element", "values", b"values"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['element', b'element', 'values', b'values'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___GeneratorRequest: _TypeAlias = GeneratorRequest @_typing.final @@ -286,19 +292,15 @@ class GeneratorResponse(_message.Message): GENERATED_FIELD_NUMBER: _builtins.int @_builtins.property - def generated(self) -> _elem_pb2.HierarchyBlock: - ... + def generated(self) -> _elem_pb2.HierarchyBlock: ... + def __init__(self, *, generated: _elem_pb2.HierarchyBlock | None = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["generated", b"generated"] - def __init__(self, *, generated: _elem_pb2.HierarchyBlock | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['generated', b'generated'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["generated", b"generated"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['generated', b'generated'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___GeneratorResponse: _TypeAlias = GeneratorResponse @_typing.final @@ -306,33 +308,34 @@ class RefinementRequest(_message.Message): """Runs a refinement pass - something that takes a full design and solved values and generates additional values, eg for refdes assignment """ + DESCRIPTOR: _descriptor.Descriptor REFINEMENT_PASS_FIELD_NUMBER: _builtins.int DESIGN_FIELD_NUMBER: _builtins.int SOLVEDVALUES_FIELD_NUMBER: _builtins.int @_builtins.property - def refinement_pass(self) -> _ref_pb2.LibraryPath: - ... - + def refinement_pass(self) -> _ref_pb2.LibraryPath: ... @_builtins.property - def design(self) -> _schema_pb2.Design: - ... - + def design(self) -> _schema_pb2.Design: ... @_builtins.property - def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: - ... - - def __init__(self, *, refinement_pass: _ref_pb2.LibraryPath | None=..., design: _schema_pb2.Design | None=..., solvedValues: _abc.Iterable[Global___ExprValue] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinement_pass', b'refinement_pass'] + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: ... + def __init__( + self, + *, + refinement_pass: _ref_pb2.LibraryPath | None = ..., + design: _schema_pb2.Design | None = ..., + solvedValues: _abc.Iterable[Global___ExprValue] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["design", b"design", "refinement_pass", b"refinement_pass"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "design", b"design", "refinement_pass", b"refinement_pass", "solvedValues", b"solvedValues" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['design', b'design', 'refinement_pass', b'refinement_pass', 'solvedValues', b'solvedValues'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___RefinementRequest: _TypeAlias = RefinementRequest @_typing.final @@ -341,15 +344,12 @@ class RefinementResponse(_message.Message): NEWVALUES_FIELD_NUMBER: _builtins.int @_builtins.property - def newValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: - ... + def newValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: ... + def __init__(self, *, newValues: _abc.Iterable[Global___ExprValue] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["newValues", b"newValues"] - def __init__(self, *, newValues: _abc.Iterable[Global___ExprValue] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['newValues', b'newValues'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___RefinementResponse: _TypeAlias = RefinementResponse @_typing.final @@ -357,6 +357,7 @@ class BackendRequest(_message.Message): """Runs a backend - something that generates fabrication artifacts from a compiled design tree eg, generate KiCad netlist, or generate microcontroller firmware pinmap headers """ + DESCRIPTOR: _descriptor.Descriptor @_typing.final @@ -367,43 +368,41 @@ class BackendRequest(_message.Message): key: _builtins.str value: _builtins.str - def __init__(self, *, key: _builtins.str=..., value: _builtins.str=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['key', b'key', 'value', b'value'] + def __init__(self, *, key: _builtins.str = ..., value: _builtins.str = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["key", b"key", "value", b"value"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... BACKEND_FIELD_NUMBER: _builtins.int DESIGN_FIELD_NUMBER: _builtins.int SOLVEDVALUES_FIELD_NUMBER: _builtins.int ARGUMENTS_FIELD_NUMBER: _builtins.int @_builtins.property - def backend(self) -> _ref_pb2.LibraryPath: - ... - + def backend(self) -> _ref_pb2.LibraryPath: ... @_builtins.property - def design(self) -> _schema_pb2.Design: - ... - + def design(self) -> _schema_pb2.Design: ... @_builtins.property - def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: - ... - + def solvedValues(self) -> _containers.RepeatedCompositeFieldContainer[Global___ExprValue]: ... @_builtins.property - def arguments(self) -> _containers.ScalarMap[_builtins.str, _builtins.str]: - ... - - def __init__(self, *, backend: _ref_pb2.LibraryPath | None=..., design: _schema_pb2.Design | None=..., solvedValues: _abc.Iterable[Global___ExprValue] | None=..., arguments: _abc.Mapping[_builtins.str, _builtins.str] | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['backend', b'backend', 'design', b'design'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['arguments', b'arguments', 'backend', b'backend', 'design', b'design', 'solvedValues', b'solvedValues'] + def arguments(self) -> _containers.ScalarMap[_builtins.str, _builtins.str]: ... + def __init__( + self, + *, + backend: _ref_pb2.LibraryPath | None = ..., + design: _schema_pb2.Design | None = ..., + solvedValues: _abc.Iterable[Global___ExprValue] | None = ..., + arguments: _abc.Mapping[_builtins.str, _builtins.str] | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["backend", b"backend", "design", b"design"] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "arguments", b"arguments", "backend", b"backend", "design", b"design", "solvedValues", b"solvedValues" + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BackendRequest: _TypeAlias = BackendRequest @_typing.final @@ -416,56 +415,50 @@ class BackendResponse(_message.Message): PATH_FIELD_NUMBER: _builtins.int TEXT_FIELD_NUMBER: _builtins.int text: _builtins.str - 'for now, only text supported, for KiCad netlisting' + "for now, only text supported, for KiCad netlisting" @_builtins.property def path(self) -> _ref_pb2.LocalPath: """path of corresponding element in design tree""" - def __init__(self, *, path: _ref_pb2.LocalPath | None=..., text: _builtins.str=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'result', b'result', 'text', b'text'] + def __init__(self, *, path: _ref_pb2.LocalPath | None = ..., text: _builtins.str = ...) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "result", b"result", "text", b"text"] - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['path', b'path', 'result', b'result', 'text', b'text'] + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["path", b"path", "result", b"result", "text", b"text"] - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_result: _TypeAlias = _typing.Literal['text'] - _WhichOneofArgType_result: _TypeAlias = _typing.Literal['result', b'result'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_result: _TypeAlias = _typing.Literal["text"] + _WhichOneofArgType_result: _TypeAlias = _typing.Literal["result", b"result"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_result) -> _WhichOneofReturnType_result | None: ... - def WhichOneof(self, oneof_group: _WhichOneofArgType_result) -> _WhichOneofReturnType_result | None: - ... RESULTS_FIELD_NUMBER: _builtins.int @_builtins.property - def results(self) -> _containers.RepeatedCompositeFieldContainer[Global___BackendResponse.Result]: - ... + def results(self) -> _containers.RepeatedCompositeFieldContainer[Global___BackendResponse.Result]: ... + def __init__(self, *, results: _abc.Iterable[Global___BackendResponse.Result] | None = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["results", b"results"] - def __init__(self, *, results: _abc.Iterable[Global___BackendResponse.Result] | None=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['results', b'results'] + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___BackendResponse: _TypeAlias = BackendResponse @_typing.final class ErrorResponse(_message.Message): """catch all error response""" + DESCRIPTOR: _descriptor.Descriptor ERROR_FIELD_NUMBER: _builtins.int TRACEBACK_FIELD_NUMBER: _builtins.int error: _builtins.str traceback: _builtins.str - def __init__(self, *, error: _builtins.str=..., traceback: _builtins.str=...) -> None: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['error', b'error', 'traceback', b'traceback'] + def __init__(self, *, error: _builtins.str = ..., traceback: _builtins.str = ...) -> None: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal["error", b"error", "traceback", b"traceback"] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... Global___ErrorResponse: _TypeAlias = ErrorResponse @_typing.final @@ -478,7 +471,7 @@ class HdlRequest(_message.Message): RUN_BACKEND_FIELD_NUMBER: _builtins.int GET_PROTO_VERSION_FIELD_NUMBER: _builtins.int get_proto_version: _builtins.int - 'no data' + "no data" @_builtins.property def index_module(self) -> Global___ModuleName: @@ -493,28 +486,67 @@ class HdlRequest(_message.Message): """returns the elaborated IR""" @_builtins.property - def run_refinement(self) -> Global___RefinementRequest: - ... - + def run_refinement(self) -> Global___RefinementRequest: ... @_builtins.property - def run_backend(self) -> Global___BackendRequest: - ... - - def __init__(self, *, index_module: Global___ModuleName | None=..., get_library_element: Global___LibraryRequest | None=..., elaborate_generator: Global___GeneratorRequest | None=..., run_refinement: Global___RefinementRequest | None=..., run_backend: Global___BackendRequest | None=..., get_proto_version: _builtins.int=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'request', b'request', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'request', b'request', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] + def run_backend(self) -> Global___BackendRequest: ... + def __init__( + self, + *, + index_module: Global___ModuleName | None = ..., + get_library_element: Global___LibraryRequest | None = ..., + elaborate_generator: Global___GeneratorRequest | None = ..., + run_refinement: Global___RefinementRequest | None = ..., + run_backend: Global___BackendRequest | None = ..., + get_proto_version: _builtins.int = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "elaborate_generator", + b"elaborate_generator", + "get_library_element", + b"get_library_element", + "get_proto_version", + b"get_proto_version", + "index_module", + b"index_module", + "request", + b"request", + "run_backend", + b"run_backend", + "run_refinement", + b"run_refinement", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "elaborate_generator", + b"elaborate_generator", + "get_library_element", + b"get_library_element", + "get_proto_version", + b"get_proto_version", + "index_module", + b"index_module", + "request", + b"request", + "run_backend", + b"run_backend", + "run_refinement", + b"run_refinement", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_request: _TypeAlias = _typing.Literal[ + "index_module", + "get_library_element", + "elaborate_generator", + "run_refinement", + "run_backend", + "get_proto_version", + ] + _WhichOneofArgType_request: _TypeAlias = _typing.Literal["request", b"request"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_request) -> _WhichOneofReturnType_request | None: ... - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_request: _TypeAlias = _typing.Literal['index_module', 'get_library_element', 'elaborate_generator', 'run_refinement', 'run_backend', 'get_proto_version'] - _WhichOneofArgType_request: _TypeAlias = _typing.Literal['request', b'request'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_request) -> _WhichOneofReturnType_request | None: - ... Global___HdlRequest: _TypeAlias = HdlRequest @_typing.final @@ -534,38 +566,77 @@ class HdlResponse(_message.Message): """list of contained library elements""" @_builtins.property - def get_library_element(self) -> Global___LibraryResponse: - ... - + def get_library_element(self) -> Global___LibraryResponse: ... @_builtins.property - def elaborate_generator(self) -> Global___GeneratorResponse: - ... - + def elaborate_generator(self) -> Global___GeneratorResponse: ... @_builtins.property - def run_refinement(self) -> Global___RefinementResponse: - ... - + def run_refinement(self) -> Global___RefinementResponse: ... @_builtins.property - def run_backend(self) -> Global___BackendResponse: - ... - + def run_backend(self) -> Global___BackendResponse: ... @_builtins.property - def error(self) -> Global___ErrorResponse: - ... - - def __init__(self, *, index_module: Global___IndexResponse | None=..., get_library_element: Global___LibraryResponse | None=..., elaborate_generator: Global___GeneratorResponse | None=..., run_refinement: Global___RefinementResponse | None=..., run_backend: Global___BackendResponse | None=..., get_proto_version: _builtins.int=..., error: Global___ErrorResponse | None=...) -> None: - ... - _HasFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'error', b'error', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'response', b'response', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] - - def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: - ... - _ClearFieldArgType: _TypeAlias = _typing.Literal['elaborate_generator', b'elaborate_generator', 'error', b'error', 'get_library_element', b'get_library_element', 'get_proto_version', b'get_proto_version', 'index_module', b'index_module', 'response', b'response', 'run_backend', b'run_backend', 'run_refinement', b'run_refinement'] - - def ClearField(self, field_name: _ClearFieldArgType) -> None: - ... - _WhichOneofReturnType_response: _TypeAlias = _typing.Literal['index_module', 'get_library_element', 'elaborate_generator', 'run_refinement', 'run_backend', 'get_proto_version', 'error'] - _WhichOneofArgType_response: _TypeAlias = _typing.Literal['response', b'response'] - - def WhichOneof(self, oneof_group: _WhichOneofArgType_response) -> _WhichOneofReturnType_response | None: - ... -Global___HdlResponse: _TypeAlias = HdlResponse \ No newline at end of file + def error(self) -> Global___ErrorResponse: ... + def __init__( + self, + *, + index_module: Global___IndexResponse | None = ..., + get_library_element: Global___LibraryResponse | None = ..., + elaborate_generator: Global___GeneratorResponse | None = ..., + run_refinement: Global___RefinementResponse | None = ..., + run_backend: Global___BackendResponse | None = ..., + get_proto_version: _builtins.int = ..., + error: Global___ErrorResponse | None = ..., + ) -> None: ... + _HasFieldArgType: _TypeAlias = _typing.Literal[ + "elaborate_generator", + b"elaborate_generator", + "error", + b"error", + "get_library_element", + b"get_library_element", + "get_proto_version", + b"get_proto_version", + "index_module", + b"index_module", + "response", + b"response", + "run_backend", + b"run_backend", + "run_refinement", + b"run_refinement", + ] + + def HasField(self, field_name: _HasFieldArgType) -> _builtins.bool: ... + _ClearFieldArgType: _TypeAlias = _typing.Literal[ + "elaborate_generator", + b"elaborate_generator", + "error", + b"error", + "get_library_element", + b"get_library_element", + "get_proto_version", + b"get_proto_version", + "index_module", + b"index_module", + "response", + b"response", + "run_backend", + b"run_backend", + "run_refinement", + b"run_refinement", + ] + + def ClearField(self, field_name: _ClearFieldArgType) -> None: ... + _WhichOneofReturnType_response: _TypeAlias = _typing.Literal[ + "index_module", + "get_library_element", + "elaborate_generator", + "run_refinement", + "run_backend", + "get_proto_version", + "error", + ] + _WhichOneofArgType_response: _TypeAlias = _typing.Literal["response", b"response"] + + def WhichOneof(self, oneof_group: _WhichOneofArgType_response) -> _WhichOneofReturnType_response | None: ... + +Global___HdlResponse: _TypeAlias = HdlResponse From 3f7fa916e0a0c07355e03f48cfc107dbc5cc5ab9 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:35:27 -0700 Subject: [PATCH 10/11] fix types --- edg/core/Ports.py | 2 +- edg/core/test_port.py | 4 ++-- edg/hdl_server/__main__.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/edg/core/Ports.py b/edg/core/Ports.py index 70d3bccb6..9ee440785 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -226,7 +226,7 @@ def _populate_portlike_proto(self, pb: edgir.PortLike) -> None: pb.lib_elem.target.name = self._get_def_name() @override - def _def_to_proto(self) -> edgir.PortTypes: + def _def_to_proto(self) -> edgir.Port: self._parameters.finalize() pb = edgir.Port() diff --git a/edg/core/test_port.py b/edg/core/test_port.py index f37f259fd..abc7ed4ba 100644 --- a/edg/core/test_port.py +++ b/edg/core/test_port.py @@ -10,7 +10,7 @@ class PortProtoTestCase(unittest.TestCase): @override def setUp(self) -> None: - self.pb = cast(edgir.Port, TestPortBase()._def_to_proto()) # TODO eliminate cast + self.pb = TestPortBase()._def_to_proto() def test_contains_param(self) -> None: self.assertEqual(len(self.pb.params), 1) @@ -21,7 +21,7 @@ def test_contains_param(self) -> None: class PortSourceProtoTestCase(unittest.TestCase): @override def setUp(self) -> None: - self.pb = cast(edgir.Port, TestPortSource()._def_to_proto()) + self.pb = TestPortSource()._def_to_proto() def test_self_class(self) -> None: self.assertEqual(self.pb.self_class.target.name, "edg.core.test_elaboration_common.TestPortSource") diff --git a/edg/hdl_server/__main__.py b/edg/hdl_server/__main__.py index 29cbfe4a0..ea6d3aa5d 100644 --- a/edg/hdl_server/__main__.py +++ b/edg/hdl_server/__main__.py @@ -74,7 +74,7 @@ def elaborate_class(elt_cls: Type[LibraryElementType]) -> Tuple[LibraryElementTy assert isinstance(link_proto, edgir.Link) # TODO this needs to be cleaned up return obj, edgir.Library.NS.Val(link=link_proto) elif isinstance(obj, Port): - return obj, edgir.Library.NS.Val(port=cast(edgir.Port, obj._def_to_proto())) + return obj, edgir.Library.NS.Val(port=obj._def_to_proto()) else: raise RuntimeError(f"didn't match type of library element {elt_cls}") From 0e42ceaa4f5a4e3fdfdfa67e127870f4479b0d46 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Sat, 14 Mar 2026 23:45:33 -0700 Subject: [PATCH 11/11] fix review issues --- edg/core/Ports.py | 3 ++- edg/electronics_model/NetlistGenerator.py | 4 ++-- edg/electronics_model/PinAssignmentUtil.py | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/edg/core/Ports.py b/edg/core/Ports.py index 9ee440785..a24a2e155 100644 --- a/edg/core/Ports.py +++ b/edg/core/Ports.py @@ -228,6 +228,7 @@ def _populate_portlike_proto(self, pb: edgir.PortLike) -> None: @override def _def_to_proto(self) -> edgir.Port: self._parameters.finalize() + self._ports.finalize() pb = edgir.Port() @@ -318,7 +319,7 @@ def Parameter(self, tpe: U) -> U: T = TypeVar("T", bound="Port") def Port(self, tpe: T, *, desc: Optional[str] = None) -> T: - """Registers a field for this Bundle""" + """Registers a sub-Port for this Port""" if not isinstance(tpe, Port): raise EdgTypeError(f"param to Port(...)", tpe, Port) diff --git a/edg/electronics_model/NetlistGenerator.py b/edg/electronics_model/NetlistGenerator.py index 2ac836700..33f1a34d6 100644 --- a/edg/electronics_model/NetlistGenerator.py +++ b/edg/electronics_model/NetlistGenerator.py @@ -223,14 +223,14 @@ def connect_ports( elt1: Tuple[TransformUtil.Path, edgir.EltTypes], elt2: Tuple[TransformUtil.Path, edgir.EltTypes], ) -> None: - """Recursively connect ports as applicable""" + """Recursively connect ports, including containers and leaf ports. Net-ness is ignored here.""" if isinstance(elt1[1], edgir.Port) and isinstance(elt2[1], edgir.Port): scope.edges.setdefault(elt1[0], []).append(elt2[0]) scope.edges.setdefault(elt2[0], []).append(elt1[0]) elt1_names = list(map(lambda pair: pair.name, elt1[1].ports)) elt2_names = list(map(lambda pair: pair.name, elt2[1].ports)) - assert elt1_names == elt2_names, f"mismatched bundle types {elt1}, {elt2}" + assert elt1_names == elt2_names, f"mismatched port sub-ports in types {elt1}, {elt2}" for key in elt2_names: self.connect_ports( scope, diff --git a/edg/electronics_model/PinAssignmentUtil.py b/edg/electronics_model/PinAssignmentUtil.py index 4484b059c..6d2be276e 100644 --- a/edg/electronics_model/PinAssignmentUtil.py +++ b/edg/electronics_model/PinAssignmentUtil.py @@ -12,6 +12,7 @@ def leaf_circuit_ports(prefix: str, port: Port) -> Iterable[Tuple[str, CircuitPo if isinstance(port, CircuitPort): return [(prefix, port)] else: + assert port._ports, "must be CircuitPort or Port bundle with sub-Ports" return chain(*[leaf_circuit_ports(f"{prefix}.{name}", port) for (name, port) in port._ports.items()])