From f2f11c3f2b9cb8d81261144dd73f0483f9c1d6f9 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Fri, 20 Dec 2024 14:12:18 +0000 Subject: [PATCH 01/40] Threading revamp: add ThreadContext and remove Dataflow usage (#400) * Navisworks Connector Init * Build crap * Moar Init * WIP - not yet working * Minor fixes * Fix missing constuctors * unfix * Test commit * Test commit * Remove Dataflow usage * format and remove dep * merge fixes * Fix serializer * Add MainThreadContext * add some main context detection * add RevitMainThreadContext * remove revit async? * Handle Document Events * Document Model Store * Proper implementation * package updates * updated to dev * Document Events binding ??? * registration order * Minimised events subscribed and handle new document state to clear models * Stub Send command * Refactor Connector class to change access modifier of Container property The commit modifies the access modifier of the Container property in the Connector class from public to private. This change improves encapsulation and ensures that the property can only be accessed within the class itself. * Fix NavisworksDocumentStore model list initialization and document validation The commit fixes the initialization of the Models list in the NavisworksDocumentStore class. Instead of assigning an empty array, it now uses the Clear() method to clear the existing models. Additionally, the commit improves the document validation logic by checking if critical properties are accessible before considering the document valid. It also handles cases where the document is disposed. These changes ensure proper initialization of model lists and accurate document validation in NavisworksDocumentStore. * Effectively debouncing on the SDI changes events * Get Selected Objects * ElementSelectionExtension is a collection of helpers to aid the resolution of intent * [Navisworks] Manage document and model state changes - Refactor NavisworksDocumentEvents to manage both document and model state change notifications - Update comments to reflect the new functionality - Rename SubscribeToEvents method to SubscribeToDocumentModelEvents for clarity - Add HandleDocumentModelCountChanging and HandleDocumentModelCountChanged methods to track model count changes - Update OnDocumentModelCountChanged method name to NotifyValidModelStateChange for clarity - Update UnsubscribeFromEvents method name to UnsubscribeFromDocumentModelEvents for clarity - Remove unused constants from NavisworksDocumentStore class * formatting * use mainThreadContext * Use more MainThreadContext * Update Navisworks API references and fix typos - Update references to `Autodesk.Navisworks.Api` namespace to `NAV` namespace - Fix typo in file name: `GlobalUsings.cs` renamed to `GlobalUsing.cs` - Update references to `ModelItem` type from `Autodesk.Navisworks.Api` namespace to `NAV.ModelItem` - Update references to `Document` type from `Autodesk.Navisworks.Api` namespace to `NAV.Document` - Update references to database related types from `Autodesk.Navisworks.Api.Data` namespace to `NAV.Data` - Add new file: NavisworksRootObjectBuilder.cs - Remove unused using statements * Add Navisworks2024 converter dependencies and update project references - Added "Objects.Converter.Navisworks2024" to the packages.lock.json file with dependencies on "Speckle.Converters.Common" and "Speckle.Navisworks.API" - Updated the Speckle.Connectors.Navisworks2024.csproj file to include a reference to "Speckle.Converters.Navisworks2024.csproj" and "Speckle.Converters.Common.csproj" - Added "speckle.converters.common" to the packages.lock.json file with dependencies on "Microsoft.Extensions.Logging.Abstractions" and "Speckle.Objects" - Renamed files: - NavisworksConversionSettings.cs -> NavisworksConversionSettingsFactory.cs - GlobalUsings.cs -> GlobalUsing.cs - NavisworksConversionSettings.cs -> Settings/NavisworksConversionSettings.cs - NavisworksConversionSettings.cs -> Services/NavisworksToSpeckleUnitConverter.cs - NavisworksConversionSettings.cs -> ToSpeckle/NavisworksRootToSpeckleConverter.cs * feat: Add NavisworksSendBinding changes - Added Microsoft.Extensions.DependencyInjection and Microsoft.Extensions.Logging namespaces - Added Speckle.Connectors.Common.Operations namespace - Added Speckle.Connectors.DUI.Exceptions, Speckle.Connectors.DUI.Logging, and Speckle.Connectors.DUI.Models.Card namespaces - Added Speckle.Sdk and Speckle.Sdk.Common namespaces - Updated constructor of NavisworksSendBinding class to include additional parameters - Updated Send method in NavisworksSendBinding class to include try-catch block for handling exceptions during send operation - Updated CancelSend method in NavisworksSendBinding class to call the cancellation manager's CancelOperation method with the modelCardId parameter - Added ResolveIndexPathToModelItem method in ElementSelectionExtension class to resolve the model item path from an index path string - Added ResolveGeometryLeafNodes method in ElementSelectionExtension class to resolve geometry leaf nodes from a model item - Updated Send method in NavisworksSendBinding class to use the resolved model items for sending data * Update namespace in Navisworks plugin files - Update namespace from "Speckle.Connector.Navisworks.NavisPlugin" to "Speckle.Connector.Navisworks.Plugin" in Commands.cs, DockableConnectorPane.cs, and NavisworksRibbon.xaml.cs files. * Add Navisworks sending operations and converters - Added sending operations for Navisworks models - Registered the root object builder and send operation for Navisworks model items - Added Navisworks converters to the service registration - Updated the NavisworksRootToSpeckleConverter to handle null targets and validate target type before conversion * Add folder to project items - Added a new folder to the project items in the Navisworks converter. - The folder includes the necessary files for extensions, global using, service registration, and conversion settings factory. * Refactor NavisworksConversionSettings class to use properties instead of fields - Convert fields to properties in NavisworksConversionSettings class - Update constructor to initialize properties instead of fields * Add Navisworks conversion settings factory and store initialization - Add `INavisworksConversionSettingsFactory` to the constructor of `NavisworksSendBinding` - Initialize `_conversionSettingsFactory` in the constructor of `NavisworksSendBinding` - Initialize the conversion settings store with `_conversionSettingsFactory.Create(NavisworksApp.ActiveDocument)` * Change element selection path separator from '.' to '/' in ElementSelectionExtension.cs This commit updates the code in ElementSelectionExtension.cs to change the default separator used for resolving a Navisworks model item's unique index path representation. The previous separator was '.', and it has been changed to '/'. This change ensures consistency and compatibility with other parts of the codebase that rely on this representation. * Add Navisworks model item to Speckle converter - Add `ModelItemToSpeckleConverter.cs` file for converting Navisworks model items to Speckle objects. - Update `GlobalUsing.cs` to include `SSM` namespace. - Update project file `Speckle.Converters.NavisworksShared.projitems` to include the new converter file. * some rearranging * renaming * Revit needs new run async * merge fixes * gather on worker, convert on main * Update Speckle.Objects and Speckle.Sdk versions to 3.1.0-dev.200 - Updated the requested and resolved versions of Speckle.Objects and Speckle.Sdk to 3.1.0-dev.200 in packages.lock.json files for Connectors/Navisworks/Speckle.Connectors.Navisworks2024 and Converters/Navisworks/Speckle.Converters.Navisworks2024 directories. - Also updated the contentHash values for both packages. Note: This commit updates the versions of Speckle.Objects and Speckle.Sdk to 3.1.0-dev.200 in the mentioned directories' packages.lock.json files, along with their respective contentHash values being updated as well. * operations know threading but not host apps * Add Navisworks and 2024 projects, along with their connectors and converters This commit adds the Navisworks project, along with the 2024 project. It also includes the connectors and converters for both projects. * rhino options * revit can receive * autocad in progress * need to yield for UI thread async * revamp yield * Found APIContext and removed it * ArcGIS runs all workers on MCT thread * Refactor ThreadContext and ArcGIS saving is always on a worker * Revit threading is simplier? * ArcGIS can not always go to the queued task * format * fix tekla compile errors * update etabs * thread context * autocad threading? * Add Navisworks conversion settings and modes This commit adds new files for Navisworks conversion settings and modes. - The `ConversionModes.cs` file defines enums for representation mode and origin mode used during conversion. - The `NavisworksConversionSettings.cs` file represents the settings used for Navisworks conversions, including properties such as document, units, origin mode, hidden elements, visual representation mode, and more. - A new factory class `NavisworksConversionSettingsFactory.cs` is added to create instances of the conversion settings with calculated values based on the active document. - A new file `GeometryHelpers.cs` which contains a static class `GeometryHelpers`. The class provides a method `VectorMatch` that compares two vectors to determine if they are approximately equal within a given tolerance. The method takes in two vectors and an optional tolerance value, and returns true if the vectors match within the tolerance, otherwise false. * Add ArrayExtensions.cs for converting arrays to generic type arrays This commit adds a new file, ArrayExtensions.cs, which contains an extension method for converting arrays to generic type arrays. The method uses the `Array.Copy` function to copy the elements of the original array into a new array of the specified generic type. This allows for more flexibility when working with arrays in the codebase. Specifically Navisworks heavily uses 1* indexed arrays which are a pain to access generically. * Delete Navisworks converters This commit deletes two files: ModelItemToSpeckleConverter.cs and NavisworksRootToSpeckleConverter.cs. These files contained code related to converting Navisworks models to Speckle format. The deletion of these files indicates that the functionality provided by these converters is no longer needed or has been replaced by other methods. * Add new classes for double-precision geometric primitives and transformation matrices - Added `Primitives.cs` file containing definitions for `PointD`, `TriangleD`, and `LineD` classes with double-precision vertex storage - Added `TransformMatrix.cs` file containing a class for 4x4 transformation matrices - Updated project items to include the new files in the build process * Add NavisworksObject and NavisworksGeometryObject classes This commit adds the NavisworksObject and NavisworksGeometryObject classes to handle non-geometry and geometry-based Speckle objects converted from Navisworks. These classes implement the INavisworksObject interface, which provides methods for adding properties to objects and retrieving property values by key. The NavisworksObject class represents a non-geometry object with a name property and a dictionary of properties, while the NavisworksGeometryObject class represents a geometry-based object with a displayValue property, name property, and a dictionary of properties. * Add ClassPropertiesExtractor, DisplayValueExtractor, and PropertySetsExtractor classes - Added ClassPropertiesExtractor class to extract class properties from a NAV.ModelItem - Added DisplayValueExtractor class to extract display values from a NAV.ModelItem - Added PropertySetsExtractor class to extract property sets from a NAV.ModelItem * feat: Add ExcludeProperties option to NavisworksConversionSettings This commit adds a new boolean property, ExcludeProperties, to the NavisworksConversionSettings class. This property allows users to specify whether properties should be excluded from the output. The default value is set to false. Changes: - Added ExcludeProperties boolean property to NavisworksConversionSettings - Updated NavisworksConversionSettingsFactory to include _excludeProperties field and pass it to the NavisworksConversionSettings constructor * feat: Add ModelItemTopLevelConverterToSpeckle This commit adds the `ModelItemTopLevelConverterToSpeckle` class, which converts Navisworks `ModelItem` objects to Speckle Base objects. The converter extracts display values, class properties, and property sets from the Navisworks object and creates a corresponding Speckle Base object. * Add ModelPropertiesExtractor to NavisworksShared This commit adds the ModelPropertiesExtractor class to the NavisworksShared project. The ModelPropertiesExtractor is responsible for extracting model properties from a NAV.Model and adding them to a dictionary. These properties include Creator, Filename, Source Filename, Units, Transform, Guid, and Source Guid. The extracted properties are then added to the navisworks object as key-value pairs. * Refactor PropertyHelpers to handle property conversion and sanitization - Refactored `PropertyHelpers` class to be static - Added a dictionary of type handlers for converting property values - Implemented `ConvertPropertyValue` method to convert property values based on their data type - Added support for handling different data types, including boolean, string, integer, double, datetime, named constant, and 3D point - Implemented `SanitizePropertyName` method to replace invalid characters in property names with underscores - Added `IsCategoryToBeSkipped` method to determine if a property category should be skipped during processing * feat: Add property set extraction logic This commit adds logic to extract property sets from a NAV.ModelItem. It iterates through the property categories and properties, skipping certain categories as needed. Each property is added to a dictionary with its sanitized name as the key and its converted value based on Speckle units. The resulting property sets are stored in a dictionary with the sanitized category name as the key. * Refactor ModelItemTopLevelConverterToSpeckle: Add IRootToSpeckleConverter interface This commit adds the `IRootToSpeckleConverter` interface to the `ModelItemTopLevelConverterToSpeckle` class. It also modifies the `Convert` method to handle null target objects and updates the implementation of the `CreateNonGeometryObject` method. * Add Navisworks 2020 - 2025 In addition to 2024 * Update DocumentModelStore.cs - Made `HostAppSaveState` and `LoadState` methods public - Updated method signatures to reflect changes * Add BoundingBoxToSpeckleRawConverter This commit adds the BoundingBoxToSpeckleRawConverter class, which is responsible for converting NAV.BoundingBox3D objects to Box objects. It includes methods for converting the target object and a nullable version of it. The converter uses settings from the IConverterSettingsStore interface to set up the base plane and create the bounding box with appropriate units and intervals. * Fix null reference exception in NavisworksRootObjectBuilder.cs The code change fixes a null reference exception that occurs when checking if `navisworksModelItems` is empty or null. If it is, a `SpeckleException` is thrown with the message "No objects to convert". Additionally, a check for `sendInfo` being null has been added before continuing with the conversion process. The progress of the conversion is reported using the `onOperationProgressed` callback. * Refactor NavisworksBasicConnectorBinding and NavisworksSendBinding - Simplify AddModel method in NavisworksBasicConnectorBinding - Remove unused import statements in NavisworksSendBinding - Update initialization of conversion settings in NavisworksSendBinding * Update NavisworksServiceRegistration.cs - Removed unused using statements - Updated AddDUI method to use NavisworksDocumentModelStore - Updated DocumentModelStore registration to use NavisworksDocumentModelStore * Refactor NavisworksDocumentModelStore to updated API - Clear the store and save when models are removed - Load state from the database when models are added - Rename methods for clarity: ReadFromFile() -> LoadState(), WriteToFile() -> HostAppSaveState() - Improve exception handling and error messages * Refactor data extractors in Navisworks converter - Make `GetClassProperties`, `GetDisplayValue`, `GetModelProperties`, and `GetPropertySets` methods internal - Remove unused using statements * Update GlobalUsing.cs: Remove unnecessary global using statement The commit removes an unnecessary global using statement in the GlobalUsing.cs file. This change helps to clean up the code and improve readability. * Add NavisworksPrimitiveProcessor and PrimitiveProcessor classes - Added NavisworksPrimitiveProcessor class with methods for processing Navisworks primitives - Added PrimitiveProcessor class with methods for processing generic primitives - Updated the constructor of PrimitiveProcessor to accept an additional parameter for local to world transformation - Updated the Line, Point, and Triangle methods in both classes to use the new transformation logic * feat: Add internal modifier to VectorMatch method - Changed the access modifier of the VectorMatch method in GeometryHelpers class from public to internal. feat: Add sealed modifier to NavisworksObject and NavisworksGeometryObject classes - Added the sealed modifier to the NavisworksObject and NavisworksGeometryObject classes in NavisworksObjects.cs file. refactor: Rename enum values in ConversionModes.cs - Renamed the enum values MODEL_ORIGIN, PROJECT_BASE_ORIGIN, and BOUNDING_BOX_ORIGIN to MODELORIGIN, PROJECTBASEORIGIN, and BOUNDINGBOXORIGIN respectively in ConversionModes.cs file. refactor: Update CreateGeometryObject method signature - Updated the CreateGeometryObject method signature in ModelItemTopLevelConverterToSpeckle.cs file by making it static and using DisplayValueExtractor.GetDisplayValue instead of _displayValueExtractor.GetDisplayValue. * Change origin mode constants to use camel case and update related calculations - Update the origin mode constant from "MODEL_ORIGIN" to "MODELORIGIN" - Update the origin mode constant from "PROJECT_BASE_ORIGIN" to "PROJECTBASEORIGIN" - Update the origin mode constant from "BOUNDING_BOX_ORIGIN" to "BOUNDINGBOXORIGIN" - Update the calculation of the transformation vector based on the new origin mode constants * Add NavisworksPrimitiveProcessor and BoundingBoxToSpeckleRawConverter The commit adds two new files: NavisworksPrimitiveProcessor.cs and BoundingBoxToSpeckleRawConverter.cs to the project. These files are included in the compilation process. * Add support for Speckle connectors in Navisworks versions 2020 to 2025. - Added runtime requirements and component entries for Navisworks versions 2020 to 2025. - Each component entry includes the module name and app description. * Add database transaction for table creation in NavisworksDocumentModelStore.cs This commit adds a database transaction to ensure the existence of the required table before performing any operations in NavisworksDocumentModelStore.cs. This helps maintain data integrity and prevents errors related to missing tables. * Update Navisworks connectors to include Speckle.Connectors.DUI dependency. - Added "Speckle.Connectors.DUI" as a dependency in the Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2024 packages. - Updated project references in the Navisworks2024 package to include the "Speckle.Connectors.DUI" project. - Added "Speckle.Connectors.DUI" as a dependency in the Navisworks2025 package. - Renamed "NavisworksServiceRegistration.cs" to "NavisworksConnectorServiceRegistration.cs". - Updated project references in the NavisworksConverters for 2020 and 2021 packages to include the "Speckle.Connectors.DUI" project. * Refactor NavisworksSendBinding constructor parameters and dependencies - Changed the type of `_conversionSettingsFactory` parameter in `NavisworksSendBinding` constructor from `INavisworksConversionSettingsFactory` to `NavisworksConversionSettingsFactory`. - Removed duplicate initialization of `Parent` and `Commands` properties in the `NavisworksSendBinding` constructor. - Moved the call to `SubscribeToNavisworksEvents()` after initializing `_conversionSettingsFactory`. Register additional services for Navisworks connector - Added registration for `ToSpeckleSettingsManager`. - Added registration for `IOperationProgressManager`. Refactor NavisworksRootObjectBuilder - Updated access to `_converterSettings.Current.SpeckleUnits` to `_converterSettings.Current.Derived.SpeckleUnits`. Update DockableConnectorPane.cs - Updated the call to `services.AddNavisworksConverters()` to use the correct method name, which is now `services.AddNavisworksConverter()`. Refactor ClassPropertiesExtractor, ModelPropertiesExtractor, and PropertySetsExtractor - Updated access to `_settingsStore.Current.ExcludeProperties` to use `_settingsStore.Current.User.ExcludeProperties`. Register additional services for Navisworks converter - Added registration for `IToSpeckleSettingsManager`. - Added registration for `INavisworksConversionSettingsFactory`. * Bruh!! - Update the type of _conversionSettingsFactory field from NavisworksConversionSettingsFactory to INavisworksConversionSettingsFactory. - Update the type of conversionSettingsFactory parameter in the constructor from NavisworksConversionSettingsFactory to INavisworksConversionSettingsFactory. * Add NavisworksRootObjectBuilder and related settings classes for sending operations Add NavisworksRootObjectBuilder and related settings classes for sending operations - Added NavisworksRootObjectBuilder class for sending operations - Added ConvertHiddenElementsSetting class for sending operations - Added IncludeInternalPropertiesSetting class for sending operations - Added OriginModeSetting class for sending operations - Added VisualRepresentationSetting class for sending operations * Refactor conversion mode and origin mode enums - Renamed "ACTIVE" to "Active" - Renamed "ORIGINAL" to "Original" - Renamed "PERMANENT" to "Permanent" - Renamed "MODELORIGIN" to "ModelOrigin" - Renamed "PROJECTBASEORIGIN" to "ProjectBasePoint" - Renamed "BOUNDINGBOXORIGIN" to "BoundingBoxCenter" Updated the NavisworksConversionSettingsFactory class: - Updated references and imports - Updated switch cases for originMode enum with new names * feat: Add new settings to NavisworksSendBinding and remove unused import - Added new settings to the `GetSendSettings()` method in `NavisworksSendBinding` class. - Removed unused import of `Speckle.Connector.Navisworks.Settings` in `NavisworksConverterServiceRegistration.cs`. * Update Navisworks connector service registration and settings manager - Updated the service registration in `NavisworksConnectorServiceRegistration.cs` to use `ToSpeckleSettingsManagerNavisworks` instead of `ToSpeckleSettingsManager`. - Renamed `ToSpeckleSettingsManager.cs` to `ToSpeckleSettingsManagerNavisworks.cs` in the send operations settings folder. - Updated the project file `Speckle.Connectors.NavisworksShared.projitems` to include the renamed file. - Added a new dependency on `speckle.connectors.dui.webview`, which includes dependencies on `Microsoft.Web.WebView2` and `Speckle.Connectors.DUI`. - Updated the conversion settings factory in `NavisworksConversionSettingsFactory.cs` to use `IToSpeckleSettingsManagerNavisworks` instead of `IToSpeckleSettingsManager`. * Add project references to DUI and Navisworks converters in Navisworks connectors - Added a project reference to `Speckle.Connectors.DUI` in the Navisworks 2020, 2021, 2022, 2023, and 2025 connector projects. - Added project references to the respective Navisworks converter projects in the Navisworks 2020, 2021, 2022, 2023, and 2025 connector projects. - Removed a compile include for `NavisworksSelectionFilter.cs` from the shared Navisworks converter projitems file. - Added a compile include for `NavisworksSelectionFilter.cs` in the send filters folder of the shared Navisworks converter projitems file. * here we go again This commit adds support for Navisworks conversion settings in the SendBinding class. It introduces a new interface, IToSpeckleSettingsManagerNavisworks, and implements it in the ToSpeckleSettingsManagerNavisworks class. The NavisworksSendBinding constructor now takes an additional parameter of type IToSpeckleSettingsManagerNavisworks. In addition, some file and namespace renaming has been done to align with the changes made. * FFS - Cyclical relationships or missing assemblies * FFS - Removed references to Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2025 connectors in packages.lock.json files - Commented out project references to Navisworks2020, Navisworks2021, Navisworks2022, Navisworks2023, and Navisworks2025 connectors in csproj files - Updated project reference for shared converter in shproj file * Update NavisworksConnectorServiceRegistration.cs - Update the registration of ToSpeckleSettingsManagerNavisworks to use the interface IToSpeckleSettingsManagerNavisworks instead of the concrete class ToSpeckleSettingsManagerNavisworks. * Update NavisworksSendBinding to use ToSpeckleSettingsManagerNavisworks instead of IToSpeckleSettingsManagerNavisworks for conversion settings retrieval. Update NavisworksSendBinding to use ToSpeckleSettingsManagerNavisworks instead of IToSpeckleSettingsManagerNavisworks for conversion settings retrieval. This commit updates the NavisworksSendBinding code to replace the usage of IToSpeckleSettingsManagerNavisworks with ToSpeckleSettingsManagerNavisworks for retrieving conversion settings. This change ensures consistency and improves the overall functionality of the code. * merge fixes * Refactor NavisworksObjects.cs: Improve object representation and property handling - Rename `NavisworksObject` to `NavisworksModelItem` - Remove unused properties and suppress style warnings - Add required parameters to constructors for `name` and `displayValue` - Update property accessors for `elements`, `displayValue`, and `name` - Improve implementation of `AddProperty` and `GetProperty` methods * Refactor display value extraction and object creation in Navisworks converter - Refactored the `GetDisplayValue` method in `DisplayValueExtractor.cs` to be an instance method instead of static. - Updated the `CreateGeometryObject` method in `ModelItemTopLevelConverterToSpeckle.cs` to use an instance of `DisplayValueExtractor`. - Changed the return type of `CreateNonGeometryObject` method in `ModelItemTopLevelConverterToSpeckle.cs` to match the updated class name. These changes improve code organization and maintainability. * Update Speckle SDK and Objects to version 3.1.0-dev.203 in Navisworks connectors for versions 2020, 2021, 2022, and 2023. * remove more async * clean up * can build agian * Use valuetask * fmt * fix up some bridge execution to be sync * Refactor NavisworksRootObjectBuilder.cs: Improve initialization of root object collection - Initialize root object collection with name and units in a more concise way - Improve readability and maintainability of the code * Fix logger import in NavisworksRootObjectBuilder.cs The commit fixes an issue with the logger import in the NavisworksRootObjectBuilder.cs file. The incorrect namespace was causing a compilation error. This change ensures that the correct namespace is used for the logger, resolving the compilation error and allowing for proper logging functionality. * Refactor ClassPropertiesExtractor to simplify GetClassProperties method The GetClassProperties method in the ClassPropertiesExtractor class has been refactored to improve readability and reduce unnecessary code. The if statement that checks for exclusion of properties has been removed, as it is no longer needed. Instead, the ExtractClassProperties method is directly returned. This change simplifies the logic and improves code maintainability. * Fix static method in DisplayValueExtractor The commit fixes a bug in the DisplayValueExtractor class where the GetDisplayValue method was not declared as static. This caused a compilation error. The fix makes the method static, allowing it to be called without an instance of the class. * Add BasePropertyHandler, HierarchicalPropertyHandler, IPropertyHandler, and StandardPropertyHandler classes for handling property assignment in Navisworks conversion. - Added IPropertyHandler interface to define the contract for handling property assignment to Speckle objects. - Added BasePropertyHandler class to provide common functionality for property assignment. - Added StandardPropertyHandler class to handle standard property assignment without any merging or hierarchy processing. - Added HierarchicalPropertyHandler class to handle property assignment with hierarchy merging for objects that require ancestor properties. * Refactor class hierarchy and method signatures for Navisworks conversion - Make `GetClassProperties` method in `ClassPropertiesExtractor` static - Remove `classPropertiesExtractor` parameter from constructors in `BasePropertyHandler`, `HierarchicalPropertyHandler`, and `StandardPropertyHandler` - Update references to `classPropertiesExtractor.GetClassProperties(modelItem)` to use the static method `ClassPropertiesExtractor.GetClassProperties(modelItem)` - Rename private field `_properties` in classes implementing `INavisworksObject` to `Properties` - Rename public property `elements` in class `NavisworksModelItem` to `Elements` - Rename public property `displayValue` in class `NavisworksModelGeometry` to lowercase (`displayvalue`) - Add missing using statements * Add ElementSelectionHelper class for working with Navisworks ModelItem selections. This commit adds a new file, ElementSelectionHelper.cs, which contains a static class called ElementSelectionHelper. This class provides extension methods for working with Navisworks ModelItem selections. The class includes the following significant changes: - Added ResolveModelItemToIndexPath method: This method takes a Navisworks ModelItem and resolves it to its unique index path representation. The resulting string represents the model item's path, including the model index and a hierarchical path identifier separated by a specified separator. - Added ResolveIndexPathToModelItem method: This method takes an index path string and resolves it to a Navisworks ModelItem. It splits the index path into parts, assigns the first part to the modelIndex variable as an integer, and joins the remaining parts as the pathId string. - Added IsElementVisible method: This method determines whether a Navisworks ModelItem and all its ancestors are visible. It checks the visibility status for each item in the item's ancestorsAndSelf collection and returns true if none of them are hidden. - Added ResolveGeometryLeafNodes method: This method takes a Navisworks ModelItem and returns a list of all its descendants (including itself) that have geometry. These changes enhance functionality related to working with Navisworks ModelItems in Speckle.Converter.NavisworksShared.Helpers namespace. * cleanup * WIP on jsdb/navisworks WIP on jsdb/navisworks - Replaced `ModelItemTopLevelConverterToSpeckle` with `NavisworksRootToSpeckleConverter` in `NavisworksConverterServiceRegistration.cs` - Added new files to the project: `BasePropertyHandler.cs`, `HieraerchicalPropertyHandler.cs`, `IPropertyHandler.cs`, and `StandardPrpertyHandler.cs` - Updated the file path in the project items XML - Modified `NavisworksRootToSpeckleConverter.cs` to use the updated method name * Update Speckle.Objects to version 3.1.0-dev.205 in Navisworks connectors for versions 2020, 2021, and 2022. - Update Speckle.Objects to version 3.1.0-dev.205 - Update Speckle.Sdk to version 3.1.0-dev.205 - Update Speckle.Sdk.Dependencies to version 3.1.0-dev.205 * Fix reserved term replacement in PropertyHelpers.cs The commit fixes a bug in the PropertyHelpers.cs file where the reserved term "Item" was not being replaced correctly. The replacement has been changed from "Item_" to "Item". * Refactor property handlers and model objects - Remove unused code in ClassPropertiesExtractor.cs - Refactor PropertySetsExtractor.cs to use dependency injection for settingsStore - Refactor BasePropertyHandler.cs to include classPropertiesExtractor parameter - Rename HieraerchicalPropertyHandler.cs to HierarchicalPropertyHandler.cs - Rename StandardPrpertyHandler.cs to StandardPropertyHandler.cs - Update NavisworksConverterServiceRegistration.cs to register the new property handlers * Refactor model item name retrieval logic in ModelItemTopLevelConverterToSpeckle.cs - Refactored the GetObjectName method to improve readability and maintainability. - Updated the logic to retrieve the target object's display name, cycling through parent objects if necessary. - Added a fallback case to return "Unnamed model item" if no valid display name is found. * Whitespace in property name conversion to _ in PropertyHelpers.cs The code change fixes a bug in the `PropertyHelpers.cs` file where property names were not being converted correctly. The regular expression used to replace characters now includes whitespace characters as well. This ensures that all invalid characters are replaced with underscores, allowing for proper conversion of property names. * Add GeometryNodeMerger class to handle merging of sibling geometry nodes. - Added `GeometryNodeMerger` class to handle grouping and merging of sibling geometry nodes. - Updated `NavisworksRootObjectBuilderExtensions` to use `GeometryNodeMerger` for grouping and merging. - Updated `NavisworksRootObjectBuilder` to use `ClassPropertiesExtractor` and `PropertySetsExtractor`. - Refactored code in `NavisworksRootObjectBuilder.Build()` method to improve readability and maintainability. * modify GeometryNodeMerger.cs and NavisworksRootObjectBuilder.cs - Modified GeometryNodeMerger.cs to only group anonymous geometry nodes - Modified NavisworksRootObjectBuilder.cs to refactor the Build method, handle grouped nodes first, and set the final elements list * add some non async paths for progress * format * remove needless selection * Initialize root collection, convert and store model items, process and merge grouped nodes, add remaining non-grouped nodes, finalize and return. * Add NavisworksMaterialUnpacker class for unpacking render materials This commit adds a new file, NavisworksMaterialUnpacker.cs, which contains the implementation of the NavisworksMaterialUnpacker class. This class is responsible for unpacking render materials from Navisworks objects. The NavisworksMaterialUnpacker class includes methods such as UnpackRenderMaterial and ConvertRenderColorAndTransparencyToSpeckle, which handle the extraction and conversion of render material properties. Additionally, the project file Speckle.Connectors.NavisworksShared.projitems has been updated to include the newly added NavisworksMaterialUnpacker.cs file. * Add `NavisworksMaterialUnpacker` to `NavisworksRootObjectBuilder` constructor - Add `NavisworksMaterialUnpacker` to the service collection in `NavisworksConnectorServiceRegistration.cs`. - Update the constructor of `NavisworksRootObjectBuilder` to include dependencies for `IRootToSpeckleConverter`, `ISendConversionCache`, `IConverterSettingsStore`, `ILogger`, `ISdkActivityFactory`, and `NavisworksMaterialUnpacker`. This commit adds the registration of the `NavisworksMaterialUnpacker` class to the service collection in order to enable dependency injection. It also updates the constructor of the `NavisworksRootObjectBuilder` class to include all necessary dependencies for its functionality. * Update Speckle.Objects to version 3.1.0-dev.212 in Navisworks connectors for versions 2020, 2021, and 2022. The commit updates the packages.lock.json file for the Navisworks connectors for versions 2020, 2021, and 2022. It changes the requested and resolved version of Speckle.Objects from 3.1.0-dev.205 to 3.1.0-dev.212 * Add NavisworksObject to finalElements in NavisworksRootObjectBuilder This commit adds the NavisworksObject class to the finalElements list in the NavisworksRootObjectBuilder. The NavisworksObject contains properties such as name, displayValue, properties, and units. This change improves the functionality of the code by including additional information for each element in the finalElements list. * Add applicationId to NavisworksRootObjectBuilder This commit adds the applicationId property to the NavisworksRootObjectBuilder class in order to include it in the finalElements list. This change ensures that the applicationId is properly assigned and included when building Navisworks objects for sending. * RunOnMainThreadAsync implemented - Refactored GetDocumentInfo method in NavisworksBasicConnectorBinding to run on the main thread using Parent.RunOnMainThreadAsync - Refactored HighlightObjects method in NavisworksBasicConnectorBinding to run on the main thread using Parent.RunOnMainThreadAsync - Refactored OnSelectionChange method in NavisworksSelectionBinding to use async/await and run UpdateSelectionAsync on the main thread using Parent.RunOnMainThreadAsync - Added async/await to Send method in NavisworksSendBinding and refactored code inside it to use async/await for better readability - Extracted common logic into separate methods in NavisworksSendBinding: GetModelCard, InitializeConverterSettings, GetNavisworksModelItems, ExecuteSendOperation - Added cancellation support to CancelSend method in NavisworksSendBinding by calling _cancellationManager.CancelOperation with modelCardId as argument - Refactored ProcessModelStateChange method in NavisworksDocumentEvents to use async/await and added check for _finalModelCount value * Restore DocumentModelStore.cs accessibility - not sure when that changed - Change access modifiers of HostAppSaveState and LoadState methods to protected - Update method comments to reflect changes in access modifiers * Refactor NavisworksConnectorServiceRegistration and NavisworksDocumentEvents - Added NavisworksMaterialUnpacker to service collection - Updated registration of DocumentModelStore in service collection - Updated references to DocumentModelStore with NavisworksDocumentModelStore in NavisworksDocumentEvents - Renamed HostAppSaveState method to protected override method in NavisworksDocumentModelStore - Added public method ReloadState as a wrapper for LoadState in NavisworksDocumentModelStore * Delete Navisworks solution file The commit deletes the Navisworks solution file, which is no longer needed. * Delete packages.lock.json * Remove Navisworks 2025 * Reset Navisworks project references and project names - Updated the project reference for "Navisworks" in Local.sln to use a new GUID - Updated the project reference for "2024" in Local.sln to use a new GUID - Updated the project reference for "Shared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Connectors.NavisworksShared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Converters.NavisworksShared" in Local.sln to use a new GUID - Updated the project name and GUID for "Navisworks" in Speckle.Connectors.sln - Updated the project name and GUID for "Shared" in Speckle.Connectors.sln * Update Microsoft.Web.WebView2 package to version 1.0.2088.41 in Autocad connectors for versions 2022, 2023, 2024, and 2025. This commit updates the Microsoft.Web.WebView2 package in the Autocad connectors for versions 2022, 2023, 2024, and 2025 from version 1.0.1938.49 to version 1.0.2088.41. This change ensures compatibility with the latest version of the package and includes necessary bug fixes or improvements related to web view functionality in the connectors. * Reset Navisworks project references and project names - Updated the project reference for "Navisworks" in Local.sln to use a new GUID - Updated the project reference for "2024" in Local.sln to use a new GUID - Updated the project reference for "Shared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Connectors.NavisworksShared" in Local.sln to use a new GUID - Updated the project reference for "Speckle.Converters.NavisworksShared" in Local.sln to use a new GUID - Updated the project name and GUID for "Navisworks" in Speckle.Connectors.sln - Updated the project name and GUID for "Shared" in Speckle.Connectors.sln * Update Microsoft.Web.WebView2 version to [1.0.1938.49, ) in Autocad and Civil3d connectors This commit updates the version of Microsoft.Web.WebView2 to [1.0.1938.49, ) in the Autocad and Civil3d connectors packages.lock.json files. The previous version was 1.0.2088.41, and the contentHash has also been updated accordingly. Note: This commit message is exactly 50 characters long, as per the requirement for a short description less than 50 characters. * Refactor to avoid the early disposal of COM objects - Remove the `GeometryNodeMerger` class from service registration in `NavisworksConnectorServiceRegistration.cs` - Change the access modifier of `UnpackRenderMaterial` method in `NavisworksMaterialUnpacker.cs` to internal - Change the access modifier of `ConvertRenderColorAndTransparencyToSpeckle` method in `NavisworksMaterialUnpacker.cs` to private static - Change the access modifier of `GroupSiblingGeometryNodes` method in `GeometryNodeMerger.cs` to public static - Add null checks for parameters in methods: - GetClassProperties in ClassPropertiesExtractor.cs - GetPropertySets and AssignProperties in BasePropertyHandler.cs - AssignClassProperties and ExtractClassProperties in ClassPropertiesExtractor.cs - GetPropertySets in PropertySetsExtractor.cs - AssignPropertySets, AssignModelProperties, and ExtractModelProperties in ModelPropertiesExtractor.cs - NavisworksRootObjectBuilder constructor * feat: Add geometry conversion functionality - Added `DisplayValueExtractor` class for extracting display values from Navisworks model items - Added `GeometryToSpeckleConverter` class for converting Navisworks geometry to Speckle SDK models - Updated dependencies in `NavisworksConverterServiceRegistration.cs` to include the new classes * Rename GeomtryNodeMerger.cs to GeometryNodeMerger.cs This commit renames the file GeomtryNodeMerger.cs to GeometryNodeMerger.cs. * Remove redundant code shared by both projects - Updated NavisworksSelectionBinding to include IElementSelectionService as a dependency in the constructor. - Updated NavisworksSendBinding to include IElementSelectionService as a dependency in the constructor. - Removed ElementSelectionExtension.cs file. - Added ElementSelectionService.cs file which includes methods for getting model item path, resolving model item from path, checking visibility of model items, and getting geometry nodes. * fix lock files * cannot make null valuetasks * merge fixes * update to latest SDK * scope the classes correctly for the deserialization process * Navisworks proj cleanup (#443) * Clean up projects and locks for all Navisworks * Fix nuget error * Fixed Local SLN and removed some runtime IDs * add back RuntimeIdentifier * We shouldn't be using ConfigureAwait false * Fix lock files for NW * Rhino doesn't need explicit run on main threads? * add back layers and materials on ui thread with comment * Update to SDK 3.1.0-218 * update locks * rationalize NW and usage of cancellation token * format * remove .ConfigureAwait(false) * Remove ValueTask and fix ArcGIS doc saving * run events on the correct thread * format * Remove usage of sync context --------- Co-authored-by: Jonathon Broughton Co-authored-by: oguzhankoral Co-authored-by: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> --- .editorconfig | 3 + Build/Github.cs | 4 +- Build/Program.cs | 2 +- .../Bindings/ArcGISReceiveBinding.cs | 17 +- .../Bindings/ArcGISSendBinding.cs | 178 +++++++++--------- .../Bindings/BasicConnectorBinding.cs | 42 ++--- .../ArcGISConnectorModule.cs | 2 +- .../HostApp/ArcGISColorManager.cs | 9 +- .../HostApp/ArcGISLayerUnpacker.cs | 4 +- .../Receive/ArcGISHostObjectBuilder.cs | 161 +++++++--------- .../Send/ArcGISRootObjectBuilder.cs | 127 +++++-------- .../SpeckleDUI3ViewModel.cs | 4 +- .../SpeckleModule.cs | 2 - .../Utils/ArcGISThreadContext.cs | 36 ++++ .../Utils/ArcGisDocumentStore.cs | 93 ++++----- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../Bindings/AutocadBasicConnectorBinding.cs | 108 ++++++----- .../Bindings/AutocadReceiveBinding.cs | 13 +- .../Bindings/AutocadSelectionBinding.cs | 11 +- .../Bindings/AutocadSendBaseBinding.cs | 26 ++- .../Bindings/AutocadSendBinding.cs | 7 +- .../DependencyInjection/SharedRegistration.cs | 7 +- .../HostApp/AutocadColorBaker.cs | 13 +- .../HostApp/AutocadInstanceBaker.cs | 8 +- .../HostApp/AutocadLayerBaker.cs | 8 +- .../HostApp/AutocadMaterialBaker.cs | 4 +- .../Receive/AutocadHostObjectBuilder.cs | 103 +++------- .../Send/AutocadRootObjectBaseBuilder.cs | 13 +- .../Plugin/AutocadCommand.cs | 2 - .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../Bindings/Civil3dSendBinding.cs | 7 +- .../Bindings/CsiSharedSendBinding.cs | 9 +- .../Operations/Send/CsiRootObjectBuilder.cs | 7 +- .../ServiceRegistration.cs | 8 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../NavisworksBasicConnectorBinding.cs | 30 +-- .../Bindings/NavisworksSelectionBinding.cs | 12 +- .../Bindings/NavisworksSendBinding.cs | 27 +-- .../NavisworksConnectorServiceRegistration.cs | 3 +- .../HostApp/NavisworksDocumentEvents.cs | 48 ++--- .../Send/NavisworksRootObjectBuilder.cs | 6 +- .../Plugin/DockableConnectorPane.cs | 3 - .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../CefSharpPanel.xaml.cs | 10 +- .../Bindings/BasicConnectorBindingRevit.cs | 61 +++--- .../Bindings/RevitReceiveBinding.cs | 13 +- .../Bindings/RevitSendBinding.cs | 70 +++---- .../Bindings/SelectionBinding.cs | 11 +- .../RevitConnectorModule.cs | 7 +- .../HostApp/APIContext.cs | 130 ------------- .../HostApp/RevitDocumentStore.cs | 47 ++--- .../Receive/RevitHostObjectBuilder.cs | 143 +++++--------- .../Send/Filters/IRevitSendFilter.cs | 5 +- .../Send/Filters/RevitCategoriesFilter.cs | 8 +- .../Send/Filters/RevitViewsFilter.cs | 8 +- .../Operations/Send/RevitRootObjectBuilder.cs | 76 +++----- .../Send/Settings/ToSpeckleSettingsManager.cs | 3 - .../Plugin/RevitExternalApplication.cs | 2 - .../Plugin/RevitIdleManager.cs | 16 +- .../Plugin/RevitThreadContext.cs | 16 ++ .../Speckle.Connectors.RevitShared.projitems | 4 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../Bindings/RhinoBasicConnectorBinding.cs | 10 +- .../Bindings/RhinoReceiveBinding.cs | 13 +- .../Bindings/RhinoSendBinding.cs | 15 +- .../Receive/RhinoHostObjectBuilder.cs | 73 ++++--- .../Operations/Send/RhinoRootObjectBuilder.cs | 7 +- .../Plugin/Speckle.Connectors.RhinoPlugin.cs | 2 - .../Registration/ServiceRegistration.cs | 6 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../Bindings/TeklaBasicConnectorBinding.cs | 77 ++++---- .../Bindings/TeklaSelectionBinding.cs | 3 - .../Bindings/TeklaSendBinding.cs | 11 +- .../Operations/Send/TeklaRootObjectBuilder.cs | 8 +- .../ServiceRegistration.cs | 3 +- .../ArcGISConversionSettingsFactory.cs | 7 +- .../Utils/FeatureClassUtils.cs | 6 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../packages.lock.json | 9 +- .../Bridge/IdleCallManagerTests.cs | 2 +- .../Speckle.Connectors.DUI.Tests.csproj | 6 - .../packages.lock.json | 9 +- .../DUI3ControlWebView.xaml.cs | 3 +- .../packages.lock.json | 18 +- .../Bindings/IBasicConnectorBinding.cs | 29 ++- .../Bindings/OperationProgressManager.cs | 28 ++- .../Bindings/ReceiveBindingUICommands.cs | 20 +- .../Bindings/SendBindingUICommands.cs | 45 ++--- .../Bindings/TestBinding.cs | 22 +-- .../Bridge/BrowserBridge.cs | 171 +++++------------ .../Bridge/IBrowserBridge.cs | 18 +- .../Bridge/IBrowserScriptExecutor.cs | 2 +- .../Bridge/IdleCallManager.cs | 4 +- .../Bridge/SyncToUIThread.cs | 18 -- .../Bridge/TopLevelExceptionHandler.cs | 69 ++++--- .../ContainerRegistration.cs | 12 +- .../Speckle.Connectors.DUI.csproj | 1 - .../Speckle.Connectors.DUI/packages.lock.json | 6 - Directory.Packages.props | 3 +- .../Builders/IHostObjectBuilder.cs | 3 +- .../Builders/IRootObjectBuilder.cs | 4 +- .../Operations/ISyncToThread.cs | 6 - .../Operations/ReceiveOperation.cs | 77 +++++--- .../Operations/ReceiveProgress.cs | 48 +++-- .../Operations/SendOperation.cs | 31 +-- .../Threading/DefaultThreadContext.cs | 36 ++++ .../Threading/TaskExtensions.cs | 8 + .../Threading/ThreadContext.cs | 122 ++++++++++++ .../Threading/ThreadContextExtensions.cs | 28 +++ .../Threading/ThreadOptions.cs | 12 ++ .../ActivityScopeTests.cs | 2 +- 137 files changed, 1329 insertions(+), 1878 deletions(-) create mode 100644 Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGISThreadContext.cs delete mode 100644 Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/APIContext.cs create mode 100644 Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs delete mode 100644 DUI3/Speckle.Connectors.DUI/Bridge/SyncToUIThread.cs delete mode 100644 Sdk/Speckle.Connectors.Common/Operations/ISyncToThread.cs create mode 100644 Sdk/Speckle.Connectors.Common/Threading/DefaultThreadContext.cs create mode 100644 Sdk/Speckle.Connectors.Common/Threading/TaskExtensions.cs create mode 100644 Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs create mode 100644 Sdk/Speckle.Connectors.Common/Threading/ThreadContextExtensions.cs create mode 100644 Sdk/Speckle.Connectors.Common/Threading/ThreadOptions.cs diff --git a/.editorconfig b/.editorconfig index 32ff38613..416023432 100644 --- a/.editorconfig +++ b/.editorconfig @@ -254,6 +254,9 @@ dotnet_diagnostic.ca1508.severity = warning # Avoid dead conditional code dotnet_diagnostic.ca1509.severity = warning # Invalid entry in code metrics configuration file dotnet_diagnostic.ca1861.severity = none # Prefer 'static readonly' fields over constant array arguments if the called method is called repeatedly and is not mutating the passed array (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1861) +# CA2007: Consider calling ConfigureAwait on the awaited task (this is not needed for application code, in fact we don't want to call anything but ConfigureAwait(true) which is the default) +dotnet_diagnostic.CA2007.severity = none + dotnet_diagnostic.cs8618.severity = suggestion # nullable problem diff --git a/Build/Github.cs b/Build/Github.cs index b62ddeb39..9c9f335a1 100644 --- a/Build/Github.cs +++ b/Build/Github.cs @@ -28,11 +28,11 @@ public static async Task BuildInstallers(string token, string runId, string vers Content = content }; request.Headers.Add("X-GitHub-Api-Version", "2022-11-28"); - var response = await client.SendAsync(request).ConfigureAwait(false); + var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) { throw new InvalidOperationException( - $"{response.StatusCode} {response.ReasonPhrase} {await response.Content.ReadAsStringAsync().ConfigureAwait(false)}" + $"{response.StatusCode} {response.ReasonPhrase} {await response.Content.ReadAsStringAsync()}" ); } } diff --git a/Build/Program.cs b/Build/Program.cs index 8604c198c..3eb8dac67 100644 --- a/Build/Program.cs +++ b/Build/Program.cs @@ -98,7 +98,7 @@ void RemoveDirectory(string d) VERSION, async () => { - var (output, _) = await ReadAsync("dotnet", "minver -v w").ConfigureAwait(false); + var (output, _) = await ReadAsync("dotnet", "minver -v w"); output = output.Trim(); Console.WriteLine($"Version: {output}"); Run("echo", $"\"version={output}\" >> $GITHUB_OUTPUT"); diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs index ef35bc039..e78caa1ea 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISReceiveBinding.cs @@ -78,17 +78,14 @@ public async Task Receive(string modelCardId) modelCard.GetReceiveInfo("ArcGIS"), // POC: get host app name from settings? same for GetSendInfo _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); modelCard.BakedObjectIds = receiveOperationResults.BakedObjectIds.ToList(); - await Commands - .SetModelReceiveResult( - modelCardId, - receiveOperationResults.BakedObjectIds, - receiveOperationResults.ConversionResults - ) - .ConfigureAwait(false); + await Commands.SetModelReceiveResult( + modelCardId, + receiveOperationResults.BakedObjectIds, + receiveOperationResults.ConversionResults + ); } catch (OperationCanceledException) { @@ -100,7 +97,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs index 1b3dcb613..3114b7c64 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/ArcGISSendBinding.cs @@ -3,7 +3,6 @@ using ArcGIS.Core.Data; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing.Events; -using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using ArcGIS.Desktop.Mapping.Events; using Microsoft.Extensions.DependencyInjection; @@ -13,6 +12,7 @@ using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Exceptions; @@ -44,6 +44,7 @@ public sealed class ArcGISSendBinding : ISendBinding private readonly ILogger _logger; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; private readonly IArcGISConversionSettingsFactory _arcGISConversionSettingsFactory; + private readonly IThreadContext _threadContext; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -67,7 +68,8 @@ public ArcGISSendBinding( IOperationProgressManager operationProgressManager, ILogger logger, IArcGISConversionSettingsFactory arcGisConversionSettingsFactory, - MapMembersUtils mapMemberUtils + MapMembersUtils mapMemberUtils, + IThreadContext threadContext ) { _store = store; @@ -80,6 +82,7 @@ MapMembersUtils mapMemberUtils _topLevelExceptionHandler = parent.TopLevelExceptionHandler; _arcGISConversionSettingsFactory = arcGisConversionSettingsFactory; _mapMemberUtils = mapMemberUtils; + _threadContext = threadContext; Parent = parent; Commands = new SendBindingUICommands(parent); @@ -94,14 +97,16 @@ private void SubscribeToArcGISEvents() { LayersRemovedEvent.Subscribe( a => - _topLevelExceptionHandler.FireAndForget(async () => await GetIdsForLayersRemovedEvent(a).ConfigureAwait(false)), + _topLevelExceptionHandler.FireAndForget( + async () => await _threadContext.RunOnWorkerAsync(async () => await GetIdsForLayersRemovedEvent(a)) + ), true ); StandaloneTablesRemovedEvent.Subscribe( a => _topLevelExceptionHandler.FireAndForget( - async () => await GetIdsForStandaloneTablesRemovedEvent(a).ConfigureAwait(false) + async () => await _threadContext.RunOnWorkerAsync(async () => await GetIdsForStandaloneTablesRemovedEvent(a)) ), true ); @@ -109,7 +114,7 @@ private void SubscribeToArcGISEvents() MapPropertyChangedEvent.Subscribe( a => _topLevelExceptionHandler.FireAndForget( - async () => await GetIdsForMapPropertyChangedEvent(a).ConfigureAwait(false) + async () => await _threadContext.RunOnWorkerAsync(async () => await GetIdsForMapPropertyChangedEvent(a)) ), true ); // Map units, CRS etc. @@ -117,13 +122,18 @@ private void SubscribeToArcGISEvents() MapMemberPropertiesChangedEvent.Subscribe( a => _topLevelExceptionHandler.FireAndForget( - async () => await GetIdsForMapMemberPropertiesChangedEvent(a).ConfigureAwait(false) + async () => + await _threadContext.RunOnWorkerAsync(async () => await GetIdsForMapMemberPropertiesChangedEvent(a)) ), true ); // e.g. Layer name ActiveMapViewChangedEvent.Subscribe( - _ => _topLevelExceptionHandler.CatchUnhandled(SubscribeToMapMembersDataSourceChange), + _ => + _topLevelExceptionHandler.FireAndForget(async () => + { + await _threadContext.RunOnWorker(SubscribeToMapMembersDataSourceChange); + }), true ); @@ -139,28 +149,24 @@ private void SubscribeToArcGISEvents() private void SubscribeToMapMembersDataSourceChange() { - var task = QueuedTask.Run(() => + if (MapView.Active == null) { - if (MapView.Active == null) - { - return; - } + return; + } - // subscribe to layers - foreach (Layer layer in MapView.Active.Map.Layers) - { - if (layer is FeatureLayer featureLayer) - { - SubscribeToFeatureLayerDataSourceChange(featureLayer); - } - } - // subscribe to tables - foreach (StandaloneTable table in MapView.Active.Map.StandaloneTables) + // subscribe to layers + foreach (Layer layer in MapView.Active.Map.Layers) + { + if (layer is FeatureLayer featureLayer) { - SubscribeToTableDataSourceChange(table); + SubscribeToFeatureLayerDataSourceChange(featureLayer); } - }); - task.Wait(); + } + // subscribe to tables + foreach (StandaloneTable table in MapView.Active.Map.StandaloneTables) + { + SubscribeToTableDataSourceChange(table); + } } private void SubscribeToFeatureLayerDataSourceChange(FeatureLayer layer) @@ -197,7 +203,7 @@ private void SubscribeToAnyDataSourceChange(Table layerTable) (args) => Parent.TopLevelExceptionHandler.FireAndForget(async () => { - await OnRowChanged(args).ConfigureAwait(false); + await OnRowChanged(args); }), layerTable ); @@ -205,7 +211,7 @@ private void SubscribeToAnyDataSourceChange(Table layerTable) (args) => Parent.TopLevelExceptionHandler.FireAndForget(async () => { - await OnRowChanged(args).ConfigureAwait(false); + await OnRowChanged(args); }), layerTable ); @@ -213,7 +219,7 @@ private void SubscribeToAnyDataSourceChange(Table layerTable) (args) => Parent.TopLevelExceptionHandler.FireAndForget(async () => { - await OnRowChanged(args).ConfigureAwait(false); + await OnRowChanged(args); }), layerTable ); @@ -258,7 +264,7 @@ private async Task OnRowChanged(RowChangedEventArgs args) } } - await RunExpirationChecks(false).ConfigureAwait(false); + await RunExpirationChecks(false); } private async Task GetIdsForLayersRemovedEvent(LayerEventsArgs args) @@ -267,7 +273,7 @@ private async Task GetIdsForLayersRemovedEvent(LayerEventsArgs args) { ChangedObjectIds[layer.URI] = 1; } - await RunExpirationChecks(true).ConfigureAwait(false); + await RunExpirationChecks(true); } private async Task GetIdsForStandaloneTablesRemovedEvent(StandaloneTableEventArgs args) @@ -276,7 +282,7 @@ private async Task GetIdsForStandaloneTablesRemovedEvent(StandaloneTableEventArg { ChangedObjectIds[table.URI] = 1; } - await RunExpirationChecks(true).ConfigureAwait(false); + await RunExpirationChecks(true); } private async Task GetIdsForMapPropertyChangedEvent(MapPropertyChangedEventArgs args) @@ -289,7 +295,7 @@ private async Task GetIdsForMapPropertyChangedEvent(MapPropertyChangedEventArgs ChangedObjectIds[member.URI] = 1; } } - await RunExpirationChecks(false).ConfigureAwait(false); + await RunExpirationChecks(false); } private void GetIdsForLayersAddedEvent(LayerEventsArgs args) @@ -339,7 +345,7 @@ private async Task GetIdsForMapMemberPropertiesChangedEvent(MapMemberPropertiesC { ChangedObjectIds[member.URI] = 1; } - await RunExpirationChecks(false).ConfigureAwait(false); + await RunExpirationChecks(false); } } @@ -366,64 +372,52 @@ public async Task Send(string modelCardId) CancellationToken cancellationToken = _cancellationManager.InitCancellationTokenSource(modelCardId); - var sendResult = await QueuedTask - .Run(async () => + using var scope = _serviceProvider.CreateScope(); + scope + .ServiceProvider.GetRequiredService>() + .Initialize( + _arcGISConversionSettingsFactory.Create( + Project.Current, + MapView.Active.Map, + new CRSoffsetRotation(MapView.Active.Map) + ) + ); + List mapMembers = modelCard + .SendFilter.NotNull() + .RefreshObjectIds() + .Select(id => (MapMember)MapView.Active.Map.FindLayer(id) ?? MapView.Active.Map.FindStandaloneTable(id)) + .Where(obj => obj != null) + .ToList(); + + if (mapMembers.Count == 0) + { + // Handle as CARD ERROR in this function + throw new SpeckleSendFilterException("No objects were found to convert. Please update your publish filter!"); + } + + // subscribe to the selected layer events + foreach (MapMember mapMember in mapMembers) + { + if (mapMember is FeatureLayer featureLayer) + { + SubscribeToFeatureLayerDataSourceChange(featureLayer); + } + else if (mapMember is StandaloneTable table) { - using var scope = _serviceProvider.CreateScope(); - scope - .ServiceProvider.GetRequiredService>() - .Initialize( - _arcGISConversionSettingsFactory.Create( - Project.Current, - MapView.Active.Map, - new CRSoffsetRotation(MapView.Active.Map) - ) - ); - List mapMembers = modelCard - .SendFilter.NotNull() - .RefreshObjectIds() - .Select(id => (MapMember)MapView.Active.Map.FindLayer(id) ?? MapView.Active.Map.FindStandaloneTable(id)) - .Where(obj => obj != null) - .ToList(); - - if (mapMembers.Count == 0) - { - // Handle as CARD ERROR in this function - throw new SpeckleSendFilterException( - "No objects were found to convert. Please update your publish filter!" - ); - } - - // subscribe to the selected layer events - foreach (MapMember mapMember in mapMembers) - { - if (mapMember is FeatureLayer featureLayer) - { - SubscribeToFeatureLayerDataSourceChange(featureLayer); - } - else if (mapMember is StandaloneTable table) - { - SubscribeToTableDataSourceChange(table); - } - } - - var result = await scope - .ServiceProvider.GetRequiredService>() - .Execute( - mapMembers, - modelCard.GetSendInfo("ArcGIS"), // POC: get host app name from settings? same for GetReceiveInfo - _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), - cancellationToken - ) - .ConfigureAwait(false); - - return result; - }) - .ConfigureAwait(false); - - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + SubscribeToTableDataSourceChange(table); + } + } + + var sendResult = await scope + .ServiceProvider.GetRequiredService>() + .Execute( + mapMembers, + modelCard.GetSendInfo("ArcGIS"), // POC: get host app name from settings? same for GetReceiveInfo + _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), + cancellationToken + ); + + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -435,7 +429,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } @@ -470,7 +464,7 @@ private async Task RunExpirationChecks(bool idsDeleted) } } - await Commands.SetModelsExpired(expiredSenderIds).ConfigureAwait(false); + await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/BasicConnectorBinding.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/BasicConnectorBinding.cs index 13e0d315c..d3881899e 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/BasicConnectorBinding.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Bindings/BasicConnectorBinding.cs @@ -1,5 +1,4 @@ using ArcGIS.Core.Data; -using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using Speckle.Connectors.ArcGIS.Utils; using Speckle.Connectors.DUI.Bindings; @@ -32,7 +31,7 @@ public BasicConnectorBinding(DocumentModelStore store, IBrowserBridge parent, IS _store.DocumentChanged += (_, _) => parent.TopLevelExceptionHandler.FireAndForget(async () => { - await Commands.NotifyDocumentChanged().ConfigureAwait(false); + await Commands.NotifyDocumentChanged(); }); } @@ -60,16 +59,19 @@ public BasicConnectorBinding(DocumentModelStore store, IBrowserBridge parent, IS public void RemoveModel(ModelCard model) => _store.RemoveModel(model); - public async Task HighlightObjects(IReadOnlyList objectIds) => - await HighlightObjectsOnView(objectIds.Select(x => new ObjectID(x)).ToList()).ConfigureAwait(false); + public Task HighlightObjects(IReadOnlyList objectIds) + { + HighlightObjectsOnView(objectIds.Select(x => new ObjectID(x)).ToList()); + return Task.CompletedTask; + } - public async Task HighlightModel(string modelCardId) + public Task HighlightModel(string modelCardId) { var model = _store.GetModelById(modelCardId); if (model is null) { - return; + return Task.CompletedTask; } var objectIds = new List(); @@ -86,26 +88,22 @@ public async Task HighlightModel(string modelCardId) if (objectIds is null) { - return; + return Task.CompletedTask; } - await HighlightObjectsOnView(objectIds).ConfigureAwait(false); + HighlightObjectsOnView(objectIds); + return Task.CompletedTask; } - private async Task HighlightObjectsOnView(IReadOnlyList objectIds) + private void HighlightObjectsOnView(IReadOnlyList objectIds) { MapView mapView = MapView.Active; - await QueuedTask - .Run(async () => - { - List mapMembersFeatures = GetMapMembers(objectIds, mapView); - ClearSelectionInTOC(); - ClearSelection(); - await SelectMapMembersInTOC(mapMembersFeatures).ConfigureAwait(false); - SelectMapMembersAndFeatures(mapMembersFeatures); - mapView.ZoomToSelected(); - }) - .ConfigureAwait(false); + List mapMembersFeatures = GetMapMembers(objectIds, mapView); + ClearSelectionInTOC(); + ClearSelection(); + SelectMapMembersInTOC(mapMembersFeatures); + SelectMapMembersAndFeatures(mapMembersFeatures); + mapView.ZoomToSelected(); } private List GetMapMembers(IReadOnlyList objectIds, MapView mapView) @@ -171,7 +169,7 @@ private void SelectMapMembersAndFeatures(IReadOnlyList mapMemb } } - private async Task SelectMapMembersInTOC(IReadOnlyList mapMembersFeatures) + private void SelectMapMembersInTOC(IReadOnlyList mapMembersFeatures) { List layers = new(); List tables = new(); @@ -187,7 +185,7 @@ private async Task SelectMapMembersInTOC(IReadOnlyList mapMemb } else { - await QueuedTask.Run(() => layer.SetExpanded(true)).ConfigureAwait(false); + layer.SetExpanded(true); } } else if (member is StandaloneTable table) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs index d6b57a0ce..301c13272 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/DependencyInjection/ArcGISConnectorModule.cs @@ -27,7 +27,7 @@ public static class ArcGISConnectorModule public static void AddArcGIS(this IServiceCollection serviceCollection) { serviceCollection.AddConnectorUtils(); - serviceCollection.AddDUI(); + serviceCollection.AddDUI(); serviceCollection.AddDUIView(); // Register bindings diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs index eabf069bf..2ac406ca4 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISColorManager.cs @@ -25,7 +25,7 @@ public class ArcGISColorManager /// /// /// - public async Task ParseColors(List colorProxies, IProgress onOperationProgressed) + public void ParseColors(List colorProxies, IProgress onOperationProgressed) { // injected as Singleton, so we need to clean existing proxies first ObjectColorsIdMap = new(); @@ -33,7 +33,6 @@ public async Task ParseColors(List colorProxies, IProgress colorProxies, IProgress /// /// - public async Task ParseMaterials( - List materialProxies, - IProgress onOperationProgressed - ) + public void ParseMaterials(List materialProxies, IProgress onOperationProgressed) { // injected as Singleton, so we need to clean existing proxies first ObjectMaterialsIdMap = new(); @@ -58,7 +54,6 @@ IProgress onOperationProgressed foreach (RenderMaterialProxy colorProxy in materialProxies) { onOperationProgressed.Report(new("Converting materials", (double)++count / materialProxies.Count)); - await Task.Yield(); foreach (string objectId in colorProxy.objects) { Color convertedColor = Color.FromArgb(colorProxy.value.diffuse); diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs index b8955f895..3db6653e0 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/HostApp/ArcGISLayerUnpacker.cs @@ -18,7 +18,7 @@ public class ArcGISLayerUnpacker /// /// List of layers containing objects. /// Thrown when this method is *not* called on the MCT, because this method accesses mapmember fields - public async Task> UnpackSelectionAsync( + public List UnpackSelection( IEnumerable mapMembers, Collection parentCollection, List? objects = null @@ -37,7 +37,7 @@ public class ArcGISLayerUnpacker Collection containerCollection = CreateAndCacheMapMemberCollection(mapMember, true); parentCollection.elements.Add(containerCollection); - await UnpackSelectionAsync(container.Layers, containerCollection, objects).ConfigureAwait(false); + UnpackSelection(container.Layers, containerCollection, objects); break; default: diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs index fa71580fe..5a9ce6512 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/ArcGISHostObjectBuilder.cs @@ -1,7 +1,6 @@ using System.Diagnostics.Contracts; using ArcGIS.Core.CIM; using ArcGIS.Core.Geometry; -using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using Speckle.Connectors.ArcGIS.HostApp; using Speckle.Connectors.ArcGIS.Utils; @@ -54,7 +53,7 @@ ArcGISColorManager colorManager _colorManager = colorManager; } - public async Task Build( + public HostObjectBuilderResult Build( Base rootObject, string projectName, string modelName, @@ -74,14 +73,14 @@ CancellationToken cancellationToken .ToList(); if (materials != null) { - await _colorManager.ParseMaterials(materials, onOperationProgressed).ConfigureAwait(false); + _colorManager.ParseMaterials(materials, onOperationProgressed); } // get colors List? colors = (rootObject[ProxyKeys.COLOR] as List)?.Cast().ToList(); if (colors != null) { - await _colorManager.ParseColors(colors, onOperationProgressed).ConfigureAwait(false); + _colorManager.ParseColors(colors, onOperationProgressed); } int count = 0; @@ -100,7 +99,7 @@ CancellationToken cancellationToken try { obj = _localToGlobalConverterUtils.TransformObjects(objectToConvert.AtomicObject, objectToConvert.Matrix); - object? conversionResult = await QueuedTask.Run(() => _converter.Convert(obj)).ConfigureAwait(false); + object conversionResult = _converter.Convert(obj); string nestedLayerPath = $"{string.Join("\\", path)}"; @@ -128,29 +127,20 @@ CancellationToken cancellationToken // 2.1. Group conversionTrackers (to write into datasets) onOperationProgressed.Report(new("Grouping features into layers", null)); - Dictionary> convertedGroups = await QueuedTask - .Run(async () => - { - return await _featureClassUtils - .GroupConversionTrackers(conversionTracker, (s, progres) => onOperationProgressed.Report(new(s, progres))) - .ConfigureAwait(false); - }) - .ConfigureAwait(false); + Dictionary> convertedGroups = + _featureClassUtils.GroupConversionTrackers( + conversionTracker, + (s, progres) => onOperationProgressed.Report(new(s, progres)) + ); // 2.2. Write groups of objects to Datasets onOperationProgressed.Report(new("Writing to Database", null)); - await QueuedTask - .Run(async () => - { - await _featureClassUtils - .CreateDatasets( - conversionTracker, - convertedGroups, - (s, progres) => onOperationProgressed.Report(new(s, progres)) - ) - .ConfigureAwait(false); - }) - .ConfigureAwait(false); + + _featureClassUtils.CreateDatasets( + conversionTracker, + convertedGroups, + (s, progres) => onOperationProgressed.Report(new(s, progres)) + ); // 3. add layer and tables to the Map and Table Of Content @@ -202,8 +192,7 @@ await _featureClassUtils else { // no layer yet, create and add layer to Map - MapMember mapMember = await AddDatasetsToMap(trackerItem, createdLayerGroups, projectName, modelName) - .ConfigureAwait(false); + MapMember mapMember = AddDatasetsToMap(trackerItem, createdLayerGroups, projectName, modelName); // add layer and layer URI to tracker trackerItem.AddConvertedMapMember(mapMember); @@ -231,7 +220,7 @@ await _featureClassUtils if (bakedMember.Value.Item1 is FeatureLayer fLayer) { // Set the feature layer's renderer. - await QueuedTask.Run(() => fLayer.SetRenderer(bakedMember.Value.Item2)).ConfigureAwait(false); + fLayer.SetRenderer(bakedMember.Value.Item2); } } bakedObjectIds.AddRange(createdLayerGroups.Values.Select(x => x.URI)); @@ -298,80 +287,72 @@ private void AddResultsFromTracker(ObjectConversionTracker trackerItem, List AddDatasetsToMap( + private MapMember AddDatasetsToMap( ObjectConversionTracker trackerItem, Dictionary createdLayerGroups, string projectName, string modelName ) { - return await QueuedTask - .Run(() => - { - // get layer details - string? datasetId = trackerItem.DatasetId; // should not be null here - Uri uri = new($"{_settingsStore.Current.SpeckleDatabasePath.AbsolutePath.Replace('/', '\\')}\\{datasetId}"); - string nestedLayerName = trackerItem.NestedLayerName; + // get layer details + string? datasetId = trackerItem.DatasetId; // should not be null here + Uri uri = new($"{_settingsStore.Current.SpeckleDatabasePath.AbsolutePath.Replace('/', '\\')}\\{datasetId}"); + string nestedLayerName = trackerItem.NestedLayerName; - // add group for the current layer - string shortName = nestedLayerName.Split("\\")[^1]; - string nestedLayerPath = string.Join("\\", nestedLayerName.Split("\\").SkipLast(1)); + // add group for the current layer + string shortName = nestedLayerName.Split("\\")[^1]; + string nestedLayerPath = string.Join("\\", nestedLayerName.Split("\\").SkipLast(1)); - // if no general group layer found - if (createdLayerGroups.Count == 0) - { - Map map = _settingsStore.Current.Map; - GroupLayer mainGroupLayer = LayerFactory.Instance.CreateGroupLayer(map, 0, $"{projectName}: {modelName}"); - mainGroupLayer.SetExpanded(true); - createdLayerGroups["Basic Speckle Group"] = mainGroupLayer; // key doesn't really matter here - } + // if no general group layer found + if (createdLayerGroups.Count == 0) + { + Map map = _settingsStore.Current.Map; + GroupLayer mainGroupLayer = LayerFactory.Instance.CreateGroupLayer(map, 0, $"{projectName}: {modelName}"); + mainGroupLayer.SetExpanded(true); + createdLayerGroups["Basic Speckle Group"] = mainGroupLayer; // key doesn't really matter here + } - var groupLayer = CreateNestedGroupLayer(nestedLayerPath, createdLayerGroups); + var groupLayer = CreateNestedGroupLayer(nestedLayerPath, createdLayerGroups); - // Most of the Speckle-written datasets will be containing geometry and added as Layers - // although, some datasets might be just tables (e.g. native GIS Tables, in the future maybe Revit schedules etc. - // We can create a connection to the dataset in advance and determine its type, but this will be more - // expensive, than assuming by default that it's a layer with geometry (which in most cases it's expected to be) - try - { - var layer = LayerFactory.Instance.CreateLayer(uri, groupLayer, layerName: shortName); - if (layer == null) - { - throw new SpeckleException($"Layer '{shortName}' was not created"); - } - layer.SetExpanded(false); - - // if Scene - // https://community.esri.com/t5/arcgis-pro-sdk-questions/sdk-equivalent-to-changing-layer-s-elevation/td-p/1346139 - if (_settingsStore.Current.Map.IsScene) - { - var groundSurfaceLayer = _settingsStore.Current.Map.GetGroundElevationSurfaceLayer(); - var layerElevationSurface = new CIMLayerElevationSurface - { - ElevationSurfaceLayerURI = groundSurfaceLayer.URI, - }; - - // for Feature Layers - if (layer.GetDefinition() is CIMFeatureLayer cimLyr) - { - cimLyr.LayerElevation = layerElevationSurface; - layer.SetDefinition(cimLyr); - } - } - - return (MapMember)layer; - } - catch (ArgumentException) + // Most of the Speckle-written datasets will be containing geometry and added as Layers + // although, some datasets might be just tables (e.g. native GIS Tables, in the future maybe Revit schedules etc. + // We can create a connection to the dataset in advance and determine its type, but this will be more + // expensive, than assuming by default that it's a layer with geometry (which in most cases it's expected to be) + try + { + var layer = LayerFactory.Instance.CreateLayer(uri, groupLayer, layerName: shortName); + if (layer == null) + { + throw new SpeckleException($"Layer '{shortName}' was not created"); + } + layer.SetExpanded(false); + + // if Scene + // https://community.esri.com/t5/arcgis-pro-sdk-questions/sdk-equivalent-to-changing-layer-s-elevation/td-p/1346139 + if (_settingsStore.Current.Map.IsScene) + { + var groundSurfaceLayer = _settingsStore.Current.Map.GetGroundElevationSurfaceLayer(); + var layerElevationSurface = new CIMLayerElevationSurface { ElevationSurfaceLayerURI = groundSurfaceLayer.URI, }; + + // for Feature Layers + if (layer.GetDefinition() is CIMFeatureLayer cimLyr) { - StandaloneTable table = StandaloneTableFactory.Instance.CreateStandaloneTable( - uri, - groupLayer, - tableName: shortName - ); - return table; + cimLyr.LayerElevation = layerElevationSurface; + layer.SetDefinition(cimLyr); } - }) - .ConfigureAwait(false); + } + + return layer; + } + catch (ArgumentException) + { + StandaloneTable table = StandaloneTableFactory.Instance.CreateStandaloneTable( + uri, + groupLayer, + tableName: shortName + ); + return table; + } } private GroupLayer CreateNestedGroupLayer(string nestedLayerPath, Dictionary createdLayerGroups) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs index 97d7f9587..aae2c1c24 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs @@ -1,6 +1,5 @@ using ArcGIS.Core.Data.Raster; using ArcGIS.Core.Geometry; -using ArcGIS.Desktop.Framework.Threading.Tasks; using Microsoft.Extensions.Logging; using Speckle.Connectors.ArcGIS.HostApp; using Speckle.Connectors.ArcGIS.HostApp.Extensions; @@ -54,11 +53,11 @@ MapMembersUtils mapMemberUtils _mapMemberUtils = mapMemberUtils; } - public async Task Build( + public RootObjectBuilderResult Build( IReadOnlyList layers, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken ct = default + CancellationToken cancellationToken ) { // TODO: add a warning if Geographic CRS is set @@ -103,9 +102,7 @@ public async Task Build( IEnumerable layersOrdered = _mapMemberUtils.GetMapMembersInOrder(map, layers); using (var _ = _activityFactory.Start("Unpacking selection")) { - unpackedLayers = await QueuedTask - .Run(() => _layerUnpacker.UnpackSelectionAsync(layersOrdered, rootCollection)) - .ConfigureAwait(false); + unpackedLayers = _layerUnpacker.UnpackSelection(layersOrdered, rootCollection); } List results = new(unpackedLayers.Count); @@ -115,7 +112,7 @@ public async Task Build( int count = 0; foreach (ADM.MapMember layer in unpackedLayers) { - ct.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); string layerApplicationId = layer.GetSpeckleApplicationId(); try @@ -141,21 +138,15 @@ out ObjectReference? value switch (layer) { case ADM.FeatureLayer featureLayer: - List convertedFeatureLayerObjects = await QueuedTask - .Run(() => ConvertFeatureLayerObjectsAsync(featureLayer)) - .ConfigureAwait(false); + List convertedFeatureLayerObjects = ConvertFeatureLayerObjects(featureLayer); layerCollection.elements.AddRange(convertedFeatureLayerObjects); break; case ADM.RasterLayer rasterLayer: - List convertedRasterLayerObjects = await QueuedTask - .Run(() => ConvertRasterLayerObjectsAsync(rasterLayer)) - .ConfigureAwait(false); + List convertedRasterLayerObjects = ConvertRasterLayerObjects(rasterLayer); layerCollection.elements.AddRange(convertedRasterLayerObjects); break; case ADM.LasDatasetLayer lasDatasetLayer: - List convertedLasDatasetObjects = await QueuedTask - .Run(() => ConvertLasDatasetLayerObjectsAsync(lasDatasetLayer)) - .ConfigureAwait(false); + List convertedLasDatasetObjects = ConvertLasDatasetLayerObjects(lasDatasetLayer); layerCollection.elements.AddRange(convertedLasDatasetObjects); break; default: @@ -194,96 +185,78 @@ out ObjectReference? value return new RootObjectBuilderResult(rootCollection, results); } - private async Task> ConvertFeatureLayerObjectsAsync(ADM.FeatureLayer featureLayer) + private List ConvertFeatureLayerObjects(ADM.FeatureLayer featureLayer) { string layerApplicationId = featureLayer.GetSpeckleApplicationId(); List convertedObjects = new(); - await QueuedTask - .Run(() => - { - // store the layer renderer for color unpacking - _colorUnpacker.StoreRendererAndFields(featureLayer); + // store the layer renderer for color unpacking + _colorUnpacker.StoreRendererAndFields(featureLayer); - // search the rows of the layer, where each row is treated like an object - // RowCursor is IDisposable but is not being correctly picked up by IDE warnings. - // This means we need to be carefully adding using statements based on the API documentation coming from each method/class - using (ACD.RowCursor rowCursor = featureLayer.Search()) + // search the rows of the layer, where each row is treated like an object + // RowCursor is IDisposable but is not being correctly picked up by IDE warnings. + // This means we need to be carefully adding using statements based on the API documentation coming from each method/class + using (ACD.RowCursor rowCursor = featureLayer.Search()) + { + while (rowCursor.MoveNext()) + { + // Same IDisposable issue appears to happen on Row class too. Docs say it should always be disposed of manually by the caller. + using (ACD.Row row = rowCursor.Current) { - while (rowCursor.MoveNext()) - { - // Same IDisposable issue appears to happen on Row class too. Docs say it should always be disposed of manually by the caller. - using (ACD.Row row = rowCursor.Current) - { - // get application id. test for subtypes before defaulting to base type. - Base converted = _rootToSpeckleConverter.Convert(row); - string applicationId = row.GetSpeckleApplicationId(layerApplicationId); - converted.applicationId = applicationId; + // get application id. test for subtypes before defaulting to base type. + Base converted = _rootToSpeckleConverter.Convert(row); + string applicationId = row.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; - convertedObjects.Add(converted); + convertedObjects.Add(converted); - // process the object color - _colorUnpacker.ProcessFeatureLayerColor(row, applicationId); - } - } + // process the object color + _colorUnpacker.ProcessFeatureLayerColor(row, applicationId); } - }) - .ConfigureAwait(false); + } + } return convertedObjects; } // POC: raster colors are stored as mesh vertex colors in RasterToSpeckleConverter. Should probably move to color unpacker. - private async Task> ConvertRasterLayerObjectsAsync(ADM.RasterLayer rasterLayer) + private List ConvertRasterLayerObjects(ADM.RasterLayer rasterLayer) { string layerApplicationId = rasterLayer.GetSpeckleApplicationId(); List convertedObjects = new(); - await QueuedTask - .Run(() => - { - Raster raster = rasterLayer.GetRaster(); - Base converted = _rootToSpeckleConverter.Convert(raster); - string applicationId = raster.GetSpeckleApplicationId(layerApplicationId); - converted.applicationId = applicationId; - convertedObjects.Add(converted); - }) - .ConfigureAwait(false); - + Raster raster = rasterLayer.GetRaster(); + Base converted = _rootToSpeckleConverter.Convert(raster); + string applicationId = raster.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; + convertedObjects.Add(converted); return convertedObjects; } - private async Task> ConvertLasDatasetLayerObjectsAsync(ADM.LasDatasetLayer lasDatasetLayer) + private List ConvertLasDatasetLayerObjects(ADM.LasDatasetLayer lasDatasetLayer) { string layerApplicationId = lasDatasetLayer.GetSpeckleApplicationId(); List convertedObjects = new(); try { - await QueuedTask - .Run(() => - { - // store the layer renderer for color unpacking - _colorUnpacker.StoreRenderer(lasDatasetLayer); + // store the layer renderer for color unpacking + _colorUnpacker.StoreRenderer(lasDatasetLayer); - using ( - ACD.Analyst3D.LasPointCursor ptCursor = lasDatasetLayer.SearchPoints(new ACD.Analyst3D.LasPointFilter()) - ) + using (ACD.Analyst3D.LasPointCursor ptCursor = lasDatasetLayer.SearchPoints(new ACD.Analyst3D.LasPointFilter())) + { + while (ptCursor.MoveNext()) + { + using (ACD.Analyst3D.LasPoint pt = ptCursor.Current) { - while (ptCursor.MoveNext()) - { - using (ACD.Analyst3D.LasPoint pt = ptCursor.Current) - { - Base converted = _rootToSpeckleConverter.Convert(pt); - string applicationId = pt.GetSpeckleApplicationId(layerApplicationId); - converted.applicationId = applicationId; - convertedObjects.Add(converted); + Base converted = _rootToSpeckleConverter.Convert(pt); + string applicationId = pt.GetSpeckleApplicationId(layerApplicationId); + converted.applicationId = applicationId; + convertedObjects.Add(converted); - // process the object color - _colorUnpacker.ProcessLasLayerColor(pt, applicationId); - } - } + // process the object color + _colorUnpacker.ProcessLasLayerColor(pt, applicationId); } - }) - .ConfigureAwait(false); + } + } } catch (ACD.Exceptions.TinException ex) { diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleDUI3ViewModel.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleDUI3ViewModel.cs index 9d74daac4..2406f8398 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleDUI3ViewModel.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleDUI3ViewModel.cs @@ -18,7 +18,7 @@ internal static void Create() /// protected override async Task InitializeAsync() { - await base.InitializeAsync().ConfigureAwait(false); + await base.InitializeAsync(); } /// @@ -26,7 +26,7 @@ protected override async Task InitializeAsync() /// protected override async Task UninitializeAsync() { - await base.UninitializeAsync().ConfigureAwait(false); + await base.UninitializeAsync(); } } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleModule.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleModule.cs index 64370fdf2..1d5eee795 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleModule.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/SpeckleModule.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.DependencyInjection; using Speckle.Connectors.ArcGIS.DependencyInjection; using Speckle.Connectors.Common; -using Speckle.Connectors.DUI; using Speckle.Converters.ArcGIS3; using Speckle.Sdk.Host; using Module = ArcGIS.Desktop.Framework.Contracts.Module; @@ -35,7 +34,6 @@ public SpeckleModule() services.AddArcGIS(); services.AddArcGISConverters(); Container = services.BuildServiceProvider(); - Container.UseDUI(); } private HostAppVersion GetVersion() diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGISThreadContext.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGISThreadContext.cs new file mode 100644 index 000000000..42297eb00 --- /dev/null +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGISThreadContext.cs @@ -0,0 +1,36 @@ +using ArcGIS.Desktop.Framework.Threading.Tasks; +using Speckle.Connectors.Common.Threading; + +namespace Speckle.Connectors.ArcGIS.Utils; + +//don't check for GUI as it's the same check we do in ThreadContext +public class ArcGISThreadContext : ThreadContext +{ + protected override Task MainToWorkerAsync(Func> action) + { + if (QueuedTask.OnWorker) + { + return action(); + } + else + { + return QueuedTask.Run(async () => await action()); + } + } + + protected override Task WorkerToMainAsync(Func> action) => QueuedTask.Run(async () => await action()); + + protected override Task MainToWorker(Func action) + { + if (QueuedTask.OnWorker) + { + return Task.FromResult(action()); + } + else + { + return QueuedTask.Run(action); + } + } + + protected override Task WorkerToMain(Func action) => QueuedTask.Run(action); +} diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs index 78be6af1d..0e6e5e1da 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Utils/ArcGisDocumentStore.cs @@ -1,8 +1,8 @@ using System.Xml.Linq; using ArcGIS.Desktop.Core.Events; -using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using ArcGIS.Desktop.Mapping.Events; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Utils; @@ -11,9 +11,16 @@ namespace Speckle.Connectors.ArcGIS.Utils; public class ArcGISDocumentStore : DocumentModelStore { - public ArcGISDocumentStore(IJsonSerializer jsonSerializer, ITopLevelExceptionHandler topLevelExceptionHandler) + private readonly IThreadContext _threadContext; + + public ArcGISDocumentStore( + IJsonSerializer jsonSerializer, + ITopLevelExceptionHandler topLevelExceptionHandler, + IThreadContext threadContext + ) : base(jsonSerializer) { + _threadContext = threadContext; ActiveMapViewChangedEvent.Subscribe(a => topLevelExceptionHandler.CatchUnhandled(() => OnMapViewChanged(a)), true); ProjectSavingEvent.Subscribe( _ => @@ -74,52 +81,52 @@ private void OnMapViewChanged(ActiveMapViewChangedEventArgs args) OnDocumentChanged(); } - protected override void HostAppSaveState(string modelCardState) - { - Map map = MapView.Active.Map; - QueuedTask.Run(() => - { - // Read existing metadata - To prevent messing existing metadata. 🤞 Hope other add-in developers will do same :D - var existingMetadata = map.GetMetadata(); + protected override void HostAppSaveState(string modelCardState) => + _threadContext + .RunOnWorker(() => + { + Map map = MapView.Active.Map; + // Read existing metadata - To prevent messing existing metadata. 🤞 Hope other add-in developers will do same :D + var existingMetadata = map.GetMetadata(); - // Parse existing metadata - XDocument existingXmlDocument = !string.IsNullOrEmpty(existingMetadata) - ? XDocument.Parse(existingMetadata) - : new XDocument(new XElement("metadata")); + // Parse existing metadata + XDocument existingXmlDocument = !string.IsNullOrEmpty(existingMetadata) + ? XDocument.Parse(existingMetadata) + : new XDocument(new XElement("metadata")); - XElement xmlModelCards = new("SpeckleModelCards", modelCardState); + XElement xmlModelCards = new("SpeckleModelCards", modelCardState); - // Check if SpeckleModelCards element already exists at root and update it - var speckleModelCardsElement = existingXmlDocument.Root?.Element("SpeckleModelCards"); - if (speckleModelCardsElement != null) - { - speckleModelCardsElement.ReplaceWith(xmlModelCards); - } - else - { - existingXmlDocument.Root?.Add(xmlModelCards); - } + // Check if SpeckleModelCards element already exists at root and update it + var speckleModelCardsElement = existingXmlDocument.Root?.Element("SpeckleModelCards"); + if (speckleModelCardsElement != null) + { + speckleModelCardsElement.ReplaceWith(xmlModelCards); + } + else + { + existingXmlDocument.Root?.Add(xmlModelCards); + } - map.SetMetadata(existingXmlDocument.ToString()); - }); - } + map.SetMetadata(existingXmlDocument.ToString()); + }) + .FireAndForget(); - protected override void LoadState() - { - Map map = MapView.Active.Map; - QueuedTask.Run(() => - { - var metadata = map.GetMetadata(); - var root = XDocument.Parse(metadata).Root; - var element = root?.Element("SpeckleModelCards"); - if (element is null) + protected override void LoadState() => + _threadContext + .RunOnWorker(() => { - ClearAndSave(); - return; - } + Map map = MapView.Active.Map; + var metadata = map.GetMetadata(); + var root = XDocument.Parse(metadata).Root; + var element = root?.Element("SpeckleModelCards"); + if (element is null) + { + ClearAndSave(); + return; + } - string modelsString = element.Value; - LoadFromString(modelsString); - }); - } + string modelsString = element.Value; + LoadFromString(modelsString); + }) + .FireAndForget(); } diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index b897d49a0..3e30a61ea 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -242,8 +242,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -328,12 +327,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index ae45b97ac..9dc7d29eb 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -367,12 +366,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index 81cfd9c69..4c7bc067a 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -367,12 +366,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 986023486..1031896e7 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 1f6da00a4..1a9922cf9 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -231,8 +231,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -323,12 +322,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadBasicConnectorBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadBasicConnectorBinding.cs index 5a976f0fc..e5f8116f8 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadBasicConnectorBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadBasicConnectorBinding.cs @@ -1,6 +1,7 @@ using Autodesk.AutoCAD.DatabaseServices; using Microsoft.Extensions.Logging; using Speckle.Connectors.Autocad.HostApp.Extensions; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; @@ -19,6 +20,7 @@ public class AutocadBasicConnectorBinding : IBasicConnectorBinding private readonly DocumentModelStore _store; private readonly ISpeckleApplication _speckleApplication; + private readonly IThreadContext _threadContext; private readonly ILogger _logger; public BasicConnectorBindingCommands Commands { get; } @@ -28,7 +30,8 @@ public AutocadBasicConnectorBinding( IBrowserBridge parent, IAccountManager accountManager, ISpeckleApplication speckleApplication, - ILogger logger + ILogger logger, + IThreadContext threadContext ) { _store = store; @@ -39,9 +42,10 @@ ILogger logger _store.DocumentChanged += (_, _) => parent.TopLevelExceptionHandler.FireAndForget(async () => { - await Commands.NotifyDocumentChanged().ConfigureAwait(false); + await Commands.NotifyDocumentChanged(); }); _logger = logger; + _threadContext = threadContext; } public string GetConnectorVersion() => _speckleApplication.SpeckleVersion; @@ -79,7 +83,7 @@ public async Task HighlightObjects(IReadOnlyList objectIds) var dbObjects = doc.GetObjects(objectIds); var acadObjectIds = dbObjects.Select(tuple => tuple.Root.Id).ToArray(); - await HighlightObjectsOnView(acadObjectIds).ConfigureAwait(false); + await HighlightObjectsOnView(acadObjectIds); } public async Task HighlightModel(string modelCardId) @@ -116,79 +120,73 @@ public async Task HighlightModel(string modelCardId) if (objectIds.Length == 0) { - await Commands - .SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")) - .ConfigureAwait(false); + await Commands.SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")); return; } - await HighlightObjectsOnView(objectIds, modelCardId).ConfigureAwait(false); + await HighlightObjectsOnView(objectIds, modelCardId); } private async Task HighlightObjectsOnView(ObjectId[] objectIds, string? modelCardId = null) { var doc = Application.DocumentManager.MdiActiveDocument; - await Parent - .RunOnMainThreadAsync(async () => + await _threadContext.RunOnMainAsync(async () => + { + try { + doc.Editor.SetImpliedSelection([]); // Deselects try { - doc.Editor.SetImpliedSelection(Array.Empty()); // Deselects - try - { - doc.Editor.SetImpliedSelection(objectIds); - } - catch (Exception e) when (!e.IsFatal()) - { - // SWALLOW REASON: - // If the objects under the blocks, it won't be able to select them. - // If we try, API will throw the invalid input error, because we request something from API that Autocad doesn't - // handle it on its current canvas. Block elements only selectable when in its scope. - } - doc.Editor.UpdateScreen(); + doc.Editor.SetImpliedSelection(objectIds); + } + catch (Exception e) when (!e.IsFatal()) + { + // SWALLOW REASON: + // If the objects under the blocks, it won't be able to select them. + // If we try, API will throw the invalid input error, because we request something from API that Autocad doesn't + // handle it on its current canvas. Block elements only selectable when in its scope. + } + doc.Editor.UpdateScreen(); - Extents3d selectedExtents = new(); + Extents3d selectedExtents = new(); - var tr = doc.TransactionManager.StartTransaction(); - foreach (ObjectId objectId in objectIds) + var tr = doc.TransactionManager.StartTransaction(); + foreach (ObjectId objectId in objectIds) + { + try { - try + var entity = (Entity?)tr.GetObject(objectId, OpenMode.ForRead); + if (entity?.GeometricExtents != null) { - var entity = (Entity?)tr.GetObject(objectId, OpenMode.ForRead); - if (entity?.GeometricExtents != null) - { - selectedExtents.AddExtents(entity.GeometricExtents); - } - } - catch (Exception e) when (!e.IsFatal()) - { - // Note: we're swallowing exeptions here because of a weird case when receiving blocks, we would have - // acad api throw an error on accessing entity.GeometricExtents. - // may also throw Autodesk.AutoCAD.Runtime.Exception for invalid extents on objects like rays and xlines + selectedExtents.AddExtents(entity.GeometricExtents); } } + catch (Exception e) when (!e.IsFatal()) + { + // Note: we're swallowing exeptions here because of a weird case when receiving blocks, we would have + // acad api throw an error on accessing entity.GeometricExtents. + // may also throw Autodesk.AutoCAD.Runtime.Exception for invalid extents on objects like rays and xlines + } + } - doc.Editor.Zoom(selectedExtents); - tr.Commit(); - Autodesk.AutoCAD.Internal.Utils.FlushGraphics(); + doc.Editor.Zoom(selectedExtents); + tr.Commit(); + Autodesk.AutoCAD.Internal.Utils.FlushGraphics(); + } + catch (Exception ex) when (!ex.IsFatal()) + { + if (modelCardId != null) + { + await Commands.SetModelError(modelCardId, new OperationCanceledException("Failed to highlight objects.")); } - catch (Exception ex) when (!ex.IsFatal()) + else { - if (modelCardId != null) - { - await Commands - .SetModelError(modelCardId, new OperationCanceledException("Failed to highlight objects.")) - .ConfigureAwait(false); - } - else - { - // This will happen, in some cases, where we highlight individual objects. Should be caught by the top level handler and not - // crash the host app. - throw; - } + // This will happen, in some cases, where we highlight individual objects. Should be caught by the top level handler and not + // crash the host app. + throw; } - }) - .ConfigureAwait(false); + } + }); } } diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs index d2d68a7fd..cb5b3b0a6 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadReceiveBinding.cs @@ -81,12 +81,13 @@ public async Task Receive(string modelCardId) modelCard.GetReceiveInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelReceiveResult(modelCardId, operationResults.BakedObjectIds, operationResults.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelReceiveResult( + modelCardId, + operationResults.BakedObjectIds, + operationResults.ConversionResults + ); } catch (OperationCanceledException) { @@ -98,7 +99,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } finally { diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs index 0be4d5611..104341c33 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSelectionBinding.cs @@ -1,6 +1,7 @@ using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Speckle.Connectors.Autocad.HostApp.Extensions; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -10,16 +11,18 @@ public class AutocadSelectionBinding : ISelectionBinding { private const string SELECTION_EVENT = "setSelection"; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private readonly IThreadContext _threadContext; private readonly HashSet _visitedDocuments = new(); public string Name => "selectionBinding"; public IBrowserBridge Parent { get; } - public AutocadSelectionBinding(IBrowserBridge parent) + public AutocadSelectionBinding(IBrowserBridge parent, IThreadContext threadContext) { _topLevelExceptionHandler = parent.TopLevelExceptionHandler; Parent = parent; + _threadContext = threadContext; // POC: Use here Context for doc. In converters it's OK but we are still lacking to use context into bindings. // It is with the case of if binding created with already a document @@ -41,9 +44,7 @@ private void TryRegisterDocumentForSelection(Document? document) if (!_visitedDocuments.Contains(document)) { document.ImpliedSelectionChanged += (_, _) => - _topLevelExceptionHandler.FireAndForget( - async () => await Parent.RunOnMainThreadAsync(OnSelectionChanged).ConfigureAwait(false) - ); + _topLevelExceptionHandler.FireAndForget(async () => await _threadContext.RunOnMainAsync(OnSelectionChanged)); _visitedDocuments.Add(document); } @@ -57,7 +58,7 @@ private void TryRegisterDocumentForSelection(Document? document) private async Task OnSelectionChanged() { _selectionInfo = GetSelectionInternal(); - await Parent.Send(SELECTION_EVENT, _selectionInfo).ConfigureAwait(false); + await Parent.Send(SELECTION_EVENT, _selectionInfo); } public SelectionInfo GetSelection() => _selectionInfo; diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBaseBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBaseBinding.cs index 11f840f92..5f556e623 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBaseBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBaseBinding.cs @@ -8,6 +8,7 @@ using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Exceptions; @@ -38,6 +39,7 @@ public abstract class AutocadSendBaseBinding : ISendBinding private readonly ILogger _logger; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; private readonly ISpeckleApplication _speckleApplication; + private readonly IThreadContext _threadContext; /// /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: @@ -57,7 +59,8 @@ protected AutocadSendBaseBinding( ISendConversionCache sendConversionCache, IOperationProgressManager operationProgressManager, ILogger logger, - ISpeckleApplication speckleApplication + ISpeckleApplication speckleApplication, + IThreadContext threadContext ) { _store = store; @@ -69,6 +72,7 @@ ISpeckleApplication speckleApplication _operationProgressManager = operationProgressManager; _logger = logger; _speckleApplication = speckleApplication; + _threadContext = threadContext; _topLevelExceptionHandler = parent.TopLevelExceptionHandler; Parent = parent; Commands = new SendBindingUICommands(parent); @@ -111,10 +115,7 @@ private void OnObjectChanged(DBObject dbObject) private void OnChangeChangedObjectIds(DBObject dBObject) { ChangedObjectIds[dBObject.GetSpeckleApplicationId()] = 1; - _idleManager.SubscribeToIdle( - nameof(AutocadSendBinding), - async () => await RunExpirationChecks().ConfigureAwait(false) - ); + _idleManager.SubscribeToIdle(nameof(AutocadSendBinding), async () => await RunExpirationChecks()); } private async Task RunExpirationChecks() @@ -135,7 +136,7 @@ private async Task RunExpirationChecks() } } - await Commands.SetModelsExpired(expiredSenderIds).ConfigureAwait(false); + await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); } @@ -144,9 +145,7 @@ private async Task RunExpirationChecks() public List GetSendSettings() => []; public async Task Send(string modelCardId) => - await Parent - .RunOnMainThreadAsync(async () => await SendInternal(modelCardId).ConfigureAwait(false)) - .ConfigureAwait(false); + await _threadContext.RunOnWorkerAsync(async () => await SendInternal(modelCardId)); protected abstract void InitializeSettings(IServiceProvider serviceProvider); @@ -188,12 +187,9 @@ private async Task SendInternal(string modelCardId) modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -205,7 +201,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } finally { diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs index bc2a28a96..ddd5c223c 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Bindings/AutocadSendBinding.cs @@ -3,6 +3,7 @@ using Speckle.Connectors.Autocad.HostApp; using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; @@ -28,7 +29,8 @@ public AutocadSendBinding( IOperationProgressManager operationProgressManager, ILogger logger, IAutocadConversionSettingsFactory autocadConversionSettingsFactory, - ISpeckleApplication speckleApplication + ISpeckleApplication speckleApplication, + IThreadContext threadContext ) : base( store, @@ -40,7 +42,8 @@ ISpeckleApplication speckleApplication sendConversionCache, operationProgressManager, logger, - speckleApplication + speckleApplication, + threadContext ) { _autocadConversionSettingsFactory = autocadConversionSettingsFactory; diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs index 72bc3567f..8ce12c190 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/DependencyInjection/SharedRegistration.cs @@ -10,6 +10,7 @@ using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Instances; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -24,7 +25,7 @@ public static class SharedRegistration public static void AddAutocadBase(this IServiceCollection serviceCollection) { serviceCollection.AddConnectorUtils(); - serviceCollection.AddDUI(); + serviceCollection.AddDUI(); serviceCollection.AddDUIView(); // Register other connector specific types @@ -43,10 +44,10 @@ public static void AddAutocadBase(this IServiceCollection serviceCollection) serviceCollection.AddScoped(); serviceCollection.AddScoped(); - serviceCollection.AddScoped(); + serviceCollection.AddScoped(); serviceCollection.AddScoped(); - serviceCollection.AddScoped(); + serviceCollection.AddScoped(); serviceCollection.AddSingleton(); diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadColorBaker.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadColorBaker.cs index 7395ab6e8..c02e1d839 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadColorBaker.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadColorBaker.cs @@ -1,6 +1,7 @@ using Autodesk.AutoCAD.Colors; using Microsoft.Extensions.Logging; using Speckle.Connectors.Common.Operations; +using Speckle.InterfaceGenerator; using Speckle.Sdk; using Speckle.Sdk.Models.Proxies; using AutocadColor = Autodesk.AutoCAD.Colors.Color; @@ -10,15 +11,9 @@ namespace Speckle.Connectors.Autocad.HostApp; /// /// Expects to be a scoped dependency for a given operation and helps with layer creation and cleanup. /// -public class AutocadColorBaker +[GenerateAutoInterface] +public class AutocadColorBaker(ILogger logger) : IAutocadColorBaker { - private readonly ILogger _logger; - - public AutocadColorBaker(ILogger logger) - { - _logger = logger; - } - /// /// For receive operations /// @@ -59,7 +54,7 @@ public void ParseColors(IReadOnlyCollection colorProxies, IProgress< } catch (Exception ex) when (!ex.IsFatal()) { - _logger.LogError(ex, "Failed parsing color proxy"); + logger.LogError(ex, "Failed parsing color proxy"); } } } diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs index 8121d97f7..e1373f54f 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadInstanceBaker.cs @@ -26,16 +26,16 @@ namespace Speckle.Connectors.Autocad.HostApp; public class AutocadInstanceBaker : IInstanceBaker> { private readonly AutocadLayerBaker _layerBaker; - private readonly AutocadColorBaker _colorBaker; - private readonly AutocadMaterialBaker _materialBaker; + private readonly IAutocadColorBaker _colorBaker; + private readonly IAutocadMaterialBaker _materialBaker; private readonly AutocadContext _autocadContext; private readonly ILogger _logger; private readonly IConverterSettingsStore _converterSettings; public AutocadInstanceBaker( AutocadLayerBaker layerBaker, - AutocadColorBaker colorBaker, - AutocadMaterialBaker materialBaker, + IAutocadColorBaker colorBaker, + IAutocadMaterialBaker materialBaker, AutocadContext autocadContext, ILogger logger, IConverterSettingsStore converterSettings diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadLayerBaker.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadLayerBaker.cs index f70d1dca4..ebd4737eb 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadLayerBaker.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadLayerBaker.cs @@ -12,15 +12,15 @@ public class AutocadLayerBaker : TraversalContextUnpacker { private readonly string _layerFilterName = "Speckle"; private readonly AutocadContext _autocadContext; - private readonly AutocadMaterialBaker _materialBaker; - private readonly AutocadColorBaker _colorBaker; + private readonly IAutocadMaterialBaker _materialBaker; + private readonly IAutocadColorBaker _colorBaker; private Document Doc => Application.DocumentManager.MdiActiveDocument; private readonly HashSet _uniqueLayerNames = new(); public AutocadLayerBaker( AutocadContext autocadContext, - AutocadMaterialBaker materialBaker, - AutocadColorBaker colorBaker + IAutocadMaterialBaker materialBaker, + IAutocadColorBaker colorBaker ) { _autocadContext = autocadContext; diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadMaterialBaker.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadMaterialBaker.cs index 13fa39e4e..1e09a7f2b 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadMaterialBaker.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/HostApp/AutocadMaterialBaker.cs @@ -4,6 +4,7 @@ using Microsoft.Extensions.Logging; using Speckle.Connectors.Common.Conversion; using Speckle.Connectors.Common.Operations; +using Speckle.InterfaceGenerator; using Speckle.Objects.Other; using Speckle.Sdk; using Speckle.Sdk.Common; @@ -16,7 +17,8 @@ namespace Speckle.Connectors.Autocad.HostApp; /// /// Expects to be a scoped dependency for a given operation and helps with layer creation and cleanup. /// -public class AutocadMaterialBaker +[GenerateAutoInterface] +public class AutocadMaterialBaker : IAutocadMaterialBaker { private readonly ILogger _logger; private readonly AutocadContext _autocadContext; diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Receive/AutocadHostObjectBuilder.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Receive/AutocadHostObjectBuilder.cs index cecb3960f..a6e721364 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Receive/AutocadHostObjectBuilder.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Receive/AutocadHostObjectBuilder.cs @@ -20,86 +20,44 @@ namespace Speckle.Connectors.Autocad.Operations.Receive; /// /// Expects to be a scoped dependency per receive operation. /// -public class AutocadHostObjectBuilder : IHostObjectBuilder +public class AutocadHostObjectBuilder( + IRootToHostConverter converter, + AutocadLayerBaker layerBaker, + AutocadGroupBaker groupBaker, + AutocadInstanceBaker instanceBaker, + IAutocadMaterialBaker materialBaker, + IAutocadColorBaker colorBaker, + AutocadContext autocadContext, + RootObjectUnpacker rootObjectUnpacker +) : IHostObjectBuilder { - private readonly AutocadLayerBaker _layerBaker; - private readonly IRootToHostConverter _converter; - private readonly ISyncToThread _syncToThread; - private readonly AutocadGroupBaker _groupBaker; - private readonly AutocadMaterialBaker _materialBaker; - private readonly AutocadColorBaker _colorBaker; - private readonly AutocadInstanceBaker _instanceBaker; - private readonly AutocadContext _autocadContext; - private readonly RootObjectUnpacker _rootObjectUnpacker; - - public AutocadHostObjectBuilder( - IRootToHostConverter converter, - AutocadLayerBaker layerBaker, - AutocadGroupBaker groupBaker, - AutocadInstanceBaker instanceBaker, - AutocadMaterialBaker materialBaker, - AutocadColorBaker colorBaker, - ISyncToThread syncToThread, - AutocadContext autocadContext, - RootObjectUnpacker rootObjectUnpacker - ) - { - _converter = converter; - _layerBaker = layerBaker; - _groupBaker = groupBaker; - _instanceBaker = instanceBaker; - _materialBaker = materialBaker; - _colorBaker = colorBaker; - _syncToThread = syncToThread; - _autocadContext = autocadContext; - _rootObjectUnpacker = rootObjectUnpacker; - } - - public async Task Build( + public HostObjectBuilderResult Build( Base rootObject, string projectName, string modelName, IProgress onOperationProgressed, - CancellationToken _ - ) - { - // NOTE: This is the only place we apply ISyncToThread across connectors. We need to sync up with main thread here - // after GetObject and Deserialization. It is anti-pattern now. Happiness level 3/10 but works. - return await _syncToThread - .RunOnThread(async () => - { - await Task.CompletedTask.ConfigureAwait(true); - return BuildSync(rootObject, projectName, modelName, onOperationProgressed); - }) - .ConfigureAwait(false); - } - - private HostObjectBuilderResult BuildSync( - Base rootObject, - string projectName, - string modelName, - IProgress onOperationProgressed + CancellationToken cancellationToken ) { // Prompt the UI conversion started. Progress bar will swoosh. onOperationProgressed.Report(new("Converting", null)); // Layer filter for received commit with project and model name - _layerBaker.CreateLayerFilter(projectName, modelName); + layerBaker.CreateLayerFilter(projectName, modelName); // 0 - Clean then Rock n Roll! - string baseLayerPrefix = _autocadContext.RemoveInvalidChars($"SPK-{projectName}-{modelName}-"); + string baseLayerPrefix = autocadContext.RemoveInvalidChars($"SPK-{projectName}-{modelName}-"); PreReceiveDeepClean(baseLayerPrefix); // 1 - Unpack objects and proxies from root commit object - var unpackedRoot = _rootObjectUnpacker.Unpack(rootObject); + var unpackedRoot = rootObjectUnpacker.Unpack(rootObject); // 2 - Split atomic objects and instance components with their path - var (atomicObjects, instanceComponents) = _rootObjectUnpacker.SplitAtomicObjectsAndInstances( + var (atomicObjects, instanceComponents) = rootObjectUnpacker.SplitAtomicObjectsAndInstances( unpackedRoot.ObjectsToConvert ); - var atomicObjectsWithPath = _layerBaker.GetAtomicObjectsWithPath(atomicObjects); - var instanceComponentsWithPath = _layerBaker.GetInstanceComponentsWithPath(instanceComponents); + var atomicObjectsWithPath = layerBaker.GetAtomicObjectsWithPath(atomicObjects); + var instanceComponentsWithPath = layerBaker.GetInstanceComponentsWithPath(instanceComponents); // POC: these are not captured by traversal, so we need to re-add them here if (unpackedRoot.DefinitionProxies != null && unpackedRoot.DefinitionProxies.Count > 0) @@ -113,7 +71,7 @@ IProgress onOperationProgressed // 3 - Bake materials and colors, as they are used later down the line by layers and objects if (unpackedRoot.RenderMaterialProxies != null) { - _materialBaker.ParseAndBakeRenderMaterials( + materialBaker.ParseAndBakeRenderMaterials( unpackedRoot.RenderMaterialProxies, baseLayerPrefix, onOperationProgressed @@ -122,7 +80,7 @@ IProgress onOperationProgressed if (unpackedRoot.ColorProxies != null) { - _colorBaker.ParseColors(unpackedRoot.ColorProxies, onOperationProgressed); + colorBaker.ParseColors(unpackedRoot.ColorProxies, onOperationProgressed); } // 5 - Convert atomic objects @@ -134,6 +92,7 @@ IProgress onOperationProgressed { string objectId = atomicObject.applicationId ?? atomicObject.id.NotNull(); onOperationProgressed.Report(new("Converting objects", (double)++count / atomicObjects.Count)); + cancellationToken.ThrowIfCancellationRequested(); try { IReadOnlyCollection convertedObjects = ConvertObject(atomicObject, layerPath, baseLayerPrefix); @@ -158,7 +117,7 @@ IProgress onOperationProgressed } // 6 - Convert instances - var (createdInstanceIds, consumedObjectIds, instanceConversionResults) = _instanceBaker.BakeInstances( + var (createdInstanceIds, consumedObjectIds, instanceConversionResults) = instanceBaker.BakeInstances( instanceComponentsWithPath, applicationIdMap, baseLayerPrefix, @@ -173,7 +132,7 @@ IProgress onOperationProgressed // 7 - Create groups if (unpackedRoot.GroupProxies != null) { - IReadOnlyCollection groupResults = _groupBaker.CreateGroups( + IReadOnlyCollection groupResults = groupBaker.CreateGroups( unpackedRoot.GroupProxies, applicationIdMap ); @@ -185,20 +144,20 @@ IProgress onOperationProgressed private void PreReceiveDeepClean(string baseLayerPrefix) { - _layerBaker.DeleteAllLayersByPrefix(baseLayerPrefix); - _instanceBaker.PurgeInstances(baseLayerPrefix); - _materialBaker.PurgeMaterials(baseLayerPrefix); + layerBaker.DeleteAllLayersByPrefix(baseLayerPrefix); + instanceBaker.PurgeInstances(baseLayerPrefix); + materialBaker.PurgeMaterials(baseLayerPrefix); } private IReadOnlyCollection ConvertObject(Base obj, Collection[] layerPath, string baseLayerNamePrefix) { - string layerName = _layerBaker.CreateLayerForReceive(layerPath, baseLayerNamePrefix); + string layerName = layerBaker.CreateLayerForReceive(layerPath, baseLayerNamePrefix); var convertedEntities = new HashSet(); using var tr = Application.DocumentManager.CurrentDocument.Database.TransactionManager.StartTransaction(); // 1: convert - var converted = _converter.Convert(obj); + var converted = converter.Convert(obj); // 2: handle result if (converted is Entity entity) @@ -219,12 +178,12 @@ private IReadOnlyCollection ConvertObject(Base obj, Collection[] layerPa private Entity BakeObject(Entity entity, Base originalObject, string layerName, Base? parentObject = null) { var objId = originalObject.applicationId ?? originalObject.id.NotNull(); - if (_colorBaker.ObjectColorsIdMap.TryGetValue(objId, out AutocadColor? color)) + if (colorBaker.ObjectColorsIdMap.TryGetValue(objId, out AutocadColor? color)) { entity.Color = color; } - if (_materialBaker.TryGetMaterialId(originalObject, parentObject, out ObjectId matId)) + if (materialBaker.TryGetMaterialId(originalObject, parentObject, out ObjectId matId)) { entity.MaterialId = matId; } @@ -253,7 +212,7 @@ string baseLayerName var groupDictionary = (DBDictionary) tr.GetObject(Application.DocumentManager.CurrentDocument.Database.GroupDictionaryId, OpenMode.ForWrite); - var groupName = _autocadContext.RemoveInvalidChars( + var groupName = autocadContext.RemoveInvalidChars( $@"{parentObject.speckle_type.Split('.').Last()} - {parentObject.applicationId ?? parentObject.id} ({baseLayerName})" ); diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs index 9c8c77e15..b1de30e12 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs @@ -49,13 +49,6 @@ ISdkActivityFactory activityFactory _activityFactory = activityFactory; } - public Task Build( - IReadOnlyList objects, - SendInfo sendInfo, - IProgress onOperationProgressed, - CancellationToken ct = default - ) => Task.FromResult(BuildSync(objects, sendInfo, onOperationProgressed, ct)); - [SuppressMessage( "Maintainability", "CA1506:Avoid excessive class coupling", @@ -65,11 +58,11 @@ It is already simplified but has many different references since it is a builder proxy classes yet. So I'm supressing this one now!!! """ )] - private RootObjectBuilderResult BuildSync( + public RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken ct = default + CancellationToken cancellationToken ) { // 0 - Init the root @@ -101,7 +94,7 @@ private RootObjectBuilderResult BuildSync( int count = 0; foreach (var (entity, applicationId) in atomicObjects) { - ct.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); using (var convertActivity = _activityFactory.Start("Converting object")) { // Create and add a collection for this entity if not done so already. diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs index f3c177540..cbc69d098 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Plugin/AutocadCommand.cs @@ -3,7 +3,6 @@ using Autodesk.AutoCAD.Windows; using Microsoft.Extensions.DependencyInjection; using Speckle.Connectors.Common; -using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.WebView; #if AUTOCAD using Speckle.Connectors.Autocad.DependencyInjection; @@ -48,7 +47,6 @@ public void Command() services.AddCivil3dConverters(); #endif Container = services.BuildServiceProvider(); - Container.UseDUI(); var panelWebView = Container.GetRequiredService(); diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 96a0be9d7..a1244ae51 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -377,12 +376,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index f3ed0a9f5..be043b6f2 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -377,12 +376,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index 7bd59ebab..b12a8490d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -377,12 +376,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 942c755df..52903379b 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -240,8 +240,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -333,12 +332,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3dShared/Bindings/Civil3dSendBinding.cs b/Connectors/Autocad/Speckle.Connectors.Civil3dShared/Bindings/Civil3dSendBinding.cs index a1aa571b0..4b26c74ef 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3dShared/Bindings/Civil3dSendBinding.cs +++ b/Connectors/Autocad/Speckle.Connectors.Civil3dShared/Bindings/Civil3dSendBinding.cs @@ -4,6 +4,7 @@ using Speckle.Connectors.Autocad.HostApp; using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Cancellation; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; @@ -32,7 +33,8 @@ public Civil3dSendBinding( ILogger logger, ICivil3dConversionSettingsFactory civil3dConversionSettingsFactory, IAutocadConversionSettingsFactory autocadConversionSettingsFactory, - ISpeckleApplication speckleApplication + ISpeckleApplication speckleApplication, + IThreadContext threadContext ) : base( store, @@ -44,7 +46,8 @@ ISpeckleApplication speckleApplication sendConversionCache, operationProgressManager, logger, - speckleApplication + speckleApplication, + threadContext ) { _civil3dConversionSettingsFactory = civil3dConversionSettingsFactory; diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs index 785d2c2ee..0c297fd8d 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs @@ -107,12 +107,9 @@ public async Task Send(string modelCardId) modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -121,7 +118,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs index 5660a1ce6..07386452d 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs @@ -42,11 +42,11 @@ ICsiApplicationService csiApplicationService _csiApplicationService = csiApplicationService; } - public async Task Build( + public RootObjectBuilderResult Build( IReadOnlyList csiObjects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken cancellationToken = default + CancellationToken cancellationToken ) { using var activity = _activityFactory.Start("Build"); @@ -62,8 +62,8 @@ public async Task Build( { foreach (ICsiWrapper csiObject in csiObjects) { - using var _2 = _activityFactory.Start("Convert"); cancellationToken.ThrowIfCancellationRequested(); + using var _2 = _activityFactory.Start("Convert"); var result = ConvertCSiObject(csiObject, rootObjectCollection, sendInfo.ProjectId); results.Add(result); @@ -78,7 +78,6 @@ public async Task Build( throw new SpeckleException("Failed to convert all objects."); } - await Task.Yield(); return new RootObjectBuilderResult(rootObjectCollection, results); } diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs index 572b81b46..59945da1e 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs @@ -1,7 +1,8 @@ -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Speckle.Connectors.Common; using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.CSiShared.Bindings; using Speckle.Connectors.CSiShared.Builders; using Speckle.Connectors.CSiShared.Filters; @@ -9,7 +10,6 @@ using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; -using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.DUI.WebView; using Speckle.Converters.CSiShared; @@ -24,11 +24,9 @@ public static IServiceCollection AddCsi(this IServiceCollection services) services.AddSingleton(); services.AddConnectorUtils(); - services.AddDUI(); + services.AddDUI(); services.AddDUIView(); - services.AddSingleton(); - services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 770dfe449..81cb41949 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -366,12 +365,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 08682760c..b3ca1a118 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -231,8 +231,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -321,12 +320,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index cca42e823..9dd78de63 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 4ecfd78d8..71790953f 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index f1c8e67fa..5ccb5c8a5 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index f2f020448..b485a56aa 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index 1ca33e433..7dc5c4be6 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 1e3aad772..0520d37d8 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -290,8 +290,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -368,12 +367,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs index 62c0ffda0..8d893c8cc 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksBasicConnectorBinding.cs @@ -42,20 +42,13 @@ NavisworksDocumentEvents documentEvents public string GetConnectorVersion() => _speckleApplication.SpeckleVersion; public DocumentInfo? GetDocumentInfo() => - Parent - .RunOnMainThreadAsync( - () => - Task.FromResult( - NavisworksApp.ActiveDocument is null || NavisworksApp.ActiveDocument.Models.Count == 0 - ? null - : new DocumentInfo( - NavisworksApp.ActiveDocument.CurrentFileName, - NavisworksApp.ActiveDocument.Title, - NavisworksApp.ActiveDocument.GetHashCode().ToString() - ) - ) - ) - .Result; + NavisworksApp.ActiveDocument is null || NavisworksApp.ActiveDocument.Models.Count == 0 + ? null + : new DocumentInfo( + NavisworksApp.ActiveDocument.CurrentFileName, + NavisworksApp.ActiveDocument.Title, + NavisworksApp.ActiveDocument.GetHashCode().ToString() + ); public DocumentModelStore GetDocumentState() => _store; @@ -68,11 +61,6 @@ NavisworksDocumentEvents documentEvents public Task HighlightModel(string modelCardId) => Task.CompletedTask; public async Task HighlightObjects(IReadOnlyList objectIds) => - await Parent - .RunOnMainThreadAsync(async () => - { - // TODO: Implement highlighting logic on main thread - await Task.CompletedTask.ConfigureAwait(false); - }) - .ConfigureAwait(false); + // TODO: Implement highlighting logic on main thread + await Task.CompletedTask; } diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs index 52389c16b..d3334383e 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs @@ -26,10 +26,7 @@ IElementSelectionService selectionService } private void OnSelectionChange(object? o, EventArgs eventArgs) => - _appIdleManager.SubscribeToIdle( - nameof(NavisworksSelectionBinding), - async () => await UpdateSelectionAsync().ConfigureAwait(false) - ); + _appIdleManager.SubscribeToIdle(nameof(NavisworksSelectionBinding), async () => await UpdateSelectionAsync()); private void UpdateSelection() { @@ -39,11 +36,8 @@ private void UpdateSelection() private async Task UpdateSelectionAsync() { - var selInfo = await Parent - .RunOnMainThreadAsync(() => Task.FromResult(GetSelection())) - .ConfigureAwait(false); - - await Parent.Send(SELECTION_EVENT, selInfo).ConfigureAwait(false); + var selInfo = GetSelection(); + await Parent.Send(SELECTION_EVENT, selInfo); } public SelectionInfo GetSelection() diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs index 8e5c15e3a..e67d8a7be 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs @@ -87,27 +87,19 @@ public async Task Send(string modelCardId) using var activity = _activityFactory.Start(); try { - await Parent - .RunOnMainThreadAsync(async () => - { - var modelCard = GetModelCard(modelCardId); + var modelCard = GetModelCard(modelCardId); - using var scope = _serviceProvider.CreateScope(); + using var scope = _serviceProvider.CreateScope(); - InitializeConverterSettings(scope, modelCard); + InitializeConverterSettings(scope, modelCard); - CancellationToken token = _cancellationManager.InitCancellationTokenSource(modelCardId); + CancellationToken token = _cancellationManager.InitCancellationTokenSource(modelCardId); - var navisworksModelItems = GetNavisworksModelItems(modelCard); + var navisworksModelItems = GetNavisworksModelItems(modelCard); - var sendResult = await ExecuteSendOperation(scope, modelCard, navisworksModelItems, token) - .ConfigureAwait(false); + var sendResult = await ExecuteSendOperation(scope, modelCard, navisworksModelItems, token); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); - }) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -118,7 +110,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } @@ -173,8 +165,7 @@ await scope modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCard.ModelCardId!, token), token - ) - .ConfigureAwait(false); + ); public void CancelSend(string modelCardId) => _cancellationManager.CancelOperation(modelCardId); diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs index a1d398292..b906ddce4 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs @@ -9,6 +9,7 @@ using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -27,7 +28,7 @@ public static void AddNavisworks(this IServiceCollection serviceCollection) { // Register Core functionality serviceCollection.AddConnectorUtils(); - serviceCollection.AddDUI(); + serviceCollection.AddDUI(); serviceCollection.AddDUIView(); // Register bindings diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs index 26fed81ee..69e05e171 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentEvents.cs @@ -84,10 +84,7 @@ private void HandleDocumentModelCountChanged(object sender, EventArgs e) _topLevelExceptionHandler.CatchUnhandled( () => - _idleManager.SubscribeToIdle( - nameof(NavisworksDocumentEvents), - async () => await ProcessModelStateChangeAsync().ConfigureAwait(false) - ) + _idleManager.SubscribeToIdle(nameof(NavisworksDocumentEvents), async () => await ProcessModelStateChangeAsync()) ); } @@ -102,29 +99,24 @@ private async Task ProcessModelStateChangeAsync() try { - await _parent - .RunOnMainThreadAsync(async () => - { - var store = _serviceProvider.GetRequiredService(); - var basicBinding = _serviceProvider.GetRequiredService(); - var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; - - switch (_finalModelCount) - { - case 0 when _priorModelCount > 0: - store.ClearAndSave(); - break; - case > 0 when _priorModelCount == 0: - store.ReloadState(); - break; - } - - if (commands != null) - { - await commands.NotifyDocumentChanged().ConfigureAwait(false); - } - }) - .ConfigureAwait(false); + var store = _serviceProvider.GetRequiredService(); + var basicBinding = _serviceProvider.GetRequiredService(); + var commands = (basicBinding as NavisworksBasicConnectorBinding)?.Commands; + + switch (_finalModelCount) + { + case 0 when _priorModelCount > 0: + store.ClearAndSave(); + break; + case > 0 when _priorModelCount == 0: + store.ReloadState(); + break; + } + + if (commands != null) + { + await commands.NotifyDocumentChanged(); + } } finally { @@ -164,7 +156,7 @@ private async Task NotifyValidModelStateChange() if (commands != null) { - await commands.NotifyDocumentChanged().ConfigureAwait(false); + await commands.NotifyDocumentChanged(); } } finally diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs index f58d59377..a099cb4fb 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -28,11 +28,11 @@ IElementSelectionService elementSelectionService { internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; - public Task Build( + public RootObjectBuilderResult Build( IReadOnlyList navisworksModelItems, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken cancellationToken = default + CancellationToken cancellationToken ) { using var activity = activityFactory.Start("Build"); @@ -151,7 +151,7 @@ public Task Build( // 8. Finalize and return rootObjectCollection.elements = finalElements; - return Task.FromResult(new RootObjectBuilderResult(rootObjectCollection, results)); + return new RootObjectBuilderResult(rootObjectCollection, results); } private SendConversionResult ConvertNavisworksItem( diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs index d6022ca75..b779afe43 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.DependencyInjection; using Speckle.Connector.Navisworks.DependencyInjection; using Speckle.Connectors.Common; -using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.WebView; using Speckle.Converter.Navisworks.DependencyInjection; using Speckle.Sdk.Host; @@ -42,8 +41,6 @@ public override Control CreateControlPane() Container = services.BuildServiceProvider(); - Container.UseDUI(); - var u = Container.GetRequiredService(); var speckleHost = new ElementHost { AutoSize = true, Child = u }; diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index f3829b4d2..f2887c194 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -303,8 +303,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -388,12 +387,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index d48c21422..0d8abeb3f 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -303,8 +303,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -388,12 +387,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index fed121036..a38e1ff9a 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -303,8 +303,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -388,12 +387,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index fe3a40a99..1218eb443 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -253,8 +253,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -337,12 +336,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared.Cef/CefSharpPanel.xaml.cs b/Connectors/Revit/Speckle.Connectors.RevitShared.Cef/CefSharpPanel.xaml.cs index ae78681ed..98e98c88f 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared.Cef/CefSharpPanel.xaml.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared.Cef/CefSharpPanel.xaml.cs @@ -13,15 +13,9 @@ public CefSharpPanel() InitializeComponent(); } - public Task ExecuteScriptAsyncMethod(string script, CancellationToken cancellationToken) + public void ExecuteScript(string script) { - Browser.Dispatcher.Invoke( - () => Browser.ExecuteScriptAsync(script), - DispatcherPriority.Background, - cancellationToken - ); - - return Task.CompletedTask; + Browser.Dispatcher.Invoke(() => Browser.ExecuteScriptAsync(script), DispatcherPriority.Background); } public bool IsBrowserInitialized => Browser.IsBrowserInitialized; diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs index 49f973536..c4ce8e66c 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs @@ -1,9 +1,7 @@ using Autodesk.Revit.DB; -using Revit.Async; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Models.Card; -using Speckle.Connectors.Revit.HostApp; using Speckle.Connectors.RevitShared; using Speckle.Connectors.RevitShared.Operations.Send.Filters; using Speckle.Converters.RevitShared.Helpers; @@ -20,13 +18,11 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding public BasicConnectorBindingCommands Commands { get; } - private readonly APIContext _apiContext; private readonly DocumentModelStore _store; private readonly RevitContext _revitContext; private readonly ISpeckleApplication _speckleApplication; public BasicConnectorBindingRevit( - APIContext apiContext, DocumentModelStore store, IBrowserBridge parent, RevitContext revitContext, @@ -35,7 +31,6 @@ ISpeckleApplication speckleApplication { Name = "baseBinding"; Parent = parent; - _apiContext = apiContext; _store = store; _revitContext = revitContext; _speckleApplication = speckleApplication; @@ -45,7 +40,7 @@ ISpeckleApplication speckleApplication _store.DocumentChanged += (_, _) => parent.TopLevelExceptionHandler.FireAndForget(async () => { - await Commands.NotifyDocumentChanged().ConfigureAwait(false); + await Commands.NotifyDocumentChanged(); }); } @@ -97,21 +92,16 @@ public async Task HighlightModel(string modelCardId) { if (senderModelCard.SendFilter is IRevitSendFilter revitFilter) { - revitFilter.SetContext(_revitContext, _apiContext); + revitFilter.SetContext(_revitContext); } if (senderModelCard.SendFilter is RevitViewsFilter revitViewsFilter) { - await _apiContext - .Run(() => - { - var view = revitViewsFilter.GetView(); - if (view is not null) - { - _revitContext.UIApplication.ActiveUIDocument.ActiveView = view; - } - }) - .ConfigureAwait(false); + var view = revitViewsFilter.GetView(); + if (view is not null) + { + _revitContext.UIApplication.ActiveUIDocument.ActiveView = view; + } return; } @@ -136,51 +126,42 @@ await _apiContext if (elementIds.Count == 0) { - await Commands - .SetModelError(modelCardId, new InvalidOperationException("No objects found to highlight.")) - .ConfigureAwait(false); + await Commands.SetModelError(modelCardId, new InvalidOperationException("No objects found to highlight.")); return; } - await HighlightObjectsOnView(elementIds).ConfigureAwait(false); + HighlightObjectsOnView(elementIds); } /// /// Highlights the objects from the given ids. /// /// UniqueId's of the DB.Elements. - public async Task HighlightObjects(IReadOnlyList objectIds) + public Task HighlightObjects(IReadOnlyList objectIds) { var activeUIDoc = _revitContext.UIApplication?.ActiveUIDocument ?? throw new SpeckleException("Unable to retrieve active UI document"); - await HighlightObjectsOnView( - objectIds - .Select(uid => ElementIdHelper.GetElementIdFromUniqueId(activeUIDoc.Document, uid)) - .Where(el => el is not null) - .Cast() - .ToList() - ) - .ConfigureAwait(false); - ; + HighlightObjectsOnView( + objectIds + .Select(uid => ElementIdHelper.GetElementIdFromUniqueId(activeUIDoc.Document, uid)) + .Where(el => el is not null) + .Cast() + .ToList() + ); + return Task.CompletedTask; } - private async Task HighlightObjectsOnView(List objectIds) + private void HighlightObjectsOnView(List objectIds) { // POC: don't know if we can rely on storing the ActiveUIDocument, hence getting it each time var activeUIDoc = _revitContext.UIApplication?.ActiveUIDocument ?? throw new SpeckleException("Unable to retrieve active UI document"); - // UiDocument operations should be wrapped into RevitTask, otherwise doesn't work on other tasks. - await RevitTask - .RunAsync(() => - { - activeUIDoc.Selection.SetElementIds(objectIds); - activeUIDoc.ShowElements(objectIds); - }) - .ConfigureAwait(false); + activeUIDoc.Selection.SetElementIds(objectIds); + activeUIDoc.ShowElements(objectIds); ; } } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs index 2abd95945..1f52cd26d 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitReceiveBinding.cs @@ -83,13 +83,14 @@ public async Task Receive(string modelCardId) modelCard.GetReceiveInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); modelCard.BakedObjectIds = conversionResults.BakedObjectIds.ToList(); - await Commands - .SetModelReceiveResult(modelCardId, conversionResults.BakedObjectIds, conversionResults.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelReceiveResult( + modelCardId, + conversionResults.BakedObjectIds, + conversionResults.ConversionResults + ); } catch (OperationCanceledException) { @@ -100,7 +101,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } finally { diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs index c491b7fac..27cb51e56 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs @@ -16,7 +16,6 @@ using Speckle.Connectors.DUI.Settings; using Speckle.Connectors.Revit.HostApp; using Speckle.Connectors.Revit.Operations.Send.Settings; -using Speckle.Connectors.Revit.Plugin; using Speckle.Connectors.RevitShared.Operations.Send.Filters; using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; @@ -28,8 +27,7 @@ namespace Speckle.Connectors.Revit.Bindings; internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding { - private readonly IRevitIdleManager _idleManager; - private readonly APIContext _apiContext; + private readonly IAppIdleManager _idleManager; private readonly CancellationManager _cancellationManager; private readonly IServiceProvider _serviceProvider; private readonly ISendConversionCache _sendConversionCache; @@ -49,9 +47,8 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding private ConcurrentDictionary ChangedObjectIds { get; set; } = new(); public RevitSendBinding( - IRevitIdleManager idleManager, + IAppIdleManager idleManager, RevitContext revitContext, - APIContext apiContext, DocumentModelStore store, CancellationManager cancellationManager, IBrowserBridge bridge, @@ -67,7 +64,6 @@ ISpeckleApplication speckleApplication : base("sendBinding", store, bridge, revitContext) { _idleManager = idleManager; - _apiContext = apiContext; _cancellationManager = cancellationManager; _serviceProvider = serviceProvider; _sendConversionCache = sendConversionCache; @@ -82,20 +78,17 @@ ISpeckleApplication speckleApplication Commands = new SendBindingUICommands(bridge); // TODO expiry events // TODO filters need refresh events - _idleManager.RunAsync(() => - { - revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) => - topLevelExceptionHandler.CatchUnhandled(() => DocChangeHandler(e)); - }); - Store.DocumentChanged += (_, _) => - topLevelExceptionHandler.FireAndForget(async () => await OnDocumentChanged().ConfigureAwait(false)); + + revitContext.UIApplication.NotNull().Application.DocumentChanged += (_, e) => + topLevelExceptionHandler.CatchUnhandled(() => DocChangeHandler(e)); + Store.DocumentChanged += (_, _) => topLevelExceptionHandler.FireAndForget(async () => await OnDocumentChanged()); } public List GetSendFilters() => [ new RevitSelectionFilter() { IsDefault = true }, - new RevitViewsFilter(RevitContext, _apiContext), - new RevitCategoriesFilter(RevitContext, _apiContext) + new RevitViewsFilter(RevitContext), + new RevitCategoriesFilter(RevitContext) ]; public List GetSendSettings() => @@ -133,7 +126,7 @@ public async Task Send(string modelCardId) ) ); - List elements = await RefreshElementsOnSender(modelCard.NotNull()).ConfigureAwait(false); + List elements = await RefreshElementsOnSender(modelCard.NotNull()); List elementIds = elements.Select(el => el.Id).ToList(); if (elementIds.Count == 0) @@ -149,12 +142,9 @@ public async Task Send(string modelCardId) modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -165,7 +155,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } finally { @@ -182,12 +172,10 @@ private async Task> RefreshElementsOnSender(SenderModelCard modelC if (modelCard.SendFilter is IRevitSendFilter viewFilter) { - viewFilter.SetContext(RevitContext, _apiContext); + viewFilter.SetContext(RevitContext); } - var selectedObjects = await _apiContext - .Run(_ => modelCard.SendFilter.NotNull().RefreshObjectIds()) - .ConfigureAwait(false); + var selectedObjects = modelCard.SendFilter.NotNull().RefreshObjectIds(); List elements = selectedObjects .Select(uid => activeUIDoc.Document.GetElement(uid)) @@ -204,9 +192,11 @@ private async Task> RefreshElementsOnSender(SenderModelCard modelC } // We update the state on the UI SenderModelCard to prevent potential inconsistencies between hostApp IdMap in sendfilters. - await Commands - .SetFilterObjectIds(modelCard.ModelCardId.NotNull(), modelCard.SendFilter.IdMap, newSelectedObjectIds) - .ConfigureAwait(false); + await Commands.SetFilterObjectIds( + modelCard.ModelCardId.NotNull(), + modelCard.SendFilter.IdMap, + newSelectedObjectIds + ); } return elements; @@ -315,7 +305,7 @@ private async Task PostSetObjectIds() { foreach (var sender in Store.GetSenders().ToList()) { - await RefreshElementsOnSender(sender).ConfigureAwait(false); + await RefreshElementsOnSender(sender); } } @@ -330,12 +320,12 @@ private async Task CheckFilterExpiration() // var intersection = ChangedObjectIds.Keys.Intersect(views).ToList(); // if (intersection.Count != 0) // { - // await Commands.RefreshSendFilters().ConfigureAwait(false); + // await Commands.RefreshSendFilters(); // } if (ChangedObjectIds.Keys.Any(e => RevitContext.UIApplication?.ActiveUIDocument.Document.GetElement(e) is View)) { - await Commands.RefreshSendFilters().ConfigureAwait(false); + await Commands.RefreshSendFilters(); } } @@ -394,7 +384,7 @@ private async Task RunExpirationChecks() { if (modelCard.SendFilter is IRevitSendFilter viewFilter) { - viewFilter.SetContext(RevitContext, _apiContext); + viewFilter.SetContext(RevitContext); } var selectedObjects = modelCard.SendFilter.NotNull().IdMap.NotNull().Values; @@ -406,7 +396,7 @@ private async Task RunExpirationChecks() } } - await Commands.SetModelsExpired(expiredSenderIds).ConfigureAwait(false); + await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); } @@ -419,13 +409,11 @@ private async Task OnDocumentChanged() if (_cancellationManager.NumberOfOperations > 0) { _cancellationManager.CancelAllOperations(); - await Commands - .SetGlobalNotification( - ToastNotificationType.INFO, - "Document Switch", - "Operations cancelled because of document swap!" - ) - .ConfigureAwait(false); + await Commands.SetGlobalNotification( + ToastNotificationType.INFO, + "Document Switch", + "Operations cancelled because of document swap!" + ); } } } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs index 174131ee2..eabb03f7f 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/SelectionBinding.cs @@ -1,7 +1,6 @@ using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; -using Speckle.Connectors.Revit.Plugin; using Speckle.Converters.RevitShared.Helpers; using Speckle.Sdk.Common; @@ -17,7 +16,7 @@ internal sealed class SelectionBinding : RevitBaseBinding, ISelectionBinding, ID public SelectionBinding( RevitContext revitContext, DocumentModelStore store, - IRevitIdleManager revitIdleManager, + IAppIdleManager revitIdleManager, IBrowserBridge parent ) : base("selectionBinding", store, parent, revitContext) @@ -28,11 +27,9 @@ IBrowserBridge parent _selectionTimer.Elapsed += (_, _) => parent.TopLevelExceptionHandler.CatchUnhandled(OnSelectionChanged); _selectionTimer.Start(); #else - revitIdleManager.RunAsync(() => - { - RevitContext.UIApplication.NotNull().SelectionChanged += (_, _) => - revitIdleManager.SubscribeToIdle(nameof(SelectionBinding), OnSelectionChanged); - }); + + RevitContext.UIApplication.NotNull().SelectionChanged += (_, _) => + revitIdleManager.SubscribeToIdle(nameof(SelectionBinding), OnSelectionChanged); #endif } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/RevitConnectorModule.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/RevitConnectorModule.cs index 8302eb18f..b719cc2d4 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/RevitConnectorModule.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/DependencyInjection/RevitConnectorModule.cs @@ -25,7 +25,7 @@ public static class ServiceRegistration public static void AddRevit(this IServiceCollection serviceCollection) { serviceCollection.AddConnectorUtils(); - serviceCollection.AddDUI(); + serviceCollection.AddDUI(); RegisterUiDependencies(serviceCollection); // Storage Schema @@ -41,7 +41,7 @@ public static void AddRevit(this IServiceCollection serviceCollection) serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); - serviceCollection.AddSingleton(); + serviceCollection.AddSingleton(); serviceCollection.RegisterTopLevelExceptionHandler(); @@ -69,9 +69,6 @@ public static void AddRevit(this IServiceCollection serviceCollection) // operation progress manager serviceCollection.AddSingleton(); - - // API context helps us to run functions on Revit UI Thread (main) - serviceCollection.AddSingleton(); } public static void RegisterUiDependencies(IServiceCollection serviceCollection) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/APIContext.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/APIContext.cs deleted file mode 100644 index 5260d0933..000000000 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/APIContext.cs +++ /dev/null @@ -1,130 +0,0 @@ -using Autodesk.Revit.UI; - -namespace Speckle.Connectors.Revit.HostApp; - -/// -/// This class gives access to the Revit API context from anywhere in your codebase. This is essentially a -/// lite version of the Revit.Async package from Kennan Chan. Most of the functionality was taken from that code. -/// The main difference is that this class does not subscribe to the applicationIdling event from revit -/// which the docs say will impact the performance of Revit -/// -public sealed class APIContext : IDisposable -{ - private readonly SemaphoreSlim _semaphore = new(1, 1); - private readonly UIControlledApplication _uiApplication; - private readonly ExternalEventHandler _factoryExternalEventHandler; -#pragma warning disable CA2213 - private readonly ExternalEvent _factoryExternalEvent; -#pragma warning restore CA2213 - - public APIContext(UIControlledApplication application) - { - _uiApplication = application; - _factoryExternalEventHandler = new(ExternalEvent.Create); - _factoryExternalEvent = ExternalEvent.Create(_factoryExternalEventHandler); - } - - public async Task Run(Func func) - { - await _semaphore.WaitAsync().ConfigureAwait(false); - try - { - var handler = new ExternalEventHandler(func); - using var externalEvent = await Run(_factoryExternalEventHandler, handler, _factoryExternalEvent) - .ConfigureAwait(false); - - return await Run(handler, _uiApplication, externalEvent).ConfigureAwait(false); - } - finally - { - _semaphore.Release(); - } - } - - public async Task Run(Action action) => - await Run(app => - { - action(app); - return null!; - }) - .ConfigureAwait(false); - - public async Task Run(Action action) => - await Run(_ => - { - action(); - return null!; - }) - .ConfigureAwait(false); - - private async Task Run( - ExternalEventHandler handler, - TParameter parameter, - ExternalEvent externalEvent - ) - { - var task = handler.GetTask(parameter); - externalEvent.Raise(); - - return await task.ConfigureAwait(false); - } - - public void Dispose() - { - _factoryExternalEvent.Dispose(); - _semaphore.Dispose(); - } -} - -public enum HandlerStatus -{ - NotStarted, - Started, - IsCompleted, - IsFaulted, -} - -internal sealed class ExternalEventHandler : IExternalEventHandler -{ - private TaskCompletionSource Result { get; set; } - - public Task GetTask(TParameter parameter) - { - Parameter = parameter; - Result = new TaskCompletionSource(); - return Result.Task; - } - - private readonly Func _func; - - public ExternalEventHandler(Func func) - { - this._func = func; - } - - public HandlerStatus Status { get; private set; } = HandlerStatus.NotStarted; - private TParameter Parameter { get; set; } - - [System.Diagnostics.CodeAnalysis.SuppressMessage( - "Design", - "CA1031:Do not catch general exception types", - Justification = "This is a very generic utility method for running things in a Revit context. If the result of the Run method is awaited, then the exception caught here will be raised there." - )] - public void Execute(UIApplication app) - { - Status = HandlerStatus.Started; - try - { - var r = _func(Parameter); - Result.SetResult(r); - Status = HandlerStatus.IsCompleted; - } - catch (Exception ex) - { - Status = HandlerStatus.IsFaulted; - Result.SetException(ex); - } - } - - public string GetName() => "SpeckleRevitContextEventHandler"; -} diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs index d3254822e..5b8629853 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs @@ -2,11 +2,9 @@ using Autodesk.Revit.DB.ExtensibleStorage; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Events; -using Revit.Async; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Utils; -using Speckle.Connectors.Revit.Plugin; using Speckle.Converters.RevitShared.Helpers; using Speckle.Sdk.Common; @@ -19,12 +17,12 @@ internal sealed class RevitDocumentStore : DocumentModelStore private static readonly Guid s_revitDocumentStoreId = new("D35B3695-EDC9-4E15-B62A-D3FC2CB83FA3"); private readonly RevitContext _revitContext; - private readonly IRevitIdleManager _idleManager; + private readonly IAppIdleManager _idleManager; private readonly DocumentModelStorageSchema _documentModelStorageSchema; private readonly IdStorageSchema _idStorageSchema; public RevitDocumentStore( - IRevitIdleManager idleManager, + IAppIdleManager idleManager, RevitContext revitContext, IJsonSerializer jsonSerializer, DocumentModelStorageSchema documentModelStorageSchema, @@ -38,18 +36,15 @@ ITopLevelExceptionHandler topLevelExceptionHandler _documentModelStorageSchema = documentModelStorageSchema; _idStorageSchema = idStorageSchema; - _idleManager.RunAsync(() => - { - UIApplication uiApplication = _revitContext.UIApplication.NotNull(); + UIApplication uiApplication = _revitContext.UIApplication.NotNull(); - uiApplication.ViewActivated += (s, e) => topLevelExceptionHandler.CatchUnhandled(() => OnViewActivated(s, e)); + uiApplication.ViewActivated += (s, e) => topLevelExceptionHandler.CatchUnhandled(() => OnViewActivated(s, e)); - uiApplication.Application.DocumentOpening += (_, _) => - topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false); + uiApplication.Application.DocumentOpening += (_, _) => + topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false); - uiApplication.Application.DocumentOpened += (_, _) => - topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false); - }); + uiApplication.Application.DocumentOpened += (_, _) => + topLevelExceptionHandler.CatchUnhandled(() => IsDocumentInit = false); // There is no event that we can hook here for double-click file open... // It is kind of harmless since we create this object as "SingleInstance". @@ -92,23 +87,21 @@ protected override void HostAppSaveState(string modelCardState) { return; } - RevitTask.RunAsync(() => - { - var doc = (_revitContext.UIApplication?.ActiveUIDocument?.Document).NotNull(); - using Transaction t = new(doc, "Speckle Write State"); - t.Start(); - using DataStorage ds = GetSettingsDataStorage(doc) ?? DataStorage.Create(doc); - using Entity stateEntity = new(_documentModelStorageSchema.GetSchema()); - stateEntity.Set("contents", modelCardState); + using Transaction t = new(doc, "Speckle Write State"); + t.Start(); + using DataStorage ds = GetSettingsDataStorage(doc) ?? DataStorage.Create(doc); + + using Entity stateEntity = new(_documentModelStorageSchema.GetSchema()); + string serializedModels = Serialize(); + stateEntity.Set("contents", serializedModels); - using Entity idEntity = new(_idStorageSchema.GetSchema()); - idEntity.Set("Id", s_revitDocumentStoreId); + using Entity idEntity = new(_idStorageSchema.GetSchema()); + idEntity.Set("Id", s_revitDocumentStoreId); - ds.SetEntity(idEntity); - ds.SetEntity(stateEntity); - t.Commit(); - }); + ds.SetEntity(idEntity); + ds.SetEntity(stateEntity); + t.Commit(); } protected override void LoadState() diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs index a0acbddfc..59ba3a395 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/RevitHostObjectBuilder.cs @@ -1,6 +1,5 @@ using Autodesk.Revit.DB; using Microsoft.Extensions.Logging; -using Revit.Async; using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Conversion; using Speckle.Connectors.Common.Instances; @@ -24,64 +23,24 @@ namespace Speckle.Connectors.Revit.Operations.Receive; -internal sealed class RevitHostObjectBuilder : IHostObjectBuilder, IDisposable -{ - private readonly IRootToHostConverter _converter; - private readonly IConverterSettingsStore _converterSettings; - private readonly RevitToHostCacheSingleton _revitToHostCacheSingleton; - private readonly ITransactionManager _transactionManager; - private readonly ILocalToGlobalUnpacker _localToGlobalUnpacker; - private readonly RevitGroupBaker _groupBaker; - private readonly RevitMaterialBaker _materialBaker; - private readonly ILogger _logger; - private readonly ITypedConverter< +public sealed class RevitHostObjectBuilder( + IRootToHostConverter converter, + IConverterSettingsStore converterSettings, + ITransactionManager transactionManager, + ISdkActivityFactory activityFactory, + ILocalToGlobalUnpacker localToGlobalUnpacker, + RevitGroupBaker groupManager, + RevitMaterialBaker materialBaker, + RootObjectUnpacker rootObjectUnpacker, + ILogger logger, + RevitToHostCacheSingleton revitToHostCacheSingleton, + ITypedConverter< (Base atomicObject, IReadOnlyCollection matrix), DirectShape - > _localToGlobalDirectShapeConverter; - - private readonly RootObjectUnpacker _rootObjectUnpacker; - private readonly ISdkActivityFactory _activityFactory; - - public RevitHostObjectBuilder( - IRootToHostConverter converter, - IConverterSettingsStore converterSettings, - ITransactionManager transactionManager, - ISdkActivityFactory activityFactory, - ILocalToGlobalUnpacker localToGlobalUnpacker, - RevitGroupBaker groupManager, - RevitMaterialBaker materialBaker, - RootObjectUnpacker rootObjectUnpacker, - ILogger logger, - RevitToHostCacheSingleton revitToHostCacheSingleton, - ITypedConverter< - (Base atomicObject, IReadOnlyCollection matrix), - DirectShape - > localToGlobalDirectShapeConverter - ) - { - _converter = converter; - _converterSettings = converterSettings; - _transactionManager = transactionManager; - _localToGlobalUnpacker = localToGlobalUnpacker; - _groupBaker = groupManager; - _materialBaker = materialBaker; - _rootObjectUnpacker = rootObjectUnpacker; - _logger = logger; - _revitToHostCacheSingleton = revitToHostCacheSingleton; - _localToGlobalDirectShapeConverter = localToGlobalDirectShapeConverter; - _activityFactory = activityFactory; - } - - public Task Build( - Base rootObject, - string projectName, - string modelName, - IProgress onOperationProgressed, - CancellationToken cancellationToken - ) => - RevitTask.RunAsync(() => BuildSync(rootObject, projectName, modelName, onOperationProgressed, cancellationToken)); - - private HostObjectBuilderResult BuildSync( + > localToGlobalDirectShapeConverter +) : IHostObjectBuilder, IDisposable +{ + public HostObjectBuilderResult Build( Base rootObject, string projectName, string modelName, @@ -92,27 +51,27 @@ CancellationToken cancellationToken var baseGroupName = $"Project {projectName}: Model {modelName}"; // TODO: unify this across connectors! onOperationProgressed.Report(new("Converting", null)); - using var activity = _activityFactory.Start("Build"); + using var activity = activityFactory.Start("Build"); // 0 - Clean then Rock n Roll! 🎸 { - _activityFactory.Start("Pre receive clean"); - _transactionManager.StartTransaction(true, "Pre receive clean"); + activityFactory.Start("Pre receive clean"); + transactionManager.StartTransaction(true, "Pre receive clean"); try { PreReceiveDeepClean(baseGroupName); } catch (Exception ex) when (!ex.IsFatal()) { - _logger.LogError(ex, "Failed to clean up before receive in Revit"); + logger.LogError(ex, "Failed to clean up before receive in Revit"); } - _transactionManager.CommitTransaction(); + transactionManager.CommitTransaction(); } // 1 - Unpack objects and proxies from root commit object - var unpackedRoot = _rootObjectUnpacker.Unpack(rootObject); - var localToGlobalMaps = _localToGlobalUnpacker.Unpack( + var unpackedRoot = rootObjectUnpacker.Unpack(rootObject); + var localToGlobalMaps = localToGlobalUnpacker.Unpack( unpackedRoot.DefinitionProxies, unpackedRoot.ObjectsToConvert.ToList() ); @@ -120,14 +79,14 @@ CancellationToken cancellationToken // 2 - Bake materials if (unpackedRoot.RenderMaterialProxies != null) { - _transactionManager.StartTransaction(true, "Baking materials"); - _materialBaker.MapLayersRenderMaterials(unpackedRoot); - var map = _materialBaker.BakeMaterials(unpackedRoot.RenderMaterialProxies, baseGroupName); + transactionManager.StartTransaction(true, "Baking materials"); + materialBaker.MapLayersRenderMaterials(unpackedRoot); + var map = materialBaker.BakeMaterials(unpackedRoot.RenderMaterialProxies, baseGroupName); foreach (var kvp in map) { - _revitToHostCacheSingleton.MaterialsByObjectId.Add(kvp.Key, kvp.Value); + revitToHostCacheSingleton.MaterialsByObjectId.Add(kvp.Key, kvp.Value); } - _transactionManager.CommitTransaction(); + transactionManager.CommitTransaction(); } // 3 - Bake objects @@ -136,26 +95,26 @@ CancellationToken cancellationToken List<(DirectShape res, string applicationId)> postBakePaintTargets ) conversionResults; { - using var _ = _activityFactory.Start("Baking objects"); - _transactionManager.StartTransaction(true, "Baking objects"); + using var _ = activityFactory.Start("Baking objects"); + transactionManager.StartTransaction(true, "Baking objects"); conversionResults = BakeObjects(localToGlobalMaps, onOperationProgressed, cancellationToken); - _transactionManager.CommitTransaction(); + transactionManager.CommitTransaction(); } // 4 - Paint solids { - using var _ = _activityFactory.Start("Painting solids"); - _transactionManager.StartTransaction(true, "Painting solids"); + using var _ = activityFactory.Start("Painting solids"); + transactionManager.StartTransaction(true, "Painting solids"); PostBakePaint(conversionResults.postBakePaintTargets); - _transactionManager.CommitTransaction(); + transactionManager.CommitTransaction(); } // 5 - Create group { - using var _ = _activityFactory.Start("Grouping"); - _transactionManager.StartTransaction(true, "Grouping"); - _groupBaker.BakeGroupForTopLevel(baseGroupName); - _transactionManager.CommitTransaction(); + using var _ = activityFactory.Start("Grouping"); + transactionManager.StartTransaction(true, "Grouping"); + groupManager.BakeGroupForTopLevel(baseGroupName); + transactionManager.CommitTransaction(); } return conversionResults.builderResult; @@ -170,7 +129,7 @@ CancellationToken cancellationToken CancellationToken cancellationToken ) { - using var _ = _activityFactory.Start("BakeObjects"); + using var _ = activityFactory.Start("BakeObjects"); var conversionResults = new List(); var bakedObjectIds = new List(); int count = 0; @@ -182,7 +141,7 @@ CancellationToken cancellationToken cancellationToken.ThrowIfCancellationRequested(); try { - using var activity = _activityFactory.Start("BakeObject"); + using var activity = activityFactory.Start("BakeObject"); // POC hack of the ages: try to pre transform curves, points and meshes before baking // we need to bypass the local to global converter as there we don't have access to what we want. that service will/should stop existing. @@ -208,17 +167,17 @@ localToGlobalMap.AtomicObject is ITransformable transformable // and ICurve } // actual conversion happens here! - var result = _converter.Convert(localToGlobalMap.AtomicObject); + var result = converter.Convert(localToGlobalMap.AtomicObject); onOperationProgressed.Report(new("Converting", (double)++count / localToGlobalMaps.Count)); if (result is DirectShapeDefinitionWrapper) { // direct shape creation happens here - DirectShape directShapes = _localToGlobalDirectShapeConverter.Convert( + DirectShape directShapes = localToGlobalDirectShapeConverter.Convert( (localToGlobalMap.AtomicObject, localToGlobalMap.Matrix) ); bakedObjectIds.Add(directShapes.UniqueId); - _groupBaker.AddToTopLevelGroup(directShapes); + groupManager.AddToTopLevelGroup(directShapes); if (localToGlobalMap.AtomicObject is IRawEncodedObject and Base myBase) { @@ -237,7 +196,7 @@ localToGlobalMap.AtomicObject is ITransformable transformable // and ICurve catch (Exception ex) when (!ex.IsFatal()) { conversionResults.Add(new(Status.ERROR, localToGlobalMap.AtomicObject, null, null, ex)); - _logger.LogError(ex, $"Failed to convert object of type {localToGlobalMap.AtomicObject.speckle_type}"); + logger.LogError(ex, $"Failed to convert object of type {localToGlobalMap.AtomicObject.speckle_type}"); } } return (new(bakedObjectIds, conversionResults), postBakePaintTargets); @@ -253,7 +212,7 @@ private void PostBakePaint(List<(DirectShape res, string applicationId)> paintTa { var elGeometry = res.get_Geometry(new Options() { DetailLevel = ViewDetailLevel.Undefined }); var materialId = ElementId.InvalidElementId; - if (_revitToHostCacheSingleton.MaterialsByObjectId.TryGetValue(applicationId, out var mappedElementId)) + if (revitToHostCacheSingleton.MaterialsByObjectId.TryGetValue(applicationId, out var mappedElementId)) { materialId = mappedElementId; } @@ -270,7 +229,7 @@ private void PostBakePaint(List<(DirectShape res, string applicationId)> paintTa { foreach (Face face in s.Faces) { - _converterSettings.Current.Document.Paint(res.Id, face, materialId); + converterSettings.Current.Document.Paint(res.Id, face, materialId); } } } @@ -279,12 +238,12 @@ private void PostBakePaint(List<(DirectShape res, string applicationId)> paintTa private void PreReceiveDeepClean(string baseGroupName) { - DirectShapeLibrary.GetDirectShapeLibrary(_converterSettings.Current.Document).Reset(); // Note: this needs to be cleared, as it is being used in the converter + DirectShapeLibrary.GetDirectShapeLibrary(converterSettings.Current.Document).Reset(); // Note: this needs to be cleared, as it is being used in the converter - _revitToHostCacheSingleton.MaterialsByObjectId.Clear(); // Massive hack! - _groupBaker.PurgeGroups(baseGroupName); - _materialBaker.PurgeMaterials(baseGroupName); + revitToHostCacheSingleton.MaterialsByObjectId.Clear(); // Massive hack! + groupManager.PurgeGroups(baseGroupName); + materialBaker.PurgeMaterials(baseGroupName); } - public void Dispose() => _transactionManager?.Dispose(); + public void Dispose() => transactionManager?.Dispose(); } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/IRevitSendFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/IRevitSendFilter.cs index 8895b357b..fe576b8b3 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/IRevitSendFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/IRevitSendFilter.cs @@ -1,9 +1,8 @@ -using Speckle.Connectors.Revit.HostApp; -using Speckle.Converters.RevitShared.Helpers; +using Speckle.Converters.RevitShared.Helpers; namespace Speckle.Connectors.RevitShared.Operations.Send.Filters; public interface IRevitSendFilter { - public void SetContext(RevitContext revitContext, APIContext apiContext); + public void SetContext(RevitContext revitContext); } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs index b1cd74db7..25e3d017c 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs @@ -2,7 +2,6 @@ using Speckle.Connectors.DUI.Exceptions; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.DUI.Utils; -using Speckle.Connectors.Revit.HostApp; using Speckle.Converters.RevitShared.Helpers; namespace Speckle.Connectors.RevitShared.Operations.Send.Filters; @@ -12,7 +11,6 @@ public record CategoryData(string Name, string Id); public class RevitCategoriesFilter : DiscriminatedObject, ISendFilter, IRevitSendFilter { private RevitContext _revitContext; - private APIContext _apiContext; private Document? _doc; public string Id { get; set; } = "revitCategories"; public string Name { get; set; } = "Categories"; @@ -25,10 +23,9 @@ public class RevitCategoriesFilter : DiscriminatedObject, ISendFilter, IRevitSen public RevitCategoriesFilter() { } - public RevitCategoriesFilter(RevitContext revitContext, APIContext apiContext) + public RevitCategoriesFilter(RevitContext revitContext) { _revitContext = revitContext; - _apiContext = apiContext; _doc = _revitContext.UIApplication?.ActiveUIDocument.Document; GetCategories(); @@ -82,10 +79,9 @@ private void GetCategories() /// NOTE: this is needed since we need doc on `GetObjectIds()` function after it deserialized. /// DI doesn't help here to pass RevitContext from constructor. /// - public void SetContext(RevitContext revitContext, APIContext apiContext) + public void SetContext(RevitContext revitContext) { _revitContext = revitContext; - _apiContext = apiContext; _doc = _revitContext.UIApplication?.ActiveUIDocument.Document; } } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs index d98f46b80..d5ae8f0e9 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs @@ -2,7 +2,6 @@ using Speckle.Connectors.DUI.Exceptions; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.DUI.Utils; -using Speckle.Connectors.Revit.HostApp; using Speckle.Converters.RevitShared.Helpers; namespace Speckle.Connectors.RevitShared.Operations.Send.Filters; @@ -10,7 +9,6 @@ namespace Speckle.Connectors.RevitShared.Operations.Send.Filters; public class RevitViewsFilter : DiscriminatedObject, ISendFilter, IRevitSendFilter { private RevitContext _revitContext; - private APIContext _apiContext; private Document? _doc; public string Id { get; set; } = "revitViews"; public string Name { get; set; } = "Views"; @@ -23,10 +21,9 @@ public class RevitViewsFilter : DiscriminatedObject, ISendFilter, IRevitSendFilt public RevitViewsFilter() { } - public RevitViewsFilter(RevitContext revitContext, APIContext apiContext) + public RevitViewsFilter(RevitContext revitContext) { _revitContext = revitContext; - _apiContext = apiContext; _doc = _revitContext.UIApplication?.ActiveUIDocument.Document; GetViews(); @@ -100,10 +97,9 @@ private void GetViews() /// NOTE: this is needed since we need doc on `GetObjectIds()` function after it deserialized. /// DI doesn't help here to pass RevitContext from constructor. /// - public void SetContext(RevitContext revitContext, APIContext apiContext) + public void SetContext(RevitContext revitContext) { _revitContext = revitContext; - _apiContext = apiContext; _doc = _revitContext.UIApplication?.ActiveUIDocument.Document; } } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index 2b374c37d..0e1fcd55e 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -1,6 +1,5 @@ using Autodesk.Revit.DB; using Microsoft.Extensions.Logging; -using Revit.Async; using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Conversion; @@ -11,61 +10,32 @@ using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Helpers; using Speckle.Converters.RevitShared.Settings; -using Speckle.Converters.RevitShared.ToSpeckle; using Speckle.Sdk; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Collections; namespace Speckle.Connectors.Revit.Operations.Send; -public class RevitRootObjectBuilder : IRootObjectBuilder +public class RevitRootObjectBuilder( + IRootToSpeckleConverter converter, + IConverterSettingsStore converterSettings, + ISendConversionCache sendConversionCache, + ElementUnpacker elementUnpacker, + SendCollectionManager sendCollectionManager, + ILogger logger, + RevitToSpeckleCacheSingleton revitToSpeckleCacheSingleton +) : IRootObjectBuilder { // POC: SendSelection and RevitConversionContextStack should be interfaces, former needs interfaces - private readonly IRootToSpeckleConverter _converter; - private readonly IConverterSettingsStore _converterSettings; - private readonly ISendConversionCache _sendConversionCache; - private readonly ElementUnpacker _elementUnpacker; - private readonly SendCollectionManager _sendCollectionManager; - private readonly RevitToSpeckleCacheSingleton _revitToSpeckleCacheSingleton; - private readonly ILogger _logger; - private readonly ParameterDefinitionHandler _parameterDefinitionHandler; - - public RevitRootObjectBuilder( - IRootToSpeckleConverter converter, - IConverterSettingsStore converterSettings, - ISendConversionCache sendConversionCache, - ElementUnpacker elementUnpacker, - SendCollectionManager sendCollectionManager, - ILogger logger, - ParameterDefinitionHandler parameterDefinitionHandler, - RevitToSpeckleCacheSingleton revitToSpeckleCacheSingleton - ) - { - _converter = converter; - _converterSettings = converterSettings; - _sendConversionCache = sendConversionCache; - _elementUnpacker = elementUnpacker; - _sendCollectionManager = sendCollectionManager; - _revitToSpeckleCacheSingleton = revitToSpeckleCacheSingleton; - _logger = logger; - _parameterDefinitionHandler = parameterDefinitionHandler; - } - - public async Task Build( - IReadOnlyList objects, - SendInfo sendInfo, - IProgress onOperationProgressed, - CancellationToken ct = default - ) => await RevitTask.RunAsync(() => BuildSync(objects, sendInfo, onOperationProgressed, ct)).ConfigureAwait(false); - private RootObjectBuilderResult BuildSync( + public RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken ct = default + CancellationToken cancellationToken ) { - var doc = _converterSettings.Current.Document; + var doc = converterSettings.Current.Document; if (doc.IsFamilyDocument) { @@ -74,15 +44,15 @@ private RootObjectBuilderResult BuildSync( // 0 - Init the root Collection rootObject = - new() { name = _converterSettings.Current.Document.PathName.Split('\\').Last().Split('.').First() }; - rootObject["units"] = _converterSettings.Current.SpeckleUnits; + new() { name = converterSettings.Current.Document.PathName.Split('\\').Last().Split('.').First() }; + rootObject["units"] = converterSettings.Current.SpeckleUnits; var revitElements = new List(); // Convert ids to actual revit elements foreach (var id in objects) { - var el = _converterSettings.Current.Document.GetElement(id); + var el = converterSettings.Current.Document.GetElement(id); if (el != null) { revitElements.Add(el); @@ -97,38 +67,38 @@ private RootObjectBuilderResult BuildSync( List results = new(revitElements.Count); // Unpack groups (& other complex data structures) - var atomicObjects = _elementUnpacker.UnpackSelectionForConversion(revitElements).ToList(); + var atomicObjects = elementUnpacker.UnpackSelectionForConversion(revitElements).ToList(); var countProgress = 0; var cacheHitCount = 0; foreach (Element revitElement in atomicObjects) { - ct.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); string applicationId = revitElement.UniqueId; string sourceType = revitElement.GetType().Name; try { Base converted; - if (_sendConversionCache.TryGetValue(sendInfo.ProjectId, applicationId, out ObjectReference? value)) + if (sendConversionCache.TryGetValue(sendInfo.ProjectId, applicationId, out ObjectReference? value)) { converted = value; cacheHitCount++; } else { - converted = _converter.Convert(revitElement); + converted = converter.Convert(revitElement); converted.applicationId = applicationId; } - var collection = _sendCollectionManager.GetAndCreateObjectHostCollection(revitElement, rootObject); + var collection = sendCollectionManager.GetAndCreateObjectHostCollection(revitElement, rootObject); collection.elements.Add(converted); results.Add(new(Status.SUCCESS, applicationId, sourceType, converted)); } catch (Exception ex) when (!ex.IsFatal()) { - _logger.LogSendConversionError(ex, sourceType); + logger.LogSendConversionError(ex, sourceType); results.Add(new(Status.ERROR, applicationId, sourceType, null, ex)); } @@ -140,8 +110,8 @@ private RootObjectBuilderResult BuildSync( throw new SpeckleException("Failed to convert all objects."); } - var idsAndSubElementIds = _elementUnpacker.GetElementsAndSubelementIdsFromAtomicObjects(atomicObjects); - var materialProxies = _revitToSpeckleCacheSingleton.GetRenderMaterialProxyListForObjects(idsAndSubElementIds); + var idsAndSubElementIds = elementUnpacker.GetElementsAndSubelementIdsFromAtomicObjects(atomicObjects); + var materialProxies = revitToSpeckleCacheSingleton.GetRenderMaterialProxyListForObjects(idsAndSubElementIds); rootObject[ProxyKeys.RENDER_MATERIAL] = materialProxies; // NOTE: these are currently not used anywhere, we'll skip them until someone calls for it back diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs index 96ce3fde7..f1e55df9b 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs @@ -14,7 +14,6 @@ namespace Speckle.Connectors.Revit.Operations.Send.Settings; public class ToSpeckleSettingsManager : IToSpeckleSettingsManager { private readonly RevitContext _revitContext; - private readonly APIContext _apiContext; private readonly ISendConversionCache _sendConversionCache; private readonly ElementUnpacker _elementUnpacker; @@ -25,13 +24,11 @@ public class ToSpeckleSettingsManager : IToSpeckleSettingsManager public ToSpeckleSettingsManager( RevitContext revitContext, - APIContext apiContext, ISendConversionCache sendConversionCache, ElementUnpacker elementUnpacker ) { _revitContext = revitContext; - _apiContext = apiContext; _elementUnpacker = elementUnpacker; _sendConversionCache = sendConversionCache; } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitExternalApplication.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitExternalApplication.cs index 0cd5c1b60..3eb15365b 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitExternalApplication.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitExternalApplication.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Speckle.Connectors.Common; -using Speckle.Connectors.DUI; using Speckle.Connectors.Revit.DependencyInjection; using Speckle.Converters.RevitShared; using Speckle.Sdk; @@ -48,7 +47,6 @@ public Result OnStartup(UIControlledApplication application) services.AddRevitConverters(); services.AddSingleton(application); _container = services.BuildServiceProvider(); - _container.UseDUI(); // resolve root object _revitPlugin = _container.GetRequiredService(); diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs index cce89b5dd..3154fb3bd 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitIdleManager.cs @@ -6,12 +6,7 @@ namespace Speckle.Connectors.Revit.Plugin; -public interface IRevitIdleManager : IAppIdleManager -{ - public void RunAsync(Action action); -} - -public sealed class RevitIdleManager : AppIdleManager, IRevitIdleManager +public sealed class RevitIdleManager : AppIdleManager { private readonly UIApplication _uiApplication; private readonly IIdleCallManager _idleCallManager; @@ -42,13 +37,4 @@ protected override void AddEvent() private void RevitAppOnIdle(object? sender, IdlingEventArgs e) => _idleCallManager.AppOnIdle(() => OnIdle -= RevitAppOnIdle); - - public void RunAsync(Action action) - { -#if REVIT2025 - global::Revit.Async.RevitTask.RunAsync(action); -#else - action(); -#endif - } } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs new file mode 100644 index 000000000..957b3959c --- /dev/null +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs @@ -0,0 +1,16 @@ +using Revit.Async; +using Speckle.Connectors.Common.Threading; + +namespace Speckle.Connectors.Revit.Plugin; + +public class RevitThreadContext : ThreadContext +{ + protected override Task MainToWorkerAsync(Func> action) => action(); + + protected override Task WorkerToMainAsync(Func> action) => + RevitTask.RunAsync(async () => await action()); + + protected override Task MainToWorker(Func action) => Task.FromResult(action()); + + protected override Task WorkerToMain(Func action) => RevitTask.RunAsync(action); +} diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems b/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems index 42e4adfb0..5293ad708 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems @@ -19,7 +19,6 @@ - @@ -47,7 +46,8 @@ - + + \ No newline at end of file diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index f3b8b149b..b7d6ebebb 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -376,12 +375,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index 6acce660b..177aed3c8 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -284,8 +284,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -376,12 +375,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoBasicConnectorBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoBasicConnectorBinding.cs index 432c2c81f..b34e002d0 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoBasicConnectorBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoBasicConnectorBinding.cs @@ -38,7 +38,7 @@ ISpeckleApplication speckleApplication _store.DocumentChanged += (_, _) => parent.TopLevelExceptionHandler.FireAndForget(async () => { - await Commands.NotifyDocumentChanged().ConfigureAwait(false); + await Commands.NotifyDocumentChanged(); // Note: this prevents scaling issues when copy-pasting from one rhino doc to another in the same session. _sendConversionCache.ClearCache(); }); @@ -100,9 +100,7 @@ public async Task HighlightModel(string modelCardId) if (objectIds.Count == 0) { - await Commands - .SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")) - .ConfigureAwait(false); + await Commands.SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")); return; } @@ -112,9 +110,7 @@ await Commands if (objects.rhinoObjects.Count == 0 && objects.groups.Count == 0) { - await Commands - .SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")) - .ConfigureAwait(false); + await Commands.SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")); return; } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs index dcf60ab73..c0599f6b9 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoReceiveBinding.cs @@ -77,13 +77,14 @@ public async Task Receive(string modelCardId) modelCard.GetReceiveInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); modelCard.BakedObjectIds = conversionResults.BakedObjectIds.ToList(); - await Commands - .SetModelReceiveResult(modelCardId, conversionResults.BakedObjectIds, conversionResults.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelReceiveResult( + modelCardId, + conversionResults.BakedObjectIds, + conversionResults.ConversionResults + ); } catch (OperationCanceledException) { @@ -95,7 +96,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 23bf041ff..5809b80af 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -111,7 +111,7 @@ private void SubscribeToRhinoEvents() { PreviousUnitSystem = newUnit; - await InvalidateAllSender().ConfigureAwait(false); + await InvalidateAllSender(); } }; @@ -245,12 +245,9 @@ public async Task Send(string modelCardId) modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -262,7 +259,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) // UX reasons - we will report operation exceptions as model card error. We may change this later when we have more exception documentation { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } @@ -314,7 +311,7 @@ private async Task RunExpirationChecks() } } - await Commands.SetModelsExpired(expiredSenderIds).ConfigureAwait(false); + await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); ChangedMaterialIndexes = new(); } @@ -323,6 +320,6 @@ private async Task InvalidateAllSender() { _sendConversionCache.ClearCache(); var senderModelCardIds = _store.GetSenders().Select(s => s.ModelCardId.NotNull()); - await Commands.SetModelsExpired(senderModelCardIds).ConfigureAwait(false); + await Commands.SetModelsExpired(senderModelCardIds); } } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs index 3eb8a1ca8..56305a867 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Receive/RhinoHostObjectBuilder.cs @@ -6,6 +6,7 @@ using Speckle.Connectors.Common.Extensions; using Speckle.Connectors.Common.Operations; using Speckle.Connectors.Common.Operations.Receive; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.Rhino.HostApp; using Speckle.Converters.Common; using Speckle.Converters.Rhino; @@ -32,6 +33,7 @@ public class RhinoHostObjectBuilder : IHostObjectBuilder private readonly RhinoGroupBaker _groupBaker; private readonly RootObjectUnpacker _rootObjectUnpacker; private readonly ISdkActivityFactory _activityFactory; + private readonly IThreadContext _threadContext; public RhinoHostObjectBuilder( IRootToHostConverter converter, @@ -42,7 +44,8 @@ public RhinoHostObjectBuilder( RhinoMaterialBaker materialBaker, RhinoColorBaker colorBaker, RhinoGroupBaker groupBaker, - ISdkActivityFactory activityFactory + ISdkActivityFactory activityFactory, + IThreadContext threadContext ) { _converter = converter; @@ -54,10 +57,11 @@ ISdkActivityFactory activityFactory _layerBaker = layerBaker; _groupBaker = groupBaker; _activityFactory = activityFactory; + _threadContext = threadContext; } #pragma warning disable CA1506 - public Task Build( + public HostObjectBuilderResult Build( #pragma warning restore CA1506 Base rootObject, string projectName, @@ -112,13 +116,16 @@ CancellationToken cancellationToken onOperationProgressed.Report(new("Baking layers (redraw disabled)", null)); using (var _ = _activityFactory.Start("Pre baking layers")) { - RhinoApp.InvokeAndWait(() => - { - using var layerNoDraw = new DisableRedrawScope(_converterSettings.Current.Document.Views); - var paths = atomicObjectsWithoutInstanceComponentsWithPath.Select(t => t.path).ToList(); - paths.AddRange(instanceComponentsWithPath.Select(t => t.path)); - _layerBaker.CreateAllLayersForReceive(paths, baseLayerName); - }); + //Rhino 8 doesn't play nice with Eto and layers + _threadContext + .RunOnMain(() => + { + using var layerNoDraw = new DisableRedrawScope(_converterSettings.Current.Document.Views); + var paths = atomicObjectsWithoutInstanceComponentsWithPath.Select(t => t.path).ToList(); + paths.AddRange(instanceComponentsWithPath.Select(t => t.path)); + _layerBaker.CreateAllLayersForReceive(paths, baseLayerName); + }) + .Wait(cancellationToken); } // 5 - Convert atomic objects @@ -136,6 +143,7 @@ CancellationToken cancellationToken onOperationProgressed.Report( new("Converting objects", (double)++count / atomicObjectsWithoutInstanceComponentsForConverter.Count) ); + cancellationToken.ThrowIfCancellationRequested(); try { // 0: get pre-created layer from cache in layer baker @@ -229,7 +237,7 @@ CancellationToken cancellationToken } _converterSettings.Current.Document.Views.Redraw(); - return Task.FromResult(new HostObjectBuilderResult(bakedObjectIds, conversionResults)); + return new HostObjectBuilderResult(bakedObjectIds, conversionResults); } private void PreReceiveDeepClean(string baseLayerName) @@ -241,35 +249,38 @@ private void PreReceiveDeepClean(string baseLayerName) RhinoMath.UnsetIntIndex ); - RhinoApp.InvokeAndWait(() => - { - _instanceBaker.PurgeInstances(baseLayerName); - _materialBaker.PurgeMaterials(baseLayerName); - - var doc = _converterSettings.Current.Document; - // Cleans up any previously received objects - if (rootLayerIndex != RhinoMath.UnsetIntIndex) + //Rhino 8 doesn't play nice with Eto and layers + _threadContext + .RunOnMain(() => { - var documentLayer = doc.Layers[rootLayerIndex]; - var childLayers = documentLayer.GetChildren(); - if (childLayers != null) + _instanceBaker.PurgeInstances(baseLayerName); + _materialBaker.PurgeMaterials(baseLayerName); + + var doc = _converterSettings.Current.Document; + // Cleans up any previously received objects + if (rootLayerIndex != RhinoMath.UnsetIntIndex) { - using var layerNoDraw = new DisableRedrawScope(doc.Views); - foreach (var layer in childLayers) + var documentLayer = doc.Layers[rootLayerIndex]; + var childLayers = documentLayer.GetChildren(); + if (childLayers != null) { - var purgeSuccess = doc.Layers.Purge(layer.Index, true); - if (!purgeSuccess) + using var layerNoDraw = new DisableRedrawScope(doc.Views); + foreach (var layer in childLayers) { - Console.WriteLine($"Failed to purge layer: {layer}"); + var purgeSuccess = doc.Layers.Purge(layer.Index, true); + if (!purgeSuccess) + { + Console.WriteLine($"Failed to purge layer: {layer}"); + } } } + doc.Layers.Purge(documentLayer.Index, true); } - doc.Layers.Purge(documentLayer.Index, true); - } - // Cleans up any previously received group - _groupBaker.PurgeGroups(baseLayerName); - }); + // Cleans up any previously received group + _groupBaker.PurgeGroups(baseLayerName); + }) + .Wait(); } /// diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs index 5f337e491..ceec97b2c 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs @@ -60,11 +60,11 @@ ISdkActivityFactory activityFactory _activityFactory = activityFactory; } - public async Task Build( + public RootObjectBuilderResult Build( IReadOnlyList rhinoObjects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken cancellationToken = default + CancellationToken cancellationToken ) { using var activity = _activityFactory.Start("Build"); @@ -95,8 +95,8 @@ public async Task Build( { foreach (RhinoObject rhinoObject in atomicObjects) { - using var _2 = _activityFactory.Start("Convert"); cancellationToken.ThrowIfCancellationRequested(); + using var _2 = _activityFactory.Start("Convert"); // handle layer Layer layer = _converterSettings.Current.Document.Layers[rhinoObject.Attributes.LayerIndex]; @@ -130,7 +130,6 @@ public async Task Build( rootObjectCollection[ProxyKeys.COLOR] = _colorUnpacker.UnpackColors(atomicObjects, versionLayers.ToList()); } - await Task.Yield(); return new RootObjectBuilderResult(rootObjectCollection, results); } diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoPlugin.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoPlugin.cs index a172c693e..a1158578e 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoPlugin.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoPlugin.cs @@ -1,7 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Rhino.PlugIns; using Speckle.Connectors.Common; -using Speckle.Connectors.DUI; using Speckle.Connectors.Rhino.DependencyInjection; using Speckle.Converters.Rhino; using Speckle.Sdk; @@ -52,7 +51,6 @@ protected override LoadReturnCode OnLoad(ref string errorMessage) // but the Rhino connector has `.rhp` as it is extension. Container = services.BuildServiceProvider(); - Container.UseDUI(); // Resolve root plugin object and initialise. _rhinoPlugin = Container.GetRequiredService(); diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs index 086c513a8..a5ad1c12d 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Registration/ServiceRegistration.cs @@ -8,6 +8,7 @@ using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.Common.Instances; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -32,12 +33,9 @@ public static void AddRhino(this IServiceCollection serviceCollection) serviceCollection.AddSingleton(SpeckleConnectorsRhinoCommand.Instance); serviceCollection.AddConnectorUtils(); - serviceCollection.AddDUI(); + serviceCollection.AddDUI(); serviceCollection.AddDUIView(); - // POC: Overwriting the SyncToMainThread to SyncToCurrentThread for Rhino! - // builder.AddSingletonInstance(); - // Register other connector specific types serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index d28102127..86c201b46 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -343,8 +343,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -427,12 +426,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index d6aeca925..fde9f65dc 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -424,8 +424,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -508,12 +507,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaBasicConnectorBinding.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaBasicConnectorBinding.cs index bc1449c7c..519ac132e 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaBasicConnectorBinding.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaBasicConnectorBinding.cs @@ -37,7 +37,7 @@ TSM.Model model _store.DocumentChanged += (_, _) => parent.TopLevelExceptionHandler.FireAndForget(async () => { - await Commands.NotifyDocumentChanged().ConfigureAwait(false); + await Commands.NotifyDocumentChanged(); }); } @@ -80,18 +80,16 @@ public async Task HighlightModel(string modelCardId) if (objectIds.Count == 0) { - await Commands - .SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")) - .ConfigureAwait(false); + await Commands.SetModelError(modelCardId, new OperationCanceledException("No objects found to highlight.")); return; } - await HighlightObjects(objectIds).ConfigureAwait(false); + await HighlightObjects(objectIds); } catch (InvalidOperationException ex) { _logger.LogError(ex, "Failed to highlight model"); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } @@ -100,48 +98,47 @@ public async Task HighlightObjects(IReadOnlyList objectIds) try { await Task.Run(() => - { - // passing an empty list to create current selection - var selector = new TSMUI.ModelObjectSelector(); - selector.Select(new ArrayList()); + { + // passing an empty list to create current selection + var selector = new TSMUI.ModelObjectSelector(); + selector.Select(new ArrayList()); - if (objectIds.Count > 0) - { - var modelObjects = objectIds - .Select(id => _model.SelectModelObject(new Identifier(new Guid(id)))) - .Where(obj => obj != null) - .ToList(); + if (objectIds.Count > 0) + { + var modelObjects = objectIds + .Select(id => _model.SelectModelObject(new Identifier(new Guid(id)))) + .Where(obj => obj != null) + .ToList(); - selector.Select(new ArrayList(modelObjects)); + selector.Select(new ArrayList(modelObjects)); - // to find the min and max coordinates of the selected objects - // with that we can create a bounding box and zoom selected - var points = new List(); - foreach (var obj in modelObjects) + // to find the min and max coordinates of the selected objects + // with that we can create a bounding box and zoom selected + var points = new List(); + foreach (var obj in modelObjects) + { + points.Add(obj.GetCoordinateSystem().Origin); + foreach (TSM.ModelObject child in obj.GetChildren()) { - points.Add(obj.GetCoordinateSystem().Origin); - foreach (TSM.ModelObject child in obj.GetChildren()) - { - points.Add(child.GetCoordinateSystem().Origin); - } + points.Add(child.GetCoordinateSystem().Origin); } + } - var minX = points.Min(p => p.X); - var minY = points.Min(p => p.Y); - var minZ = points.Min(p => p.Z); - var maxX = points.Max(p => p.X); - var maxY = points.Max(p => p.Y); - var maxZ = points.Max(p => p.Z); + var minX = points.Min(p => p.X); + var minY = points.Min(p => p.Y); + var minZ = points.Min(p => p.Z); + var maxX = points.Max(p => p.X); + var maxY = points.Max(p => p.Y); + var maxZ = points.Max(p => p.Z); - // create the bounding box - var bounds = new AABB { MinPoint = new Point(minX, minY, minZ), MaxPoint = new Point(maxX, maxY, maxZ) }; + // create the bounding box + var bounds = new AABB { MinPoint = new Point(minX, minY, minZ), MaxPoint = new Point(maxX, maxY, maxZ) }; - // zoom in to bounding box - TSMUI.ViewHandler.ZoomToBoundingBox(bounds); - } - _model.CommitChanges(); - }) - .ConfigureAwait(false); + // zoom in to bounding box + TSMUI.ViewHandler.ZoomToBoundingBox(bounds); + } + _model.CommitChanges(); + }); } catch (InvalidOperationException ex) { diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs index 4c26ab1d1..5a416e14d 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs @@ -29,8 +29,6 @@ Tekla.Structures.Model.UI.ModelObjectSelector selector _events.SelectionChange += Events_SelectionChangeEvent; _events.Register(); - - UpdateSelection(); } private void Events_SelectionChangeEvent() @@ -38,7 +36,6 @@ private void Events_SelectionChangeEvent() lock (_selectionEventHandlerLock) { _idleManager.SubscribeToIdle(nameof(TeklaSelectionBinding), UpdateSelection); - UpdateSelection(); } } diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSendBinding.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSendBinding.cs index 54d99146e..cff0f1198 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSendBinding.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSendBinding.cs @@ -150,12 +150,9 @@ public async Task Send(string modelCardId) modelCard.GetSendInfo(_speckleApplication.Slug), _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCardId, cancellationToken), cancellationToken - ) - .ConfigureAwait(false); + ); - await Commands - .SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults) - .ConfigureAwait(false); + await Commands.SetModelSendResult(modelCardId, sendResult.RootObjId, sendResult.ConversionResults); } catch (OperationCanceledException) { @@ -164,7 +161,7 @@ await Commands catch (Exception ex) when (!ex.IsFatal()) { _logger.LogModelCardHandledError(ex); - await Commands.SetModelError(modelCardId, ex).ConfigureAwait(false); + await Commands.SetModelError(modelCardId, ex); } } @@ -194,7 +191,7 @@ private async Task RunExpirationChecks() } } - await Commands.SetModelsExpired(expiredSenderIds).ConfigureAwait(false); + await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new ConcurrentDictionary(); } diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs index 69da6664c..1f5bb8a2c 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs @@ -11,7 +11,6 @@ using Speckle.Sdk.Logging; using Speckle.Sdk.Models; using Speckle.Sdk.Models.Collections; -using Task = System.Threading.Tasks.Task; namespace Speckle.Connectors.TeklaShared.Operations.Send; @@ -44,11 +43,11 @@ TeklaMaterialUnpacker materialUnpacker _materialUnpacker = materialUnpacker; } - public async Task Build( + public RootObjectBuilderResult Build( IReadOnlyList teklaObjects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken cancellationToken = default + CancellationToken cancellationToken ) { using var activity = _activityFactory.Start("Build"); @@ -66,8 +65,8 @@ public async Task Build( { foreach (TSM.ModelObject teklaObject in teklaObjects) { - using var _2 = _activityFactory.Start("Convert"); cancellationToken.ThrowIfCancellationRequested(); + using var _2 = _activityFactory.Start("Convert"); var result = ConvertTeklaObject(teklaObject, rootObjectCollection, sendInfo.ProjectId); results.Add(result); @@ -88,7 +87,6 @@ public async Task Build( rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = renderMaterialProxies; } - await Task.Yield(); return new RootObjectBuilderResult(rootObjectCollection, results); } diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/ServiceRegistration.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/ServiceRegistration.cs index b112365cb..d9d42e0cf 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/ServiceRegistration.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/ServiceRegistration.cs @@ -4,6 +4,7 @@ using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -31,7 +32,7 @@ public static IServiceCollection AddTekla(this IServiceCollection services) services.AddSingleton(); services.AddConnectorUtils(); - services.AddDUI(); + services.AddDUI(); services.AddDUIView(); services.AddSingleton(); diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs index 5ae9ae250..e0464be1b 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs @@ -1,7 +1,6 @@ using ArcGIS.Core.Data; using ArcGIS.Core.Data.DDL; using ArcGIS.Desktop.Core; -using ArcGIS.Desktop.Framework.Threading.Tasks; using ArcGIS.Desktop.Mapping; using Speckle.Converters.ArcGIS3.Utils; using Speckle.Converters.Common; @@ -137,8 +136,7 @@ public Uri AddDatabaseToProject(Uri databasePath) var parentFolder = Path.GetDirectoryName(databasePath.AbsolutePath); var fGdbName = databasePath.Segments[^1]; Item folderToAdd = ItemFactory.Instance.Create(parentFolder); - // POC: QueuedTask - QueuedTask.Run(() => Project.Current.AddItem(folderToAdd as IProjectItem)); + Project.Current.AddItem(folderToAdd as IProjectItem); // Add a file geodatabase or a SQLite or enterprise database connection to a project try @@ -149,8 +147,7 @@ public Uri AddDatabaseToProject(Uri databasePath) if (gdbToAdd is not null) { - // POC: QueuedTask - var addedGeodatabase = QueuedTask.Run(() => Project.Current.AddItem(gdbToAdd as IProjectItem)); + var addedGeodatabase = Project.Current.AddItem(gdbToAdd as IProjectItem); } } catch (NullReferenceException ex) diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs index 2a0613efd..81bd19a87 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/Utils/FeatureClassUtils.cs @@ -73,7 +73,7 @@ private Geodatabase GetDatabase() return geodatabase; } - public async Task>> GroupConversionTrackers( + public Dictionary> GroupConversionTrackers( Dictionary conversionTracker, Action onOperationProgressed ) @@ -134,13 +134,12 @@ private Geodatabase GetDatabase() ClearExistingDataset(uniqueKey); onOperationProgressed.Invoke("Grouping features into layers", count++ / conversionTracker.Count); - await Task.Yield(); } return geometryGroups; } - public async Task CreateDatasets( + public void CreateDatasets( Dictionary conversionTracker, Dictionary> featureClassElements, Action onOperationProgressed @@ -203,7 +202,6 @@ public async Task CreateDatasets( } onOperationProgressed.Invoke("Writing to Database", count++ / featureClassElements.Count); - await Task.Yield(); } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index 6ccbf7012..e6d32ee68 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -360,12 +359,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 8db2bef98..2d368266a 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -231,8 +231,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -315,12 +314,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 24648dbef..758994663 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -240,8 +240,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.dui.webview": { @@ -324,12 +323,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index 606b4af2d..0bc1f724f 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index ea57905a4..64f2126cc 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index 1f0dea93b..323d2a4ae 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index a01be05b4..ac6a35d8a 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index 0aa4cf769..ca995661e 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index 8aaed2a4f..e6d261605 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -347,12 +346,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.Tests/Bridge/IdleCallManagerTests.cs b/DUI3/Speckle.Connectors.DUI.Tests/Bridge/IdleCallManagerTests.cs index ecbb6ebaa..9c8397023 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/Bridge/IdleCallManagerTests.cs +++ b/DUI3/Speckle.Connectors.DUI.Tests/Bridge/IdleCallManagerTests.cs @@ -56,7 +56,7 @@ public async Task AppOnIdleInternalTest() handler .Setup(m => m.CatchUnhandledAsync(It.IsAny>())) .Callback>(a => a.Invoke()) - .Returns(Task.CompletedTask); + .ReturnsAsync(new Result()); var removeEvent = Create(); removeEvent.Setup(x => x.Invoke()); diff --git a/DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj b/DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj index 0b607cbe3..b5bbadceb 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj +++ b/DUI3/Speckle.Connectors.DUI.Tests/Speckle.Connectors.DUI.Tests.csproj @@ -5,12 +5,6 @@ true Debug;Release;Local System.Runtime.CompilerServices.IsExternalInit;System.Runtime.CompilerServices.RequiresLocationAttribute - - - - CA2007; - $(NoWarn) - diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index dcaa45d58..100ca8108 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -335,8 +335,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -406,12 +405,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/DUI3ControlWebView.xaml.cs b/DUI3/Speckle.Connectors.DUI.WebView/DUI3ControlWebView.xaml.cs index c401a3289..59307e4bb 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/DUI3ControlWebView.xaml.cs +++ b/DUI3/Speckle.Connectors.DUI.WebView/DUI3ControlWebView.xaml.cs @@ -26,7 +26,7 @@ public DUI3ControlWebView(IServiceProvider serviceProvider) public object BrowserElement => Browser; - public Task ExecuteScriptAsyncMethod(string script, CancellationToken cancellationToken) + public void ExecuteScript(string script) { if (!Browser.IsInitialized) { @@ -39,7 +39,6 @@ public Task ExecuteScriptAsyncMethod(string script, CancellationToken cancellati () => Browser.ExecuteScriptAsync(script), DispatcherPriority.Background ); - return Task.CompletedTask; } private void OnInitialized(object? sender, CoreWebView2InitializationCompletedEventArgs e) diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 3cf6575ea..c64aeaec2 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -275,8 +275,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -340,12 +339,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } }, "net6.0-windows7.0": { @@ -583,8 +576,7 @@ "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )", - "System.Threading.Tasks.Dataflow": "[6.0.0, )" + "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" } }, "speckle.connectors.logging": { @@ -648,12 +640,6 @@ "requested": "[3.1.0-dev.219, )", "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" - }, - "System.Threading.Tasks.Dataflow": { - "type": "CentralTransitive", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/IBasicConnectorBinding.cs b/DUI3/Speckle.Connectors.DUI/Bindings/IBasicConnectorBinding.cs index 2677926d4..28a229d6d 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/IBasicConnectorBinding.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/IBasicConnectorBinding.cs @@ -53,8 +53,7 @@ public BasicConnectorBindingCommands(IBrowserBridge bridge) Bridge = bridge; } - public async Task NotifyDocumentChanged() => - await Bridge.Send(NOTIFY_DOCUMENT_CHANGED_EVENT_NAME).ConfigureAwait(false); + public async Task NotifyDocumentChanged() => await Bridge.Send(NOTIFY_DOCUMENT_CHANGED_EVENT_NAME); /// /// Use it whenever you want to send global toast notification to UI. @@ -69,21 +68,17 @@ public async Task SetGlobalNotification( string message, bool autoClose = true ) => - await Bridge - .Send( - SET_GLOBAL_NOTIFICATION, - new - { - type, - title, - description = message, - autoClose - } - ) - .ConfigureAwait(false); + await Bridge.Send( + SET_GLOBAL_NOTIFICATION, + new + { + type, + title, + description = message, + autoClose + } + ); public async Task SetModelError(string modelCardId, Exception error) => - await Bridge - .Send(SET_MODEL_ERROR_UI_COMMAND_NAME, new { modelCardId, error = error.Message }) - .ConfigureAwait(false); + await Bridge.Send(SET_MODEL_ERROR_UI_COMMAND_NAME, new { modelCardId, error = error.Message }); } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/OperationProgressManager.cs b/DUI3/Speckle.Connectors.DUI/Bindings/OperationProgressManager.cs index 992aaf669..3724eed44 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/OperationProgressManager.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/OperationProgressManager.cs @@ -30,20 +30,18 @@ CancellationToken cancellationToken ) { var progress = new NonUIThreadProgress(args => - bridge.TopLevelExceptionHandler.FireAndForget( - () => - SetModelProgress( - bridge, - modelCardId, - new ModelCardProgress(modelCardId, args.Status, args.Progress), - cancellationToken - ) - ) - ); + { + SetModelProgress( + bridge, + modelCardId, + new ModelCardProgress(modelCardId, args.Status, args.Progress), + cancellationToken + ); + }); return progress; } - public async Task SetModelProgress( + public void SetModelProgress( IBrowserBridge bridge, string modelCardId, ModelCardProgress progress, @@ -60,7 +58,7 @@ CancellationToken cancellationToken t.Item1 = DateTime.Now; s_lastProgressValues[modelCardId] = (t.Item1, progress.Status); // Since it's the first time we get a call for this model card, we should send it out - await SendProgress(bridge, modelCardId, progress).ConfigureAwait(false); + SendProgress(bridge, modelCardId, progress); return; } @@ -72,9 +70,9 @@ CancellationToken cancellationToken return; } s_lastProgressValues[modelCardId] = (currentTime, progress.Status); - await SendProgress(bridge, modelCardId, progress).ConfigureAwait(false); + SendProgress(bridge, modelCardId, progress); } - private static async Task SendProgress(IBrowserBridge bridge, string modelCardId, ModelCardProgress progress) => - await bridge.Send(SET_MODEL_PROGRESS_UI_COMMAND_NAME, new { modelCardId, progress }).ConfigureAwait(false); + private static void SendProgress(IBrowserBridge bridge, string modelCardId, ModelCardProgress progress) => + bridge.Send2(SET_MODEL_PROGRESS_UI_COMMAND_NAME, new { modelCardId, progress }); } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/ReceiveBindingUICommands.cs b/DUI3/Speckle.Connectors.DUI/Bindings/ReceiveBindingUICommands.cs index 0c7bd3428..2cabe20dd 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/ReceiveBindingUICommands.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/ReceiveBindingUICommands.cs @@ -17,16 +17,14 @@ public async Task SetModelReceiveResult( IEnumerable conversionResults ) { - await Bridge - .Send( - SET_MODEL_RECEIVE_RESULT_UI_COMMAND_NAME, - new - { - ModelCardId = modelCardId, - bakedObjectIds, - conversionResults - } - ) - .ConfigureAwait(false); + await Bridge.Send( + SET_MODEL_RECEIVE_RESULT_UI_COMMAND_NAME, + new + { + ModelCardId = modelCardId, + bakedObjectIds, + conversionResults + } + ); } } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/SendBindingUICommands.cs b/DUI3/Speckle.Connectors.DUI/Bindings/SendBindingUICommands.cs index 72569f5ac..45e3ff23f 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/SendBindingUICommands.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/SendBindingUICommands.cs @@ -12,43 +12,38 @@ public class SendBindingUICommands(IBrowserBridge bridge) : BasicConnectorBindin private const string SET_ID_MAP_COMMAND_NAME = "setIdMap"; // POC.. the only reasons this needs the bridge is to send? realtionship to these messages and the bridge is unclear - public async Task RefreshSendFilters() => - await Bridge.Send(REFRESH_SEND_FILTERS_UI_COMMAND_NAME).ConfigureAwait(false); + public async Task RefreshSendFilters() => await Bridge.Send(REFRESH_SEND_FILTERS_UI_COMMAND_NAME); public async Task SetModelsExpired(IEnumerable expiredModelIds) => - await Bridge.Send(SET_MODELS_EXPIRED_UI_COMMAND_NAME, expiredModelIds).ConfigureAwait(false); + await Bridge.Send(SET_MODELS_EXPIRED_UI_COMMAND_NAME, expiredModelIds); public async Task SetFilterObjectIds( string modelCardId, Dictionary idMap, List newSelectedObjectIds ) => - await Bridge - .Send( - SET_ID_MAP_COMMAND_NAME, - new - { - modelCardId, - idMap, - newSelectedObjectIds - } - ) - .ConfigureAwait(false); + await Bridge.Send( + SET_ID_MAP_COMMAND_NAME, + new + { + modelCardId, + idMap, + newSelectedObjectIds + } + ); public async Task SetModelSendResult( string modelCardId, string versionId, IEnumerable sendConversionResults ) => - await Bridge - .Send( - SET_MODEL_SEND_RESULT_UI_COMMAND_NAME, - new - { - modelCardId, - versionId, - sendConversionResults - } - ) - .ConfigureAwait(false); + await Bridge.Send( + SET_MODEL_SEND_RESULT_UI_COMMAND_NAME, + new + { + modelCardId, + versionId, + sendConversionResults + } + ); } diff --git a/DUI3/Speckle.Connectors.DUI/Bindings/TestBinding.cs b/DUI3/Speckle.Connectors.DUI/Bindings/TestBinding.cs index a5e095fbc..f43a0bd42 100644 --- a/DUI3/Speckle.Connectors.DUI/Bindings/TestBinding.cs +++ b/DUI3/Speckle.Connectors.DUI/Bindings/TestBinding.cs @@ -46,22 +46,20 @@ public async Task TriggerEvent(string eventName) switch (eventName) { case "emptyTestEvent": - await Parent.Send("emptyTestEvent").ConfigureAwait(false); + await Parent.Send("emptyTestEvent"); break; case "testEvent": default: - await Parent - .Send( - "testEvent", - new - { - IsOk = true, - Name = "foo", - Count = 42 - } - ) - .ConfigureAwait(false); + await Parent.Send( + "testEvent", + new + { + IsOk = true, + Name = "foo", + Count = 42 + } + ); break; } } diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/BrowserBridge.cs b/DUI3/Speckle.Connectors.DUI/Bridge/BrowserBridge.cs index 252119ab2..f692e41c3 100644 --- a/DUI3/Speckle.Connectors.DUI/Bridge/BrowserBridge.cs +++ b/DUI3/Speckle.Connectors.DUI/Bridge/BrowserBridge.cs @@ -3,8 +3,8 @@ using System.Diagnostics.CodeAnalysis; using System.Reflection; using System.Runtime.InteropServices; -using System.Threading.Tasks.Dataflow; using Microsoft.Extensions.Logging; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Utils; using Speckle.Newtonsoft.Json; @@ -27,15 +27,14 @@ public sealed class BrowserBridge : IBrowserBridge /// private readonly ConcurrentDictionary _resultsStore = new(); - private readonly SynchronizationContext _mainThreadContext; public ITopLevelExceptionHandler TopLevelExceptionHandler { get; } + private readonly IThreadContext _threadContext; + private readonly IThreadOptions _threadOptions; private readonly IBrowserScriptExecutor _browserScriptExecutor; private readonly IJsonSerializer _jsonSerializer; private IReadOnlyDictionary _bindingMethodCache = new Dictionary(); - - private ActionBlock? _actionBlock; private IBinding? _binding; private Type? _bindingType; @@ -57,26 +56,22 @@ private set } } - private struct RunMethodArgs - { - public string MethodName; - public string RequestId; - public string MethodArgs; - } - public BrowserBridge( + IThreadContext threadContext, IJsonSerializer jsonSerializer, ILogger logger, ILogger topLogger, - IBrowserScriptExecutor browserScriptExecutor + IBrowserScriptExecutor browserScriptExecutor, + IThreadOptions threadOptions ) { + _threadContext = threadContext; _jsonSerializer = jsonSerializer; _logger = logger; TopLevelExceptionHandler = new TopLevelExceptionHandler(topLogger, this); // Capture the main thread's SynchronizationContext - _mainThreadContext = SynchronizationContext.Current.NotNull("No UI thread to capture?"); _browserScriptExecutor = browserScriptExecutor; + _threadOptions = threadOptions; } public void AssociateWithBinding(IBinding binding) @@ -95,30 +90,9 @@ public void AssociateWithBinding(IBinding binding) bindingMethodCache[m.Name] = m; } _bindingMethodCache = bindingMethodCache; - - // Whenever the ui will call run method inside .net, it will post a message to this action block. - // This conveniently executes the code outside the UI thread and does not block during long operations (such as sending). - _actionBlock = new ActionBlock( - OnActionBlock, - new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1000 } - ); - _logger.LogInformation("Bridge bound to front end name {FrontEndName}", binding.Name); } - private async Task OnActionBlock(RunMethodArgs args) - { - Result result = await TopLevelExceptionHandler - .CatchUnhandledAsync(async () => await ExecuteMethod(args.MethodName, args.MethodArgs).ConfigureAwait(false)) - .ConfigureAwait(false); - - string resultJson = result.IsSuccess - ? _jsonSerializer.Serialize(result.Value) - : SerializeFormattedException(result.Exception); - - await NotifyUIMethodCallResultReady(args.RequestId, resultJson).ConfigureAwait(false); - } - /// /// Used by the Frontend bridge logic to understand which methods are available. /// @@ -130,81 +104,27 @@ public string[] GetBindingsMethodNames() return bindingNames; } - /// - /// This method posts the requested call to our action block executor. - /// - /// - /// - /// - public void RunMethod(string methodName, string requestId, string args) - { - TopLevelExceptionHandler.CatchUnhandled(Post); - return; - - void Post() - { - bool wasAccepted = _actionBlock - .NotNull() - .Post( - new RunMethodArgs + //don't wait for browser runs on purpose + public void RunMethod(string methodName, string requestId, string methodArgs) => + _threadContext + .RunOnThreadAsync( + async () => + { + var task = await TopLevelExceptionHandler.CatchUnhandledAsync(async () => + { + var result = await ExecuteMethod(methodName, methodArgs); + string resultJson = _jsonSerializer.Serialize(result); + NotifyUIMethodCallResultReady(requestId, resultJson); + }); + if (task.Exception is not null) { - MethodName = methodName, - RequestId = requestId, - MethodArgs = args + string resultJson = SerializeFormattedException(task.Exception); + NotifyUIMethodCallResultReady(requestId, resultJson); } - ); - if (!wasAccepted) - { - throw new InvalidOperationException($"Action block declined to Post ({methodName} {requestId} {args})"); - } - } - } - - public void RunOnMainThread(Action action) - { - _mainThreadContext.Post( - _ => - { - // Execute the action on the main thread - TopLevelExceptionHandler.CatchUnhandled(action); - }, - null - ); - } - - public async Task RunOnMainThreadAsync(Func action) - { - await RunOnMainThreadAsync(async () => - { - await action.Invoke().ConfigureAwait(false); - return null; - }) - .ConfigureAwait(false); - } - - [SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "TaskCompletionSource")] - public Task RunOnMainThreadAsync(Func> action) - { - TaskCompletionSource tcs = new(); - - _mainThreadContext.Post( - async _ => - { - try - { - T result = await action.Invoke().ConfigureAwait(false); - tcs.SetResult(result); - } - catch (Exception ex) - { - tcs.SetException(ex); - } - }, - null - ); - - return tcs.Task; - } + }, + _threadOptions.RunCommandsOnMainThread + ) + .FireAndForget(); /// /// Used by the action block to invoke the actual method called by the UI. @@ -266,7 +186,7 @@ public Task RunOnMainThreadAsync(Func> action) } // It's an async call - await resultTypedTask.ConfigureAwait(false); + await resultTypedTask; // If has a "Result" property return the value otherwise null (Task etc) PropertyInfo? resultProperty = resultTypedTask.GetType().GetProperty(nameof(Task.Result)); @@ -296,16 +216,12 @@ private string SerializeFormattedException(Exception e) /// /// /// - /// - private async Task NotifyUIMethodCallResultReady( - string requestId, - string? serializedData = null, - CancellationToken cancellationToken = default - ) + /// + private void NotifyUIMethodCallResultReady(string requestId, string? serializedData = null) { _resultsStore[requestId] = serializedData; string script = $"{FrontendBoundName}.responseReady('{requestId}')"; - await _browserScriptExecutor.ExecuteScriptAsyncMethod(script, cancellationToken).ConfigureAwait(false); + _browserScriptExecutor.ExecuteScript(script); } /// @@ -339,7 +255,7 @@ public void OpenUrl(string url) Process.Start(new ProcessStartInfo { FileName = url, UseShellExecute = true }); } - public async Task Send(string eventName, CancellationToken cancellationToken = default) + public Task Send(string eventName, CancellationToken cancellationToken = default) { if (_binding is null) { @@ -348,10 +264,27 @@ public async Task Send(string eventName, CancellationToken cancellationToken = d var script = $"{FrontendBoundName}.emit('{eventName}')"; - await _browserScriptExecutor.ExecuteScriptAsyncMethod(script, cancellationToken).ConfigureAwait(false); + _browserScriptExecutor.ExecuteScript(script); + return Task.CompletedTask; + } + + public Task Send(string eventName, T data, CancellationToken cancellationToken = default) + where T : class + { + if (_binding is null) + { + throw new InvalidOperationException("Bridge was not initialized with a binding"); + } + + string payload = _jsonSerializer.Serialize(data); + string requestId = $"{Guid.NewGuid()}_{eventName}"; + _resultsStore[requestId] = payload; + var script = $"{FrontendBoundName}.emitResponseReady('{eventName}', '{requestId}')"; + _browserScriptExecutor.ExecuteScript(script); + return Task.CompletedTask; } - public async Task Send(string eventName, T data, CancellationToken cancellationToken = default) + public void Send2(string eventName, T data) where T : class { if (_binding is null) @@ -363,6 +296,6 @@ public async Task Send(string eventName, T data, CancellationToken cancellati string requestId = $"{Guid.NewGuid()}_{eventName}"; _resultsStore[requestId] = payload; var script = $"{FrontendBoundName}.emitResponseReady('{eventName}', '{requestId}')"; - await _browserScriptExecutor.ExecuteScriptAsyncMethod(script, cancellationToken).ConfigureAwait(false); + _browserScriptExecutor.ExecuteScript(script); } } diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserBridge.cs b/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserBridge.cs index 7bd772978..65ec766df 100644 --- a/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserBridge.cs +++ b/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserBridge.cs @@ -29,22 +29,6 @@ public interface IBrowserBridge /// public void RunMethod(string methodName, string requestId, string args); - /// - /// Posts an onto the main thread - /// Some applications might need to run some operations on main thread as deferred actions. - /// - /// An awaitable - /// Action to run on the main thread - public Task RunOnMainThreadAsync(Func> action); - - /// - /// Posts an onto the main thread - /// Some applications might need to run some operations on main thread as deferred actions. - /// - /// An awaitable - /// Action to run on the main thread - public Task RunOnMainThreadAsync(Func action); - /// /// Bridge was not initialized with a binding public Task Send(string eventName, CancellationToken cancellationToken = default); @@ -56,5 +40,7 @@ public interface IBrowserBridge public Task Send(string eventName, T data, CancellationToken cancellationToken = default) where T : class; + public void Send2(string eventName, T data) + where T : class; public ITopLevelExceptionHandler TopLevelExceptionHandler { get; } } diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserScriptExecutor.cs b/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserScriptExecutor.cs index 6c3fb69f9..c0979f36c 100644 --- a/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserScriptExecutor.cs +++ b/DUI3/Speckle.Connectors.DUI/Bridge/IBrowserScriptExecutor.cs @@ -4,7 +4,7 @@ public interface IBrowserScriptExecutor { /// thrown when is /// The (constant string) script to execute on the browser - public Task ExecuteScriptAsyncMethod(string script, CancellationToken cancellationToken); + public void ExecuteScript(string script); public bool IsBrowserInitialized { get; } diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/IdleCallManager.cs b/DUI3/Speckle.Connectors.DUI/Bridge/IdleCallManager.cs index 0b3e83504..d25c63d42 100644 --- a/DUI3/Speckle.Connectors.DUI/Bridge/IdleCallManager.cs +++ b/DUI3/Speckle.Connectors.DUI/Bridge/IdleCallManager.cs @@ -57,13 +57,13 @@ internal void SubscribeInternal(string id, Func action, Action addEvent) } public void AppOnIdle(Action removeEvent) => - _topLevelExceptionHandler.FireAndForget(async () => await AppOnIdleInternal(removeEvent).ConfigureAwait(false)); + _topLevelExceptionHandler.FireAndForget(async () => await AppOnIdleInternal(removeEvent)); internal async Task AppOnIdleInternal(Action removeEvent) { foreach (KeyValuePair> kvp in Calls) { - await _topLevelExceptionHandler.CatchUnhandledAsync(kvp.Value).ConfigureAwait(false); + await _topLevelExceptionHandler.CatchUnhandledAsync(kvp.Value); } Calls.Clear(); diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/SyncToUIThread.cs b/DUI3/Speckle.Connectors.DUI/Bridge/SyncToUIThread.cs deleted file mode 100644 index bb7bbe0c3..000000000 --- a/DUI3/Speckle.Connectors.DUI/Bridge/SyncToUIThread.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using Speckle.Connectors.Common.Operations; - -namespace Speckle.Connectors.DUI.Bridge; - -public class SyncToUIThread : ISyncToThread -{ - private readonly IBrowserBridge _bridge; - - public SyncToUIThread(IBrowserBridge bridge) - { - _bridge = bridge; - } - - [SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Task Completion Source")] - public async Task RunOnThread(Func> func) => - await _bridge.RunOnMainThreadAsync(func).ConfigureAwait(false); -} diff --git a/DUI3/Speckle.Connectors.DUI/Bridge/TopLevelExceptionHandler.cs b/DUI3/Speckle.Connectors.DUI/Bridge/TopLevelExceptionHandler.cs index b8b78ee97..1684e3c81 100644 --- a/DUI3/Speckle.Connectors.DUI/Bridge/TopLevelExceptionHandler.cs +++ b/DUI3/Speckle.Connectors.DUI/Bridge/TopLevelExceptionHandler.cs @@ -58,14 +58,32 @@ public Result CatchUnhandled(Func function) => /// /// A result pattern struct (where exceptions have been handled) - public async Task CatchUnhandledAsync(Func function) + public async Task CatchUnhandledAsync(Func function) { - _ = await CatchUnhandledAsync(async () => + try + { + try + { + await function(); + return new Result(); + } + catch (Exception ex) when (!ex.IsFatal()) { - await function().ConfigureAwait(false); - return null; - }) - .ConfigureAwait(false); + _logger.LogError(ex, UNHANDLED_LOGGER_TEMPLATE); + await SetGlobalNotification( + ToastNotificationType.DANGER, + "Unhandled Exception Occured", + ex.ToFormattedString(), + false + ); + return new(ex); + } + } + catch (Exception ex) + { + _logger.LogCritical(ex, UNHANDLED_LOGGER_TEMPLATE); + throw; + } } /// @@ -75,11 +93,11 @@ public async Task> CatchUnhandledAsync(Func> function) { try { - return new(await function.Invoke().ConfigureAwait(false)); + return new(await function.Invoke()); } catch (Exception ex) when (!ex.IsFatal()) { - await HandleException(ex).ConfigureAwait(false); + await HandleException(ex); return new(ex); } } @@ -97,12 +115,11 @@ private async Task HandleException(Exception ex) try { await SetGlobalNotification( - ToastNotificationType.DANGER, - "Unhandled Exception Occured", - ex.ToFormattedString(), - false - ) - .ConfigureAwait(false); + ToastNotificationType.DANGER, + "Unhandled Exception Occured", + ex.ToFormattedString(), + false + ); } catch (Exception toastEx) { @@ -126,19 +143,17 @@ await SetGlobalNotification( /// In cases where you can use keyword, you should prefer using /// /// - public async void FireAndForget(Func function) => await CatchUnhandledAsync(function).ConfigureAwait(false); + public async void FireAndForget(Func function) => await CatchUnhandledAsync(function); private async Task SetGlobalNotification(ToastNotificationType type, string title, string message, bool autoClose) => - await Parent - .Send( - BasicConnectorBindingCommands.SET_GLOBAL_NOTIFICATION, //TODO: We could move these constants into a DUI3 constants static class - new - { - type, - title, - description = message, - autoClose - } - ) - .ConfigureAwait(false); + await Parent.Send( + BasicConnectorBindingCommands.SET_GLOBAL_NOTIFICATION, //TODO: We could move these constants into a DUI3 constants static class + new + { + type, + title, + description = message, + autoClose + } + ); } diff --git a/DUI3/Speckle.Connectors.DUI/ContainerRegistration.cs b/DUI3/Speckle.Connectors.DUI/ContainerRegistration.cs index 05f78b842..ce594de8a 100644 --- a/DUI3/Speckle.Connectors.DUI/ContainerRegistration.cs +++ b/DUI3/Speckle.Connectors.DUI/ContainerRegistration.cs @@ -1,6 +1,6 @@ using System.Reflection; using Microsoft.Extensions.DependencyInjection; -using Speckle.Connectors.Common.Operations; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; @@ -11,22 +11,20 @@ namespace Speckle.Connectors.DUI; public static class ContainerRegistration { - public static void AddDUI(this IServiceCollection serviceCollection) + public static void AddDUI(this IServiceCollection serviceCollection) where TDocumentStore : DocumentModelStore + where TThreadContext : IThreadContext, new() { + // context always newed up on host app's main/ui thread + serviceCollection.AddSingleton(new TThreadContext()); serviceCollection.AddSingleton(); - // send operation and dependencies - serviceCollection.AddSingleton(); serviceCollection.AddTransient(); // POC: Each binding should have it's own bridge instance serviceCollection.AddMatchingInterfacesAsTransient(Assembly.GetAssembly(typeof(IdleCallManager))); serviceCollection.AddMatchingInterfacesAsTransient(Assembly.GetAssembly(typeof(IServerTransportFactory))); } - public static void UseDUI(this IServiceProvider serviceProvider) => - serviceProvider.GetRequiredService(); - public static void RegisterTopLevelExceptionHandler(this IServiceCollection serviceCollection) { serviceCollection.AddSingleton(sp => diff --git a/DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj b/DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj index 8f3048e1a..e2909423f 100644 --- a/DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj +++ b/DUI3/Speckle.Connectors.DUI/Speckle.Connectors.DUI.csproj @@ -12,7 +12,6 @@ - diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index d5873f05b..9ee4bec43 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -71,12 +71,6 @@ "resolved": "3.1.0-dev.219", "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" }, - "System.Threading.Tasks.Dataflow": { - "type": "Direct", - "requested": "[6.0.0, )", - "resolved": "6.0.0", - "contentHash": "+tyDCU3/B1lDdOOAJywHQoFwyXIUghIaP2BxG79uvhfTnO+D9qIgjVlL/JV2NTliYbMHpd6eKDmHp2VHpij7MA==" - }, "GraphQL.Client": { "type": "Transitive", "resolved": "6.0.0", diff --git a/Directory.Packages.props b/Directory.Packages.props index 4ddd08fff..7b01785f7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -36,6 +36,7 @@ + @@ -44,8 +45,6 @@ - - diff --git a/Sdk/Speckle.Connectors.Common/Builders/IHostObjectBuilder.cs b/Sdk/Speckle.Connectors.Common/Builders/IHostObjectBuilder.cs index 7d9e150dc..112af1952 100644 --- a/Sdk/Speckle.Connectors.Common/Builders/IHostObjectBuilder.cs +++ b/Sdk/Speckle.Connectors.Common/Builders/IHostObjectBuilder.cs @@ -14,11 +14,10 @@ public interface IHostObjectBuilder /// Project of the model. /// Name of the model. /// Action to update UI progress bar. - /// Cancellation token that passed from top -> ReceiveBinding. /// List of application ids. // POC: Where we will return these ids will matter later when we target to also cache received application ids. /// Project and model name are needed for now to construct host app objects into related layers or filters. /// POC: we might consider later to have HostObjectBuilderContext? that might hold all possible data we will need. - Task Build( + HostObjectBuilderResult Build( Base rootObject, string projectName, string modelName, diff --git a/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs b/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs index f3584c726..747df3acd 100644 --- a/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs +++ b/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs @@ -6,11 +6,11 @@ namespace Speckle.Connectors.Common.Builders; public interface IRootObjectBuilder { - public Task Build( + public RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, - CancellationToken ct = default + CancellationToken cancellationToken ); } diff --git a/Sdk/Speckle.Connectors.Common/Operations/ISyncToThread.cs b/Sdk/Speckle.Connectors.Common/Operations/ISyncToThread.cs deleted file mode 100644 index 2440e642f..000000000 --- a/Sdk/Speckle.Connectors.Common/Operations/ISyncToThread.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Speckle.Connectors.Common.Operations; - -public interface ISyncToThread -{ - public Task RunOnThread(Func> func); -} diff --git a/Sdk/Speckle.Connectors.Common/Operations/ReceiveOperation.cs b/Sdk/Speckle.Connectors.Common/Operations/ReceiveOperation.cs index caaa0162f..5827a715f 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/ReceiveOperation.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/ReceiveOperation.cs @@ -1,4 +1,5 @@ using Speckle.Connectors.Common.Builders; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.Logging; using Speckle.Sdk.Api; using Speckle.Sdk.Credentials; @@ -14,7 +15,9 @@ public sealed class ReceiveOperation( IReceiveProgress receiveProgress, ISdkActivityFactory activityFactory, IOperations operations, - IClientFactory clientFactory + IClientFactory clientFactory, + IThreadContext threadContext, + IThreadOptions threadOptions ) { public async Task Execute( @@ -30,41 +33,49 @@ CancellationToken cancellationToken using Client apiClient = clientFactory.Create(account); using var userScope = ActivityScope.SetTag(Consts.USER_ID, account.GetHashedEmail()); - var version = await apiClient - .Version.Get(receiveInfo.SelectedVersionId, receiveInfo.ProjectId, cancellationToken) - .ConfigureAwait(false); + var version = await apiClient.Version.Get(receiveInfo.SelectedVersionId, receiveInfo.ProjectId, cancellationToken); - receiveProgress.Begin(); - Base? commitObject = await operations - .Receive2( - new Uri(account.serverInfo.url), - receiveInfo.ProjectId, - version.referencedObject, - account.token, - onProgressAction: new PassthroughProgress(args => receiveProgress.Report(onOperationProgressed, args)), - cancellationToken: cancellationToken - ) - .ConfigureAwait(false); - - cancellationToken.ThrowIfCancellationRequested(); + var commitObject = await threadContext.RunOnWorkerAsync( + () => ReceiveData(account, version, receiveInfo, onOperationProgressed, cancellationToken) + ); // 4 - Convert objects - HostObjectBuilderResult? res = await ConvertObjects( - commitObject, - receiveInfo, - onOperationProgressed, - cancellationToken - ) - .ConfigureAwait(false); + HostObjectBuilderResult res = await threadContext.RunOnThread( + () => ConvertObjects(commitObject, receiveInfo, onOperationProgressed, cancellationToken), + threadOptions.RunReceiveBuildOnMainThread + ); - await apiClient - .Version.Received(new(version.id, receiveInfo.ProjectId, receiveInfo.SourceApplication), cancellationToken) - .ConfigureAwait(false); + await apiClient.Version.Received( + new(version.id, receiveInfo.ProjectId, receiveInfo.SourceApplication), + cancellationToken + ); return res; } - private async Task ConvertObjects( + private async Task ReceiveData( + Account account, + Speckle.Sdk.Api.GraphQL.Models.Version version, + ReceiveInfo receiveInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken + ) + { + receiveProgress.Begin(); + Base commitObject = await operations.Receive2( + new Uri(account.serverInfo.url), + receiveInfo.ProjectId, + version.referencedObject, + account.token, + onProgressAction: new PassthroughProgress(args => receiveProgress.Report(onOperationProgressed, args)), + cancellationToken: cancellationToken + ); + + cancellationToken.ThrowIfCancellationRequested(); + return commitObject; + } + + private HostObjectBuilderResult ConvertObjects( Base commitObject, ReceiveInfo receiveInfo, IProgress onOperationProgressed, @@ -81,9 +92,13 @@ CancellationToken cancellationToken try { - HostObjectBuilderResult res = await hostObjectBuilder - .Build(commitObject, receiveInfo.ProjectName, receiveInfo.ModelName, onOperationProgressed, cancellationToken) - .ConfigureAwait(false); + HostObjectBuilderResult res = hostObjectBuilder.Build( + commitObject, + receiveInfo.ProjectName, + receiveInfo.ModelName, + onOperationProgressed, + cancellationToken + ); conversionActivity?.SetStatus(SdkActivityStatusCode.Ok); return res; } diff --git a/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs b/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs index a0ca61bc4..2939496f3 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs @@ -13,34 +13,32 @@ public sealed class ReceiveProgress(IProgressDisplayManager progressDisplayManag public void Report(IProgress onOperationProgressed, ProgressArgs args) { + switch (args.ProgressEvent) { - switch (args.ProgressEvent) - { - case ProgressEvent.CacheCheck: - _previousPercentage = progressDisplayManager.CalculatePercentage(args); - break; - case ProgressEvent.DownloadBytes: - _previousSpeed = progressDisplayManager.CalculateSpeed(args); - break; - } + case ProgressEvent.CacheCheck: + _previousPercentage = progressDisplayManager.CalculatePercentage(args); + break; + case ProgressEvent.DownloadBytes: + _previousSpeed = progressDisplayManager.CalculateSpeed(args); + break; + } - if (!progressDisplayManager.ShouldUpdate()) - { - return; - } + if (!progressDisplayManager.ShouldUpdate()) + { + return; + } - switch (args.ProgressEvent) - { - case ProgressEvent.CacheCheck: - onOperationProgressed.Report(new("Checking cache... ", _previousPercentage)); - break; - case ProgressEvent.DownloadBytes: - onOperationProgressed.Report(new($"Downloading... ({_previousSpeed})", null)); - break; - case ProgressEvent.DeserializeObject: - onOperationProgressed.Report(new("Deserializing ...", progressDisplayManager.CalculatePercentage(args))); - break; - } + switch (args.ProgressEvent) + { + case ProgressEvent.CacheCheck: + onOperationProgressed.Report(new("Checking cache... ", _previousPercentage)); + break; + case ProgressEvent.DownloadBytes: + onOperationProgressed.Report(new($"Downloading... ({_previousSpeed})", null)); + break; + case ProgressEvent.DeserializeObject: + onOperationProgressed.Report(new("Deserializing ...", progressDisplayManager.CalculatePercentage(args))); + break; } } } diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs index 19a9d3524..3f432ddbf 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs @@ -1,6 +1,7 @@ using Speckle.Connectors.Common.Builders; using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Conversion; +using Speckle.Connectors.Common.Threading; using Speckle.Connectors.Logging; using Speckle.Sdk.Api; using Speckle.Sdk.Api.GraphQL.Inputs; @@ -19,7 +20,8 @@ public sealed class SendOperation( ISendProgress sendProgress, IOperations operations, IClientFactory clientFactory, - ISdkActivityFactory activityFactory + ISdkActivityFactory activityFactory, + IThreadContext threadContext ) { public async Task Execute( @@ -29,7 +31,9 @@ public async Task Execute( CancellationToken ct = default ) { - var buildResult = await rootObjectBuilder.Build(objects, sendInfo, onOperationProgressed, ct).ConfigureAwait(false); + var buildResult = await threadContext.RunOnMain( + () => rootObjectBuilder.Build(objects, sendInfo, onOperationProgressed, ct) + ); // POC: Jonathon asks on behalf of willow twin - let's explore how this can work // buildResult.RootObject["@report"] = new Report { ConversionResults = buildResult.ConversionResults }; @@ -37,8 +41,9 @@ public async Task Execute( buildResult.RootObject["version"] = 3; // base object handler is separated, so we can do some testing on non-production databases // exact interface may want to be tweaked when we implement this - var (rootObjId, convertedReferences) = await Send(buildResult.RootObject, sendInfo, onOperationProgressed, ct) - .ConfigureAwait(false); + var (rootObjId, convertedReferences) = await threadContext.RunOnWorkerAsync( + () => Send(buildResult.RootObject, sendInfo, onOperationProgressed, ct) + ); return new(rootObjId, convertedReferences, buildResult.ConversionResults); } @@ -59,16 +64,14 @@ public async Task Send( using var activity = activityFactory.Start("SendOperation"); sendProgress.Begin(); - var sendResult = await operations - .Send2( - sendInfo.ServerUrl, - sendInfo.ProjectId, - account.token, - commitObject, - onProgressAction: new PassthroughProgress(args => sendProgress.Report(onOperationProgressed, args)), - ct - ) - .ConfigureAwait(false); + var sendResult = await operations.Send2( + sendInfo.ServerUrl, + sendInfo.ProjectId, + account.token, + commitObject, + onProgressAction: new PassthroughProgress(args => sendProgress.Report(onOperationProgressed, args)), + ct + ); sendConversionCache.StoreSendResult(sendInfo.ProjectId, sendResult.ConvertedReferences); diff --git a/Sdk/Speckle.Connectors.Common/Threading/DefaultThreadContext.cs b/Sdk/Speckle.Connectors.Common/Threading/DefaultThreadContext.cs new file mode 100644 index 000000000..1a56531ec --- /dev/null +++ b/Sdk/Speckle.Connectors.Common/Threading/DefaultThreadContext.cs @@ -0,0 +1,36 @@ +namespace Speckle.Connectors.Common.Threading; + +public class DefaultThreadContext : ThreadContext +{ + //should be always newed up on the host app's main thread + private readonly TaskScheduler _uiTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext(); + + protected override Task WorkerToMainAsync(Func> action) + { + var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler); + return t.Unwrap(); + } + + protected override Task MainToWorkerAsync(Func> action) + { + Task> f = Task.Factory.StartNew( + action, + default, + TaskCreationOptions.AttachedToParent, + TaskScheduler.Default + ); + return f.Unwrap(); + } + + protected override Task WorkerToMain(Func action) + { + var t = Task.Factory.StartNew(action, default, TaskCreationOptions.AttachedToParent, _uiTaskScheduler); + return t; + } + + protected override Task MainToWorker(Func action) + { + Task f = Task.Factory.StartNew(action, default, TaskCreationOptions.LongRunning, TaskScheduler.Default); + return f; + } +} diff --git a/Sdk/Speckle.Connectors.Common/Threading/TaskExtensions.cs b/Sdk/Speckle.Connectors.Common/Threading/TaskExtensions.cs new file mode 100644 index 000000000..3ebc31b8c --- /dev/null +++ b/Sdk/Speckle.Connectors.Common/Threading/TaskExtensions.cs @@ -0,0 +1,8 @@ +namespace Speckle.Connectors.Common.Threading; + +public static class TaskExtensions +{ +#pragma warning disable CA1030 + public static async void FireAndForget(this Task valueTask) => await valueTask; +#pragma warning restore CA1030 +} diff --git a/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs b/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs new file mode 100644 index 000000000..e98d7d5cc --- /dev/null +++ b/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs @@ -0,0 +1,122 @@ +using Speckle.InterfaceGenerator; + +namespace Speckle.Connectors.Common.Threading; + +[GenerateAutoInterface] +public abstract class ThreadContext : IThreadContext +{ + private static readonly Task s_empty = Task.FromResult(null); + public static bool IsMainThread => Environment.CurrentManagedThreadId == 1; + + public async Task RunOnThread(Action action, bool useMain) + { + if (useMain) + { + if (IsMainThread) + { + action(); + } + else + { + await WorkerToMainAsync(() => + { + action(); + return s_empty; + }); + } + } + else + { + if (IsMainThread) + { + await MainToWorkerAsync(() => + { + action(); + return s_empty; + }); + } + else + { + action(); + } + } + } + + public virtual Task RunOnThread(Func action, bool useMain) + { + if (useMain) + { + if (IsMainThread) + { + return Task.FromResult(action()); + } + + return WorkerToMain(action); + } + if (IsMainThread) + { + return MainToWorker(action); + } + + return Task.FromResult(action()); + } + + public async Task RunOnThreadAsync(Func action, bool useMain) + { + if (useMain) + { + if (IsMainThread) + { + await action(); + } + else + { + await WorkerToMainAsync(async () => + { + await action(); + return Task.FromResult(null); + }); + } + } + else + { + if (IsMainThread) + { + await MainToWorkerAsync(async () => + { + await action(); + return Task.FromResult(null); + }); + } + else + { + await action(); + } + } + } + + public Task RunOnThreadAsync(Func> action, bool useMain) + { + if (useMain) + { + if (IsMainThread) + { + return action(); + } + + return WorkerToMainAsync(action); + } + if (IsMainThread) + { + return MainToWorkerAsync(action); + } + return action(); + } + + protected abstract Task WorkerToMainAsync(Func> action); + + protected abstract Task MainToWorkerAsync(Func> action); + protected abstract Task WorkerToMain(Func action); + + protected abstract Task MainToWorker(Func action); +} diff --git a/Sdk/Speckle.Connectors.Common/Threading/ThreadContextExtensions.cs b/Sdk/Speckle.Connectors.Common/Threading/ThreadContextExtensions.cs new file mode 100644 index 000000000..b6dbf2c59 --- /dev/null +++ b/Sdk/Speckle.Connectors.Common/Threading/ThreadContextExtensions.cs @@ -0,0 +1,28 @@ +namespace Speckle.Connectors.Common.Threading; + +public static class ThreadContextExtensions +{ + public static Task RunOnMain(this IThreadContext threadContext, Action action) => + threadContext.RunOnThread(action, true); + + public static Task RunOnWorker(this IThreadContext threadContext, Action action) => + threadContext.RunOnThread(action, false); + + public static Task RunOnMain(this IThreadContext threadContext, Func action) => + threadContext.RunOnThread(action, true); + + public static Task RunOnWorker(this IThreadContext threadContext, Func action) => + threadContext.RunOnThread(action, false); + + public static Task RunOnMainAsync(this IThreadContext threadContext, Func action) => + threadContext.RunOnThreadAsync(action, true); + + public static Task RunOnWorkerAsync(this IThreadContext threadContext, Func action) => + threadContext.RunOnThreadAsync(action, false); + + public static Task RunOnMainAsync(this IThreadContext threadContext, Func> action) => + threadContext.RunOnThreadAsync(action, true); + + public static Task RunOnWorkerAsync(this IThreadContext threadContext, Func> action) => + threadContext.RunOnThreadAsync(action, false); +} diff --git a/Sdk/Speckle.Connectors.Common/Threading/ThreadOptions.cs b/Sdk/Speckle.Connectors.Common/Threading/ThreadOptions.cs new file mode 100644 index 000000000..3ef94b7f2 --- /dev/null +++ b/Sdk/Speckle.Connectors.Common/Threading/ThreadOptions.cs @@ -0,0 +1,12 @@ +using Speckle.InterfaceGenerator; +using Speckle.Sdk; +using Speckle.Sdk.Host; + +namespace Speckle.Connectors.Common.Threading; + +[GenerateAutoInterface] +public class ThreadOptions(ISpeckleApplication speckleApplication) : IThreadOptions +{ + public bool RunReceiveBuildOnMainThread => speckleApplication.HostApplication != HostApplications.Rhino.Name; + public bool RunCommandsOnMainThread => speckleApplication.HostApplication != HostApplications.ArcGIS.Name; +} diff --git a/Sdk/Speckle.Connectors.Tests/ActivityScopeTests.cs b/Sdk/Speckle.Connectors.Tests/ActivityScopeTests.cs index 3305d84f4..e92d64788 100644 --- a/Sdk/Speckle.Connectors.Tests/ActivityScopeTests.cs +++ b/Sdk/Speckle.Connectors.Tests/ActivityScopeTests.cs @@ -9,7 +9,7 @@ public class ActivityScopeTests public async Task TestAsyncLocal() { Logging.ActivityScope.SetTag("test", "me"); - await Task.Delay(10).ConfigureAwait(false); + await Task.Delay(10); Logging.ActivityScope.Tags.ContainsKey("test").Should().BeTrue(); Logging.ActivityScope.Tags["test"].Should().Be("me"); } From 13740de72f205bf3e8c7b52edec56f91fbc1fbb1 Mon Sep 17 00:00:00 2001 From: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:32:10 +0000 Subject: [PATCH 02/40] fix(Navisworks): CNX-973 Fix: Material ID Logic and Render Proxy Cache (#463) --- .../HostApp/NavisworksMaterialUnpacker.cs | 50 ++++++++++++------- .../Send/NavisworksRootObjectBuilder.cs | 13 ++++- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs index 030f00b5d..4b354d904 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs @@ -1,4 +1,4 @@ -using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging; using Speckle.Connector.Navisworks.Services; using Speckle.Converter.Navisworks.Settings; using Speckle.Converters.Common; @@ -24,14 +24,32 @@ private static T Select(RepresentationMode mode, T active, T permanent, T ori _ => defaultValue, }; - internal List UnpackRenderMaterial(IReadOnlyList navisworksObjects) + internal List UnpackRenderMaterial( + IReadOnlyList navisworksObjects, + Dictionary> groupedNodes + ) { if (navisworksObjects == null) { throw new ArgumentNullException(nameof(navisworksObjects)); } + if (groupedNodes == null) + { + throw new ArgumentNullException(nameof(groupedNodes)); + } + Dictionary renderMaterialProxies = []; + Dictionary mergedIds = []; + + // Build mergedIds map once + foreach (var group in groupedNodes) + { + foreach (var node in group.Value) + { + mergedIds[selectionService.GetModelItemPath(node)] = group.Key; + } + } foreach (NAV.ModelItem navisworksObject in navisworksObjects) { @@ -43,15 +61,13 @@ internal List UnpackRenderMaterial(IReadOnlyList UnpackRenderMaterial(IReadOnlyList UnpackRenderMaterial(IReadOnlyList UnpackRenderMaterial(IReadOnlyList System.Drawing.Color.FromArgb( - Convert.ToInt32(color.R * 255), - Convert.ToInt32(color.G * 255), - Convert.ToInt32(color.B * 255) + alpha: 255, + red: Convert.ToInt32(color.R * 255), + green: Convert.ToInt32(color.G * 255), + blue: Convert.ToInt32(color.B * 255) ); } diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs index a099cb4fb..ecd28e0c5 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -26,6 +26,8 @@ public class NavisworksRootObjectBuilder( IElementSelectionService elementSelectionService ) : IRootObjectBuilder { + private bool SkipNodeMerging { get; set; } + internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; public RootObjectBuilderResult Build( @@ -35,6 +37,10 @@ public RootObjectBuilderResult Build( CancellationToken cancellationToken ) { +#if DEBUG + // This is a temporary workaround to disable node merging for debugging purposes - false is default, true is for debugging + SkipNodeMerging = false; +#endif using var activity = activityFactory.Start("Build"); // 1. Validate input @@ -82,7 +88,7 @@ CancellationToken cancellationToken // 4. Initialize final elements list and group nodes var finalElements = new List(); - var groupedNodes = GroupSiblingGeometryNodes(navisworksModelItems); + var groupedNodes = SkipNodeMerging ? [] : GroupSiblingGeometryNodes(navisworksModelItems); var processedPaths = new HashSet(); // 5. Process and merge grouped nodes @@ -146,7 +152,10 @@ CancellationToken cancellationToken using (var _ = activityFactory.Start("UnpackRenderMaterials")) { // 7. - Unpack the render material proxies - rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = materialUnpacker.UnpackRenderMaterial(navisworksModelItems); + rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = materialUnpacker.UnpackRenderMaterial( + navisworksModelItems, + groupedNodes + ); } // 8. Finalize and return From dcc29f34617a614f87fa29d038d9cf2a8ff02066 Mon Sep 17 00:00:00 2001 From: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:36:28 +0000 Subject: [PATCH 03/40] Update Navisworks connector plugin bundle target and version content target paths. (#464) --- .../Speckle.Connectors.Navisworks2020.csproj | 4 ++-- .../Speckle.Connectors.Navisworks2021.csproj | 4 ++-- .../Speckle.Connectors.Navisworks2022.csproj | 4 ++-- .../Speckle.Connectors.Navisworks2023.csproj | 4 ++-- .../Speckle.Connectors.Navisworks2024.csproj | 4 ++-- .../Speckle.Connectors.Navisworks2025.csproj | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj index 5b663b2ce..fe6c2d07e 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj @@ -15,8 +15,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj index 542d8fae2..95ee1ed6c 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj @@ -15,8 +15,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj index 72c3d9959..5a0fd2dee 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj @@ -16,8 +16,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj index d093ac0bf..a0efefc18 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj @@ -16,8 +16,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) Speckle.Connector.Navisworks diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj index 6b346613c..582ba40d7 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj @@ -16,8 +16,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) Speckle.Connector.Navisworks diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj index 917a87414..ad333b200 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj @@ -15,8 +15,8 @@ $(Authors) jonathon@speckle.systems $(PackageTags) connector nwd nwc nwf navisworks manage - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworksv3.bundle\Contents\$(NavisworksVersion) + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) From 95b3731df25e8e01cbe1fc7da868bbb7f1d52a9c Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Tue, 31 Dec 2024 15:04:25 +0000 Subject: [PATCH 04/40] Fix Navisworks and others progress by yielding to UI thread (#465) * Navisworks needs proper Async to update UI thread inline * Tested Autocad and Rhino * format and fix * ArcGIS should yield too * async/await for Tekla and ETABs --- .../Send/ArcGISRootObjectBuilder.cs | 9 +++------ .../Send/AutocadRootObjectBaseBuilder.cs | 4 ++-- .../Operations/Send/CsiRootObjectBuilder.cs | 3 ++- .../Bindings/NavisworksSelectionBinding.cs | 6 ------ .../Bindings/NavisworksSendBinding.cs | 2 +- .../Send/NavisworksRootObjectBuilder.cs | 3 ++- ...ckle.Connectors.NavisworksShared.projitems | 3 --- .../Operations/Send/RevitRootObjectBuilder.cs | 4 ++-- .../Operations/Send/RhinoRootObjectBuilder.cs | 3 ++- .../Operations/Send/TeklaRootObjectBuilder.cs | 3 ++- .../Models/Card/ModelCardProgress.cs | 5 ++++- .../Builders/IRootObjectBuilder.cs | 19 ++++++++++++++++++- .../Operations/SendOperation.cs | 4 ++-- 13 files changed, 40 insertions(+), 28 deletions(-) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs index aae2c1c24..da9b437ff 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Send/ArcGISRootObjectBuilder.cs @@ -5,7 +5,6 @@ using Speckle.Connectors.ArcGIS.HostApp.Extensions; using Speckle.Connectors.ArcGIS.Utils; using Speckle.Connectors.Common.Builders; -using Speckle.Connectors.Common.Caching; using Speckle.Connectors.Common.Conversion; using Speckle.Connectors.Common.Extensions; using Speckle.Connectors.Common.Operations; @@ -24,7 +23,6 @@ namespace Speckle.Connectors.ArcGis.Operations.Send; public class ArcGISRootObjectBuilder : IRootObjectBuilder { private readonly IRootToSpeckleConverter _rootToSpeckleConverter; - private readonly ISendConversionCache _sendConversionCache; private readonly ArcGISLayerUnpacker _layerUnpacker; private readonly ArcGISColorUnpacker _colorUnpacker; private readonly IConverterSettingsStore _converterSettings; @@ -33,7 +31,6 @@ public class ArcGISRootObjectBuilder : IRootObjectBuilder private readonly MapMembersUtils _mapMemberUtils; public ArcGISRootObjectBuilder( - ISendConversionCache sendConversionCache, ArcGISLayerUnpacker layerUnpacker, ArcGISColorUnpacker colorUnpacker, IConverterSettingsStore converterSettings, @@ -43,7 +40,6 @@ public ArcGISRootObjectBuilder( MapMembersUtils mapMemberUtils ) { - _sendConversionCache = sendConversionCache; _layerUnpacker = layerUnpacker; _colorUnpacker = colorUnpacker; _converterSettings = converterSettings; @@ -53,9 +49,9 @@ MapMembersUtils mapMemberUtils _mapMemberUtils = mapMemberUtils; } - public RootObjectBuilderResult Build( + public async Task BuildAsync( IReadOnlyList layers, - SendInfo sendInfo, + SendInfo __, IProgress onOperationProgressed, CancellationToken cancellationToken ) @@ -171,6 +167,7 @@ out ObjectReference? value } onOperationProgressed.Report(new("Converting", (double)++count / layers.Count)); + await Task.Yield(); } } diff --git a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs index b1de30e12..ea43660f3 100644 --- a/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs +++ b/Connectors/Autocad/Speckle.Connectors.AutocadShared/Operations/Send/AutocadRootObjectBaseBuilder.cs @@ -16,7 +16,7 @@ namespace Speckle.Connectors.Autocad.Operations.Send; -public abstract class AutocadRootObjectBaseBuilder : IRootObjectBuilder +public abstract class AutocadRootObjectBaseBuilder : RootObjectBuilderBase { private readonly IRootToSpeckleConverter _converter; private readonly string[] _documentPathSeparator = ["\\"]; @@ -58,7 +58,7 @@ It is already simplified but has many different references since it is a builder proxy classes yet. So I'm supressing this one now!!! """ )] - public RootObjectBuilderResult Build( + public override RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs index 07386452d..c76aa8dfd 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs @@ -42,7 +42,7 @@ ICsiApplicationService csiApplicationService _csiApplicationService = csiApplicationService; } - public RootObjectBuilderResult Build( + public async Task BuildAsync( IReadOnlyList csiObjects, SendInfo sendInfo, IProgress onOperationProgressed, @@ -70,6 +70,7 @@ CancellationToken cancellationToken count++; onOperationProgressed.Report(new("Converting", (double)count / csiObjects.Count)); + await Task.Yield(); } } diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs index d3334383e..e7920c205 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSelectionBinding.cs @@ -28,12 +28,6 @@ IElementSelectionService selectionService private void OnSelectionChange(object? o, EventArgs eventArgs) => _appIdleManager.SubscribeToIdle(nameof(NavisworksSelectionBinding), async () => await UpdateSelectionAsync()); - private void UpdateSelection() - { - SelectionInfo selInfo = GetSelection(); - Parent.Send(SELECTION_EVENT, selInfo); - } - private async Task UpdateSelectionAsync() { var selInfo = GetSelection(); diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs index e67d8a7be..47675b88a 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Bindings/NavisworksSendBinding.cs @@ -163,7 +163,7 @@ await scope .Execute( navisworksModelItems, modelCard.GetSendInfo(_speckleApplication.Slug), - _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCard.ModelCardId!, token), + _operationProgressManager.CreateOperationProgressEventHandler(Parent, modelCard.ModelCardId.NotNull(), token), token ); diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs index ecd28e0c5..685188554 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -30,7 +30,7 @@ IElementSelectionService elementSelectionService internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; - public RootObjectBuilderResult Build( + public async Task BuildAsync( IReadOnlyList navisworksModelItems, SendInfo sendInfo, IProgress onOperationProgressed, @@ -79,6 +79,7 @@ CancellationToken cancellationToken results.Add(converted); processedCount++; onOperationProgressed.Report(new CardProgress("Converting", (double)processedCount / totalCount)); + await Task.Yield(); } if (results.All(x => x.Status == Status.ERROR)) diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems index 099d2c611..1c74c547e 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems @@ -54,7 +54,4 @@ Always - - - \ No newline at end of file diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index 0e1fcd55e..aa9b467cb 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -24,11 +24,11 @@ public class RevitRootObjectBuilder( SendCollectionManager sendCollectionManager, ILogger logger, RevitToSpeckleCacheSingleton revitToSpeckleCacheSingleton -) : IRootObjectBuilder +) : RootObjectBuilderBase { // POC: SendSelection and RevitConversionContextStack should be interfaces, former needs interfaces - public RootObjectBuilderResult Build( + public override RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs index ceec97b2c..c3f5c33c9 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Operations/Send/RhinoRootObjectBuilder.cs @@ -60,7 +60,7 @@ ISdkActivityFactory activityFactory _activityFactory = activityFactory; } - public RootObjectBuilderResult Build( + public async Task BuildAsync( IReadOnlyList rhinoObjects, SendInfo sendInfo, IProgress onOperationProgressed, @@ -108,6 +108,7 @@ CancellationToken cancellationToken ++count; onOperationProgressed.Report(new("Converting", (double)count / atomicObjects.Count)); + await Task.Yield(); // NOTE: useful for testing ui states, pls keep for now so we can easily uncomment // Thread.Sleep(550); diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs index 1f5bb8a2c..5cbfc1961 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Operations/Send/TeklaRootObjectBuilder.cs @@ -43,7 +43,7 @@ TeklaMaterialUnpacker materialUnpacker _materialUnpacker = materialUnpacker; } - public RootObjectBuilderResult Build( + public async Task BuildAsync( IReadOnlyList teklaObjects, SendInfo sendInfo, IProgress onOperationProgressed, @@ -73,6 +73,7 @@ CancellationToken cancellationToken ++count; onOperationProgressed.Report(new("Converting", (double)count / teklaObjects.Count)); + await Task.Yield(); } } diff --git a/DUI3/Speckle.Connectors.DUI/Models/Card/ModelCardProgress.cs b/DUI3/Speckle.Connectors.DUI/Models/Card/ModelCardProgress.cs index 1d2dbdeb7..aff002bd2 100644 --- a/DUI3/Speckle.Connectors.DUI/Models/Card/ModelCardProgress.cs +++ b/DUI3/Speckle.Connectors.DUI/Models/Card/ModelCardProgress.cs @@ -4,4 +4,7 @@ /// Progress value between 0 and 1 to calculate UI progress bar width. /// If it is null it will swooshing on UI. /// -public record ModelCardProgress(string ModelCardId, string Status, double? Progress); +public record ModelCardProgress(string ModelCardId, string Status, double? Progress) +{ + public override string ToString() => $"{ModelCardId} - {Status} - {Progress}"; +} diff --git a/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs b/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs index 747df3acd..f1d9acff4 100644 --- a/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs +++ b/Sdk/Speckle.Connectors.Common/Builders/IRootObjectBuilder.cs @@ -6,7 +6,24 @@ namespace Speckle.Connectors.Common.Builders; public interface IRootObjectBuilder { - public RootObjectBuilderResult Build( + public Task BuildAsync( + IReadOnlyList objects, + SendInfo sendInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken + ); +} + +public abstract class RootObjectBuilderBase : IRootObjectBuilder +{ + public Task BuildAsync( + IReadOnlyList objects, + SendInfo sendInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken + ) => Task.FromResult(Build(objects, sendInfo, onOperationProgressed, cancellationToken)); + + public abstract RootObjectBuilderResult Build( IReadOnlyList objects, SendInfo sendInfo, IProgress onOperationProgressed, diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs index 3f432ddbf..c131d0058 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendOperation.cs @@ -31,8 +31,8 @@ public async Task Execute( CancellationToken ct = default ) { - var buildResult = await threadContext.RunOnMain( - () => rootObjectBuilder.Build(objects, sendInfo, onOperationProgressed, ct) + var buildResult = await threadContext.RunOnMainAsync( + async () => await rootObjectBuilder.BuildAsync(objects, sendInfo, onOperationProgressed, ct) ); // POC: Jonathon asks on behalf of willow twin - let's explore how this can work From a1e3e509fd0d4480369f80a5e0b4de915e58455d Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Fri, 3 Jan 2025 15:58:10 +0000 Subject: [PATCH 05/40] Update SDK to 222 --- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 32 +++++----- .../packages.lock.json | 64 +++++++++---------- .../Speckle.Connectors.DUI/packages.lock.json | 28 ++++---- Directory.Packages.props | 6 +- .../packages.lock.json | 44 ++++++------- .../packages.lock.json | 28 ++++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 44 ++++++------- 62 files changed, 953 insertions(+), 953 deletions(-) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index 3e30a61ea..b6c3b76af 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -231,9 +231,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -241,8 +241,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -319,14 +319,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index 9dc7d29eb..c4abf49ba 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index 4c7bc067a..a5cc3dc76 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 1031896e7..202c4482d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 1a9922cf9..2083c5e6b 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -256,7 +256,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -294,18 +294,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -314,14 +314,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index a1244ae51..7f6a123aa 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index be043b6f2..18e0c9e85 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index b12a8490d..d08e73d6b 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 52903379b..230ced370 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -304,18 +304,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -324,14 +324,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 81cb41949..476ab3a9c 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.etabs21": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index b3ca1a118..3851792c8 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.etabs22": { @@ -292,18 +292,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -312,14 +312,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 9dd78de63..83c00e238 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2020": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 71790953f..d1ac83ed6 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2021": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index 5ccb5c8a5..7c3410b44 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2022": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index b485a56aa..2ea7cf269 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2023": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index 7dc5c4be6..482235209 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2024": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 0520d37d8..5fe4c264c 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -47,11 +47,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -279,9 +279,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -289,8 +289,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -307,7 +307,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.navisworks2025": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index f2887c194..2549b2274 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.revit2022": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index 0d8abeb3f..f3689645a 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.revit2023": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index a38e1ff9a..294096e7f 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.revit2024": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index 1218eb443..04dc69d16 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -242,9 +242,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -252,8 +252,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.revit2025": { @@ -302,11 +302,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Revit.API": { @@ -317,9 +317,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -328,14 +328,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index b7d6ebebb..8316da2a7 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.rhino7": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index 177aed3c8..de3c94f68 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.converters.rhino8": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 86c201b46..a84d982a2 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Tekla.Structures.Dialog": { @@ -332,9 +332,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -342,8 +342,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -368,7 +368,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -406,9 +406,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -418,14 +418,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index fde9f65dc..99a5a76bf 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Tekla.Structures.Dialog": { @@ -413,9 +413,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -423,8 +423,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -449,7 +449,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -487,9 +487,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -499,14 +499,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json index 83e1ae584..4f555fd8c 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json @@ -224,7 +224,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -247,18 +247,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -268,14 +268,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 8f6c6c81c..2334e2e4d 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index 09d29073b..1da22dfe0 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index e6d32ee68..0c4fbd6fa 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -330,18 +330,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -351,14 +351,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 2d368266a..4e8b517b0 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -306,14 +306,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index a60441325..c571aaebf 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 4de4db7fe..5e06f3ca2 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 81bb4b482..616aaef6b 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index a406b1fc0..4f60ee718 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index 2fc253038..1ee371d53 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 758994663..6bf934eec 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui.webview": { @@ -257,7 +257,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -315,14 +315,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index 0bc1f724f..325e14da8 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index 64f2126cc..39d61993f 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index 323d2a4ae..0b0bdccfc 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index ac6a35d8a..39e870235 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index ca995661e..1be03520c 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index e6d261605..40994dc35 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json index 247b68aba..7c031341c 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index fd4a7b94d..d1d879776 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json index 0b71e1e3d..bebb50516 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index a1131a9a1..80fba2f44 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index 481463041..755db05bc 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index 4e81a439b..19527fb68 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index 1e47fee24..dc2eeaa80 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index 53845d717..b6ce376c7 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index c0d379e72..7589b2f31 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 9d6ab03ff..7a5767db1 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index 2ac6d1096..d6e7e3e1f 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -323,18 +323,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -344,14 +344,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index 862340523..287a72ae6 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "Microsoft.Extensions.Logging": { @@ -364,18 +364,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index 100ca8108..0a3778422 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -334,8 +334,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -377,18 +377,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -397,14 +397,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index c64aeaec2..708cee5ed 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -310,18 +310,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -331,14 +331,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net6.0-windows7.0": { @@ -565,9 +565,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.dui": { @@ -575,8 +575,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -611,18 +611,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -632,14 +632,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 9ee4bec43..ae1f338e3 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -50,9 +50,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -62,14 +62,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" }, "GraphQL.Client": { "type": "Transitive", @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 7b01785f7..1250f48aa 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,9 +41,9 @@ - - - + + + diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index 4a25db9d2..157129ccf 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -53,18 +53,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -74,14 +74,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" }, "GraphQL.Client": { "type": "Transitive", @@ -386,18 +386,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -406,14 +406,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Connectors.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Tests/packages.lock.json index f16c4da3b..b9ce8f857 100644 --- a/Sdk/Speckle.Connectors.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )", - "Speckle.Sdk": "[3.1.0-dev.219, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )", + "Speckle.Sdk": "[3.1.0-dev.222, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" } }, "speckle.connectors.logging": { @@ -368,18 +368,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -388,14 +388,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index 27e69ee47..0c87953ab 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -332,7 +332,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.219, )" + "Speckle.Objects": "[3.1.0-dev.222, )" } }, "speckle.testing": { @@ -362,18 +362,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -382,14 +382,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index 2df545bdb..cf267362c 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -50,11 +50,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -309,9 +309,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } }, "net8.0": { @@ -371,11 +371,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "2thsMUDkRr7lR0PXZJ8k3KWZLWjz/aBY0KaO2SuXM0lIKyJw1APMJ7lXJ89e6JAjBzEbK8yLHBb0qtfcc4bNRw==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.219" + "Speckle.Sdk": "3.1.0-dev.222" } }, "GraphQL.Client": { @@ -568,9 +568,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "UTgz9UgkMFGqRLmCq1HPo74MngvKbSZOFWaMRzASHrrnsBtzZatBXjoJBlvVoeBCoiea5Jj+BgZg6RvlV2m3sg==", + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -579,14 +579,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.219" + "Speckle.Sdk.Dependencies": "3.1.0-dev.222" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.219, )", - "resolved": "3.1.0-dev.219", - "contentHash": "5hqBd9whAs5cC8S/6YUgKFOivjntAkVutKhz06XD/f3Kj6xScT3hwcUaWBxiwK3Mw7FLtiVuU1uG777pjn0PKQ==" + "requested": "[3.1.0-dev.222, )", + "resolved": "3.1.0-dev.222", + "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" } } } From 3ea5677497a3b1a0fe92f0c7e1f1720b3d802453 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Tue, 7 Jan 2025 12:38:52 +0000 Subject: [PATCH 06/40] =?UTF-8?q?Rhino=20panels=20should=20be=20treated=20?= =?UTF-8?q?as=20if=20they=20might=20have=20been=20used=20before=E2=80=A6?= =?UTF-8?q?=20(#467)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Rhino panels should be treated as if they might have been used before as Panels.Closed isn't called * formatting * Only Reinitialize when Rhino 8 and greater * format --- .../HostApp/SpeckleRhinoPanelHost.cs | 27 +++++++++++++++++++ .../Plugin/Speckle.Connectors.RhinoCommand.cs | 11 ++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/SpeckleRhinoPanelHost.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/SpeckleRhinoPanelHost.cs index 02654613c..00803ed6e 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/SpeckleRhinoPanelHost.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/SpeckleRhinoPanelHost.cs @@ -22,6 +22,33 @@ public SpeckleRhinoPanelHost(uint docSn) Panels.Closed += PanelsOnClosed; } + /// + /// This is a lot like PanelsOnClosed but called when trying to show the panel to clear out a lingering parent as PanelsOnClosed isn't called + /// + /// + public static void Reinitialize(DUI3ControlWebView? webView) + { + if (webView == null) + { + return; + } + // This check comes from behavioral difference on closing Rhino Panels. + // IsPanelVisible returns; + // - True, when docked Panel closed from the list on right click on panel tab, + // whenever it is closed with this way, Rhino.Panels tries to reinit this object and expect the different UIElement, that's why we disconnect Child. + // - False, when detached Panel is closed by 'X' close button. + // whenever it is closed with this way, Rhino.Panels don't create this object, that's why we do not disconnect Child UIElement. + if (Panels.IsPanelVisible(typeof(SpeckleRhinoPanelHost).GUID)) + { + return; + } + // Disconnect UIElement from WpfElementHost. Otherwise, we can't reinit panel with same DUI3ControlWebView + if (LogicalTreeHelper.GetParent(webView) is Border border) + { + border.Child = null; + } + } + private void PanelsOnClosed(object? sender, PanelEventArgs e) { if (e.PanelId == typeof(SpeckleRhinoPanelHost).GUID) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoCommand.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoCommand.cs index 029029529..704965ad7 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoCommand.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Plugin/Speckle.Connectors.RhinoCommand.cs @@ -5,8 +5,10 @@ using Rhino.Input.Custom; using Rhino.UI; using Speckle.Connectors.Rhino.HostApp; - -// using Speckle.Connectorss.Rhino.Properties; +#if RHINO8_OR_GREATER +using Microsoft.Extensions.DependencyInjection; +using Speckle.Connectors.DUI.WebView; +#endif namespace Speckle.Connectors.Rhino.Plugin; @@ -65,6 +67,11 @@ protected override Result RunCommand(RhinoDoc doc, RunMode mode) if (mode == RunMode.Interactive) { +#if RHINO8_OR_GREATER + SpeckleRhinoPanelHost.Reinitialize( + SpeckleConnectorsRhinoPlugin.Instance.Container?.GetRequiredService() + ); +#endif Panels.OpenPanel(panelId); return Result.Success; } From 724e8fe029f9c49027eea1c5f6a9ae0f78eb1f4c Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 14:03:37 +0000 Subject: [PATCH 07/40] Dimitrie/cnx 938 did not find a layer in cache (#468) * fix: adds a converter for displayable objects * fix: ensures correct layer creation for collections with empty names --- .../HostApp/RhinoLayerBaker.cs | 9 ++- ...isplayableObjectToHostTopLevelConverter.cs | 77 +++++++++++++++++++ 2 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerBaker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerBaker.cs index 46560ae3f..4bb1fb24b 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerBaker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerBaker.cs @@ -83,7 +83,7 @@ public int GetLayerIndex(Collection[] collectionPath, string baseLayerName) return existingLayerIndex; } - throw new SpeckleException("Did not find a layer in the cache."); + throw new SpeckleException($"Did not find a layer in the cache with the name {layerFullName}"); } /// @@ -99,7 +99,8 @@ private int CreateLayerFromPath(Collection[] collectionPath, string baseLayerNam Layer? previousLayer = currentDocument.Layers.FindName(currentLayerName); foreach (Collection collection in collectionPath) { - currentLayerName += s_pathSeparator + collection.name; + currentLayerName += s_pathSeparator + (string.IsNullOrWhiteSpace(collection.name) ? "unnamed" : collection.name); + currentLayerName = currentLayerName.Replace("{", "").Replace("}", ""); // Rhino specific cleanup for gh (see RemoveInvalidRhinoChars) if (_hostLayerCache.TryGetValue(currentLayerName, out int value)) { @@ -133,6 +134,10 @@ out int mIndex } int index = currentDocument.Layers.Add(newLayer); + if (index == -1) + { + throw new SpeckleException($"Could not create layer {currentLayerName}."); + } _hostLayerCache.Add(currentLayerName, index); previousLayer = currentDocument.Layers.FindIndex(index); // note we need to get the correct id out, hence why we're double calling this } diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs new file mode 100644 index 000000000..92187942c --- /dev/null +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs @@ -0,0 +1,77 @@ +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Sdk.Common; +using Speckle.Sdk.Common.Exceptions; +using Speckle.Sdk.Models; + +namespace Speckle.Converters.Rhino.ToHost.TopLevel; + +[NameAndRankValue(nameof(DisplayableObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +public class DisplayableObjectConverter + : IToHostTopLevelConverter, + ITypedConverter> +{ + private readonly ITypedConverter _pointConverter; + private readonly ITypedConverter _lineConverter; + private readonly ITypedConverter _polylineConverter; + private readonly ITypedConverter _arcConverter; + private readonly ITypedConverter _meshConverter; + private readonly IConverterSettingsStore _settingsStore; + + public DisplayableObjectConverter( + ITypedConverter pointConverter, + ITypedConverter lineConverter, + ITypedConverter polylineConverter, + ITypedConverter arcConverter, + ITypedConverter meshConverter, + IConverterSettingsStore settingsStore + ) + { + _pointConverter = pointConverter; + _lineConverter = lineConverter; + _polylineConverter = polylineConverter; + _arcConverter = arcConverter; + _meshConverter = meshConverter; + _settingsStore = settingsStore; + } + + public object Convert(Base target) => Convert((DisplayableObject)target); + + public List<(RG.GeometryBase a, Base b)> Convert(DisplayableObject target) + { + var result = new List(); + foreach (var item in target.displayValue) + { + RG.GeometryBase x = item switch + { + SOG.Line line => _lineConverter.Convert(line), + SOG.Polyline polyline => _polylineConverter.Convert(polyline), + SOG.Arc arc => _arcConverter.Convert(arc), + SOG.Mesh mesh => _meshConverter.Convert(mesh), + SOG.Point point => _pointConverter.Convert(point), + _ => throw new ConversionException($"Found unsupported fallback geometry: {item.GetType()}") + }; + x.Transform(GetUnitsTransform(item)); + result.Add(x); + } + + return result.Zip(target.displayValue, (a, b) => (a, b)).ToList(); + } + + private RG.Transform GetUnitsTransform(Base speckleObject) + { + /* + * POC: CNX-9270 Looking at a simpler, more performant way of doing unit scaling on `ToNative` + * by fully relying on the transform capabilities of the HostApp, and only transforming top-level stuff. + * This may not hold when adding more complex conversions, but it works for now! + */ + if (speckleObject["units"] is string units) + { + var scaleFactor = Units.GetConversionFactor(units, _settingsStore.Current.SpeckleUnits); + var scale = RG.Transform.Scale(RG.Point3d.Origin, scaleFactor); + return scale; + } + + return RG.Transform.Identity; + } +} From 9fa3ef83e5e09cd5cbb055093018b1f869df434e Mon Sep 17 00:00:00 2001 From: Dogukan Karatas <61163577+dogukankaratas@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:10:58 +0100 Subject: [PATCH 08/40] adds update selection (#469) --- .../Bindings/TeklaSelectionBinding.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs index 5a416e14d..2fba25714 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs @@ -36,6 +36,7 @@ private void Events_SelectionChangeEvent() lock (_selectionEventHandlerLock) { _idleManager.SubscribeToIdle(nameof(TeklaSelectionBinding), UpdateSelection); + UpdateSelection(); } } From a9850c2eecbab42f1c45cdf02aba68d4c83409a7 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 16:29:26 +0000 Subject: [PATCH 09/40] feat: adds support for group selection events (#471) * feat: adds support for group selection events * feat: stores group objects separately so we don't reconvert them this will be necessary as well for layer change events later down the line * chore: comments --- .../Bindings/RhinoSendBinding.cs | 41 ++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 5809b80af..c37fcb41a 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -44,12 +44,19 @@ public sealed class RhinoSendBinding : ISendBinding private readonly ISdkActivityFactory _activityFactory; /// - /// Used internally to aggregate the changed objects' id. Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: + /// Used internally to aggregate the changed objects' id. Objects in this list will be reconverted. + /// + /// Note we're using a concurrent dictionary here as the expiry check method is not thread safe, and this was causing problems. See: /// [CNX-202: Unhandled Exception Occurred when receiving in Rhino](https://linear.app/speckle/issue/CNX-202/unhandled-exception-occurred-when-receiving-in-rhino) /// As to why a concurrent dictionary, it's because it's the cheapest/easiest way to do so. /// https://stackoverflow.com/questions/18922985/concurrent-hashsett-in-net-framework /// private ConcurrentDictionary ChangedObjectIds { get; set; } = new(); + + /// + /// Stores objects that have "changed" only the commit structure/proxies - they do not need to be reconverted. + /// + private ConcurrentDictionary ChangedObjectIdsInGroups { get; set; } = new(); private ConcurrentDictionary ChangedMaterialIndexes { get; set; } = new(); private UnitSystem PreviousUnitSystem { get; set; } @@ -96,6 +103,15 @@ private void SubscribeToRhinoEvents() var selectedObject = RhinoDoc.ActiveDoc.Objects.GetSelectedObjects(false, false).First(); ChangedObjectIds[selectedObject.Id.ToString()] = 1; } + + if (e.CommandEnglishName == "Ungroup") + { + foreach (RhinoObject selectedObject in RhinoDoc.ActiveDoc.Objects.GetSelectedObjects(false, false)) + { + ChangedObjectIdsInGroups[selectedObject.Id.ToString()] = 1; + } + _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); + } }; RhinoDoc.ActiveDocumentChanged += (_, e) => @@ -154,6 +170,16 @@ private void SubscribeToRhinoEvents() } }); + RhinoDoc.GroupTableEvent += (_, args) => + _topLevelExceptionHandler.CatchUnhandled(() => + { + foreach (var obj in RhinoDoc.ActiveDoc.Groups.GroupMembers(args.GroupIndex)) + { + ChangedObjectIdsInGroups[obj.Id.ToString()] = 1; + } + _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); + }); + // Catches and stores changed material ids. These are then used in the expiry checks to invalidate all objects that have assigned any of those material ids. RhinoDoc.MaterialTableEvent += (_, args) => _topLevelExceptionHandler.CatchUnhandled(() => @@ -290,21 +316,25 @@ private async Task RunExpirationChecks() } } - if (ChangedObjectIds.IsEmpty) + if (ChangedObjectIds.IsEmpty && ChangedObjectIdsInGroups.IsEmpty) { return; } // Actual model card invalidation - string[] objectIdsList = ChangedObjectIds.Keys.ToArray(); // NOTE: could not copy to array happens here + string[] objectIdsList = ChangedObjectIds.Keys.ToArray(); + var changedObjectIdsInGroups = ChangedObjectIdsInGroups.Keys.ToArray(); _sendConversionCache.EvictObjects(objectIdsList); var senders = _store.GetSenders(); List expiredSenderIds = new(); foreach (SenderModelCard modelCard in senders) { - var intersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(objectIdsList).ToList(); - var isExpired = intersection.Count != 0; + var intersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(objectIdsList); + var groupIdIntersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(changedObjectIdsInGroups); + + var isExpired = intersection.Any() || groupIdIntersection.Any(); + if (isExpired) { expiredSenderIds.Add(modelCard.ModelCardId.NotNull()); @@ -313,6 +343,7 @@ private async Task RunExpirationChecks() await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); + ChangedObjectIdsInGroups = new(); ChangedMaterialIndexes = new(); } From 516b4d785f8674e5253d08b8b4851fb01ee16bb9 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 17:49:14 +0000 Subject: [PATCH 10/40] feat: run extra intersection checks only if needed --- .../Bindings/RhinoSendBinding.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index c37fcb41a..80a62fc7e 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -331,13 +331,17 @@ private async Task RunExpirationChecks() foreach (SenderModelCard modelCard in senders) { var intersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(objectIdsList); - var groupIdIntersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(changedObjectIdsInGroups); - - var isExpired = intersection.Any() || groupIdIntersection.Any(); + if (intersection.Any()) + { + expiredSenderIds.Add(modelCard.ModelCardId.NotNull()); + continue; + } - if (isExpired) + var groupIdIntersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(changedObjectIdsInGroups); + if (groupIdIntersection.Any()) { expiredSenderIds.Add(modelCard.ModelCardId.NotNull()); + continue; } } From 73302f101a9fdceae1aeb7b2976daf24db969a86 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 17:57:50 +0000 Subject: [PATCH 11/40] feat: adds layer changes object tracking --- .../Bindings/RhinoSendBinding.cs | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 80a62fc7e..6b83f451a 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -56,7 +56,7 @@ public sealed class RhinoSendBinding : ISendBinding /// /// Stores objects that have "changed" only the commit structure/proxies - they do not need to be reconverted. /// - private ConcurrentDictionary ChangedObjectIdsInGroups { get; set; } = new(); + private ConcurrentDictionary ChangedObjectIdsInGroupsOrLayers { get; set; } = new(); private ConcurrentDictionary ChangedMaterialIndexes { get; set; } = new(); private UnitSystem PreviousUnitSystem { get; set; } @@ -108,7 +108,7 @@ private void SubscribeToRhinoEvents() { foreach (RhinoObject selectedObject in RhinoDoc.ActiveDoc.Objects.GetSelectedObjects(false, false)) { - ChangedObjectIdsInGroups[selectedObject.Id.ToString()] = 1; + ChangedObjectIdsInGroupsOrLayers[selectedObject.Id.ToString()] = 1; } _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); } @@ -175,7 +175,34 @@ private void SubscribeToRhinoEvents() { foreach (var obj in RhinoDoc.ActiveDoc.Groups.GroupMembers(args.GroupIndex)) { - ChangedObjectIdsInGroups[obj.Id.ToString()] = 1; + ChangedObjectIdsInGroupsOrLayers[obj.Id.ToString()] = 1; + } + _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); + }); + + RhinoDoc.LayerTableEvent += (_, args) => + _topLevelExceptionHandler.CatchUnhandled(() => + { + if ( + args.EventType == LayerTableEventType.Deleted + || args.EventType == LayerTableEventType.Current + || args.EventType == LayerTableEventType.Added + ) + { + return; + } + + var layer = RhinoDoc.ActiveDoc.Layers[args.LayerIndex]; + + // add all objects from the changed layers and sublayers to the non-destructively changed object list. + var allLayers = args.Document.Layers.Where(l => l.FullPath.Contains(layer.Name)); // not e imperfect, but layer.GetChildren(true) is valid only in v8 and above; this filter will include the original layer. + foreach (var childLayer in allLayers) + { + var sublayerObjs = RhinoDoc.ActiveDoc.Objects.FindByLayer(childLayer) ?? []; + foreach (var obj in sublayerObjs) + { + ChangedObjectIdsInGroupsOrLayers[obj.Id.ToString()] = 1; + } } _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); }); @@ -316,14 +343,14 @@ private async Task RunExpirationChecks() } } - if (ChangedObjectIds.IsEmpty && ChangedObjectIdsInGroups.IsEmpty) + if (ChangedObjectIds.IsEmpty && ChangedObjectIdsInGroupsOrLayers.IsEmpty) { return; } // Actual model card invalidation string[] objectIdsList = ChangedObjectIds.Keys.ToArray(); - var changedObjectIdsInGroups = ChangedObjectIdsInGroups.Keys.ToArray(); + var changedObjectIdsInGroups = ChangedObjectIdsInGroupsOrLayers.Keys.ToArray(); _sendConversionCache.EvictObjects(objectIdsList); var senders = _store.GetSenders(); List expiredSenderIds = new(); @@ -347,7 +374,7 @@ private async Task RunExpirationChecks() await Commands.SetModelsExpired(expiredSenderIds); ChangedObjectIds = new(); - ChangedObjectIdsInGroups = new(); + ChangedObjectIdsInGroupsOrLayers = new(); ChangedMaterialIndexes = new(); } From c6b9651d08d109d99bdabc578c7e7cf15033462c Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 18:37:44 +0000 Subject: [PATCH 12/40] chore: naming --- .../Bindings/RhinoSendBinding.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 6b83f451a..1824fdfdb 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -350,7 +350,7 @@ private async Task RunExpirationChecks() // Actual model card invalidation string[] objectIdsList = ChangedObjectIds.Keys.ToArray(); - var changedObjectIdsInGroups = ChangedObjectIdsInGroupsOrLayers.Keys.ToArray(); + var changedObjectIdsInGroupsOrLayers = ChangedObjectIdsInGroupsOrLayers.Keys.ToArray(); _sendConversionCache.EvictObjects(objectIdsList); var senders = _store.GetSenders(); List expiredSenderIds = new(); @@ -364,7 +364,9 @@ private async Task RunExpirationChecks() continue; } - var groupIdIntersection = modelCard.SendFilter.NotNull().SelectedObjectIds.Intersect(changedObjectIdsInGroups); + var groupIdIntersection = modelCard + .SendFilter.NotNull() + .SelectedObjectIds.Intersect(changedObjectIdsInGroupsOrLayers); if (groupIdIntersection.Any()) { expiredSenderIds.Add(modelCard.ModelCardId.NotNull()); From 1016c9b82ba527a43917e401e521ad0c4560369f Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Tue, 7 Jan 2025 18:42:01 +0000 Subject: [PATCH 13/40] fix: more naming --- .../Bindings/RhinoSendBinding.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 1824fdfdb..7dc21a7fb 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -364,10 +364,10 @@ private async Task RunExpirationChecks() continue; } - var groupIdIntersection = modelCard + var groupOrLayerIntersection = modelCard .SendFilter.NotNull() .SelectedObjectIds.Intersect(changedObjectIdsInGroupsOrLayers); - if (groupIdIntersection.Any()) + if (groupOrLayerIntersection.Any()) { expiredSenderIds.Add(modelCard.ModelCardId.NotNull()); continue; From 23710ee3fb736b529da79a9c4954efc6ec9d887a Mon Sep 17 00:00:00 2001 From: Dogukan Karatas <61163577+dogukankaratas@users.noreply.github.com> Date: Wed, 8 Jan 2025 10:30:08 +0100 Subject: [PATCH 14/40] adds null check (#470) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Oğuzhan Koral <45078678+oguzhankoral@users.noreply.github.com> --- .../Bindings/TeklaSelectionBinding.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs index 2fba25714..710d0d5b5 100644 --- a/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs +++ b/Connectors/Tekla/Speckle.Connector.TeklaShared/Bindings/TeklaSelectionBinding.cs @@ -8,7 +8,7 @@ public class TeklaSelectionBinding : ISelectionBinding { private readonly IAppIdleManager _idleManager; private const string SELECTION_EVENT = "setSelection"; - private readonly Tekla.Structures.Model.Events _events; + private readonly Events _events; private readonly object _selectionEventHandlerLock = new object(); private readonly Tekla.Structures.Model.UI.ModelObjectSelector _selector; @@ -48,20 +48,34 @@ private void UpdateSelection() public SelectionInfo GetSelection() { + if (_selector == null) + { + return new SelectionInfo(new List(), "No objects selected."); + } + + var objectIds = new List(); + var objectTypes = new List(); + ModelObjectEnumerator selectedObjects = _selector.GetSelectedObjects(); - List objectIds = new List(); - List objectTypes = new List(); + if (selectedObjects == null) + { + return new SelectionInfo(new List(), "No objects selected."); + } while (selectedObjects.MoveNext()) { ModelObject modelObject = selectedObjects.Current; + if (modelObject?.Identifier?.GUID == null) + { + continue; // Skip if any part is null + } + string globalId = modelObject.Identifier.GUID.ToString(); objectIds.Add(globalId); objectTypes.Add(modelObject.GetType().Name); } string typesString = string.Join(", ", objectTypes.Distinct()); - return new SelectionInfo( objectIds, objectIds.Count == 0 ? "No objects selected." : $"{objectIds.Count} objects ({typesString})" From 20e08bba76c8c60a26776948911a2c0efba1c7ea Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Wed, 8 Jan 2025 13:59:24 +0000 Subject: [PATCH 15/40] fix: expired cards on file open --- .../Bindings/RhinoSendBinding.cs | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs index 7dc21a7fb..61e389faa 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/Bindings/RhinoSendBinding.cs @@ -134,12 +134,10 @@ private void SubscribeToRhinoEvents() RhinoDoc.AddRhinoObject += (_, e) => _topLevelExceptionHandler.CatchUnhandled(() => { - // NOTE: This does not work if rhino starts and opens a blank doc; - // These events always happen in a doc. Why guard agains a null doc? - // if (!_store.IsDocumentInit) - // { - // return; - // } + if (!_store.IsDocumentInit) + { + return; + } ChangedObjectIds[e.ObjectId.ToString()] = 1; _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); @@ -148,12 +146,10 @@ private void SubscribeToRhinoEvents() RhinoDoc.DeleteRhinoObject += (_, e) => _topLevelExceptionHandler.CatchUnhandled(() => { - // NOTE: This does not work if rhino starts and opens a blank doc; - // These events always happen in a doc. Why guard agains a null doc? - // if (!_store.IsDocumentInit) - // { - // return; - // } + if (!_store.IsDocumentInit) + { + return; + } ChangedObjectIds[e.ObjectId.ToString()] = 1; _idleManager.SubscribeToIdle(nameof(RhinoSendBinding), RunExpirationChecks); @@ -163,6 +159,11 @@ private void SubscribeToRhinoEvents() RhinoDoc.RenderMaterialsTableEvent += (_, args) => _topLevelExceptionHandler.CatchUnhandled(() => { + if (!_store.IsDocumentInit) + { + return; + } + if (args is RhinoDoc.RenderMaterialAssignmentChangedEventArgs changedEventArgs) { ChangedObjectIds[changedEventArgs.ObjectId.ToString()] = 1; @@ -173,6 +174,11 @@ private void SubscribeToRhinoEvents() RhinoDoc.GroupTableEvent += (_, args) => _topLevelExceptionHandler.CatchUnhandled(() => { + if (!_store.IsDocumentInit) + { + return; + } + foreach (var obj in RhinoDoc.ActiveDoc.Groups.GroupMembers(args.GroupIndex)) { ChangedObjectIdsInGroupsOrLayers[obj.Id.ToString()] = 1; @@ -183,6 +189,11 @@ private void SubscribeToRhinoEvents() RhinoDoc.LayerTableEvent += (_, args) => _topLevelExceptionHandler.CatchUnhandled(() => { + if (!_store.IsDocumentInit) + { + return; + } + if ( args.EventType == LayerTableEventType.Deleted || args.EventType == LayerTableEventType.Current @@ -211,6 +222,11 @@ private void SubscribeToRhinoEvents() RhinoDoc.MaterialTableEvent += (_, args) => _topLevelExceptionHandler.CatchUnhandled(() => { + if (!_store.IsDocumentInit) + { + return; + } + if (args.EventType == MaterialTableEventType.Modified) { ChangedMaterialIndexes[args.Index] = 1; @@ -221,12 +237,10 @@ private void SubscribeToRhinoEvents() RhinoDoc.ModifyObjectAttributes += (_, e) => _topLevelExceptionHandler.CatchUnhandled(() => { - // NOTE: This does not work if rhino starts and opens a blank doc; - // These events always happen in a doc. Why guard agains a null doc? - // if (!_store.IsDocumentInit) - // { - // return; - // } + if (!_store.IsDocumentInit) + { + return; + } // NOTE: not sure yet we want to track every attribute changes yet. TBD // NOTE: we might want to track here user strings too (once we send them out), and more! @@ -244,12 +258,10 @@ private void SubscribeToRhinoEvents() RhinoDoc.ReplaceRhinoObject += (_, e) => _topLevelExceptionHandler.CatchUnhandled(() => { - // NOTE: This does not work if rhino starts and opens a blank doc; - // These events always happen in a doc. Why guard agains a null doc? - // if (!_store.IsDocumentInit) - // { - // return; - // } + if (!_store.IsDocumentInit) + { + return; + } ChangedObjectIds[e.NewRhinoObject.Id.ToString()] = 1; ChangedObjectIds[e.OldRhinoObject.Id.ToString()] = 1; From dbefb1b290f234243e130c185a7db229a96a9cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuzhan=20Koral?= <45078678+oguzhankoral@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:26:34 +0300 Subject: [PATCH 16/40] Null check before attempt to override view options (#474) --- .../Helpers/DisplayValueExtractor.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs index 52e861a06..406903982 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/Helpers/DisplayValueExtractor.cs @@ -240,20 +240,23 @@ private bool ShouldSetElementDisplayToTransparent(DB.Element element) /// private DB.Options OverrideViewOptions(DB.Element element, DB.Options currentOptions) { + // there is no point to progress if element category already null + if (element.Category is null) + { + return currentOptions; + } + var elementBuiltInCategory = element.Category.GetBuiltInCategory(); // Note: some elements do not get display values (you get invalid solids) unless we force the view detail level to be fine. This is annoying, but it's bad ux: people think the // elements are not there (they are, just invisible). if ( - element.Category is not null - && ( - elementBuiltInCategory == DB.BuiltInCategory.OST_PipeFitting - || elementBuiltInCategory == DB.BuiltInCategory.OST_PipeAccessory - || elementBuiltInCategory == DB.BuiltInCategory.OST_PlumbingFixtures + elementBuiltInCategory == DB.BuiltInCategory.OST_PipeFitting + || elementBuiltInCategory == DB.BuiltInCategory.OST_PipeAccessory + || elementBuiltInCategory == DB.BuiltInCategory.OST_PlumbingFixtures #if REVIT2024_OR_GREATER - || element is DB.Toposolid // note, brought back from 2.x.x. + || element is DB.Toposolid // note, brought back from 2.x.x. #endif - ) ) { currentOptions.DetailLevel = DB.ViewDetailLevel.Fine; // Force detail level to be fine From 01bc8bf929fbab57ca4e4e7444e7eab19ee6545d Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Thu, 9 Jan 2025 18:22:28 +0000 Subject: [PATCH 17/40] fix: stacked wall duplication when sending by view --- .../HostApp/ElementUnpacker.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/ElementUnpacker.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/ElementUnpacker.cs index bc3304998..b30ec74b0 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/ElementUnpacker.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/ElementUnpacker.cs @@ -31,7 +31,8 @@ public IEnumerable UnpackSelectionForConversion(IEnumerable se // Step 2: pack curtain wall elements, once we know the full extent of our flattened item list. // The behaviour we're looking for: // If parent wall is part of selection, does not select individual elements out. Otherwise, selects individual elements (Panels, Mullions) as atomic objects. - return PackCurtainWallElements(atomicObjects); + // NOTE: this also conditionally "packs" stacked wall elements if their parent is present. See detailed note inside the function. + return PackCurtainWallElementsAndStackedWalls(atomicObjects); } /// @@ -90,7 +91,7 @@ private List UnpackElements(IEnumerable elements) return unpackedElements.GroupBy(el => el.Id).Select(g => g.First()).ToList(); // no disinctBy in here sadly. } - private List PackCurtainWallElements(List elements) + private List PackCurtainWallElementsAndStackedWalls(List elements) { var ids = elements.Select(el => el.Id).ToArray(); var doc = _revitContext.UIApplication?.ActiveUIDocument.Document!; @@ -102,6 +103,12 @@ private List PackCurtainWallElements(List elements) && doc.GetElement(f.Host.Id) is Wall { CurtainGrid: not null } && ids.Contains(f.Host.Id) ) + // NOTE: It is required to explicitly skip stacked wall members because, when getting objects from a view, + // the api will return the wall parent and its stacked children walls separately. This does not happen + // via selection. Via category ("Walls") we do not get any parent wall, but just the components of the stacked wall separately. + // If you wonder why revit is driving people to insanity, this is one of those moments. + // See [CNX-851: Stacked Wall Duplicate Geometry or Materials not applied](https://linear.app/speckle/issue/CNX-851/stacked-wall-duplicate-geometry-or-materials-not-applied) + || (element is Wall { IsStackedWallMember: true } wall && ids.Contains(wall.StackedWallOwnerId)) ); return elements; } From c5d37a125075ef720ae1fba2ee2a8b11d5e66ca8 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Fri, 10 Jan 2025 09:37:15 +0000 Subject: [PATCH 18/40] Add custom assembly resolve for Navisworks (#478) * Add custom assembly resolve for Navisworks * format --- .../Plugin/DockableConnectorPane.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs index b779afe43..a06842db6 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Plugin/DockableConnectorPane.cs @@ -32,6 +32,8 @@ internal sealed class Connector : NAV.Plugins.DockPanePlugin public override Control CreateControlPane() { + AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolver.OnAssemblyResolve; + var services = new ServiceCollection(); services.Initialize(HostApplications.Navisworks, HostAppVersion.v2024); From 94104c23651aef986e73d1eb1a6a42338a8c7569 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Fri, 10 Jan 2025 13:59:59 +0000 Subject: [PATCH 19/40] NameAndRankValue now uses a type to get FullName to avoid conflicts (#475) * NameAndRankValue now uses a type to get FullName to avoid conflicts * Full namespace for tests --- .../ToHost/TopLevel/ArcToHostConverter.cs | 2 +- .../ToHost/TopLevel/CircleToHostConverter.cs | 2 +- .../ToHost/TopLevel/EllipseToHostConverter.cs | 2 +- .../ToHost/TopLevel/FallbackToHostConverter.cs | 2 +- .../ToHost/TopLevel/LineToHostConverter.cs | 2 +- .../ToHost/TopLevel/MeshToHostConverter.cs | 2 +- .../ToHost/TopLevel/PointToHostConverter.cs | 2 +- .../TopLevel/PolycurveToHostConverter.cs | 2 +- .../ToHost/TopLevel/PolylineToHostConverter.cs | 2 +- ...oreObjectsBaseToSpeckleTopLevelConverter.cs | 2 +- .../ToHost/Geometry/ArcToHostConverter.cs | 2 +- .../AutocadPolycurveToHostConverter.cs | 2 +- .../ToHost/Geometry/CircleToHostConverter.cs | 2 +- .../ToHost/Geometry/CurveToHostConverter.cs | 2 +- .../ToHost/Geometry/DataObjectConverter.cs | 2 +- .../ToHost/Geometry/EllipseToHostConverter.cs | 2 +- .../ToHost/Geometry/LineToHostConverter.cs | 2 +- .../ToHost/Geometry/MeshToHostConverter.cs | 2 +- .../ToHost/Geometry/PointToHostConverter.cs | 2 +- .../Geometry/PolycurveToHostConverter.cs | 2 +- .../ToHost/Geometry/PolylineToHostConverter.cs | 2 +- .../ToHost/Raw/ArcToHostRawConverter.cs | 2 +- .../Geometry/ArcToSpeckleConverter.cs | 2 +- .../Geometry/CircleToSpeckleConverter.cs | 2 +- .../Geometry/EllipseToSpeckleConverter.cs | 2 +- .../Geometry/LineToSpeckleConverter.cs | 2 +- .../Geometry/PointToSpeckleConverter.cs | 2 +- .../Geometry/PolyfaceMeshToSpeckleConverter.cs | 2 +- .../Geometry/Polyline2dToSpeckleConverter.cs | 2 +- .../Geometry/Polyline3dToSpeckleConverter.cs | 2 +- .../Geometry/PolylineToSpeckleConverter.cs | 2 +- .../Geometry/RegionToSpeckleConverter.cs | 2 +- .../Geometry/Solid3dToSpeckleConverter.cs | 2 +- .../Geometry/SplineToSpeckleConverter.cs | 2 +- .../Geometry/SubDMeshToSpeckleConverter.cs | 2 +- .../Geometry/SurfaceToSpeckleConverter.cs | 2 +- .../TopLevel/EtabsObjectToSpeckleConverter.cs | 2 +- .../CivilEntityToSpeckleTopLevelConverter.cs | 2 +- .../ModelItemTopLevelConverterToSpeckle.cs | 2 +- .../ModelCurveToSpeckleTopLevelConverter.cs | 2 +- .../PointcloudTopLevelConverterToSpeckle.cs | 2 +- .../RevitElementTopLevelConverterToSpeckle.cs | 2 +- .../TopLevel/ArcToHostTopLevelConverter.cs | 2 +- .../TopLevel/BrepToHostTopLevelConverter.cs | 2 +- .../TopLevel/BrepXToHostTopLevelConverter.cs | 6 +++--- .../TopLevel/CircleToHostTopLevelConverter.cs | 2 +- .../ToHost/TopLevel/DataObjectConverter.cs | 2 +- ...DisplayableObjectToHostTopLevelConverter.cs | 2 +- .../TopLevel/EllipseToHostTopLevelConverter.cs | 2 +- .../TopLevel/LineToHostTopLevelConverter.cs | 2 +- .../TopLevel/MeshToHostTopLevelConverter.cs | 2 +- .../NurbsCurveToHostTopLevelConverter.cs | 2 +- .../PointCloudToHostTopLevelConverter.cs | 2 +- .../TopLevel/PointToHostTopLevelConverter.cs | 2 +- .../PolycurveToHostTopLevelConverter.cs | 2 +- .../PolylineToHostTopLevelConverter.cs | 2 +- .../ToSpeckle/Raw/MeshToSpeckleConverter.cs | 2 +- .../BrepObjectToSpeckleTopLevelConverter.cs | 2 +- .../CurveObjectToSpeckleTopLevelConverter.cs | 2 +- ...xtrusionObjectToSpeckleTopLevelConverter.cs | 2 +- .../MeshObjectToSpeckleTopLevelConverter.cs | 2 +- ...intCloudObjectToSpeckleTopLevelConverter.cs | 2 +- .../PointObjectToSpeckleTopLevelConverter.cs | 2 +- .../SubDObjectToSpeckleTopLevelConverter.cs | 2 +- .../TopLevel/ModelObjectToSpeckleConverter.cs | 2 +- .../ConverterManagerTests.cs | 4 ++-- .../NameAndRankValueAttribute.cs | 12 +++--------- .../Registration/ConverterManager.cs | 7 ++++--- .../Registration/ServiceRegistration.cs | 18 +++++++++--------- 69 files changed, 85 insertions(+), 90 deletions(-) diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs index 83db8e40d..70656c175 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/ArcToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/CircleToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/CircleToHostConverter.cs index 993f84d9a..758d6a42f 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/CircleToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/CircleToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/EllipseToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/EllipseToHostConverter.cs index 27b87b537..7ca52d1eb 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/EllipseToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/EllipseToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/FallbackToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/FallbackToHostConverter.cs index 730dd09ab..b75d9b01b 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/FallbackToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/FallbackToHostConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(DisplayableObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(DisplayableObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class FallbackToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter, ACG.Multipatch> _meshListConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs index 47e6b5c9d..ec19f153c 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/LineToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class LineSingleToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/MeshToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/MeshToHostConverter.cs index cbb55f3ce..123c79c84 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/MeshToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/MeshToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class MeshToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter, ACG.Multipatch> _meshConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PointToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PointToHostConverter.cs index 6f7bd23f0..ef00a9307 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PointToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PointToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointToHostConverter : IToHostTopLevelConverter { private readonly ITypedConverter, ACG.Multipoint> _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs index fbda9459b..003bc2fa1 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolycurveToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolycurveToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly IRootToHostConverter _converter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs index b6842cdc9..38e5dcbd4 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/TopLevel/PolylineToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.ArcGIS3.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolylineToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs index 2bb4a2032..75c4a5bf2 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToSpeckle/TopLevel/CoreObjectsBaseToSpeckleTopLevelConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.ArcGIS3.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(AC.CoreObjectsBase), 0)] +[NameAndRankValue(typeof(AC.CoreObjectsBase), 0)] public class CoreObjectsBaseToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly DisplayValueExtractor _displayValueExtractor; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs index bc1b7fb1c..65f2ef5cb 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/ArcToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ArcToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _arcConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/AutocadPolycurveToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/AutocadPolycurveToHostConverter.cs index 3f98ed847..65a3028b5 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/AutocadPolycurveToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/AutocadPolycurveToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad2023.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Autocad.AutocadPolycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Autocad.AutocadPolycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class AutocadPolycurveToHostConverter : IToHostTopLevelConverter { private readonly ITypedConverter _polylineConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs index 67faf5769..aba0c711e 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CircleToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CircleToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CurveToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CurveToHostConverter.cs index 5da630ce9..299862754 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CurveToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/CurveToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.AutocadShared.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Curve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Curve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CurveToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _curveConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/DataObjectConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/DataObjectConverter.cs index e0fb67637..c758a2045 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/DataObjectConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/DataObjectConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.Rhino7.ToHost.TopLevel; -[NameAndRankValue(nameof(DataObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(DataObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DataObjectConverter : IToHostTopLevelConverter, ITypedConverter> { private readonly ITypedConverter _lineConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/EllipseToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/EllipseToHostConverter.cs index e179d15da..04572a8ef 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/EllipseToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/EllipseToHostConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class EllipseToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/LineToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/LineToHostConverter.cs index ab390a46a..a087a5c6b 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/LineToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/LineToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class LineToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs index 340a601c4..a3856168c 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/MeshToHostConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.Autocad.Geometry; -[NameAndRankValue(nameof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class MeshToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PointToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PointToHostConverter.cs index 4feb6cdcd..6f0efd5f0 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PointToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PointToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolycurveToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolycurveToHostConverter.cs index 3f1b9731d..e1c6aad43 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolycurveToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolycurveToHostConverter.cs @@ -9,7 +9,7 @@ namespace Speckle.Converters.AutocadShared.ToHost.Geometry; /// If polycurve segments are planar and only of type and , it can be represented as Polyline in Autocad. /// Otherwise we convert it as spline (list of ADB.Entity) that switch cases according to each segment type. /// -[NameAndRankValue(nameof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolycurveToHostConverter : IToHostTopLevelConverter { private readonly ITypedConverter _polylineConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolylineToHostConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolylineToHostConverter.cs index 9809303d0..a6c26bec5 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolylineToHostConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Geometry/PolylineToHostConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToHost.Geometry; -[NameAndRankValue(nameof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolylineToHostConverter : IToHostTopLevelConverter, ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/ArcToHostRawConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/ArcToHostRawConverter.cs index 6a68b43ac..a5d09151d 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/ArcToHostRawConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToHost/Raw/ArcToHostRawConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToHost.Raw; -[NameAndRankValue(nameof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ArcToHostRowConverter : ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs index e179f15fa..edbf962e4 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/ArcToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DBArcToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _arcConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs index 89415efd7..21f8c7e95 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/CircleToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DBCircleToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _circleConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs index 89d5b9af3..ec170697b 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/EllipseToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DBEllipseToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _ellipseConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs index ea4be5229..e9c0eb5b1 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/LineToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class LineToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _lineConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PointToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PointToSpeckleConverter.cs index 0dc4bc102..ffe163dcc 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PointToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PointToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.DBPoint), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.DBPoint), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs index 5e5cffd92..a8d23bbef 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolyfaceMeshToSpeckleConverter.cs @@ -11,7 +11,7 @@ namespace Speckle.Converters.Autocad.Geometry; /// /// The IToSpeckleTopLevelConverter inheritance should only expect database-resident objects. IRawConversion inheritance can expect non database-resident objects, when generated from other converters. /// -[NameAndRankValue(nameof(ADB.PolyFaceMesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.PolyFaceMesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DBPolyfaceMeshToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs index 519e7615f..e6cdfe890 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline2dToSpeckleConverter.cs @@ -14,7 +14,7 @@ namespace Speckle.Converters.Autocad.Geometry; /// of type and will have only one in . /// The IToSpeckleTopLevelConverter inheritance should only expect database-resident objects. IRawConversion inheritance can expect non database-resident objects, when generated from other converters. /// -[NameAndRankValue(nameof(ADB.Polyline2d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Polyline2d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class Polyline2dToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs index f01ff31f9..76218142d 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Polyline3dToSpeckleConverter.cs @@ -13,7 +13,7 @@ namespace Speckle.Converters.Autocad.Geometry; /// of type and will have only one in . /// The IToSpeckleTopLevelConverter inheritance should only expect database-resident Polyline2d objects. IRawConversion inheritance can expect non database-resident objects, when generated from other converters. /// -[NameAndRankValue(nameof(ADB.Polyline3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Polyline3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class Polyline3dToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs index d0a63cb02..da89a945b 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/PolylineToSpeckleConverter.cs @@ -10,7 +10,7 @@ namespace Speckle.Converters.Autocad.Geometry; /// /// is of type and will have only s and s in . /// -[NameAndRankValue(nameof(ADB.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolylineToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/RegionToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/RegionToSpeckleConverter.cs index 4723e50ac..72ba00eef 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/RegionToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/RegionToSpeckleConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad.Geometry; -[NameAndRankValue(nameof(ADB.Region), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Region), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class RegionToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter { private readonly ITypedConverter _brepConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs index f0989e1f2..02a8a840c 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/Solid3dToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.Geometry; -[NameAndRankValue(nameof(ADB.Solid3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Solid3d), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class Solid3dToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _solidConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs index 955096c7c..4512da61a 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SplineToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Autocad.ToSpeckle.Geometry; -[NameAndRankValue(nameof(ADB.Spline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Spline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class SplineToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _splineConverter; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs index 996b0e1db..608c31243 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SubDMeshToSpeckleConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad.Geometry; -[NameAndRankValue(nameof(ADB.SubDMesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.SubDMesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DBSubDMeshToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly IConverterSettingsStore _settingsStore; diff --git a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SurfaceToSpeckleConverter.cs b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SurfaceToSpeckleConverter.cs index e15d5f3e1..786a91ced 100644 --- a/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SurfaceToSpeckleConverter.cs +++ b/Converters/Autocad/Speckle.Converters.AutocadShared/ToSpeckle/Geometry/SurfaceToSpeckleConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Autocad.Geometry; -[NameAndRankValue(nameof(ADB.Surface), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ADB.Surface), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class SurfaceToSpeckleConverter : IToSpeckleTopLevelConverter, ITypedConverter { private readonly ITypedConverter _brepConverter; diff --git a/Converters/CSi/Speckle.Converters.ETABSShared/ToSpeckle/TopLevel/EtabsObjectToSpeckleConverter.cs b/Converters/CSi/Speckle.Converters.ETABSShared/ToSpeckle/TopLevel/EtabsObjectToSpeckleConverter.cs index 2bdda3d11..349a65ede 100644 --- a/Converters/CSi/Speckle.Converters.ETABSShared/ToSpeckle/TopLevel/EtabsObjectToSpeckleConverter.cs +++ b/Converters/CSi/Speckle.Converters.ETABSShared/ToSpeckle/TopLevel/EtabsObjectToSpeckleConverter.cs @@ -22,7 +22,7 @@ namespace Speckle.Converters.ETABSShared.ToSpeckle.TopLevel; /// * IApplicationPropertiesExtractor for ETABS-specific data /// 3. CreateTargetObject method ensures type-safe conversion to EtabsObject /// -[NameAndRankValue(nameof(CsiWrapperBase), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(CsiWrapperBase), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class EtabsObjectToSpeckleConverter : CsiObjectToSpeckleConverterBase { public EtabsObjectToSpeckleConverter( diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs index 6b16b85c3..c3a2acfde 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs @@ -9,7 +9,7 @@ namespace Speckle.Converters.Civil3dShared.ToSpeckle.BuiltElements; -[NameAndRankValue(nameof(CDB.Entity), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(CDB.Entity), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CivilEntityToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly IConverterSettingsStore _settingsStore; diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs index 17e3a89f2..1fb85b5d5 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/ToSpeckle/TopLevel/ModelItemTopLevelConverterToSpeckle.cs @@ -10,7 +10,7 @@ namespace Speckle.Converter.Navisworks.ToSpeckle; /// /// Converts Navisworks ModelItem objects to Speckle Base objects. /// -[NameAndRankValue(nameof(NAV.ModelItem), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(NAV.ModelItem), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ModelItemToToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly StandardPropertyHandler _standardHandler; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs index 3f1f25448..2be4bb2bd 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/ModelCurveToSpeckleTopLevelConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; // Converts model curves to regular speckle curves, since we aren't receiving them and the only property used in V2 was the linestyle (not element ids or parameters). Don't see a need to handle these differently from regular geometry. -[NameAndRankValue(nameof(DB.ModelCurve), 0)] +[NameAndRankValue(typeof(DB.ModelCurve), 0)] public class ModelCurveToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _curveConverter; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/PointcloudTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/PointcloudTopLevelConverterToSpeckle.cs index 70d5403cc..3cd9047c6 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/PointcloudTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/PointcloudTopLevelConverterToSpeckle.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; -[NameAndRankValue(nameof(DB.PointCloudInstance), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(DB.PointCloudInstance), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public sealed class PointcloudTopLevelConverterToSpeckle : IToSpeckleTopLevelConverter { private readonly IConverterSettingsStore _converterSettings; diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs index 223cb5c0e..8e58a17f5 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs @@ -10,7 +10,7 @@ namespace Speckle.Converters.RevitShared.ToSpeckle; -[NameAndRankValue(nameof(DB.Element), 0)] +[NameAndRankValue(typeof(DB.Element), 0)] public class ElementTopLevelConverterToSpeckle : IToSpeckleTopLevelConverter { private readonly DisplayValueExtractor _displayValueExtractor; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs index 3ebd21b35..3edf4dccd 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/ArcToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Arc), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ArcToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public ArcToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs index a20d9f1c3..d7908ec6d 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Brep), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Brep), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class BrepToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public BrepToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepXToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepXToHostTopLevelConverter.cs index 08f1c6902..d7ba18740 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepXToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/BrepXToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.BrepX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.BrepX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class BrepXToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter> { public BrepXToHostTopLevelConverter( @@ -13,7 +13,7 @@ public BrepXToHostTopLevelConverter( : base(settingsStore, geometryBaseConverter) { } } -[NameAndRankValue(nameof(SOG.SubDX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.SubDX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class SubDXToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter> { public SubDXToHostTopLevelConverter( @@ -23,7 +23,7 @@ public SubDXToHostTopLevelConverter( : base(settingsStore, geometryBaseConverter) { } } -[NameAndRankValue(nameof(SOG.ExtrusionX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.ExtrusionX), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ExtrusionXToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter> { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs index 17e60e248..73de699da 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/CircleToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Circle), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CircleToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public CircleToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DataObjectConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DataObjectConverter.cs index cf4b4f935..0db806137 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DataObjectConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DataObjectConverter.cs @@ -7,7 +7,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(DataObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(DataObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DataObjectConverter : IToHostTopLevelConverter, ITypedConverter> diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs index 92187942c..24bde1354 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/DisplayableObjectToHostTopLevelConverter.cs @@ -6,7 +6,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(DisplayableObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(DisplayableObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class DisplayableObjectConverter : IToHostTopLevelConverter, ITypedConverter> diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs index 24851e534..68cf3eab7 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/EllipseToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Ellipse), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class EllipseToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public EllipseToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs index 315fcd611..411c9fc87 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/LineToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Line), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class LineToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public LineToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs index db768ad0d..9b56b86e9 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/MeshToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class MeshToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public MeshToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs index 2c507f6ac..9000b281a 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/NurbsCurveToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Curve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Curve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class NurbsCurveToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public NurbsCurveToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs index 99439d9c2..2f7589290 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointCloudToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Pointcloud), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Pointcloud), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointCloudToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs index 2211f8227..3b8b0f841 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PointToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Point), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PointToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs index 7a523999d..84f178e54 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolycurveToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polycurve), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolycurveToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { public PolycurveToHostTopLevelConverter( diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs index 6323f955a..d8608ad78 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToHost/TopLevel/PolylineToHostTopLevelConverter.cs @@ -3,7 +3,7 @@ namespace Speckle.Converters.Rhino.ToHost.TopLevel; -[NameAndRankValue(nameof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SOG.Polyline), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PolylineToHostTopLevelConverter : SpeckleToHostGeometryBaseTopLevelConverter { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs index 54c68c543..b8e36647f 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/Raw/MeshToSpeckleConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.Raw; -[NameAndRankValue(nameof(RG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(RG.Mesh), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class MeshToSpeckleConverter : ITypedConverter { private readonly ITypedConverter _pointConverter; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/BrepObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/BrepObjectToSpeckleTopLevelConverter.cs index c79440bfe..1f5b97268 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/BrepObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/BrepObjectToSpeckleTopLevelConverter.cs @@ -7,7 +7,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(BrepObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(BrepObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class BrepObjectToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _meshConverter; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/CurveObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/CurveObjectToSpeckleTopLevelConverter.cs index 6db96b2bd..cb5266954 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/CurveObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/CurveObjectToSpeckleTopLevelConverter.cs @@ -5,7 +5,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(CurveObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(CurveObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CurveObjectToSpeckleTopLevelConverter : RhinoObjectToSpeckleTopLevelConverter { public CurveObjectToSpeckleTopLevelConverter(ITypedConverter conversion) diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/ExtrusionObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/ExtrusionObjectToSpeckleTopLevelConverter.cs index 255ed0162..4c5c9abd8 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/ExtrusionObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/ExtrusionObjectToSpeckleTopLevelConverter.cs @@ -7,7 +7,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(ExtrusionObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(ExtrusionObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ExtrusionObjectToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _meshConverter; diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/MeshObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/MeshObjectToSpeckleTopLevelConverter.cs index dc528dab3..92a4675b1 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/MeshObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/MeshObjectToSpeckleTopLevelConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(MeshObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(MeshObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class MeshObjectToSpeckleTopLevelConverter : RhinoObjectToSpeckleTopLevelConverter { public MeshObjectToSpeckleTopLevelConverter(ITypedConverter conversion) diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointCloudObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointCloudObjectToSpeckleTopLevelConverter.cs index a5af1cfaa..e26ac0fd1 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointCloudObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointCloudObjectToSpeckleTopLevelConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(PointCloudObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(PointCloudObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointCloudObjectToSpeckleTopLevelConverter : RhinoObjectToSpeckleTopLevelConverter { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointObjectToSpeckleTopLevelConverter.cs index 4f480ef2e..3c5493acb 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/PointObjectToSpeckleTopLevelConverter.cs @@ -4,7 +4,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(PointObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(PointObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class PointObjectToSpeckleTopLevelConverter : RhinoObjectToSpeckleTopLevelConverter { diff --git a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/SubDObjectToSpeckleTopLevelConverter.cs b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/SubDObjectToSpeckleTopLevelConverter.cs index f86839467..20669432f 100644 --- a/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/SubDObjectToSpeckleTopLevelConverter.cs +++ b/Converters/Rhino/Speckle.Converters.RhinoShared/ToSpeckle/TopLevel/SubDObjectToSpeckleTopLevelConverter.cs @@ -7,7 +7,7 @@ namespace Speckle.Converters.Rhino.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(SubDObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(SubDObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class SubDObjectToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter { private readonly ITypedConverter _meshConverter; diff --git a/Converters/Tekla/Speckle.Converters.TeklaShared/ToSpeckle/TopLevel/ModelObjectToSpeckleConverter.cs b/Converters/Tekla/Speckle.Converters.TeklaShared/ToSpeckle/TopLevel/ModelObjectToSpeckleConverter.cs index 64ba7bf73..759b70e1a 100644 --- a/Converters/Tekla/Speckle.Converters.TeklaShared/ToSpeckle/TopLevel/ModelObjectToSpeckleConverter.cs +++ b/Converters/Tekla/Speckle.Converters.TeklaShared/ToSpeckle/TopLevel/ModelObjectToSpeckleConverter.cs @@ -7,7 +7,7 @@ namespace Speckle.Converters.TeklaShared.ToSpeckle.TopLevel; -[NameAndRankValue(nameof(TSM.ModelObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +[NameAndRankValue(typeof(TSM.ModelObject), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class ModelObjectToSpeckleConverter : IToSpeckleTopLevelConverter { private readonly IConverterSettingsStore _settingsStore; diff --git a/Sdk/Speckle.Converters.Common.Tests/ConverterManagerTests.cs b/Sdk/Speckle.Converters.Common.Tests/ConverterManagerTests.cs index fedef0ee7..6cda24beb 100644 --- a/Sdk/Speckle.Converters.Common.Tests/ConverterManagerTests.cs +++ b/Sdk/Speckle.Converters.Common.Tests/ConverterManagerTests.cs @@ -36,7 +36,7 @@ public void Test_Null() [Test] public void Test_NoFallback() { - var sut = SetupManager("String", typeof(TestConverter)); + var sut = SetupManager("System.String", typeof(TestConverter)); var converter = sut.ResolveConverter(typeof(string), false); converter.Should().NotBeNull(); } @@ -44,7 +44,7 @@ public void Test_NoFallback() [Test] public void Test_Fallback() { - var sut = SetupManager("Object", typeof(TestConverter)); + var sut = SetupManager("System.Object", typeof(TestConverter)); var converter = sut.ResolveConverter(typeof(string), true); converter.Should().NotBeNull(); } diff --git a/Sdk/Speckle.Converters.Common/NameAndRankValueAttribute.cs b/Sdk/Speckle.Converters.Common/NameAndRankValueAttribute.cs index 54f380eeb..cea30ccac 100644 --- a/Sdk/Speckle.Converters.Common/NameAndRankValueAttribute.cs +++ b/Sdk/Speckle.Converters.Common/NameAndRankValueAttribute.cs @@ -2,17 +2,11 @@ // POC: maybe better to put in utils/reflection [AttributeUsage(AttributeTargets.Class)] -public sealed class NameAndRankValueAttribute : Attribute +public sealed class NameAndRankValueAttribute(Type type, int rank) : Attribute { // DO NOT CHANGE! This is the base, lowest rank for a conversion public const int SPECKLE_DEFAULT_RANK = 0; - public string Name { get; private set; } - public int Rank { get; private set; } - - public NameAndRankValueAttribute(string name, int rank) - { - Name = name; - Rank = rank; - } + public Type Type { get; private set; } = type; + public int Rank { get; private set; } = rank; } diff --git a/Sdk/Speckle.Converters.Common/Registration/ConverterManager.cs b/Sdk/Speckle.Converters.Common/Registration/ConverterManager.cs index 49a1558fd..ad90785ec 100644 --- a/Sdk/Speckle.Converters.Common/Registration/ConverterManager.cs +++ b/Sdk/Speckle.Converters.Common/Registration/ConverterManager.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using Microsoft.Extensions.DependencyInjection; +using Speckle.Sdk.Common; using Speckle.Sdk.Common.Exceptions; namespace Speckle.Converters.Common.Registration; @@ -14,7 +15,7 @@ public T ResolveConverter(Type type, bool recursive = true) var currentType = type; while (true) { - var typeName = currentType.Name; + var typeName = currentType.FullName.NotNull(); var converter = GetConverterByType(typeName); if (converter is null && recursive) { @@ -37,9 +38,9 @@ public T ResolveConverter(Type type, bool recursive = true) } } - private T? GetConverterByType(string typeName) + private T? GetConverterByType(string fullName) { - if (converterTypes.TryGetValue(typeName, out var converter)) + if (converterTypes.TryGetValue(fullName, out var converter)) { return (T)ActivatorUtilities.CreateInstance(serviceProvider, converter); } diff --git a/Sdk/Speckle.Converters.Common/Registration/ServiceRegistration.cs b/Sdk/Speckle.Converters.Common/Registration/ServiceRegistration.cs index d294b909a..254bb2004 100644 --- a/Sdk/Speckle.Converters.Common/Registration/ServiceRegistration.cs +++ b/Sdk/Speckle.Converters.Common/Registration/ServiceRegistration.cs @@ -44,41 +44,41 @@ Assembly converterAssembly public static void AddConverters(this IServiceCollection serviceCollection, Assembly converterAssembly) { ConcurrentDictionary converterTypes = new(); - var types = converterAssembly.ExportedTypes.Where(x => x.GetInterfaces().Contains(typeof(T))); + var exportedTypes = converterAssembly.ExportedTypes.Where(x => x.GetInterfaces().Contains(typeof(T))); // we only care about named types - var byName = types + var byName = exportedTypes .Where(x => x.GetCustomAttribute() != null) .Select(x => { var nameAndRank = x.GetCustomAttribute().NotNull(); - return (name: nameAndRank.Name, rank: nameAndRank.Rank, type: x); + return (Type: nameAndRank.Type, Rank: nameAndRank.Rank, Converter: x); }) .ToList(); // we'll register the types accordingly - var names = byName.Select(x => x.name).Distinct(); - foreach (string name in names) + var types = byName.Select(x => x.Type).Distinct(); + foreach (Type type in types) { - var namedTypes = byName.Where(x => x.name == name).OrderByDescending(y => y.rank).ToList(); + var namedTypes = byName.Where(x => x.Type == type).OrderByDescending(y => y.Rank).ToList(); // first type found var first = namedTypes[0]; // POC: may need to be instance per lifecycle scope - converterTypes.TryAdd(first.name, first.type); + converterTypes.TryAdd(first.Type.FullName.NotNull(), first.Converter); // POC: not sure yet if... // * This should be an array of types // * Whether the scope should be modified or modifiable // * Whether this is in the write project... hmmm // POC: IsAssignableFrom() - var secondaryType = first.type.GetInterface(typeof(ITypedConverter<,>).Name); + var secondaryType = first.Type.GetInterface(typeof(ITypedConverter<,>).Name); // POC: should we explode if no found? if (secondaryType != null) { - converterTypes.TryAdd(first.name, secondaryType); + converterTypes.TryAdd(first.Type.FullName, secondaryType); } // register subsequent types with rank From 1d910bfc45a1d63d2aacbf7b6e1be823ee839662 Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Fri, 10 Jan 2025 14:22:42 +0000 Subject: [PATCH 20/40] fix(civil): adds top level cogopoint converter (#476) * adds top level cogopoint converter * change to typeof --------- Co-authored-by: Adam Hathcock --- .../Civil3dRootToSpeckleConverter.cs | 2 + ...Speckle.Converters.Civil3dShared.projitems | 1 + .../Point3dCollectionToSpeckleRawConverter.cs | 7 +- .../CivilEntityToSpeckleTopLevelConverter.cs | 2 +- .../CogoPointToSpeckleTopLevelConverter.cs | 65 +++++++++++++++++++ 5 files changed, 70 insertions(+), 7 deletions(-) create mode 100644 Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CogoPointToSpeckleTopLevelConverter.cs diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToSpeckleConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToSpeckleConverter.cs index aefb201ac..fd056b5f2 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToSpeckleConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Civil3dRootToSpeckleConverter.cs @@ -34,6 +34,8 @@ public Base Convert(object target) object objectToConvert = dbObject; // check first for civil type objects + // POC: some classes (eg Civil.DatabaseServices.CogoPoint) actually inherit from Autocad.DatabaseServices.Entity instead of Civil!! + // These need top level converters in Civil for now, but in the future we should implement a EntityToSpeckleTopLevelConverter for Autocad as well. if (target is CDB.Entity civilEntity) { type = civilEntity.GetType(); diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems index 0e98b9c50..0ab60d801 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/Speckle.Converters.Civil3dShared.projitems @@ -23,6 +23,7 @@ + diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/Point3dCollectionToSpeckleRawConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/Point3dCollectionToSpeckleRawConverter.cs index b2c29160b..53ab432db 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/Point3dCollectionToSpeckleRawConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/Raw/Point3dCollectionToSpeckleRawConverter.cs @@ -5,15 +5,10 @@ namespace Speckle.Converters.Civil3dShared.ToSpeckle.Raw; public class Point3dCollectionToSpeckleRawConverter : ITypedConverter { - private readonly ITypedConverter _pointConverter; private readonly IConverterSettingsStore _settingsStore; - public Point3dCollectionToSpeckleRawConverter( - ITypedConverter pointConverter, - IConverterSettingsStore settingsStore - ) + public Point3dCollectionToSpeckleRawConverter(IConverterSettingsStore settingsStore) { - _pointConverter = pointConverter; _settingsStore = settingsStore; } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs index c3a2acfde..a98c9a0cd 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CivilEntityToSpeckleTopLevelConverter.cs @@ -7,7 +7,7 @@ using Speckle.Sdk; using Speckle.Sdk.Models; -namespace Speckle.Converters.Civil3dShared.ToSpeckle.BuiltElements; +namespace Speckle.Converters.Civil3dShared.ToSpeckle.TopLevel; [NameAndRankValue(typeof(CDB.Entity), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] public class CivilEntityToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter diff --git a/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CogoPointToSpeckleTopLevelConverter.cs b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CogoPointToSpeckleTopLevelConverter.cs new file mode 100644 index 000000000..461f97f56 --- /dev/null +++ b/Converters/Civil3d/Speckle.Converters.Civil3dShared/ToSpeckle/TopLevel/CogoPointToSpeckleTopLevelConverter.cs @@ -0,0 +1,65 @@ +using Speckle.Converters.Civil3dShared.Extensions; +using Speckle.Converters.Common; +using Speckle.Converters.Common.Objects; +using Speckle.Objects.Data; +using Speckle.Sdk; +using Speckle.Sdk.Models; + +namespace Speckle.Converters.Civil3dShared.ToSpeckle.TopLevel; + +/// +/// This top level converter is needed because the namespace of CogoPoint is Autodesk.Civil.DatabaseServices, but the inheritance of CogoPoint is Autodesk.Autocad.Entity +/// This means cogo points will *not* be picked up by the top level civil entity converter. +/// POC: implementing a top level autocad entity converter can probably replace this converter. +/// +[NameAndRankValue(typeof(CDB.CogoPoint), NameAndRankValueAttribute.SPECKLE_DEFAULT_RANK)] +public class CogoPointToSpeckleTopLevelConverter : IToSpeckleTopLevelConverter +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ITypedConverter _pointConverter; + + public CogoPointToSpeckleTopLevelConverter( + IConverterSettingsStore settingsStore, + ITypedConverter pointConverter + ) + { + _settingsStore = settingsStore; + _pointConverter = pointConverter; + } + + public Base Convert(object target) => Convert((CDB.CogoPoint)target); + + public Civil3dObject Convert(CDB.CogoPoint target) + { + string name = ""; + try + { + name = target.PointName; + } + catch (Autodesk.Civil.CivilException e) when (!e.IsFatal()) { } // throws if name doesn't exist + + // extract display value as point + SOG.Point displayPoint = _pointConverter.Convert(target.Location); + + Civil3dObject civilObject = + new() + { + name = name, + type = target.GetType().ToString().Split('.').Last(), + baseCurves = null, + elements = new(), + displayValue = new() { displayPoint }, + properties = new(), + units = _settingsStore.Current.SpeckleUnits, + applicationId = target.Id.GetSpeckleApplicationId() + }; + + // add additional class properties + civilObject["pointNumber"] = target.PointNumber; + civilObject["northing"] = target.Northing; + //civilObject["latitude"] = target.Latitude; // might not be necessary, and also sometimes throws if transforms are not enabled + //civilObject["longitude"] = target.Longitude; // might not be necessary, and also sometimes throws if transforms are not enabled + + return civilObject; + } +} From 98cfebf5bca3815b980887d917f929d60390c397 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 18:51:05 +0000 Subject: [PATCH 21/40] feat: cleans up categories and prevents (most) unsupported/unnecessary element sending --- .../HostApp/SupportedCategoriesUtils.cs | 21 +++++++++++++++++++ .../Send/Filters/RevitCategoriesFilter.cs | 6 +++++- .../Operations/Send/RevitRootObjectBuilder.cs | 18 +++++++++++++--- .../Speckle.Connectors.RevitShared.projitems | 1 + 4 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs new file mode 100644 index 000000000..3a15ddff9 --- /dev/null +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs @@ -0,0 +1,21 @@ +using Autodesk.Revit.DB; + +namespace Speckle.Connectors.Revit.HostApp; + +public static class SupportedCategoriesUtils +{ + /// + /// Filters out all categories besides Model categories. This utility should be used + /// to clean any elements we might want to send pre-conversion as well as in what categories + /// to display in our category filter. + /// + /// + /// + public static bool IsSupportedCategory(Category category) + { + return ( + category.CategoryType == CategoryType.Model + // || category.CategoryType == CategoryType.AnalyticalModel + ) && category.IsVisibleInUI; + } +} diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs index 25e3d017c..5a3f9b3ee 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitCategoriesFilter.cs @@ -2,6 +2,7 @@ using Speckle.Connectors.DUI.Exceptions; using Speckle.Connectors.DUI.Models.Card.SendFilter; using Speckle.Connectors.DUI.Utils; +using Speckle.Connectors.Revit.HostApp; using Speckle.Converters.RevitShared.Helpers; namespace Speckle.Connectors.RevitShared.Operations.Send.Filters; @@ -69,7 +70,10 @@ private void GetCategories() foreach (Category category in _doc.Settings.Categories) { - categories.Add(new CategoryData(category.Name, category.Id.ToString())); + if (SupportedCategoriesUtils.IsSupportedCategory(category)) + { + categories.Add(new CategoryData(category.Name, category.Id.ToString())); + } } AvailableCategories = categories; diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index aa9b467cb..c3bb99516 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -53,15 +53,27 @@ CancellationToken cancellationToken foreach (var id in objects) { var el = converterSettings.Current.Document.GetElement(id); - if (el != null) + if (el == null) { - revitElements.Add(el); + continue; } + + if (el.Category == null) + { + continue; + } + + if (!SupportedCategoriesUtils.IsSupportedCategory(el.Category)) + { + continue; + } + + revitElements.Add(el); } if (revitElements.Count == 0) { - throw new SpeckleSendFilterException("No objects were found. Please update your send filter!"); + throw new SpeckleSendFilterException("No objects were found. Please update your publish filter!"); } List results = new(revitElements.Count); diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems b/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems index 5293ad708..890736c53 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Speckle.Connectors.RevitShared.projitems @@ -22,6 +22,7 @@ + From 165c0c9f0dfceb56d3eb7ef13fc4767b2bad10a6 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 18:51:47 +0000 Subject: [PATCH 22/40] feat: cleans up views --- .../Operations/Send/Filters/RevitViewsFilter.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs index d5ae8f0e9..23ef2c874 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs @@ -88,6 +88,18 @@ private void GetViews() .OfClass(typeof(View)) .Cast() .Where(v => !v.IsTemplate) + .Where(v => !v.IsModifiable || !v.IsAssemblyView) + .Where(v => + v.ViewType + is ViewType.FloorPlan + or ViewType.Elevation + or ViewType.Rendering + or ViewType.Section + or ViewType.ThreeD + or ViewType.Detail + or ViewType.CeilingPlan + or ViewType.AreaPlan + ) .Select(v => v.ViewType.ToString() + " - " + v.Name.ToString()) .ToList(); AvailableViews = views; From 25e37e257e6112dc89a60c929834db4fde1681f6 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 18:52:13 +0000 Subject: [PATCH 23/40] fix/performance: prevents endless throws for elements with invalid locations --- .../TopLevel/RevitElementTopLevelConverterToSpeckle.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs index 8e58a17f5..7ff3fbd33 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs @@ -73,7 +73,7 @@ public RevitObject Convert(DB.Element target) // get location if any Base? convertedLocation = null; - if (target.Location is DB.Location location) // location can be null + if (target.Location is DB.Location location and (DB.LocationCurve or DB.LocationPoint)) // location can be null { try { From 9466d8b88308f9ecbaf17e0b62a1f60e8567dcd0 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 19:26:02 +0000 Subject: [PATCH 24/40] fix: review comment --- .../Operations/Send/RevitRootObjectBuilder.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index c3bb99516..1983ba735 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -48,7 +48,7 @@ CancellationToken cancellationToken rootObject["units"] = converterSettings.Current.SpeckleUnits; var revitElements = new List(); - + List results = new(revitElements.Count); // Convert ids to actual revit elements foreach (var id in objects) { @@ -65,6 +65,15 @@ CancellationToken cancellationToken if (!SupportedCategoriesUtils.IsSupportedCategory(el.Category)) { + results.Add( + new( + Status.WARNING, + el.UniqueId, + el.Category.Name, + null, + new SpeckleException($"Category {el.Category.Name} is not supported.") + ) + ); continue; } @@ -76,8 +85,6 @@ CancellationToken cancellationToken throw new SpeckleSendFilterException("No objects were found. Please update your publish filter!"); } - List results = new(revitElements.Count); - // Unpack groups (& other complex data structures) var atomicObjects = elementUnpacker.UnpackSelectionForConversion(revitElements).ToList(); From 87ffe5b5f82e8949060ee25db4fc310300d54a61 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 19:27:53 +0000 Subject: [PATCH 25/40] fix: revit 2022 error --- .../Operations/Send/Filters/RevitViewsFilter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs index 23ef2c874..ac54ab0c6 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/Filters/RevitViewsFilter.cs @@ -88,7 +88,7 @@ private void GetViews() .OfClass(typeof(View)) .Cast() .Where(v => !v.IsTemplate) - .Where(v => !v.IsModifiable || !v.IsAssemblyView) + .Where(v => !v.IsAssemblyView) .Where(v => v.ViewType is ViewType.FloorPlan From 825945a54772d5f3cea8a3949452b4641122e972 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 19:55:13 +0000 Subject: [PATCH 26/40] fix: ignoring extra categories we cannot support correctly --- .../HostApp/SupportedCategoriesUtils.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs index 3a15ddff9..911f9d67d 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs @@ -16,6 +16,9 @@ public static bool IsSupportedCategory(Category category) return ( category.CategoryType == CategoryType.Model // || category.CategoryType == CategoryType.AnalyticalModel - ) && category.IsVisibleInUI; + ) + && category.BuiltInCategory != BuiltInCategory.OST_AreaSchemes + && category.BuiltInCategory != BuiltInCategory.OST_AreaSchemeLines + && category.IsVisibleInUI; } } From 745886e9dd5c77153b9d98877dbef0e393dd28d5 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 20:05:32 +0000 Subject: [PATCH 27/40] chore: adds comment i missed out on earlier --- .../TopLevel/RevitElementTopLevelConverterToSpeckle.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs index 7ff3fbd33..cac374104 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/TopLevel/RevitElementTopLevelConverterToSpeckle.cs @@ -81,6 +81,9 @@ public RevitObject Convert(DB.Element target) } catch (ValidationException) { + // NOTE: i've improved the if check above to make sure we never reach here + // we were throwing a lot here for various elements (e.g. floors) and we would + // be slowing things down // location was not a supported, do not attach to base element } } From 49ef7d1353b25846911147a15d80a9b4df6cb033 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Fri, 10 Jan 2025 20:37:51 +0000 Subject: [PATCH 28/40] fix: revit 2022 --- .../HostApp/SupportedCategoriesUtils.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs index 911f9d67d..192952c8a 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/SupportedCategoriesUtils.cs @@ -17,8 +17,13 @@ public static bool IsSupportedCategory(Category category) category.CategoryType == CategoryType.Model // || category.CategoryType == CategoryType.AnalyticalModel ) +#if REVIT_2023_OR_GREATER && category.BuiltInCategory != BuiltInCategory.OST_AreaSchemes && category.BuiltInCategory != BuiltInCategory.OST_AreaSchemeLines +#else + && category.Name != "OST_AreaSchemeLines" + && category.Name != "OST_AreaSchemes" +#endif && category.IsVisibleInUI; } } From 029e10b661f5d19bc1e133eacb2989a0b79aa3c9 Mon Sep 17 00:00:00 2001 From: KatKatKateryna <89912278+KatKatKateryna@users.noreply.github.com> Date: Mon, 13 Jan 2025 11:22:37 +0000 Subject: [PATCH 29/40] fix path encoding (#481) * fix path encoding * add comments * more compact --- .../ArcGISConversionSettingsFactory.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs index e0464be1b..d1aa36b1e 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ArcGISConversionSettingsFactory.cs @@ -60,15 +60,15 @@ or System.Security.SecurityException public Uri ValidateDatabasePath(Uri originalGatabasePath) { var fGdbName = originalGatabasePath.Segments[^1]; - var parentFolder = Path.GetDirectoryName(originalGatabasePath.AbsolutePath); - if (parentFolder == null) - { - // POC: customize the exception type - throw new ArgumentException($"Invalid path: {originalGatabasePath}"); - } + // Uri.AbsolutePath will return escaped string (replacing spaces), we need them back via .UnescapeDataString + var parentFolder = Uri.UnescapeDataString( + Path.GetDirectoryName(originalGatabasePath.AbsolutePath) + ?? throw new ArgumentException($"Invalid path: {originalGatabasePath}") + ); Uri databasePath = originalGatabasePath; Item folderToAdd = ItemFactory.Instance.Create(parentFolder); + if (folderToAdd is null) { // ArcGIS API doesn't show it as nullable, but it is @@ -133,7 +133,10 @@ public Uri ValidateDatabasePath(Uri originalGatabasePath) public Uri AddDatabaseToProject(Uri databasePath) { // Add a folder connection to a project - var parentFolder = Path.GetDirectoryName(databasePath.AbsolutePath); + // Uri.AbsolutePath will return escaped string (replacing spaces), we need them back via .UnescapeDataString + var parentFolder = Uri.UnescapeDataString( + Path.GetDirectoryName(databasePath.AbsolutePath) ?? throw new ArgumentException($"Invalid path: {databasePath}") + ); var fGdbName = databasePath.Segments[^1]; Item folderToAdd = ItemFactory.Instance.Create(parentFolder); Project.Current.AddItem(folderToAdd as IProjectItem); From 11327cf544fb224380509e6385dba9dfa792eddc Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Mon, 13 Jan 2025 12:13:22 +0000 Subject: [PATCH 30/40] Update SDK to 225 (#477) * Update SDK to 223 * update to 225 --- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 32 +++++----- .../packages.lock.json | 64 +++++++++---------- .../Speckle.Connectors.DUI/packages.lock.json | 28 ++++---- Directory.Packages.props | 6 +- .../packages.lock.json | 44 ++++++------- .../packages.lock.json | 28 ++++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 44 ++++++------- 62 files changed, 953 insertions(+), 953 deletions(-) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index b6c3b76af..dfe792a20 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -231,9 +231,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -241,8 +241,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -319,14 +319,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index c4abf49ba..f2ec9f452 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index a5cc3dc76..003e337af 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 202c4482d..8fe8eff58 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 2083c5e6b..93347c512 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -256,7 +256,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -294,18 +294,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -314,14 +314,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 7f6a123aa..e5b73b85a 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index 18e0c9e85..1d2466451 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index d08e73d6b..c31bfb247 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 230ced370..e86f2e788 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -304,18 +304,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -324,14 +324,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 476ab3a9c..90f179d80 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.etabs21": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 3851792c8..ac14a8a80 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.etabs22": { @@ -292,18 +292,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -312,14 +312,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 83c00e238..94fdc7699 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2020": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index d1ac83ed6..5267a4c3b 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2021": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index 7c3410b44..10e8694da 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2022": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index 2ea7cf269..2fed5ca7e 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2023": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index 482235209..ffcdaee00 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2024": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 5fe4c264c..d0cd0bac0 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -47,11 +47,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -279,9 +279,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -289,8 +289,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -307,7 +307,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.navisworks2025": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index 2549b2274..35a9b73a7 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.revit2022": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index f3689645a..f7ff09958 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.revit2023": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index 294096e7f..a0bf6420b 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.revit2024": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index 04dc69d16..6cc730552 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -242,9 +242,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -252,8 +252,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.revit2025": { @@ -302,11 +302,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Revit.API": { @@ -317,9 +317,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -328,14 +328,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 8316da2a7..42b1c9562 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.rhino7": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index de3c94f68..0bab2473e 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.converters.rhino8": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index a84d982a2..3a444c27f 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Tekla.Structures.Dialog": { @@ -332,9 +332,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -342,8 +342,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -368,7 +368,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -406,9 +406,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -418,14 +418,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index 99a5a76bf..596c6b44f 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Tekla.Structures.Dialog": { @@ -413,9 +413,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -423,8 +423,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -449,7 +449,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -487,9 +487,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -499,14 +499,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json index 4f555fd8c..055c8343b 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json @@ -224,7 +224,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -247,18 +247,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -268,14 +268,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 2334e2e4d..824354641 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index 1da22dfe0..aad523137 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index 0c4fbd6fa..5ca3b7b5b 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -330,18 +330,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -351,14 +351,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 4e8b517b0..7608d43c7 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -306,14 +306,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index c571aaebf..4474fbd06 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 5e06f3ca2..dbec0040f 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 616aaef6b..946fba1d2 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 4f60ee718..41bf751c5 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index 1ee371d53..c13271016 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 6bf934eec..1c95ea266 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui.webview": { @@ -257,7 +257,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -315,14 +315,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index 325e14da8..882c8b15c 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index 39d61993f..9a5c63887 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index 0b0bdccfc..5e55f83f2 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index 39e870235..7709491ea 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index 1be03520c..0aa97a2a2 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index 40994dc35..f15e709cd 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json index 7c031341c..a44cac6f3 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index d1d879776..cc81c37b7 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json index bebb50516..d18b89445 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index 80fba2f44..9197a23bb 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index 755db05bc..4b314cdcb 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index 19527fb68..d3121d76b 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index dc2eeaa80..c2644530a 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index b6ce376c7..d6f536ed8 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index 7589b2f31..680fdec06 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 7a5767db1..4dd90abe3 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index d6e7e3e1f..62f169967 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -323,18 +323,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -344,14 +344,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index 287a72ae6..6a45afe38 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "Microsoft.Extensions.Logging": { @@ -364,18 +364,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index 0a3778422..193dc537c 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -334,8 +334,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -377,18 +377,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -397,14 +397,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 708cee5ed..248733515 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -310,18 +310,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -331,14 +331,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net6.0-windows7.0": { @@ -565,9 +565,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.dui": { @@ -575,8 +575,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -611,18 +611,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -632,14 +632,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index ae1f338e3..152ea44cf 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -50,9 +50,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -62,14 +62,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" }, "GraphQL.Client": { "type": "Transitive", @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 1250f48aa..9f1fcac10 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,9 +41,9 @@ - - - + + + diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index 157129ccf..8a3f6b245 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -53,18 +53,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -74,14 +74,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" }, "GraphQL.Client": { "type": "Transitive", @@ -386,18 +386,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -406,14 +406,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Connectors.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Tests/packages.lock.json index b9ce8f857..8f6241da1 100644 --- a/Sdk/Speckle.Connectors.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )", - "Speckle.Sdk": "[3.1.0-dev.222, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )", + "Speckle.Sdk": "[3.1.0-dev.225, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" } }, "speckle.connectors.logging": { @@ -368,18 +368,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -388,14 +388,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index 0c87953ab..c9068533a 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -332,7 +332,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.222, )" + "Speckle.Objects": "[3.1.0-dev.225, )" } }, "speckle.testing": { @@ -362,18 +362,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -382,14 +382,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index cf267362c..4b68810c9 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -50,11 +50,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -309,9 +309,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } }, "net8.0": { @@ -371,11 +371,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "JI+E26TtVF0X/NjNRB/eLyE4nmyiDi41T1tE6PDsRGOKADCLungUQAsgWg22rdEvNWWhs9cQDsYqL4l5EmWywQ==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.222" + "Speckle.Sdk": "3.1.0-dev.225" } }, "GraphQL.Client": { @@ -568,9 +568,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "s77ioF3KNtpzqt/rVgO6vM3Zuwb/d9x8ba9pe5Y+eoA0oIlyiY8nxYoAFy6hXVhIal71fFZYm3cM+qOaYeG6DA==", + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -579,14 +579,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.222" + "Speckle.Sdk.Dependencies": "3.1.0-dev.225" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.222, )", - "resolved": "3.1.0-dev.222", - "contentHash": "TQmree47OyxzOWGRZki0wSk4cqWHqjZcXlbrwKkZOhrSwCIYQjVBh7QHVfQN+0VRaWke+1u6XIZOgYzp6xctnA==" + "requested": "[3.1.0-dev.225, )", + "resolved": "3.1.0-dev.225", + "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" } } } From e4ac573631a4d76fc6d60d562b4164c79cbd4499 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Mon, 13 Jan 2025 12:34:35 +0000 Subject: [PATCH 31/40] Always run Main stuff on the revit message pump (#486) * Always run Main stuff on the revit message pump * formatting --- .../Plugin/RevitThreadContext.cs | 6 +++++ .../Threading/ThreadContext.cs | 24 ++++++++++++------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs index 957b3959c..c64c86c5a 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/RevitThreadContext.cs @@ -13,4 +13,10 @@ protected override Task WorkerToMainAsync(Func> action) => protected override Task MainToWorker(Func action) => Task.FromResult(action()); protected override Task WorkerToMain(Func action) => RevitTask.RunAsync(action); + + protected override Task RunMainAsync(Func action) => RevitTask.RunAsync(action); + + protected override Task RunMainAsync(Func action) => RevitTask.RunAsync(action); + + protected override Task RunMainAsync(Func> action) => RevitTask.RunAsync(action); } diff --git a/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs b/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs index e98d7d5cc..b109b7101 100644 --- a/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs +++ b/Sdk/Speckle.Connectors.Common/Threading/ThreadContext.cs @@ -14,7 +14,7 @@ public async Task RunOnThread(Action action, bool useMain) { if (IsMainThread) { - action(); + RunMain(action); } else { @@ -37,7 +37,7 @@ await MainToWorkerAsync(() => } else { - action(); + RunMain(action); } } } @@ -48,7 +48,7 @@ public virtual Task RunOnThread(Func action, bool useMain) { if (IsMainThread) { - return Task.FromResult(action()); + return RunMainAsync(action); } return WorkerToMain(action); @@ -58,7 +58,7 @@ public virtual Task RunOnThread(Func action, bool useMain) return MainToWorker(action); } - return Task.FromResult(action()); + return RunMainAsync(action); } public async Task RunOnThreadAsync(Func action, bool useMain) @@ -67,7 +67,7 @@ public async Task RunOnThreadAsync(Func action, bool useMain) { if (IsMainThread) { - await action(); + await RunMainAsync(action); } else { @@ -90,7 +90,7 @@ public async Task RunOnThreadAsync(Func action, bool useMain) } else { - await action(); + await RunMainAsync(action); } } } @@ -101,7 +101,7 @@ public Task RunOnThreadAsync(Func> action, bool useMain) { if (IsMainThread) { - return action(); + return RunMainAsync(action); } return WorkerToMainAsync(action); @@ -110,7 +110,7 @@ public Task RunOnThreadAsync(Func> action, bool useMain) { return MainToWorkerAsync(action); } - return action(); + return RunMainAsync(action); } protected abstract Task WorkerToMainAsync(Func> action); @@ -119,4 +119,12 @@ public Task RunOnThreadAsync(Func> action, bool useMain) protected abstract Task WorkerToMain(Func action); protected abstract Task MainToWorker(Func action); + + protected virtual void RunMain(Action action) => action(); + + protected virtual Task RunMainAsync(Func action) => Task.FromResult(action()); + + protected virtual Task RunMainAsync(Func action) => Task.FromResult(action()); + + protected virtual Task RunMainAsync(Func> action) => action(); } From 9d70579c40a05edb9afd006b811768edd360fe66 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Mon, 13 Jan 2025 13:03:43 +0000 Subject: [PATCH 32/40] add msbuild targets files that are specific to host apps (#483) * add custom navisworks targets * add more targets files that are specific to host apps --- Connectors/Autocad/Directory.Build.targets | 26 ++++++++++ Connectors/Navisworks/Directory.Build.targets | 34 +++++++++++++ .../Speckle.Connectors.Navisworks2020.csproj | 29 ----------- .../Speckle.Connectors.Navisworks2021.csproj | 29 ----------- .../Speckle.Connectors.Navisworks2022.csproj | 30 ----------- .../Speckle.Connectors.Navisworks2023.csproj | 32 ------------ .../Speckle.Connectors.Navisworks2024.csproj | 33 +----------- .../Speckle.Connectors.Navisworks2025.csproj | 28 ---------- Connectors/Revit/Directory.Build.targets | 17 +++++++ Connectors/Rhino/Directory.Build.targets | 10 ++++ Connectors/Tekla/Directory.Build.targets | 26 ++++++++++ .../Speckle.Connector.Tekla2023.csproj | 38 ++------------ .../Speckle.Connector.Tekla2024.csproj | 29 +---------- Directory.Build.targets | 51 ------------------- Speckle.Connectors.sln | 16 +++++- 15 files changed, 135 insertions(+), 293 deletions(-) create mode 100644 Connectors/Autocad/Directory.Build.targets create mode 100644 Connectors/Navisworks/Directory.Build.targets create mode 100644 Connectors/Revit/Directory.Build.targets create mode 100644 Connectors/Rhino/Directory.Build.targets create mode 100644 Connectors/Tekla/Directory.Build.targets delete mode 100644 Directory.Build.targets diff --git a/Connectors/Autocad/Directory.Build.targets b/Connectors/Autocad/Directory.Build.targets new file mode 100644 index 000000000..5e08b67eb --- /dev/null +++ b/Connectors/Autocad/Directory.Build.targets @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Directory.Build.targets b/Connectors/Navisworks/Directory.Build.targets new file mode 100644 index 000000000..ec391895f --- /dev/null +++ b/Connectors/Navisworks/Directory.Build.targets @@ -0,0 +1,34 @@ + + + + true + + NextGen Speckle Connector for Autodesk Navisworks Manage + $(Authors) jonathon@speckle.systems + $(PackageTags) connector nwd nwc nwf navisworks manage + + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle + $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) + Speckle.Connector.Navisworks + + + + + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj index fe6c2d07e..aa7773930 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/Speckle.Connectors.Navisworks2020.csproj @@ -8,16 +8,7 @@ v17 2020 - true $(DefineConstants);TRACE;NAVIS2020;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - @@ -32,25 +23,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj index 95ee1ed6c..a08f46980 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/Speckle.Connectors.Navisworks2021.csproj @@ -8,16 +8,7 @@ v18 2021 - true $(DefineConstants);TRACE;NAVIS2021;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - @@ -32,25 +23,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj index 5a0fd2dee..0761b1a9d 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/Speckle.Connectors.Navisworks2022.csproj @@ -1,5 +1,4 @@ - net48 x64 @@ -9,16 +8,7 @@ v19 2022 - true $(DefineConstants);TRACE;NAVIS2022;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - @@ -33,25 +23,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj index a0efefc18..c829891dd 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/Speckle.Connectors.Navisworks2023.csproj @@ -1,5 +1,4 @@ - net48 x64 @@ -9,20 +8,9 @@ v20 2023 - true $(DefineConstants);TRACE;NAVIS2023;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - Speckle.Connector.Navisworks - - @@ -35,25 +23,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj index 582ba40d7..53d06f6a9 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/Speckle.Connectors.Navisworks2024.csproj @@ -1,5 +1,4 @@ - net48 x64 @@ -9,19 +8,9 @@ v21 2024 - true $(DefineConstants);TRACE;NAVIS2024;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - Speckle.Connector.Navisworks - - + @@ -34,25 +23,5 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj index ad333b200..13e9e7f70 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/Speckle.Connectors.Navisworks2025.csproj @@ -8,16 +8,7 @@ v22 2025 - true $(DefineConstants);TRACE;NAVIS2025;NAVIS - - NextGen Speckle Connector for Autodesk Navisworks Manage - $(Authors) jonathon@speckle.systems - $(PackageTags) connector nwd nwc nwf navisworks manage - - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle - $(AppData)\Autodesk\ApplicationPlugins\Speckle.Connectors.Navisworks.bundle\Contents\$(NavisworksVersion) - @@ -34,23 +25,4 @@ - - - - - - - - - - - - - - - - - - - diff --git a/Connectors/Revit/Directory.Build.targets b/Connectors/Revit/Directory.Build.targets new file mode 100644 index 000000000..9b8142c9b --- /dev/null +++ b/Connectors/Revit/Directory.Build.targets @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Connectors/Rhino/Directory.Build.targets b/Connectors/Rhino/Directory.Build.targets new file mode 100644 index 000000000..323108eca --- /dev/null +++ b/Connectors/Rhino/Directory.Build.targets @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Connectors/Tekla/Directory.Build.targets b/Connectors/Tekla/Directory.Build.targets new file mode 100644 index 000000000..5362ffbe0 --- /dev/null +++ b/Connectors/Tekla/Directory.Build.targets @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj b/Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj index 2739dcef3..4e52bc0dc 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/Speckle.Connector.Tekla2023.csproj @@ -7,37 +7,13 @@ true $(DefineConstants);TEKLA2023 - - - - - - - - - - - - - - - - - + - - - - + + + + @@ -45,10 +21,6 @@ - - - - diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj b/Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj index b391f3023..5dfd9c4ac 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/Speckle.Connector.Tekla2024.csproj @@ -7,31 +7,8 @@ true $(DefineConstants);TEKLA2024 - - - - - - - - - - - - - - - - + @@ -44,10 +21,6 @@ - - - - diff --git a/Directory.Build.targets b/Directory.Build.targets deleted file mode 100644 index cabf959a2..000000000 --- a/Directory.Build.targets +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Speckle.Connectors.sln b/Speckle.Connectors.sln index a28a14618..0eaa82b03 100644 --- a/Speckle.Connectors.sln +++ b/Speckle.Connectors.sln @@ -9,7 +9,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Config", "Config", "{85A13E codecov.yml = codecov.yml CodeMetricsConfig.txt = CodeMetricsConfig.txt Directory.Build.props = Directory.Build.props - Directory.Build.targets = Directory.Build.targets Directory.Packages.props = Directory.Packages.props global.json = global.json README.md = README.md @@ -18,6 +17,9 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DUI", "DUI", "{FD4D6594-D81E-456F-8F2E-35B09E04A755}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Revit", "Revit", "{D92751C8-1039-4005-90B2-913E55E0B8BD}" + ProjectSection(SolutionItems) = preProject + Connectors\Revit\Directory.Build.targets = Connectors\Revit\Directory.Build.targets + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{2E00592E-558D-492D-88F9-3ECEE4C0C7DA}" EndProject @@ -36,6 +38,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Converters.Common", "Sdk\Speckle.Converters.Common\Speckle.Converters.Common.csproj", "{8AEF06C0-CA5C-4460-BC2D-ADE5F35D0434}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rhino", "Rhino", "{9584AEE5-CD59-46E6-93E6-2DC2B5285B75}" + ProjectSection(SolutionItems) = preProject + Connectors\Rhino\Directory.Build.targets = Connectors\Rhino\Directory.Build.targets + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connectors.Rhino7", "Connectors\Rhino\Speckle.Connectors.Rhino7\Speckle.Connectors.Rhino7.csproj", "{1E2644A9-6B31-4350-8772-CEAAD6EE0B21}" EndProject @@ -52,6 +57,9 @@ EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Connectors.AutocadShared", "Connectors\Autocad\Speckle.Connectors.AutocadShared\Speckle.Connectors.AutocadShared.shproj", "{41BC679F-887F-44CF-971D-A5502EE87DB0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Autocad", "Autocad", "{804E065F-914C-414A-AF84-009312C3CFF6}" + ProjectSection(SolutionItems) = preProject + Connectors\Autocad\Directory.Build.targets = Connectors\Autocad\Directory.Build.targets + EndProjectSection EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.AutocadShared", "Converters\Autocad\Speckle.Converters.AutocadShared\Speckle.Converters.AutocadShared.shproj", "{9ADD1B7A-6401-4202-8613-F668E2FBC0A4}" EndProject @@ -154,6 +162,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connectors.Logging", "Sdk\Speckle.Connectors.Logging\Speckle.Connectors.Logging.csproj", "{8098BAFC-DF1C-4AFA-A93E-08121E6D09D4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tekla", "Tekla", "{696086E4-D8CC-4FE0-A9B3-5F10B9089B55}" + ProjectSection(SolutionItems) = preProject + Connectors\Tekla\Directory.Build.targets = Connectors\Tekla\Directory.Build.targets + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connector.Tekla2024", "Connectors\Tekla\Speckle.Connector.Tekla2024\Speckle.Connector.Tekla2024.csproj", "{2319C00F-B268-4E4C-9F88-6B379E2BBD22}" EndProject @@ -214,6 +225,9 @@ EndProject Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Speckle.Converters.ETABSShared", "Converters\CSi\Speckle.Converters.ETABSShared\Speckle.Converters.ETABSShared.shproj", "{36377858-D696-4567-AB05-637F4EC841F5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Navisworks", "Navisworks", "{7B95C512-C1CD-4110-A9A9-CECCD9630353}" + ProjectSection(SolutionItems) = preProject + Connectors\Navisworks\Directory.Build.targets = Connectors\Navisworks\Directory.Build.targets + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{3C54FE49-F14E-43A2-B1DF-85D5C7638117}" EndProject From 2a508e63021db491cd12c373d610430fe71c5181 Mon Sep 17 00:00:00 2001 From: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> Date: Tue, 14 Jan 2025 06:54:18 +0000 Subject: [PATCH 33/40] fix(Navisworks): CNX-895 - Add `ColorProxy` Support for 2D Linework (#492) * Add ColorUnpacker * Add ColorConverter helper class for Navisworks conversion This commit adds a new file, ColorConverter.cs, to the Helpers folder in the NavisworksShared project. The ColorConverter class provides methods for converting Navisworks colors to System.Drawing.Color, generating color hash strings, and getting human-readable color names. * Refactor NavisworksMaterialUnpacker.cs for improved color conversion The code changes in this commit refactor the NavisworksMaterialUnpacker.cs file to improve the color conversion process. Specifically, the ColorConverter class is now used to convert Navisworks colors to standard colors. This change enhances the accuracy and reliability of color conversions throughout the codebase. * Add NavisworksColorUnpacker class to improve color unpacking logic The commit adds the `NavisworksColorUnpacker` class to improve the logic for unpacking colours from Navisworks objects. It introduces a new method `UnpackColor` that takes in a list of Navisworks objects and a dictionary of grouped nodes. The method iterates over the objects, skips non-2D elements, and extracts colour information based on the selected representation mode. The commit also introduces a helper method `Is2DElement` that checks if a given model item is a 2D element by examining its geometry using the ComApi. Additionally, a new class `PrimitiveChecker` is added to implement the callback interface for checking primitive types in Navisworks geometry. These changes aim to enhance the accuracy and efficiency of color unpacking for Navisworks objects. * Add NavisworksColorUnpacker to service registration Add NavisworksColorUnpacker to service registration This commit adds the NavisworksColorUnpacker class to the service registration in the NavisworksConnectorServiceRegistration.cs file. Additionally, it includes the necessary changes in the NavisworksRootObjectBuilder.cs file to inject the NavisworksColorUnpacker dependency. * Refactor BuildAsync function to reduce complexity - Validate input parameters before processing - Initialize root collection with name and units - Convert all model items and store results - Validate conversion results to ensure successful conversion - Build final elements by grouping sibling geometry nodes and adding remaining non-grouped nodes - Add proxies (render materials and colors) to the root collection if applicable --- .../NavisworksConnectorServiceRegistration.cs | 1 + .../HostApp/NavisworksColorUnpacker.cs | 170 +++++++++++++ .../HostApp/NavisworksMaterialUnpacker.cs | 14 +- .../Send/NavisworksRootObjectBuilder.cs | 228 +++++++++++++----- ...ckle.Connectors.NavisworksShared.projitems | 1 + .../Helpers/ColorConverter.cs | 56 +++++ ...ckle.Converters.NavisworksShared.projitems | 1 + 7 files changed, 397 insertions(+), 74 deletions(-) create mode 100644 Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksColorUnpacker.cs create mode 100644 Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ColorConverter.cs diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs index b906ddce4..b953302de 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/DependencyInjection/NavisworksConnectorServiceRegistration.cs @@ -51,6 +51,7 @@ public static void AddNavisworks(this IServiceCollection serviceCollection) >(); serviceCollection.AddScoped(); + serviceCollection.AddScoped(); // Sending operations serviceCollection.AddScoped, NavisworksRootObjectBuilder>(); diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksColorUnpacker.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksColorUnpacker.cs new file mode 100644 index 000000000..c543e1b07 --- /dev/null +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksColorUnpacker.cs @@ -0,0 +1,170 @@ +using Microsoft.Extensions.Logging; +using Speckle.Connector.Navisworks.Services; +using Speckle.Converter.Navisworks.Helpers; +using Speckle.Converter.Navisworks.Settings; +using Speckle.Converters.Common; +using Speckle.Sdk; +using Speckle.Sdk.Models.Proxies; +using ComApi = Autodesk.Navisworks.Api.Interop.ComApi; +using ComBridge = Autodesk.Navisworks.Api.ComApi.ComApiBridge; + +namespace Speckle.Connector.Navisworks.HostApp; + +public class NavisworksColorUnpacker( + ILogger logger, + IConverterSettingsStore converterSettings, + IElementSelectionService selectionService +) +{ + private static T Select(RepresentationMode mode, T active, T permanent, T original, T defaultValue) => + mode switch + { + RepresentationMode.Active => active, + RepresentationMode.Permanent => permanent, + RepresentationMode.Original => original, + _ => defaultValue, + }; + + internal List UnpackColor( + IReadOnlyList navisworksObjects, + Dictionary> groupedNodes + ) + { + if (navisworksObjects == null) + { + throw new ArgumentNullException(nameof(navisworksObjects)); + } + + if (groupedNodes == null) + { + throw new ArgumentNullException(nameof(groupedNodes)); + } + + Dictionary colorProxies = []; + Dictionary mergedIds = []; + + // Build mergedIds map once + foreach (var group in groupedNodes) + { + foreach (var node in group.Value) + { + mergedIds[selectionService.GetModelItemPath(node)] = group.Key; + } + } + + foreach (NAV.ModelItem navisworksObject in navisworksObjects) + { + try + { + // Skip non-2D elements + if (!Is2DElement(navisworksObject)) + { + continue; + } + + var navisworksObjectId = selectionService.GetModelItemPath(navisworksObject); + var finalId = mergedIds.TryGetValue(navisworksObjectId, out var mergedId) ? mergedId : navisworksObjectId; + + var geometry = navisworksObject.Geometry; + var mode = converterSettings.Current.User.VisualRepresentationMode; + + using var defaultColor = new NAV.Color(1.0, 1.0, 1.0); + + var representationColor = Select( + mode, + geometry.ActiveColor, + geometry.PermanentColor, + geometry.OriginalColor, + defaultColor + ); + + var colorId = Select( + mode, + $"{geometry.ActiveColor.GetHashCode()}_{geometry.ActiveTransparency}".GetHashCode(), + $"{geometry.PermanentColor.GetHashCode()}_{geometry.PermanentTransparency}".GetHashCode(), + $"{geometry.OriginalColor.GetHashCode()}_{geometry.OriginalTransparency}".GetHashCode(), + 0 + ); + + var colorName = ColorConverter.NavisworksColorToColor(representationColor).Name; + + if (colorProxies.TryGetValue(colorId.ToString(), out ColorProxy? colorProxy)) + { + colorProxy.objects.Add(finalId); + } + else + { + colorProxies[colorId.ToString()] = new ColorProxy + { + value = ColorConverter.NavisworksColorToColor(representationColor).ToArgb(), + name = colorName, + applicationId = colorId.ToString(), + objects = [finalId] + }; + } + } + catch (Exception ex) when (!ex.IsFatal()) + { + logger.LogError(ex, "Failed to unpack color for Navisworks object"); + } + } + + return colorProxies.Values.ToList(); + } + + private static bool Is2DElement(NAV.ModelItem modelItem) + { + if (!modelItem.HasGeometry) + { + return false; + } + + var primitiveChecker = new PrimitiveChecker(); + + var comSelection = ComBridge.ToInwOpSelection([modelItem]); + try + { + foreach (ComApi.InwOaPath path in comSelection.Paths()) + { + GC.KeepAlive(path); + + foreach (ComApi.InwOaFragment3 fragment in path.Fragments()) + { + GC.KeepAlive(fragment); + + fragment.GenerateSimplePrimitives(ComApi.nwEVertexProperty.eNORMAL, primitiveChecker); + + // Exit early if triangles are found + if (primitiveChecker.HasTriangles) + { + return false; + } + } + } + + // Return true if any 2D primitives are found + return primitiveChecker.HasLines || primitiveChecker.HasPoints || primitiveChecker.HasSnapPoints; + } + finally + { + System.Runtime.InteropServices.Marshal.ReleaseComObject(comSelection); + } + } +} + +public class PrimitiveChecker : ComApi.InwSimplePrimitivesCB +{ + public bool HasTriangles { get; private set; } + public bool HasLines { get; private set; } + public bool HasPoints { get; private set; } + public bool HasSnapPoints { get; private set; } + + public void Line(ComApi.InwSimpleVertex v1, ComApi.InwSimpleVertex v2) => HasLines = true; + + public void Point(ComApi.InwSimpleVertex v1) => HasPoints = true; + + public void SnapPoint(ComApi.InwSimpleVertex v1) => HasSnapPoints = true; + + public void Triangle(ComApi.InwSimpleVertex v1, ComApi.InwSimpleVertex v2, ComApi.InwSimpleVertex v3) => + HasTriangles = true; +} diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs index 4b354d904..b8170e125 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksMaterialUnpacker.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using Speckle.Connector.Navisworks.Services; +using Speckle.Converter.Navisworks.Helpers; using Speckle.Converter.Navisworks.Settings; using Speckle.Converters.Common; using Speckle.Objects.Other; @@ -92,7 +93,8 @@ internal List UnpackRenderMaterial( 0 ); - var materialName = $"NavisworksMaterial_{Math.Abs(NavisworksColorToColor(renderColor).ToArgb())}"; + var materialName = + $"NavisworksMaterial_{Math.Abs(ColorConverter.NavisworksColorToColor(renderColor).ToArgb())}"; // Check Item category for material name var itemCategory = navisworksObject.PropertyCategories.FindCategoryByDisplayName("Item"); @@ -152,7 +154,7 @@ private static RenderMaterial ConvertRenderColorAndTransparencyToSpeckle( int applicationId ) { - var color = NavisworksColorToColor(navisworksColor); + var color = ColorConverter.NavisworksColorToColor(navisworksColor); var speckleRenderMaterial = new RenderMaterial() { @@ -167,12 +169,4 @@ int applicationId return speckleRenderMaterial; } - - private static System.Drawing.Color NavisworksColorToColor(NAV.Color color) => - System.Drawing.Color.FromArgb( - alpha: 255, - red: Convert.ToInt32(color.R * 255), - green: Convert.ToInt32(color.G * 255), - blue: Convert.ToInt32(color.B * 255) - ); } diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs index 685188554..46d14b0a8 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Operations/Send/NavisworksRootObjectBuilder.cs @@ -23,6 +23,7 @@ public class NavisworksRootObjectBuilder( ILogger logger, ISdkActivityFactory activityFactory, NavisworksMaterialUnpacker materialUnpacker, + NavisworksColorUnpacker colorUnpacker, IElementSelectionService elementSelectionService ) : IRootObjectBuilder { @@ -30,6 +31,15 @@ IElementSelectionService elementSelectionService internal NavisworksConversionSettings GetCurrentSettings() => converterSettings.Current; + /// + /// Asynchronously builds a Speckle object hierarchy from Navisworks model items. + /// + /// The list of Navisworks items to convert. + /// Information about the send operation. + /// Progress reporting callback. + /// Token to cancel the operation. + /// A result containing the root collection and conversion results. + /// Thrown when no objects can be converted. public async Task BuildAsync( IReadOnlyList navisworksModelItems, SendInfo sendInfo, @@ -43,34 +53,70 @@ CancellationToken cancellationToken #endif using var activity = activityFactory.Start("Build"); - // 1. Validate input + ValidateInputs(navisworksModelItems, sendInfo, onOperationProgressed); + + // 2. Initialize root collection + var rootCollection = InitializeRootCollection(); + + // 3. Convert all model items and store results + var (convertedElements, conversionResults) = await ConvertModelItemsAsync( + navisworksModelItems, + sendInfo, + onOperationProgressed, + cancellationToken + ); + + ValidateConversionResults(conversionResults); + + var groupedNodes = SkipNodeMerging ? [] : GroupSiblingGeometryNodes(navisworksModelItems); + var finalElements = BuildFinalElements(convertedElements, groupedNodes); + + await AddProxiesToCollection(rootCollection, navisworksModelItems, groupedNodes); + + rootCollection.elements = finalElements; + return new RootObjectBuilderResult(rootCollection, conversionResults); + } + + private static void ValidateInputs( + IReadOnlyList navisworksModelItems, + SendInfo sendInfo, + IProgress onOperationProgressed + ) + { if (!navisworksModelItems.Any()) { throw new SpeckleException("No objects to convert"); } - // 2. Initialize root collection - var rootObjectCollection = new Collection - { - name = NavisworksApp.ActiveDocument.Title ?? "Unnamed model", - ["units"] = converterSettings.Current.Derived.SpeckleUnits - }; - - // 3. Convert all model items and store results if (navisworksModelItems == null) { throw new ArgumentNullException(nameof(navisworksModelItems)); } - List results = new(navisworksModelItems.Count); - var convertedBases = new Dictionary(); - int processedCount = 0; - int totalCount = navisworksModelItems.Count; - if (onOperationProgressed == null || sendInfo == null) { - throw new ArgumentNullException(nameof(onOperationProgressed)); + throw new ArgumentNullException(onOperationProgressed == null ? nameof(onOperationProgressed) : nameof(sendInfo)); } + } + + private Collection InitializeRootCollection() => + new() + { + name = NavisworksApp.ActiveDocument.Title ?? "Unnamed model", + ["units"] = converterSettings.Current.Derived.SpeckleUnits + }; + + private Task<(Dictionary converted, List results)> ConvertModelItemsAsync( + IReadOnlyList navisworksModelItems, + SendInfo sendInfo, + IProgress onOperationProgressed, + CancellationToken cancellationToken + ) + { + var results = new List(navisworksModelItems.Count); + var convertedBases = new Dictionary(); + int processedCount = 0; + int totalCount = navisworksModelItems.Count; foreach (var item in navisworksModelItems) { @@ -79,91 +125,145 @@ CancellationToken cancellationToken results.Add(converted); processedCount++; onOperationProgressed.Report(new CardProgress("Converting", (double)processedCount / totalCount)); - await Task.Yield(); } + return Task.FromResult((convertedBases, results)); + } + + private static void ValidateConversionResults(List results) + { if (results.All(x => x.Status == Status.ERROR)) { - throw new SpeckleException("Failed to convert all objects."); // fail fast instead creating empty commit! It will appear as model card error with red color. + throw new SpeckleException("Failed to convert all objects."); } + } - // 4. Initialize final elements list and group nodes + private List BuildFinalElements( + Dictionary convertedBases, + Dictionary> groupedNodes + ) + { var finalElements = new List(); - var groupedNodes = SkipNodeMerging ? [] : GroupSiblingGeometryNodes(navisworksModelItems); var processedPaths = new HashSet(); - // 5. Process and merge grouped nodes + AddGroupedElements(finalElements, convertedBases, groupedNodes, processedPaths); + AddRemainingElements(finalElements, convertedBases, processedPaths); + + return finalElements; + } + + private void AddGroupedElements( + List finalElements, + Dictionary convertedBases, + Dictionary> groupedNodes, + HashSet processedPaths + ) + { foreach (var group in groupedNodes) { var siblingBases = new List(); foreach (var itemPath in group.Value.Select(elementSelectionService.GetModelItemPath)) { processedPaths.Add(itemPath); - if (convertedBases.TryGetValue(itemPath, out var convertedBase) && convertedBase != null) { siblingBases.Add(convertedBase); } } - if (siblingBases.Count == 0) + if (siblingBases.Count > 0) { - continue; + finalElements.Add(CreateNavisworksObject(group.Key, siblingBases)); } - - var navisworksObject = new NavisworksObject - { - name = elementSelectionService.GetModelItemFromPath(group.Key).DisplayName ?? string.Empty, - displayValue = siblingBases.SelectMany(b => b["displayValue"] as List ?? []).ToList(), - properties = siblingBases.First()["properties"] as Dictionary ?? [], - units = converterSettings.Current.Derived.SpeckleUnits, - applicationId = group.Key - }; - - finalElements.Add(navisworksObject); } + } - // 6. Add remaining non-grouped nodes - foreach (var result in results.Where(result => !processedPaths.Contains(result.SourceId))) + private void AddRemainingElements( + List finalElements, + Dictionary convertedBases, + HashSet processedPaths + ) + { + foreach (var kvp in convertedBases.Where(kvp => !processedPaths.Contains(kvp.Key))) { - if (!convertedBases.TryGetValue(result.SourceId, out var convertedBase) || convertedBase == null) + switch (kvp.Value) { - continue; + case null: + continue; + case Collection collection: + finalElements.Add(collection); + break; + default: + finalElements.Add(CreateNavisworksObject(kvp.Value)); + break; } - // TODO: check if converted base is a collection when full tree sending is implemented + } + } - if (convertedBase is Collection convertedCollection) - { - finalElements.Add(convertedCollection); - } - else - { - var navisworksObject = new NavisworksObject - { - name = convertedBase["name"] as string ?? string.Empty, - displayValue = convertedBase["displayValue"] as List ?? [], - properties = convertedBase["properties"] as Dictionary ?? [], - units = converterSettings.Current.Derived.SpeckleUnits, - applicationId = convertedBase.applicationId - }; - finalElements.Add(navisworksObject); - } + /// + /// Processes and adds any remaining non-grouped elements. + /// + /// + /// Handles both Collection and Base type elements differently. + /// Only processes elements that weren't handled in grouped processing. + /// + private NavisworksObject CreateNavisworksObject(string groupKey, List siblingBases) => + new() + { + name = elementSelectionService.GetModelItemFromPath(groupKey).DisplayName ?? string.Empty, + displayValue = siblingBases.SelectMany(b => b["displayValue"] as List ?? []).ToList(), + properties = siblingBases.First()["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = groupKey + }; + + /// + /// Creates a NavisworksObject from a single converted base. + /// + /// The converted Speckle Base object. + /// A new NavisworksObject containing the converted data. + private NavisworksObject CreateNavisworksObject(Base convertedBase) => + new() + { + name = convertedBase["name"] as string ?? string.Empty, + displayValue = convertedBase["displayValue"] as List ?? [], + properties = convertedBase["properties"] as Dictionary ?? [], + units = converterSettings.Current.Derived.SpeckleUnits, + applicationId = convertedBase.applicationId + }; + + private Task AddProxiesToCollection( + Collection rootCollection, + IReadOnlyList navisworksModelItems, + Dictionary> groupedNodes + ) + { + using var _ = activityFactory.Start("UnpackProxies"); + + var renderMaterials = materialUnpacker.UnpackRenderMaterial(navisworksModelItems, groupedNodes); + if (renderMaterials.Count > 0) + { + rootCollection[ProxyKeys.RENDER_MATERIAL] = renderMaterials; } - using (var _ = activityFactory.Start("UnpackRenderMaterials")) + var colors = colorUnpacker.UnpackColor(navisworksModelItems, groupedNodes); + if (colors.Count > 0) { - // 7. - Unpack the render material proxies - rootObjectCollection[ProxyKeys.RENDER_MATERIAL] = materialUnpacker.UnpackRenderMaterial( - navisworksModelItems, - groupedNodes - ); + rootCollection[ProxyKeys.COLOR] = colors; } - // 8. Finalize and return - rootObjectCollection.elements = finalElements; - return new RootObjectBuilderResult(rootObjectCollection, results); + return Task.CompletedTask; } + /// + /// Converts a single Navisworks item to a Speckle object. + /// + /// + /// Attempts to retrieve from cache first. + /// Falls back to fresh conversion if not cached. + /// Logs errors but doesn't throw exceptions. + /// + /// A SendConversionResult indicating success or failure. private SendConversionResult ConvertNavisworksItem( NAV.ModelItem navisworksItem, Dictionary convertedBases, diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems index 1c74c547e..cd6db0018 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/Speckle.Connectors.NavisworksShared.projitems @@ -15,6 +15,7 @@ + diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ColorConverter.cs b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ColorConverter.cs new file mode 100644 index 000000000..5c2925365 --- /dev/null +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Helpers/ColorConverter.cs @@ -0,0 +1,56 @@ +using Convert = System.Convert; +using Sys = System.Drawing; + +namespace Speckle.Converter.Navisworks.Helpers; + +public static class ColorConverter +{ + /// + /// Converts a Navisworks color to a System.Drawing.Color. + /// + /// The Navisworks color to convert + /// Optional transparency value (0.0 to 1.0) + /// A System.Drawing.Color with the converted values + public static Sys.Color NavisworksColorToColor(NAV.Color color, double? transparency = null) + { + var alpha = transparency.HasValue ? Convert.ToInt32((1.0 - transparency.Value) * 255) : 255; + + return Sys.Color.FromArgb( + alpha: alpha, + red: Convert.ToInt32(color.R * 255), + green: Convert.ToInt32(color.G * 255), + blue: Convert.ToInt32(color.B * 255) + ); + } + + /// + /// Converts RGB values to a color hash string. + /// + /// The Navisworks color + /// Optional transparency value + /// A unique hash string for the color + public static string GetColorHash(NAV.Color color, double? transparency = null) + { + var rgbValues = + Convert.ToInt32(color.R * 255) << 16 | Convert.ToInt32(color.G * 255) << 8 | Convert.ToInt32(color.B * 255); + + if (!transparency.HasValue) + { + return rgbValues.ToString(); + } + + var alpha = Convert.ToInt32((1.0 - transparency.Value) * 255); + return $"{rgbValues}_{alpha}"; + } + + /// + /// Gets a human-readable color name. + /// + /// The Navisworks color to name + /// A descriptive name for the color + public static string GetColorName(NAV.Color color) + { + var converted = NavisworksColorToColor(color); + return converted.IsKnownColor ? converted.Name : $"Custom_{converted.ToArgb():X8}"; + } +} diff --git a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems index 211a57058..121b8a9a4 100644 --- a/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems +++ b/Converters/Navisworks/Speckle.Converters.NavisworksShared/Speckle.Converters.NavisworksShared.projitems @@ -21,6 +21,7 @@ + From ba0cdd307f69979f69274ccb096de7a420ec5fbb Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Tue, 14 Jan 2025 07:38:19 +0000 Subject: [PATCH 34/40] Add better progress tor receive (#487) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update SDK * Add better progress to receive --------- Co-authored-by: Oğuzhan Koral <45078678+oguzhankoral@users.noreply.github.com> --- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 32 +++++----- .../packages.lock.json | 64 +++++++++---------- .../Speckle.Connectors.DUI/packages.lock.json | 28 ++++---- Directory.Packages.props | 6 +- .../Operations/ReceiveProgress.cs | 18 ++++-- .../packages.lock.json | 44 ++++++------- .../packages.lock.json | 28 ++++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 44 ++++++------- 63 files changed, 967 insertions(+), 957 deletions(-) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index dfe792a20..c2b94e121 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -231,9 +231,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -241,8 +241,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -319,14 +319,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index f2ec9f452..db4f6ec52 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index 003e337af..e8dfaddf7 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 8fe8eff58..4fa9e3d5e 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index 93347c512..d4fa343e0 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -256,7 +256,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -294,18 +294,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -314,14 +314,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index e5b73b85a..6f4fc10ff 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index 1d2466451..aff802006 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index c31bfb247..69381b6d3 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index e86f2e788..98e30f075 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -304,18 +304,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -324,14 +324,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 90f179d80..1cb2db820 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.etabs21": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index ac14a8a80..7483d1d04 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.etabs22": { @@ -292,18 +292,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -312,14 +312,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 94fdc7699..0de54ea87 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2020": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 5267a4c3b..615504ce7 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2021": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index 10e8694da..f54b2be42 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2022": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index 2fed5ca7e..886c31762 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2023": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index ffcdaee00..c63e9facf 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2024": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index d0cd0bac0..04b657b57 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -47,11 +47,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -279,9 +279,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -289,8 +289,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -307,7 +307,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.navisworks2025": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index 35a9b73a7..a43b53d44 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.revit2022": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index f7ff09958..c4cc51b52 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.revit2023": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index a0bf6420b..77313cb55 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.revit2024": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index 6cc730552..e4c2d86a5 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -242,9 +242,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -252,8 +252,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.revit2025": { @@ -302,11 +302,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Revit.API": { @@ -317,9 +317,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -328,14 +328,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 42b1c9562..7cd615133 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.rhino7": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index 0bab2473e..41338a5ff 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.converters.rhino8": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 3a444c27f..47ba9955e 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Tekla.Structures.Dialog": { @@ -332,9 +332,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -342,8 +342,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -368,7 +368,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -406,9 +406,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -418,14 +418,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index 596c6b44f..9f9dfeefe 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Tekla.Structures.Dialog": { @@ -413,9 +413,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -423,8 +423,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -449,7 +449,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -487,9 +487,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -499,14 +499,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json index 055c8343b..b864cad85 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json @@ -224,7 +224,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -247,18 +247,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -268,14 +268,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 824354641..bc44e4457 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index aad523137..7a44c8650 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index 5ca3b7b5b..930b6a4ce 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -330,18 +330,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -351,14 +351,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 7608d43c7..0d9387dd2 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -306,14 +306,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index 4474fbd06..060e316a3 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index dbec0040f..590746dae 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 946fba1d2..c87ae23b6 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 41bf751c5..03335e354 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index c13271016..0240a5a8b 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 1c95ea266..9931bf249 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui.webview": { @@ -257,7 +257,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -315,14 +315,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index 882c8b15c..cf15dd1c8 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index 9a5c63887..8de9bbdbd 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index 5e55f83f2..f177d3753 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index 7709491ea..f543dfedc 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index 0aa97a2a2..851b52508 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index f15e709cd..279e81fc0 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json index a44cac6f3..0e4e3c1cc 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index cc81c37b7..a0f5b1519 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json index d18b89445..96efae727 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index 9197a23bb..4bd29d31d 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index 4b314cdcb..ef4f5638c 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index d3121d76b..38b560ca8 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index c2644530a..f9d54a230 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index d6f536ed8..14acce919 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index 680fdec06..f9a790c5e 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 4dd90abe3..83ae3ff97 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index 62f169967..1ea794aff 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -323,18 +323,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -344,14 +344,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index 6a45afe38..e6758ae44 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "Microsoft.Extensions.Logging": { @@ -364,18 +364,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index 193dc537c..bc89bbd3d 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -334,8 +334,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -377,18 +377,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -397,14 +397,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 248733515..07b2602a3 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -310,18 +310,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -331,14 +331,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net6.0-windows7.0": { @@ -565,9 +565,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.dui": { @@ -575,8 +575,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -611,18 +611,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -632,14 +632,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 152ea44cf..75b92cf50 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -50,9 +50,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -62,14 +62,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" }, "GraphQL.Client": { "type": "Transitive", @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 9f1fcac10..6cc02eeee 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,9 +41,9 @@ - - - + + + diff --git a/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs b/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs index 2939496f3..3e0cf800d 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/ReceiveProgress.cs @@ -7,7 +7,8 @@ namespace Speckle.Connectors.Common.Operations; public sealed class ReceiveProgress(IProgressDisplayManager progressDisplayManager) : IReceiveProgress { private double? _previousPercentage; - private string? _previousSpeed; + private string? _downloadSpeed; + private double? _downloadPercentage; public void Begin() => progressDisplayManager.Begin(); @@ -19,7 +20,10 @@ public void Report(IProgress onOperationProgressed, ProgressArgs a _previousPercentage = progressDisplayManager.CalculatePercentage(args); break; case ProgressEvent.DownloadBytes: - _previousSpeed = progressDisplayManager.CalculateSpeed(args); + _downloadSpeed = progressDisplayManager.CalculateSpeed(args); + break; + case ProgressEvent.DownloadObjects: + _downloadPercentage = progressDisplayManager.CalculatePercentage(args); break; } @@ -34,10 +38,16 @@ public void Report(IProgress onOperationProgressed, ProgressArgs a onOperationProgressed.Report(new("Checking cache... ", _previousPercentage)); break; case ProgressEvent.DownloadBytes: - onOperationProgressed.Report(new($"Downloading... ({_previousSpeed})", null)); + case ProgressEvent.DownloadObjects: + onOperationProgressed.Report(new($"Downloading... ({_downloadSpeed})", _downloadPercentage)); break; case ProgressEvent.DeserializeObject: - onOperationProgressed.Report(new("Deserializing ...", progressDisplayManager.CalculatePercentage(args))); + onOperationProgressed.Report( + new( + $"Deserializing ... ({args.Count} / {args.Total} objects)", + progressDisplayManager.CalculatePercentage(args) + ) + ); break; } } diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index 8a3f6b245..e75b0c1e3 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -53,18 +53,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -74,14 +74,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" }, "GraphQL.Client": { "type": "Transitive", @@ -386,18 +386,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -406,14 +406,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Connectors.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Tests/packages.lock.json index 8f6241da1..383a089d1 100644 --- a/Sdk/Speckle.Connectors.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )", - "Speckle.Sdk": "[3.1.0-dev.225, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )", + "Speckle.Sdk": "[3.1.0-dev.227, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" } }, "speckle.connectors.logging": { @@ -368,18 +368,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -388,14 +388,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index c9068533a..c8920286b 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -332,7 +332,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.225, )" + "Speckle.Objects": "[3.1.0-dev.227, )" } }, "speckle.testing": { @@ -362,18 +362,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -382,14 +382,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index 4b68810c9..98f57a6f4 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -50,11 +50,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -309,9 +309,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } }, "net8.0": { @@ -371,11 +371,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "u4Ds/aD0/eALOTRRHTSCvfI0bxHryDfj9RhsqblQ5mUo4UE2X22njTu5bE2Om7xcVQRVP2yQ37oZwiJuJhGb6Q==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.225" + "Speckle.Sdk": "3.1.0-dev.227" } }, "GraphQL.Client": { @@ -568,9 +568,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "kEB5IhsJLJ094J8m5H3d24HS19eqvUQ2jnXOPOh8APYHX1SRuUM7Q3Gl78euOrQr6XH2M88TzMz7BF95cm4u0A==", + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -579,14 +579,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.225" + "Speckle.Sdk.Dependencies": "3.1.0-dev.227" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.225, )", - "resolved": "3.1.0-dev.225", - "contentHash": "cGMfD8eUkUGcuF5td5YE2WTLLpha52QNS5k38vUnPI+k4ymLoj04tdRLLxEtIkwlK2AofZ6vrVMcoUXT+P6NHQ==" + "requested": "[3.1.0-dev.227, )", + "resolved": "3.1.0-dev.227", + "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" } } } From 48670c4030e95985ed7d9bb6226d8c6cbbf2b3f2 Mon Sep 17 00:00:00 2001 From: Jonathon Broughton <760691+jsdbroughton@users.noreply.github.com> Date: Tue, 14 Jan 2025 10:52:46 +0000 Subject: [PATCH 35/40] Update NavisworksDocumentModelStore.cs (#491) - Add reference to `Autodesk.Navisworks.Api.DocumentParts.DocumentDatabase` - Add `_lastSavedState` field to store the last saved state - Compare current state with last saved state before saving - Update last saved state after successful save - Rename `ClearAndSave` method to `ClearAndSaveThisState` for clarity pseudo override - Reset last saved state when clearing models --- .../HostApp/NavisworksDocumentModelStore.cs | 94 +++++++++++-------- 1 file changed, 56 insertions(+), 38 deletions(-) diff --git a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs index e00529721..5763ac5d6 100644 --- a/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs +++ b/Connectors/Navisworks/Speckle.Connectors.NavisworksShared/HostApp/NavisworksDocumentModelStore.cs @@ -2,6 +2,7 @@ using Speckle.Connectors.DUI.Bridge; using Speckle.Connectors.DUI.Models; using Speckle.Connectors.DUI.Utils; +using Database = Autodesk.Navisworks.Api.DocumentParts.DocumentDatabase; namespace Speckle.Connector.Navisworks.HostApp; @@ -15,6 +16,7 @@ public sealed class NavisworksDocumentModelStore : DocumentModelStore private const string KEY_NAME = "Speckle_DUI3"; private readonly ITopLevelExceptionHandler _topLevelExceptionHandler; + private string _lastSavedState = string.Empty; public NavisworksDocumentModelStore( IJsonSerializer jsonSerializer, @@ -33,9 +35,16 @@ protected override void HostAppSaveState(string modelCardState) return; } + // Compare current state with last saved state + if (modelCardState == _lastSavedState) + { + return; // Skip save if states match + } + try { SaveStateToDatabase(modelCardState); + _lastSavedState = modelCardState; // Update last saved state after successful save } catch (NAV.Data.DatabaseException ex) { @@ -54,7 +63,7 @@ protected override void LoadState() { if (!IsActiveDocumentValid()) { - ClearAndSave(); + ClearAndSaveThisState(); return; } @@ -62,16 +71,23 @@ protected override void LoadState() { string serializedState = RetrieveStateFromDatabase(); LoadFromString(serializedState); + _lastSavedState = serializedState; // Store initial state after loading } catch (NAV.Data.DatabaseException ex) { - ClearAndSave(); // Clear models on failure to avoid stale data + ClearAndSaveThisState(); // Clear models on failure to avoid stale data _topLevelExceptionHandler.CatchUnhandled( () => throw new InvalidOperationException("Failed to read Speckle state from database", ex) ); } } + private void ClearAndSaveThisState() + { + ClearAndSave(); + _lastSavedState = string.Empty; // Reset last saved state when clearing + } + private static bool IsActiveDocumentValid() { try @@ -99,46 +115,55 @@ private static void SaveStateToDatabase(string modelCardState) var database = activeDoc.Database; - using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + if (!DoesTableExist(database)) { - EnsureDatabaseTableExists(transaction); + CreateTable(database); } - using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Edited)) + using var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Edited); + try { - try - { - ReplaceStateInDatabase(transaction, modelCardState); - transaction.Commit(); - } - catch - { - transaction.Rollback(); // Roll back transaction on failure - throw; - } + ReplaceStateInDatabase(transaction, modelCardState); + transaction.Commit(); + } + catch + { + transaction.Rollback(); // Roll back transaction on failure + throw; } } - private static void EnsureDatabaseTableExists(NAV.Data.NavisworksTransaction transaction) + private static void ReplaceStateInDatabase(NAV.Data.NavisworksTransaction transaction, string modelCardState) { var command = transaction.Connection.CreateCommand(); - command.CommandText = $"CREATE TABLE IF NOT EXISTS {TABLE_NAME}(key TEXT PRIMARY KEY, value TEXT)"; + command.CommandText = $"REPLACE INTO {TABLE_NAME}(key, value) VALUES(@key, @value)"; + command.Parameters.AddWithValue("@key", KEY_NAME); + command.Parameters.AddWithValue("@value", modelCardState); command.ExecuteNonQuery(); - transaction.Commit(); // Ensure table exists before proceeding } - private static void ReplaceStateInDatabase(NAV.Data.NavisworksTransaction transaction, string serializedState) + private static bool DoesTableExist(Database database) { - var command = transaction.Connection.CreateCommand(); - - command.CommandText = $"DELETE FROM {TABLE_NAME} WHERE key = @key"; - command.Parameters.AddWithValue("@key", KEY_NAME); - command.ExecuteNonQuery(); + var checkCommand = database.Value.CreateCommand(); + checkCommand.CommandText = $"SELECT name FROM sqlite_master WHERE type='table' AND name='{TABLE_NAME}'"; + return checkCommand.ExecuteScalar() != null; + } - command.CommandText = $"INSERT INTO {TABLE_NAME}(key, value) VALUES(@key, @value)"; - command.Parameters.AddWithValue("@key", KEY_NAME); - command.Parameters.AddWithValue("@value", serializedState); - command.ExecuteNonQuery(); + private static void CreateTable(Database database) + { + using var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Edited); + try + { + var command = transaction.Connection.CreateCommand(); + command.CommandText = $"CREATE TABLE {TABLE_NAME}(key TEXT PRIMARY KEY, value TEXT)"; + command.ExecuteNonQuery(); + transaction.Commit(); + } + catch + { + transaction.Rollback(); + throw; + } } private static string RetrieveStateFromDatabase() @@ -146,9 +171,9 @@ private static string RetrieveStateFromDatabase() var database = NavisworksApp.ActiveDocument!.Database; using var table = new DataTable(); - using (var transaction = database.BeginTransaction(NAV.Data.DatabaseChangedAction.Reset)) + if (!DoesTableExist(database)) { - EnsureDatabaseTableExists(transaction); + return string.Empty; } using var dataAdapter = new NAV.Data.NavisworksDataAdapter( @@ -158,13 +183,6 @@ private static string RetrieveStateFromDatabase() dataAdapter.SelectCommand.Parameters.AddWithValue("@key", KEY_NAME); dataAdapter.Fill(table); - if (table.Rows.Count <= 0) - { - return string.Empty; // Return an empty collection if no state is found - } - - string stateString = table.Rows[0]["value"] as string ?? string.Empty; - - return stateString; + return table.Rows.Count <= 0 ? string.Empty : table.Rows[0]["value"] as string ?? string.Empty; } } From bedf36381083a3efe843df04d3219273fc42c014 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 15 Jan 2025 11:30:43 +0000 Subject: [PATCH 36/40] Update to SDK 228 (#494) --- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 34 +++++----- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 32 +++++----- .../packages.lock.json | 64 +++++++++---------- .../Speckle.Connectors.DUI/packages.lock.json | 28 ++++---- Directory.Packages.props | 6 +- .../packages.lock.json | 44 ++++++------- .../packages.lock.json | 28 ++++---- .../packages.lock.json | 24 +++---- .../packages.lock.json | 44 ++++++------- 62 files changed, 953 insertions(+), 953 deletions(-) diff --git a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json index c2b94e121..87469b826 100644 --- a/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json +++ b/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/packages.lock.json @@ -231,9 +231,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -241,8 +241,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -319,14 +319,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net6.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index db4f6ec52..02feb356d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index e8dfaddf7..484e8c0be 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -299,7 +299,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 4fa9e3d5e..a3a07fbbb 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index d4fa343e0..91726308a 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -256,7 +256,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -294,18 +294,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -314,14 +314,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 6f4fc10ff..f21270c3d 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index aff802006..6c84659e4 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index 69381b6d3..afb4ab323 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -309,7 +309,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -347,18 +347,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index 98e30f075..54a134f77 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -266,7 +266,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -304,18 +304,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -324,14 +324,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 1cb2db820..b91ba7385 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.etabs21": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 7483d1d04..f1ea26d2d 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.etabs22": { @@ -292,18 +292,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -312,14 +312,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 0de54ea87..78f291dd2 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2020": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 615504ce7..f7936f3b4 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2021": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index f54b2be42..279106ad5 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2022": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index 886c31762..db7b70b3c 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2023": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index c63e9facf..a9a1f0e9b 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2024": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 04b657b57..25f6aa285 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -47,11 +47,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -279,9 +279,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -289,8 +289,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -307,7 +307,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.navisworks2025": { @@ -347,9 +347,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -359,14 +359,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index a43b53d44..f9871f8ae 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.revit2022": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index c4cc51b52..b7d2e4e92 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.revit2023": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index 77313cb55..faff91d90 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -292,9 +292,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -302,8 +302,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -313,7 +313,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.revit2024": { @@ -352,11 +352,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Revit.API": { @@ -367,9 +367,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index e4c2d86a5..9ad9ee9e3 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -242,9 +242,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -252,8 +252,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.revit2025": { @@ -302,11 +302,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Revit.API": { @@ -317,9 +317,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -328,14 +328,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 7cd615133..3622f74b7 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.rhino7": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index 41338a5ff..ff20c1dba 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -273,9 +273,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -283,8 +283,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -301,7 +301,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.converters.rhino8": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 47ba9955e..463949c95 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Tekla.Structures.Dialog": { @@ -332,9 +332,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -342,8 +342,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -368,7 +368,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -406,9 +406,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -418,14 +418,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index 9f9dfeefe..34e4cd10c 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -35,11 +35,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Tekla.Structures.Dialog": { @@ -413,9 +413,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -423,8 +423,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -449,7 +449,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -487,9 +487,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -499,14 +499,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json index b864cad85..0d425bf72 100644 --- a/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json +++ b/Converters/ArcGIS/Speckle.Converters.ArcGIS3/packages.lock.json @@ -224,7 +224,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -247,18 +247,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -268,14 +268,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index bc44e4457..1bb82d001 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index 7a44c8650..38e839500 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index 930b6a4ce..9c9879c19 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -330,18 +330,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -351,14 +351,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 0d9387dd2..24f36c22a 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -220,9 +220,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -230,8 +230,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -248,7 +248,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -306,14 +306,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index 060e316a3..817d3dbbd 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 590746dae..fbf0014f1 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index c87ae23b6..847871f2c 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 03335e354..d2561827d 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index 0240a5a8b..312cd35cc 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -272,7 +272,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -316,14 +316,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index 9931bf249..6249dd317 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -229,9 +229,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -239,8 +239,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui.webview": { @@ -257,7 +257,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -295,18 +295,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -315,14 +315,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index cf15dd1c8..beb730041 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index 8de9bbdbd..f0b65eefb 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index f177d3753..ac7cebf3a 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index f543dfedc..a105edc4c 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index 851b52508..316c826d7 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index 279e81fc0..056191e6d 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json index 0e4e3c1cc..6273fe7ec 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index a0f5b1519..a96161d91 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json index 96efae727..abb3a4180 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index 4bd29d31d..642607ccd 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json index ef4f5638c..02bbc1902 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index 38b560ca8..7404b3b6d 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index f9d54a230..bfa8ed9a5 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -219,7 +219,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -242,18 +242,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -262,14 +262,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json index 14acce919..4619d787f 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7.Tests/packages.lock.json @@ -345,7 +345,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.testing": { @@ -375,18 +375,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -395,14 +395,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index f9a790c5e..d3211c7ca 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 83ae3ff97..9faafa0d6 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -263,7 +263,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index 1ea794aff..4a6b6c90c 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -300,7 +300,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -323,18 +323,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -344,14 +344,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index e6758ae44..2f5138b6a 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "Microsoft.Extensions.Logging": { @@ -364,18 +364,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index bc89bbd3d..82b409d57 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -334,8 +334,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -377,18 +377,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -397,14 +397,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index 07b2602a3..5b3ceecbb 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -264,9 +264,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -274,8 +274,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -310,18 +310,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -331,14 +331,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net6.0-windows7.0": { @@ -565,9 +565,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.dui": { @@ -575,8 +575,8 @@ "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -611,18 +611,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -632,14 +632,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 75b92cf50..5a2313abd 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -50,9 +50,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -62,14 +62,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" }, "GraphQL.Client": { "type": "Transitive", @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 6cc02eeee..d012b1634 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -41,9 +41,9 @@ - - - + + + diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index e75b0c1e3..78874f8a1 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -53,18 +53,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -74,14 +74,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" }, "GraphQL.Client": { "type": "Transitive", @@ -386,18 +386,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -406,14 +406,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Connectors.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Tests/packages.lock.json index 383a089d1..2daff048b 100644 --- a/Sdk/Speckle.Connectors.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Tests/packages.lock.json @@ -324,9 +324,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )", - "Speckle.Sdk": "[3.1.0-dev.227, )", - "Speckle.Sdk.Dependencies": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )", + "Speckle.Sdk.Dependencies": "[3.1.0-dev.228, )" } }, "speckle.connectors.logging": { @@ -368,18 +368,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -388,14 +388,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index c8920286b..0e9d82396 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -332,7 +332,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.1.0-dev.227, )" + "Speckle.Objects": "[3.1.0-dev.228, )" } }, "speckle.testing": { @@ -362,18 +362,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -382,14 +382,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index 98f57a6f4..96903d64f 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -50,11 +50,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -309,9 +309,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } }, "net8.0": { @@ -371,11 +371,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "/SJ8yADyQ2pgeyaV+mUiwYSxLOvgafpu7zYK+j+ow1N4+6HFnujf2mYUCNyqjeUGK1swJEdy1MC8y3n09rZQYw==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", "dependencies": { - "Speckle.Sdk": "3.1.0-dev.227" + "Speckle.Sdk": "3.1.0-dev.228" } }, "GraphQL.Client": { @@ -568,9 +568,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "05ADV24xMWYF8FRtDsri2KOltR10Jgi9nSsvOeCk5bDM3aIH0DDWjayvstuGtEZ54ACWPnRSJ2ppAZqUfcHaaQ==", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.CSharp": "4.7.0", @@ -579,14 +579,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.0.1", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.1.0-dev.227" + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.1.0-dev.227, )", - "resolved": "3.1.0-dev.227", - "contentHash": "pdfBEvgXUHcZ2uCxTJ7bRt0Xs60iIvPvwzjUo3RaSYcHpcljPrOG0Ki1JRR844ZON66KPp7yesByjLvI0Ttujw==" + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" } } } From d76865e6212078b946601c04e36261778efd782c Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 15 Jan 2025 12:01:45 +0000 Subject: [PATCH 37/40] moving IFC to connectors repo (#488) * First pass of moving IFC to connectors repo * Fix some errors and ignore others * fix namespaces and exceptions * fix namespaces * formatting * Fix namespaces and move stuff * add linux ci * more csproj changes * importer stuff will be the nuget * add pack version and to Local sln * do a nuget push on main * fix restore --- .github/workflows/ci.yml | 5 +- .github/workflows/main.yml | 8 +- Build/Program.cs | 23 + Directory.Packages.props | 3 + .../DummySendCacheManager.cs | 28 + .../DummyServerObjectManager.cs | 43 + .../Speckle.Importers.Ifc.Tester/Program.cs | 65 + .../Speckle.Importers.Ifc.Tester/Progress.cs | 36 + .../Speckle.Importers.Ifc.Tester.csproj | 13 + .../packages.lock.json | 307 +++++ .../Ara3D.IfcParser/Extensions.cs | 197 +++ .../Ara3D.IfcParser/IfcEntity.cs | 65 + .../Ara3D.IfcParser/IfcGraph.cs | 232 ++++ .../Ara3D.IfcParser/IfcNode.cs | 9 + .../Ara3D.IfcParser/IfcProp.cs | 21 + .../Ara3D.IfcParser/IfcPropSet.cs | 42 + .../Ara3D.IfcParser/IfcPropSetRelation.cs | 21 + .../Ara3D.IfcParser/IfcRelation.cs | 25 + .../Ara3D.IfcParser/IfcRelationAggregate.cs | 9 + .../Ara3D.IfcParser/IfcRelationSpatial.cs | 9 + .../Ara3D.IfcParser/IfcRelationType.cs | 9 + .../Ara3D.StepParser/AlignedMemoryReader.cs | 31 + .../Ara3D.StepParser/ByteSpanExtensions.cs | 13 + .../Ara3D.StepParser/StepDocument.cs | 102 ++ .../Ara3D.StepParser/StepFactory.cs | 90 ++ .../Ara3D.StepParser/StepGraph.cs | 59 + .../Ara3D.StepParser/StepInstance.cs | 25 + .../Ara3D.StepParser/StepLineParser.cs | 151 +++ .../Ara3D.StepParser/StepNode.cs | 52 + .../Ara3D.StepParser/StepRawInstance.cs | 20 + .../Ara3D.StepParser/StepToken.cs | 17 + .../Ara3D.StepParser/StepTokenType.cs | 22 + .../Ara3D.StepParser/StepTokenizer.cs | 306 +++++ .../Ara3D.StepParser/StepValue.cs | 154 +++ .../Converters/GeometryConverter.cs | 20 + .../Converters/GraphConverter.cs | 19 + .../Converters/MeshConverter.cs | 49 + .../Converters/NodeConverter.cs | 73 ++ Importers/Ifc/Speckle.Importers.Ifc/Import.cs | 107 ++ .../Speckle.Importers.Ifc/Native/WebIfc.cs | 108 ++ .../Native/libweb-ifc.so | Bin 0 -> 1719384 bytes .../Speckle.Importers.Ifc/Native/web-ifc.dll | Bin 0 -> 911872 bytes .../ServiceRegistration.cs | 31 + .../Speckle.Importers.Ifc.csproj | 43 + .../SpeckleIfcException.cs | 14 + .../Speckle.Importers.Ifc/Types/IfcColor.cs | 12 + .../Speckle.Importers.Ifc/Types/IfcFactory.cs | 21 + .../Types/IfcGeometry.cs | 18 + .../Speckle.Importers.Ifc/Types/IfcLine.cs | 9 + .../Speckle.Importers.Ifc/Types/IfcMesh.cs | 15 + .../Speckle.Importers.Ifc/Types/IfcModel.cs | 33 + .../Types/IfcSchemaType.cs | 1149 +++++++++++++++++ .../Speckle.Importers.Ifc/Types/IfcVertex.cs | 14 + .../Speckle.Importers.Ifc/packages.lock.json | 296 +++++ Local.sln | 23 + Speckle.Connectors.sln | 25 +- 56 files changed, 4288 insertions(+), 3 deletions(-) create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/DummySendCacheManager.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/DummyServerObjectManager.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/Program.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/Progress.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj create mode 100644 Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/Extensions.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcEntity.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcGraph.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcNode.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcProp.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSet.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSetRelation.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelation.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationAggregate.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationSpatial.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationType.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/AlignedMemoryReader.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/ByteSpanExtensions.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepDocument.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepFactory.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepGraph.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepInstance.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepLineParser.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepNode.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepRawInstance.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepToken.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenType.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenizer.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepValue.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Converters/GeometryConverter.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Converters/GraphConverter.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Converters/MeshConverter.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Converters/NodeConverter.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Import.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Native/WebIfc.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Native/libweb-ifc.so create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Native/web-ifc.dll create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/ServiceRegistration.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/SpeckleIfcException.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcColor.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcFactory.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcGeometry.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcLine.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcMesh.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcModel.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcSchemaType.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/Types/IfcVertex.cs create mode 100644 Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8d2512ca3..6c358f36a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,10 @@ jobs: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - - name: ⚒️ Run build + - name: ⚒️ Run Build on Linux + run: ./build.sh build-linux + + - name: ⚒️ Run tests run: ./build.sh test-only - name: Upload coverage reports to Codecov with GitHub Action diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 478f552d6..af72f5344 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -87,7 +87,10 @@ jobs: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - - name: ⚒️ Run build + - name: ⚒️ Run Build and Pack on Linux + run: ./build.sh build-linux + + - name: ⚒️ Run tests run: ./build.sh test-only - name: Upload coverage reports to Codecov with GitHub Action @@ -95,3 +98,6 @@ jobs: with: file: Converters/**/coverage.xml token: ${{ secrets.CODECOV_TOKEN }} + + - name: Push to nuget.org + run: dotnet nuget push output/*.nupkg --source "https://api.nuget.org/v3/index.json" --api-key ${{secrets.CONNECTORS_NUGET_TOKEN }} --skip-duplicate diff --git a/Build/Program.cs b/Build/Program.cs index 3eb8dac67..cb6e5fc36 100644 --- a/Build/Program.cs +++ b/Build/Program.cs @@ -7,6 +7,7 @@ const string CLEAN = "clean"; const string RESTORE = "restore"; const string BUILD = "build"; +const string BUILD_LINUX = "build-linux"; const string TEST = "test"; const string TEST_ONLY = "test-only"; const string FORMAT = "format"; @@ -183,6 +184,28 @@ void RemoveDirectory(string d) } ); +Target( + BUILD_LINUX, + DependsOn(FORMAT), + Glob.Files(".", "**/Speckle.Importers.Ifc.csproj"), + file => + { + Run("dotnet", $"restore {file} --locked-mode"); + var version = Environment.GetEnvironmentVariable("GitVersion_FullSemVer") ?? "3.0.0-localBuild"; + var fileVersion = Environment.GetEnvironmentVariable("GitVersion_AssemblySemFileVer") ?? "3.0.0.0"; + Console.WriteLine($"Version: {version} & {fileVersion}"); + Run( + "dotnet", + $"build {file} -c Release --no-restore -warnaserror -p:Version={version} -p:FileVersion={fileVersion} -v:m" + ); + + RunAsync( + "dotnet", + $"pack {file} -c Release -o output --no-build -p:Version={version} -p:FileVersion={fileVersion} -v:m" + ); + } +); + Target( ZIP, DependsOn(TEST), diff --git a/Directory.Packages.props b/Directory.Packages.props index d012b1634..6a648e78a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,5 +1,8 @@ + + + diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummySendCacheManager.cs b/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummySendCacheManager.cs new file mode 100644 index 000000000..10f5d8454 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummySendCacheManager.cs @@ -0,0 +1,28 @@ +using Speckle.Sdk.SQLite; + +namespace Speckle.Importers.Ifc.Tester; + +public sealed class DummySendCacheManager(Dictionary objects) : ISqLiteJsonCacheManager +{ + public void Dispose() { } + + public IReadOnlyCollection<(string, string)> GetAllObjects() => throw new NotImplementedException(); + + public void DeleteObject(string id) => throw new NotImplementedException(); + + public string? GetObject(string id) => null; + + public void SaveObject(string id, string json) => throw new NotImplementedException(); + + public bool HasObject(string objectId) => false; + + public void SaveObjects(IEnumerable<(string id, string json)> items) + { + foreach (var (id, json) in items) + { + objects[id] = json; + } + } + + public void UpdateObject(string id, string json) => throw new NotImplementedException(); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummyServerObjectManager.cs b/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummyServerObjectManager.cs new file mode 100644 index 000000000..0adb1a878 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/DummyServerObjectManager.cs @@ -0,0 +1,43 @@ +using System.Text; +using Speckle.Sdk.Serialisation.V2; +using Speckle.Sdk.Serialisation.V2.Send; +using Speckle.Sdk.Transports; + +namespace Speckle.Importers.Ifc.Tester; + +public class DummyServerObjectManager : IServerObjectManager +{ + public IAsyncEnumerable<(string, string)> DownloadObjects( + IReadOnlyCollection objectIds, + IProgress? progress, + CancellationToken cancellationToken + ) => throw new NotImplementedException(); + + public Task DownloadSingleObject( + string objectId, + IProgress? progress, + CancellationToken cancellationToken + ) => throw new NotImplementedException(); + + public Task> HasObjects( + IReadOnlyCollection objectIds, + CancellationToken cancellationToken + ) => Task.FromResult(objectIds.ToDictionary(id => id, id => false)); + + public Task UploadObjects( + IReadOnlyList objects, + bool compressPayloads, + IProgress? progress, + CancellationToken cancellationToken + ) + { + long totalBytes = 0; + foreach (var item in objects) + { + totalBytes += Encoding.Default.GetByteCount(item.Json.Value); + } + + progress?.Report(new(ProgressEvent.UploadBytes, totalBytes, totalBytes)); + return Task.CompletedTask; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/Program.cs b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Program.cs new file mode 100644 index 000000000..a8d0c4758 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Program.cs @@ -0,0 +1,65 @@ +#pragma warning disable CA1506 +using System.Diagnostics; +using Ara3D.Utils; +//using JetBrains.Profiler.SelfApi; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Importers.Ifc; +using Speckle.Importers.Ifc.Ara3D.IfcParser; +using Speckle.Importers.Ifc.Converters; +using Speckle.Importers.Ifc.Tester; +using Speckle.Importers.Ifc.Types; +using Speckle.Sdk.Serialisation.V2.Send; +using Speckle.Sdk.SQLite; + +var serviceProvider = Import.GetServiceProvider(); + +//DotMemory.Init(); +var filePath = new FilePath( + //"C:\\Users\\adam\\Git\\speckle-server\\packages\\fileimport-service\\ifc-dotnet\\ifcs\\20210221PRIMARK.ifc" + //"C:\\Users\\adam\\Git\\speckle-server\\packages\\fileimport-service\\ifc-dotnet\\ifcs\\231110ADT-FZK-Haus-2005-2006.ifc" + //"C:\\Users\\adam\\Downloads\\T03PV06IMPMI01C.ifc" + "C:\\Users\\adam\\Downloads\\20231128_HW_Bouwkosten.ifc" +); + +var ifcFactory = serviceProvider.GetRequiredService(); +var stopwatch = Stopwatch.StartNew(); + +Console.WriteLine($"Opening with WebIFC: {filePath}"); +var model = ifcFactory.Open(filePath); +var ms = stopwatch.ElapsedMilliseconds; +Console.WriteLine($"Opened with WebIFC: {ms} ms"); + +var graph = IfcGraph.Load(new FilePath(filePath)); +var ms2 = stopwatch.ElapsedMilliseconds; +Console.WriteLine($"Loaded with StepParser: {ms2 - ms} ms"); + +var converter = serviceProvider.GetRequiredService(); +var b = converter.Convert(model, graph); +ms = ms2; +ms2 = stopwatch.ElapsedMilliseconds; +Console.WriteLine($"Converted to Speckle Bases: {ms2 - ms} ms"); + +var cache = $"C:\\Users\\adam\\Git\\temp\\{Guid.NewGuid()}.db"; +using var sqlite = new SqLiteJsonCacheManager($"Data Source={cache};", 2); +using var process2 = new SerializeProcess( + new Progress(true), + sqlite, + new DummyServerObjectManager(), + new BaseChildFinder(new BasePropertyGatherer()), + new ObjectSerializerFactory(new BasePropertyGatherer()), + new SerializeProcessOptions(SkipServer: true) +); +Console.WriteLine($"Caching to Speckle: {cache}"); + +/*var config = new DotMemory.Config(); +config.OpenDotMemory(); +config.SaveToDir("C:\\Users\\adam\\dotTraceSnapshots"); +DotMemory.Attach(config); +DotMemory.GetSnapshot("Before");*/ +var (rootId, _) = await process2.Serialize(b, default).ConfigureAwait(false); +Console.WriteLine(rootId); +ms2 = stopwatch.ElapsedMilliseconds; +Console.WriteLine($"Converted to JSON: {ms2 - ms} ms"); +//DotMemory.GetSnapshot("After"); +//DotMemory.Detach(); +#pragma warning restore CA1506 diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/Progress.cs b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Progress.cs new file mode 100644 index 000000000..0601c31f7 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Progress.cs @@ -0,0 +1,36 @@ +using Speckle.Sdk.Transports; + +namespace Speckle.Importers.Ifc.Tester; + +public class Progress(bool write) : IProgress +{ + private readonly TimeSpan _debounce = TimeSpan.FromMilliseconds(1000); + private DateTime _lastTime = DateTime.UtcNow; + + private long _totalBytes; + + public void Report(ProgressArgs value) + { + if (write) + { + if (value.ProgressEvent == ProgressEvent.DownloadBytes) + { + Interlocked.Add(ref _totalBytes, value.Count); + } + var now = DateTime.UtcNow; + if (now - _lastTime >= _debounce) + { + if (value.ProgressEvent == ProgressEvent.DownloadBytes) + { + Console.WriteLine(value.ProgressEvent + " t " + _totalBytes); + } + else + { + Console.WriteLine(value.ProgressEvent + " c " + value.Count + " t " + value.Total); + } + + _lastTime = now; + } + } + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj new file mode 100644 index 000000000..17b459a6c --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/Speckle.Importers.Ifc.Tester.csproj @@ -0,0 +1,13 @@ + + + + Exe + net8.0 + Debug;Release;Local + + + + + + + diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json new file mode 100644 index 000000000..13a4b3737 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json @@ -0,0 +1,307 @@ +{ + "version": 2, + "dependencies": { + "net8.0": { + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net461": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.5", + "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" + }, + "speckle.importers.ifc": { + "type": "Project", + "dependencies": { + "Ara3D.Buffers": "[1.4.5, )", + "Ara3D.Logging": "[1.4.5, )", + "Ara3D.Utils": "[1.4.5, )", + "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", + "Speckle.Objects": "[3.1.0-dev.228, )", + "Speckle.Sdk": "[3.1.0-dev.228, )" + } + }, + "Ara3D.Buffers": { + "type": "CentralTransitive", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "SKcQqgtXukyHTlTKFPCaUW4spSkue3XfBU/GmoA7KhH6H995v6TbJxtqjs0EfSgnXEkajL8U7X1NqktScRozXw==", + "dependencies": { + "System.Memory": "4.5.5" + } + }, + "Ara3D.Logging": { + "type": "CentralTransitive", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "7HPCe5Dq21JoOBF1iclk9H37XFCoB2ZzCPqTMNgdg4PWFvuRsofNbiuMdiE/HKgMHCVhy1C5opB2KwDKcO7Axw==", + "dependencies": { + "Ara3D.Utils": "1.4.5" + } + }, + "Ara3D.Utils": { + "type": "CentralTransitive", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "yba/E7PpbWP0+RDp+KbKw/vBXnXBSIheScdpVKuDnr8ytRg8pZ2Jd6nwKES+G0FcVEB9PeOVmEW7SGrFvAwRCg==" + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Objects": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.228" + } + }, + "Speckle.Sdk": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" + } + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" + } + } + } +} \ No newline at end of file diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/Extensions.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/Extensions.cs new file mode 100644 index 000000000..dc5933a1d --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/Extensions.cs @@ -0,0 +1,197 @@ +using System.Text; +using Ara3D.Buffers; +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public static class IfcExtensions +{ + public static void Add(this IDictionary> self, TKey key, TValue value) + { + if (!self.ContainsKey(key)) + self[key] = new List(); + self[key].Add(value); + } + + public static uint AsId(this StepValue value) => value is StepUnassigned ? 0u : ((StepId)value).Id; + + public static string AsString(this StepValue value) => + value is StepString ss + ? ss.AsString() + : value is StepNumber sn + ? sn.Value.ToString() + : value is StepId si + ? si.Id.ToString() + : value is StepSymbol ssm + ? ssm.Name.ToString() + : ""; + + public static double AsNumber(this StepValue value) => value is StepUnassigned ? 0 : ((StepNumber)value).Value; + + public static List AsList(this StepValue value) => + value is StepUnassigned ? new List() : ((StepList)value).Values; + + public static List AsIdList(this StepValue value) => + value is StepUnassigned ? new List() : value.AsList().Select(AsId).ToList(); + + // Uses Latin1 encoding (aka ISO-8859-1) + // Extended characters converted using an IFC specific system + public static string AsString(this ByteSpan span) => Encoding.Latin1.GetString(span.ToSpan()).IfcToUnicode(); + + // https://technical.buildingsmart.org/resources/ifcimplementationguidance/string-encoding/ + public static string IfcToUnicode(this string input) + { + if (!input.Contains('\\')) + return input; + + var output = new StringBuilder(); + var i = 0; + var length = input.Length; + while (i < length) + { + if (input[i] != '\\') + { + // Regular character, append to output + output.Append(input[i++]); + continue; + } + + i++; // Move past '\' + if (i >= length) + { + output.Append('\\'); + break; + } + + var escapeChar = input[i++]; + + if (escapeChar == 'S' && i < length && input[i] == '\\') + { + i++; // Move past '\' + if (i < length) + { + var c = input[i++]; + var code = c + 128; + output.Append((char)code); + } + else + { + output.Append("\\S\\"); + } + continue; + } + + if (escapeChar == 'X') + { + if (i < length && input[i] == '\\') + { + // Handle \X\XX escape sequence (8-bit character code) + i++; // Move past '\' + if (i + 1 < length) + { + var hex = input.Substring(i, 2); + i += 2; + var code = Convert.ToInt32(hex, 16); + output.Append((char)code); + } + else + { + output.Append("\\X\\"); + } + + continue; + } + + // Handle extended \Xn\...\X0\ escape sequence + // Skip 'n' until the next '\' + while (i < length && input[i] != '\\') + i++; + if (i < length) + i++; // Move past '\' + + // Collect hex digits until '\X0\' + var hexDigits = new StringBuilder(); + while (i + 3 <= length && input.Substring(i, 3) != "\\X0") + { + hexDigits.Append(input[i++]); + } + + if (i + 3 <= length && input.Substring(i, 3) == "\\X0") + { + i += 3; // Move past '\X0' + if (i < length && input[i] == '\\') + i++; // Move past '\' + + var hexStr = hexDigits.ToString(); + + // Process hex digits in chunks of 4 (representing Unicode code points) + for (var k = 0; k + 4 <= hexStr.Length; k += 4) + { + var codeHex = hexStr.Substring(k, 4); + var code = Convert.ToInt32(codeHex, 16); + output.Append(char.ConvertFromUtf32(code)); + } + continue; + } + + // Invalid format, append as is + output.Append("\\X"); + continue; + } + + // Unrecognized escape sequence, append as is + output.Append('\\').Append(escapeChar); + } + + return output.ToString(); + } + + public static string AsString(this StepString ss) => ss.Value.AsString(); + + public static object? ToJsonObject(this StepValue sv) + { + switch (sv) + { + case StepEntity stepEntity: + { + var attr = stepEntity.Attributes; + if (attr.Values.Count == 0) + return stepEntity.ToString(); + + if (attr.Values.Count == 1) + return attr.Values[0].ToJsonObject(); + + return attr.Values.Select(ToJsonObject).ToList(); + } + + case StepId stepId: + return stepId.Id; + + case StepList stepList: + return stepList.Values.Select(ToJsonObject).ToList(); + + case StepNumber stepNumber: + return stepNumber.AsNumber(); + + case StepRedeclared stepRedeclared: + return null; + + case StepString stepString: + return stepString.AsString(); + + case StepSymbol stepSymbol: + var tmp = stepSymbol.Name.AsString(); + if (tmp == "T") + return true; + if (tmp == "F") + return false; + return tmp; + + case StepUnassigned stepUnassigned: + return null; + + default: + throw new ArgumentOutOfRangeException(nameof(sv)); + } + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcEntity.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcEntity.cs new file mode 100644 index 000000000..899daa146 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcEntity.cs @@ -0,0 +1,65 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +/// +/// It represents an entity definition. It is usually a single line in a STEP file. +/// Many entity definitions are derived from IfcRoot (including relations). +/// IfcRoot has a GUID, OwnerId, optional Name, and optional Description +/// https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifckernel/lexical/ifcroot.htm +/// +public class IfcEntity +{ + public StepInstance LineData { get; } + public IfcGraph Graph { get; } + public uint Id => LineData.Id; + public string Type => LineData?.EntityType ?? ""; + + public IfcEntity(IfcGraph graph, StepInstance lineData) + { + Graph = graph; + LineData = lineData; + } + + public override bool Equals(object? obj) + { + if (obj is IfcEntity other) + return Id == other.Id; + return false; + } + + public override int GetHashCode() => (int)Id; + + public override string ToString() => $"{Type}#{Id}"; + + public bool IsIfcRoot => Count >= 4 && this[0] is StepString && (this[1] is StepId) || (this[1] is StepUnassigned); + + // Modern IFC files conform to this, but older ones have been observed to have different length IDs. + // Leaving as a comment for now. + //&& str.Value.Length == 22; + + public string? Guid => IsIfcRoot ? (this[0] as StepString)?.Value.ToString() : null; + + public uint OwnerId => IsIfcRoot ? (this[1] as StepId)?.Id ?? 0 : 0; + + public string? Name => IsIfcRoot ? (this[2] as StepString)?.AsString() : null; + + public string? Description => IsIfcRoot ? (this[3] as StepString)?.AsString() : null; + + public int Count => LineData.Count; + + public StepValue this[int i] => LineData[i]; + + public IReadOnlyList GetOutgoingRelations() => Graph.GetRelationsFrom(Id); + + public IEnumerable GetAggregatedChildren() => + GetOutgoingRelations().OfType().SelectMany(r => r.GetRelatedNodes()); + + public IEnumerable GetSpatialChildren() => + GetOutgoingRelations().OfType().SelectMany(r => r.GetRelatedNodes()); + + public IEnumerable GetChildren() => GetAggregatedChildren().Concat(GetSpatialChildren()); + + public IReadOnlyList GetPropSets() => + Graph.PropertySetsByNode.TryGetValue(Id, out var list) ? list : Array.Empty(); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcGraph.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcGraph.cs new file mode 100644 index 000000000..1f2664e6d --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcGraph.cs @@ -0,0 +1,232 @@ +using System.Diagnostics; +using Ara3D.Logging; +using Ara3D.Utils; +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +/// +/// This is a high-level representation of an IFC model as a graph of nodes and relations. +/// It also contains the properties, and property sets. +/// +public class IfcGraph +{ + public static IfcGraph Load(FilePath fp, ILogger? logger = null) => + new IfcGraph(new StepDocument(fp, logger), logger); + + public StepDocument Document { get; } + + public Dictionary Nodes { get; } = new Dictionary(); + public List Relations { get; } = new List(); + public Dictionary> RelationsByNode { get; } = new Dictionary>(); + public Dictionary> PropertySetsByNode { get; } = new Dictionary>(); + + public IReadOnlyList RootIds { get; } + + public IfcNode AddNode(IfcNode n) => Nodes[n.Id] = n; + + public IfcRelation AddRelation(IfcRelation r) + { + Relations.Add(r); + RelationsByNode.Add(r.From.Id, r); + return r; + } + + public IfcGraph(StepDocument d, ILogger? logger = null) + { + Document = d; + + logger?.Log("Computing entities"); + foreach (var inst in Document.RawInstances) + { + if (!inst.IsValid()) + continue; + + // TODO: converting entities into numerical hashes would likely improve performance significantly. + // Here we are doing a lot of comparisons. + + // Property Values + if (inst.Type.Equals("IFCPROPERTYSINGLEVALUE")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[2])); + } + else if (inst.Type.Equals("IFCPROPERTYENUMERATEDVALUE")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[2])); + } + else if (inst.Type.Equals("IFCPROPERTYREFERENCEVALUE")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCPROPERTYLISTVALUE")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[2])); + } + else if (inst.Type.Equals("IFCCOMPLEXPROPERTY")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + // Quantities which are a treated as a kind of prop + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcphysicalquantity.htm + else if (inst.Type.Equals("IFCQUANTITYLENGTH")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantitylength.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCQUANTITYAREA")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantityarea.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCQUANTITYVOLUME")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantityvolume.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCQUANTITYCOUNT")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantitycount.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCQUANTITYWEIGHT")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantityweight.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCQUANTITYTIME")) + { + // https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcquantitytime.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[3])); + } + else if (inst.Type.Equals("IFCPHYSICALCOMPLEXQUANTITY")) + { + //https://iaiweb.lbl.gov/Resources/IFC_Releases/R2x3_final/ifcquantityresource/lexical/ifcphysicalcomplexquantity.htm + var e = d.GetInstanceWithData(inst); + AddNode(new IfcProp(this, e, e[2])); + } + // Property Set (or element quantity) + else if (inst.Type.Equals("IFCPROPERTYSET")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcPropSet(this, e, (StepList)e[4])); + } + else if (inst.Type.Equals("IFCELEMENTQUANTITY")) + { + var e = d.GetInstanceWithData(inst); + AddNode(new IfcPropSet(this, e, (StepList)e[5])); + } + // Aggregate relation + else if (inst.Type.Equals("IFCRELAGGREGATES")) + { + var e = d.GetInstanceWithData(inst); + AddRelation(new IfcRelationAggregate(this, e, (StepId)e[4], (StepList)e[5])); + } + // Spatial relation + else if (inst.Type.Equals("IFCRELCONTAINEDINSPATIALSTRUCTURE")) + { + var e = d.GetInstanceWithData(inst); + AddRelation(new IfcRelationSpatial(this, e, (StepId)e[5], (StepList)e[4])); + } + // Property set relations + else if (inst.Type.Equals("IFCRELDEFINESBYPROPERTIES")) + { + var e = d.GetInstanceWithData(inst); + AddRelation(new IfcPropSetRelation(this, e, (StepId)e[5], (StepList)e[4])); + } + // Type relations + else if (inst.Type.Equals("IFCRELDEFINESBYTYPE")) + { + var e = d.GetInstanceWithData(inst); + AddRelation(new IfcRelationType(this, e, (StepId)e[5], (StepList)e[4])); + } + // Everything else + else + { + // Simple IFC node: without step entity data. + var e = d.GetInstanceWithData(inst); + AddNode(new IfcNode(this, e)); + } + } + + logger?.Log("Retrieving the roots of all of the spatial relationship"); + RootIds = GetSpatialRelations().Where(r => r.From != null).Select(r => r.From.Id).Distinct().ToList(); + + logger?.Log("Creating lookup of property sets"); + + foreach (var psr in Relations.OfType()) + { + var ps = psr.PropSet; + foreach (var id in psr.GetRelatedIds()) + { + PropertySetsByNode.Add(id, ps); + } + } + + logger?.Log("Completed creating model graph"); + } + + public IEnumerable GetNodes() => Nodes.Values; + + public IEnumerable GetNodes(IEnumerable ids) => ids.Select(GetNode); + + public IfcNode GetOrCreateNode(StepInstance lineData, int arg) + { + if (arg < 0 || arg >= lineData.AttributeValues.Count) + throw new SpeckleIfcException("Argument index out of range"); + return GetOrCreateNode(lineData.AttributeValues[arg]); + } + + public IfcNode GetOrCreateNode(StepValue o) => + GetOrCreateNode(o is StepId id ? id.Id : throw new SpeckleIfcException($"Expected a StepId value, not {o}")); + + public IfcNode GetOrCreateNode(uint id) + { + var r = Nodes.TryGetValue(id, out var node) ? node : AddNode(new IfcNode(this, Document.GetInstanceWithData(id))); + Debug.Assert(r.Id == id); + return r; + } + + public List GetOrCreateNodes(List list) => list.Select(GetOrCreateNode).ToList(); + + public List GetOrCreateNodes(StepInstance line, int arg) + { + if (arg < 0 || arg >= line.AttributeValues.Count) + throw new SpeckleIfcException("Argument out of range"); + if (line.AttributeValues[arg] is not StepList agg) + throw new SpeckleIfcException("Expected a list"); + return GetOrCreateNodes(agg.Values); + } + + public IfcNode GetNode(StepId id) => GetNode(id.Id); + + public IfcNode GetNode(uint id) + { + var r = Nodes[id]; + Debug.Assert(r.Id == id); + return r; + } + + public IEnumerable GetSources() => RootIds.Select(GetNode); + + public IEnumerable GetPropSets() => GetNodes().OfType(); + + public IEnumerable GetProps() => GetNodes().OfType(); + + public IEnumerable GetSpatialRelations() => Relations.OfType(); + + public IEnumerable GetAggregateRelations() => Relations.OfType(); + + public IReadOnlyList GetRelationsFrom(uint id) => + RelationsByNode.TryGetValue(id, out var list) ? list : Array.Empty(); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcNode.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcNode.cs new file mode 100644 index 000000000..36b333f61 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcNode.cs @@ -0,0 +1,9 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public class IfcNode : IfcEntity +{ + public IfcNode(IfcGraph graph, StepInstance lineData) + : base(graph, lineData) { } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcProp.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcProp.cs new file mode 100644 index 000000000..575c3894b --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcProp.cs @@ -0,0 +1,21 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public class IfcProp : IfcNode +{ + public readonly StepValue Value; + + public new string Name => this[0].AsString(); + public new string Description => this[1].AsString(); + + public IfcProp(IfcGraph graph, StepInstance lineData, StepValue value) + : base(graph, lineData) + { + if (lineData.Count < 2) + throw new SpeckleIfcException("Expected at least two values in the line data"); + if (lineData[0] is not StepString) + throw new SpeckleIfcException("Expected the first value to be a string (Name)"); + Value = value; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSet.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSet.cs new file mode 100644 index 000000000..cd388a77d --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSet.cs @@ -0,0 +1,42 @@ +using System.Diagnostics; +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +// This merges two separate entity types: IfcPropertySet and IfcElementQuantity. +// Both of which are derived from IfcPropertySetDefinition. +// This is something that can be referred to by a PropertySetRelation +// An IfcElementQuantity has an additional "method of measurement" property. +// https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ifckernel/lexical/ifcpropertyset.htm +// https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ifcproductextension/lexical/ifcelementquantity.htm +public class IfcPropSet : IfcNode +{ + public readonly StepList PropertyIdList; + + public IfcPropSet(IfcGraph graph, StepInstance lineData, StepList propertyIdList) + : base(graph, lineData) + { + Debug.Assert(IsIfcRoot); + Debug.Assert(lineData.AttributeValues.Count is 5 or 6); + Debug.Assert(Type is "IFCPROPERTYSET" or "IFCELEMENTQUANTITY"); + PropertyIdList = propertyIdList; + } + + public IEnumerable GetProperties() + { + for (var i = 0; i < NumProperties; ++i) + { + var id = PropertyId(i); + var node = Graph.GetNode(id); + if (node is not IfcProp prop) + throw new SpeckleIfcException($"Expected a property not {node} from id {id}"); + yield return prop; + } + } + + public bool IsQuantity => LineData.AttributeValues.Count == 6; + public string? MethodOfMeasurement => IsQuantity ? this[4]?.AsString() : null; + public int NumProperties => PropertyIdList.Values.Count; + + public uint PropertyId(int i) => PropertyIdList.Values[i].AsId(); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSetRelation.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSetRelation.cs new file mode 100644 index 000000000..13c30b0f5 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcPropSetRelation.cs @@ -0,0 +1,21 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +// https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/ifckernel/lexical/ifcreldefinesbyproperties.htm +public class IfcPropSetRelation : IfcRelation +{ + public IfcPropSetRelation(IfcGraph graph, StepInstance lineData, StepId from, StepList to) + : base(graph, lineData, from, to) { } + + public IfcPropSet PropSet + { + get + { + var node = Graph.GetNode(From); + if (node is not IfcPropSet r) + throw new SpeckleIfcException($"Expected a property set not {node} from id {From}"); + return r; + } + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelation.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelation.cs new file mode 100644 index 000000000..276b7cf97 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelation.cs @@ -0,0 +1,25 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +/// +/// Always express a 1-to-many relation +/// +public class IfcRelation : IfcEntity +{ + public StepId From { get; } + public StepList To { get; } + + public IfcRelation(IfcGraph graph, StepInstance lineData, StepId from, StepList to) + : base(graph, lineData) + { + if (!IsIfcRoot) + throw new SpeckleIfcException("Expected relation to be an IFC root entity"); + From = from; + To = to; + } + + public IEnumerable GetRelatedIds() => To.Values.Select(v => v.AsId()); + + public IEnumerable GetRelatedNodes() => Graph.GetNodes(GetRelatedIds()); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationAggregate.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationAggregate.cs new file mode 100644 index 000000000..5b826a1a0 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationAggregate.cs @@ -0,0 +1,9 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public class IfcRelationAggregate : IfcRelation +{ + public IfcRelationAggregate(IfcGraph graph, StepInstance lineData, StepId from, StepList to) + : base(graph, lineData, from, to) { } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationSpatial.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationSpatial.cs new file mode 100644 index 000000000..1509d0ae0 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationSpatial.cs @@ -0,0 +1,9 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public class IfcRelationSpatial : IfcRelation +{ + public IfcRelationSpatial(IfcGraph graph, StepInstance lineData, StepId from, StepList to) + : base(graph, lineData, from, to) { } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationType.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationType.cs new file mode 100644 index 000000000..f049e1b55 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.IfcParser/IfcRelationType.cs @@ -0,0 +1,9 @@ +using Speckle.Importers.Ifc.Ara3D.StepParser; + +namespace Speckle.Importers.Ifc.Ara3D.IfcParser; + +public class IfcRelationType : IfcRelation +{ + public IfcRelationType(IfcGraph graph, StepInstance lineData, StepId from, StepList to) + : base(graph, lineData, from, to) { } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/AlignedMemoryReader.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/AlignedMemoryReader.cs new file mode 100644 index 000000000..2d61b9a9f --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/AlignedMemoryReader.cs @@ -0,0 +1,31 @@ +using System.Diagnostics; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public static class AlignedMemoryReader +{ + public static unsafe AlignedMemory ReadAllBytes(string path, int bufferSize = 1024 * 1024) + { + using var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize, false); + var fileLength = fs.Length; + if (fileLength > int.MaxValue) + throw new IOException("File too big: > 2GB"); + + var count = (int)fileLength; + var r = new AlignedMemory(count); + var pBytes = r.BytePtr; + while (count > 0) + { + var span = new Span(pBytes, count); + var n = fs.Read(span); + if (n == 0) + break; + pBytes += n; + count -= n; + } + + Debug.Assert(count == 0); + return r; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/ByteSpanExtensions.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/ByteSpanExtensions.cs new file mode 100644 index 000000000..60bccc81a --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/ByteSpanExtensions.cs @@ -0,0 +1,13 @@ +using System.Runtime.CompilerServices; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public static class ByteSpanExtensions +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ToDouble(this ByteSpan self) => double.Parse(self.ToSpan()); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int ToInt(this ByteSpan self) => int.Parse(self.ToSpan()); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepDocument.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepDocument.cs new file mode 100644 index 000000000..e56a490d3 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepDocument.cs @@ -0,0 +1,102 @@ +using System.Runtime.Intrinsics; +using Ara3D.Buffers; +using Ara3D.Logging; +using Ara3D.Utils; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public sealed unsafe class StepDocument : IDisposable +{ + public readonly FilePath FilePath; + public readonly byte* DataStart; + public readonly byte* DataEnd; + public readonly AlignedMemory Data; + + /// + /// This is a list of raw step instance information. + /// Each one has only a type and an ID. + /// + public readonly StepRawInstance[] RawInstances; + + /// + /// The number of raw instance + /// + public readonly int NumRawInstances; + + /// + /// This gives us a fast way to look up a StepInstance by their ID + /// + public readonly Dictionary InstanceIdToIndex = new(); + + /// + /// This tells us the byte offset of the start of each line in the file + /// + public readonly List LineOffsets; + + public StepDocument(FilePath filePath, ILogger? logger = null) + { + FilePath = filePath; + logger ??= Logger.Null; + + logger.Log($"Loading {filePath.GetFileSizeAsString()} of data from {filePath.GetFileName()}"); + Data = AlignedMemoryReader.ReadAllBytes(filePath); + DataStart = Data.BytePtr; + DataEnd = DataStart + Data.NumBytes; + + logger.Log($"Computing the start of each line"); + // NOTE: this estimates that the average line length is at least 32 characters. + // This minimize the number of allocations that happen + var cap = Data.NumBytes / 32; + LineOffsets = new List(cap); + + // We are going to report the beginning of the lines, while the "ComputeLines" function + // will compute the ends of lines. + var currentLine = 1; + for (var i = 0; i < Data.NumVectors; i++) + { + StepLineParser.ComputeOffsets(((Vector256*)Data.BytePtr)[i], ref currentLine, LineOffsets); + } + + logger.Log($"Found {LineOffsets.Count} lines"); + + logger.Log($"Creating instance records"); + RawInstances = new StepRawInstance[LineOffsets.Count]; + + for (var i = 0; i < LineOffsets.Count - 1; i++) + { + var lineStart = LineOffsets[i]; + var lineEnd = LineOffsets[i + 1]; + var inst = StepLineParser.ParseLine(DataStart + lineStart, DataStart + lineEnd); + if (inst.IsValid()) + { + InstanceIdToIndex.Add(inst.Id, NumRawInstances); + RawInstances[NumRawInstances++] = inst; + } + } + + logger.Log($"Completed creation of STEP document from {filePath.GetFileName()}"); + } + + public void Dispose() => Data.Dispose(); + + public StepInstance GetInstanceWithData(uint id) => GetInstanceWithDataFromIndex(InstanceIdToIndex[id]); + + public StepInstance GetInstanceWithDataFromIndex(int index) => GetInstanceWithData(RawInstances[index]); + + public StepInstance GetInstanceWithData(StepRawInstance inst) + { + var attr = inst.GetAttributes(DataEnd); + var se = new StepEntity(inst.Type, attr); + return new StepInstance(inst.Id, se); + } + + public static StepDocument Create(FilePath fp) => new(fp); + + public IEnumerable GetRawInstances(string typeCode) => + RawInstances.Where(inst => inst.Type.Equals(typeCode)); + + public IEnumerable GetInstances() => RawInstances.Select(GetInstanceWithData); + + public IEnumerable GetInstances(string typeCode) => + GetRawInstances(typeCode).Select(GetInstanceWithData); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepFactory.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepFactory.cs new file mode 100644 index 000000000..e7cb5bbab --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepFactory.cs @@ -0,0 +1,90 @@ +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public static unsafe class StepFactory +{ + public static StepList GetAttributes(this StepRawInstance inst, byte* lineEnd) + { + if (!inst.IsValid()) + return StepList.CreateDefault(); + var ptr = inst.Type.End(); + var token = StepTokenizer.ParseToken(ptr, lineEnd); + // TODO: there is a potential bug here when the line is split across multiple line + return CreateAggregate(ref token, lineEnd); + } + + public static StepValue Create(ref StepToken token, byte* end) + { + switch (token.Type) + { + case StepTokenType.String: + return StepString.Create(token); + + case StepTokenType.Symbol: + return StepSymbol.Create(token); + + case StepTokenType.Id: + return StepId.Create(token); + + case StepTokenType.Redeclared: + return StepRedeclared.Create(token); + + case StepTokenType.Unassigned: + return StepUnassigned.Create(token); + + case StepTokenType.Number: + return StepNumber.Create(token); + + case StepTokenType.Ident: + var span = token.Span; + StepTokenizer.ParseNextToken(ref token, end); + var attr = CreateAggregate(ref token, end); + return new StepEntity(span, attr); + + case StepTokenType.BeginGroup: + return CreateAggregate(ref token, end); + + case StepTokenType.None: + case StepTokenType.Whitespace: + case StepTokenType.Comment: + case StepTokenType.Unknown: + case StepTokenType.LineBreak: + case StepTokenType.EndOfLine: + case StepTokenType.Definition: + case StepTokenType.Separator: + case StepTokenType.EndGroup: + default: + throw new SpeckleIfcException($"Cannot convert token type {token.Type} to a StepValue"); + } + } + + public static StepList CreateAggregate(ref StepToken token, byte* end) + { + var values = new List(); + StepTokenizer.EatWSpace(ref token, end); + if (token.Type != StepTokenType.BeginGroup) + throw new SpeckleIfcException("Expected '('"); + + while (StepTokenizer.ParseNextToken(ref token, end)) + { + switch (token.Type) + { + // Advance past comments, whitespace, and commas + case StepTokenType.Comment: + case StepTokenType.Whitespace: + case StepTokenType.LineBreak: + case StepTokenType.Separator: + case StepTokenType.None: + continue; + + // Expected end of group + case StepTokenType.EndGroup: + return new StepList(values); + } + + var curValue = Create(ref token, end); + values.Add(curValue); + } + + throw new SpeckleIfcException("Unexpected end of input"); + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepGraph.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepGraph.cs new file mode 100644 index 000000000..dd45cba98 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepGraph.cs @@ -0,0 +1,59 @@ +using Ara3D.Utils; +using Speckle.Sdk.Common; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public class StepGraph +{ + public StepDocument Document { get; } + + public readonly Dictionary Lookup = new(); + + public StepNode GetNode(uint id) => Lookup[id]; + + public IEnumerable Nodes => Lookup.Values; + + public StepGraph(StepDocument doc) + { + Document = doc; + + foreach (var e in doc.GetInstances()) + { + var node = new StepNode(this, e); + Lookup.Add(node.Entity.Id, node); + } + + foreach (var n in Nodes) + n.Init(); + } + + public static StepGraph Create(StepDocument doc) => new(doc); + + public string ToValString(StepNode node, int depth) => ToValString(node.Entity.Entity, depth - 1); + + public string ToValString(StepValue value, int depth) + { + if (value == null) + return ""; + + switch (value) + { + case StepList stepAggregate: + return $"({stepAggregate.Values.Select(v => ToValString(v, depth)).JoinStringsWithComma()})"; + + case StepEntity stepEntity: + return $"{stepEntity.EntityType}{ToValString(stepEntity.Attributes, depth)}"; + + case StepId stepId: + return depth <= 0 ? "#" : ToValString(GetNode(stepId.Id), depth - 1); + + case StepNumber stepNumber: + case StepRedeclared stepRedeclared: + case StepString stepString: + case StepSymbol stepSymbol: + case StepUnassigned stepUnassigned: + default: + return value.ToString().NotNull(); + } + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepInstance.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepInstance.cs new file mode 100644 index 000000000..8d405acc5 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepInstance.cs @@ -0,0 +1,25 @@ +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public class StepInstance +{ + public readonly StepEntity Entity; + public readonly uint Id; + + public List AttributeValues => Entity.Attributes.Values; + + public string EntityType => Entity?.EntityType.ToString() ?? ""; + + public StepInstance(uint id, StepEntity entity) + { + Id = id; + Entity = entity; + } + + public bool IsEntityType(string str) => EntityType == str; + + public override string ToString() => $"#{Id}={Entity};"; + + public int Count => AttributeValues.Count; + + public StepValue this[int i] => AttributeValues[i]; +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepLineParser.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepLineParser.cs new file mode 100644 index 000000000..48316abfe --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepLineParser.cs @@ -0,0 +1,151 @@ +using System.Runtime.CompilerServices; +using System.Runtime.Intrinsics; +using System.Runtime.Intrinsics.X86; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public static class StepLineParser +{ + public static readonly Vector256 Comma = Vector256.Create((byte)','); + public static readonly Vector256 NewLine = Vector256.Create((byte)'\n'); + public static readonly Vector256 StartGroup = Vector256.Create((byte)'('); + public static readonly Vector256 EndGroup = Vector256.Create((byte)')'); + public static readonly Vector256 Definition = Vector256.Create((byte)'='); + public static readonly Vector256 Quote = Vector256.Create((byte)'\''); + public static readonly Vector256 Id = Vector256.Create((byte)'#'); + public static readonly Vector256 SemiColon = Vector256.Create((byte)';'); + public static readonly Vector256 Unassigned = Vector256.Create((byte)'*'); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void ComputeOffsets(in Vector256 v, ref int index, List offsets) + { + var r = Avx2.CompareEqual(v, NewLine); + var mask = (uint)Avx2.MoveMask(r); + if (mask == 0) + { + index += 32; + return; + } + + // Fully unrolled handling of each bit + if ((mask & 0x00000001) != 0) + offsets.Add(index); + if ((mask & 0x00000002) != 0) + offsets.Add(index + 1); + if ((mask & 0x00000004) != 0) + offsets.Add(index + 2); + if ((mask & 0x00000008) != 0) + offsets.Add(index + 3); + if ((mask & 0x00000010) != 0) + offsets.Add(index + 4); + if ((mask & 0x00000020) != 0) + offsets.Add(index + 5); + if ((mask & 0x00000040) != 0) + offsets.Add(index + 6); + if ((mask & 0x00000080) != 0) + offsets.Add(index + 7); + if ((mask & 0x00000100) != 0) + offsets.Add(index + 8); + if ((mask & 0x00000200) != 0) + offsets.Add(index + 9); + if ((mask & 0x00000400) != 0) + offsets.Add(index + 10); + if ((mask & 0x00000800) != 0) + offsets.Add(index + 11); + if ((mask & 0x00001000) != 0) + offsets.Add(index + 12); + if ((mask & 0x00002000) != 0) + offsets.Add(index + 13); + if ((mask & 0x00004000) != 0) + offsets.Add(index + 14); + if ((mask & 0x00008000) != 0) + offsets.Add(index + 15); + if ((mask & 0x00010000) != 0) + offsets.Add(index + 16); + if ((mask & 0x00020000) != 0) + offsets.Add(index + 17); + if ((mask & 0x00040000) != 0) + offsets.Add(index + 18); + if ((mask & 0x00080000) != 0) + offsets.Add(index + 19); + if ((mask & 0x00100000) != 0) + offsets.Add(index + 20); + if ((mask & 0x00200000) != 0) + offsets.Add(index + 21); + if ((mask & 0x00400000) != 0) + offsets.Add(index + 22); + if ((mask & 0x00800000) != 0) + offsets.Add(index + 23); + if ((mask & 0x01000000) != 0) + offsets.Add(index + 24); + if ((mask & 0x02000000) != 0) + offsets.Add(index + 25); + if ((mask & 0x04000000) != 0) + offsets.Add(index + 26); + if ((mask & 0x08000000) != 0) + offsets.Add(index + 27); + if ((mask & 0x10000000) != 0) + offsets.Add(index + 28); + if ((mask & 0x20000000) != 0) + offsets.Add(index + 29); + if ((mask & 0x40000000) != 0) + offsets.Add(index + 30); + if ((mask & 0x80000000) != 0) + offsets.Add(index + 31); + + // Update lineIndex to the next starting position + index += 32; + } + + public static unsafe StepRawInstance ParseLine(byte* ptr, byte* end) + { + var start = ptr; + var cnt = end - ptr; + const int MIN_LINE_LENGTH = 5; + if (cnt < MIN_LINE_LENGTH) + return default; + + // Parse the ID + if (*ptr++ != '#') + return default; + + var id = 0u; + while (ptr < end) + { + if (*ptr < '0' || *ptr > '9') + break; + id = id * 10 + *ptr - '0'; + ptr++; + } + + var foundEquals = false; + while (ptr < end) + { + if (*ptr == '=') + foundEquals = true; + + if (*ptr != (byte)' ' && *ptr != (byte)'=') + break; + + ptr++; + } + + if (!foundEquals) + return default; + + // Parse the entity type name + var entityStart = ptr; + while (ptr < end) + { + if (!StepTokenizer.IsIdentLookup[*ptr]) + break; + ptr++; + } + if (ptr == entityStart) + return default; + + var entityType = new ByteSpan(entityStart, ptr); + return new(id, entityType, start); + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepNode.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepNode.cs new file mode 100644 index 000000000..c23188c7a --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepNode.cs @@ -0,0 +1,52 @@ +using Ara3D.Utils; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public class StepNode +{ + public readonly StepGraph Graph; + public readonly StepInstance Entity; + + public StepNode(StepGraph g, StepInstance e) + { + Graph = g; + Entity = e; + } + + public List Nodes { get; } = new(); + + private void AddNodes(StepValue value) + { + if (value is StepId id) + { + var n = Graph.GetNode(id.Id); + Nodes.Add(n); + } + else if (value is StepList agg) + { + foreach (var v in agg.Values) + AddNodes(v); + } + } + + public void Init() + { + foreach (var a in Entity.AttributeValues) + AddNodes(a); + } + + public override string ToString() => Entity.ToString(); + + public string ToGraph(HashSet? prev = null) + { + prev ??= new HashSet(); + if (prev.Contains(this)) + return "_"; + var nodeStr = Nodes.Select(n => n.ToGraph(prev)).JoinStringsWithComma(); + return $"{EntityType}({nodeStr})"; + } + + public string EntityType => Entity.EntityType; + + public string QuickHash() => $"{EntityType}:{Nodes.Count}"; +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepRawInstance.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepRawInstance.cs new file mode 100644 index 000000000..ee15dd920 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepRawInstance.cs @@ -0,0 +1,20 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +/// +/// Contains information about where an instance is within a file. +/// +[StructLayout(LayoutKind.Sequential, Pack = 1)] +[method: MethodImpl(MethodImplOptions.AggressiveInlining)] +public readonly unsafe struct StepRawInstance(uint id, ByteSpan type, byte* ptr) +{ + public readonly uint Id = id; + public readonly ByteSpan Type = type; + public readonly byte* Ptr = ptr; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool IsValid() => Id > 0; +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepToken.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepToken.cs new file mode 100644 index 000000000..19fc352ee --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepToken.cs @@ -0,0 +1,17 @@ +using System.Diagnostics; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public readonly struct StepToken +{ + public readonly ByteSpan Span; + public readonly StepTokenType Type; + + public StepToken(ByteSpan span, StepTokenType type) + { + Span = span; + Debug.Assert(span.Length > 0); + Type = type; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenType.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenType.cs new file mode 100644 index 000000000..f42e11b6b --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenType.cs @@ -0,0 +1,22 @@ +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public enum StepTokenType : byte +{ + None, + Ident, + String, + Whitespace, + Number, + Symbol, + Id, + Separator, + Unassigned, + Redeclared, + Comment, + Unknown, + BeginGroup, + EndGroup, + LineBreak, + EndOfLine, + Definition, +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenizer.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenizer.cs new file mode 100644 index 000000000..a23a2e949 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepTokenizer.cs @@ -0,0 +1,306 @@ +using System.Diagnostics; +using System.Runtime.CompilerServices; +using Ara3D.Buffers; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +public static class StepTokenizer +{ + public static readonly StepTokenType[] TokenLookup = CreateTokenLookup(); + + public static readonly bool[] IsNumberLookup = CreateNumberLookup(); + + public static readonly bool[] IsIdentLookup = CreateIdentLookup(); + + public static StepTokenType[] CreateTokenLookup() + { + var r = new StepTokenType[256]; + for (var i = 0; i < 256; i++) + r[i] = GetTokenType((byte)i); + return r; + } + + public static bool[] CreateNumberLookup() + { + var r = new bool[256]; + for (var i = 0; i < 256; i++) + r[i] = IsNumberChar((byte)i); + return r; + } + + public static bool[] CreateIdentLookup() + { + var r = new bool[256]; + for (var i = 0; i < 256; i++) + r[i] = IsIdentOrDigitChar((byte)i); + return r; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static StepTokenType LookupToken(byte b) => TokenLookup[b]; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsNumberChar(byte b) + { + switch (b) + { + case (byte)'0': + case (byte)'1': + case (byte)'2': + case (byte)'3': + case (byte)'4': + case (byte)'5': + case (byte)'6': + case (byte)'7': + case (byte)'8': + case (byte)'9': + case (byte)'E': + case (byte)'e': + case (byte)'+': + case (byte)'-': + case (byte)'.': + return true; + } + + return false; + } + + public static StepTokenType GetTokenType(byte b) + { + switch (b) + { + case (byte)'0': + case (byte)'1': + case (byte)'2': + case (byte)'3': + case (byte)'4': + case (byte)'5': + case (byte)'6': + case (byte)'7': + case (byte)'8': + case (byte)'9': + case (byte)'+': + case (byte)'-': + return StepTokenType.Number; + + case (byte)' ': + case (byte)'\t': + return StepTokenType.Whitespace; + + case (byte)'\n': + case (byte)'\r': + return StepTokenType.LineBreak; + + case (byte)'\'': + case (byte)'"': + return StepTokenType.String; + + case (byte)'.': + return StepTokenType.Symbol; + + case (byte)'#': + return StepTokenType.Id; + + case (byte)';': + return StepTokenType.EndOfLine; + + case (byte)'(': + return StepTokenType.BeginGroup; + + case (byte)'=': + return StepTokenType.Definition; + + case (byte)')': + return StepTokenType.EndGroup; + + case (byte)',': + return StepTokenType.Separator; + + case (byte)'$': + return StepTokenType.Unassigned; + + case (byte)'*': + return StepTokenType.Redeclared; + + case (byte)'/': + return StepTokenType.Comment; + + case (byte)'a': + case (byte)'b': + case (byte)'c': + case (byte)'d': + case (byte)'e': + case (byte)'f': + case (byte)'g': + case (byte)'h': + case (byte)'i': + case (byte)'j': + case (byte)'k': + case (byte)'l': + case (byte)'m': + case (byte)'n': + case (byte)'o': + case (byte)'p': + case (byte)'q': + case (byte)'r': + case (byte)'s': + case (byte)'t': + case (byte)'u': + case (byte)'v': + case (byte)'w': + case (byte)'x': + case (byte)'y': + case (byte)'z': + case (byte)'A': + case (byte)'B': + case (byte)'C': + case (byte)'D': + case (byte)'E': + case (byte)'F': + case (byte)'G': + case (byte)'H': + case (byte)'I': + case (byte)'J': + case (byte)'K': + case (byte)'L': + case (byte)'M': + case (byte)'N': + case (byte)'O': + case (byte)'P': + case (byte)'Q': + case (byte)'R': + case (byte)'S': + case (byte)'T': + case (byte)'U': + case (byte)'V': + case (byte)'W': + case (byte)'X': + case (byte)'Y': + case (byte)'Z': + case (byte)'_': + return StepTokenType.Ident; + + default: + return StepTokenType.Unknown; + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsWhiteSpace(byte b) => b == ' ' || b == '\t'; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsLineBreak(byte b) => b == '\n' || b == '\r'; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsIdent(byte b) => b >= 'A' && b <= 'Z' || b >= 'a' && b <= 'z' || b == '_'; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsDigit(byte b) => b >= '0' && b <= '9'; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool IsIdentOrDigitChar(byte b) => IsIdent(b) || IsDigit(b); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe byte* AdvancePast(byte* begin, byte* end, string s) + { + if (end - begin < s.Length) + return null; + foreach (var c in s) + if (*begin++ != (byte)c) + return null; + return begin; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe StepToken ParseToken(byte* begin, byte* end) + { + var cur = begin; + var tt = InternalParseToken(ref cur, end); + Debug.Assert(cur < end); + var span = new ByteSpan(begin, cur); + return new StepToken(span, tt); + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe bool EatWSpace(ref StepToken cur, byte* end) + { + while ( + cur.Type == StepTokenType.Comment || cur.Type == StepTokenType.Whitespace || cur.Type == StepTokenType.LineBreak + ) + { + if (!ParseNextToken(ref cur, end)) + return false; + } + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe bool ParseNextToken(ref StepToken prev, byte* end) + { + var cur = prev.Span.End(); + if (cur >= end) + return false; + prev = ParseToken(cur, end); + return true; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private static unsafe StepTokenType InternalParseToken(ref byte* cur, byte* end) + { + var type = TokenLookup[*cur++]; + + switch (type) + { + case StepTokenType.Ident: + while (IsIdentLookup[*cur]) + cur++; + break; + + case StepTokenType.String: + // usually it is as single quote, + // but in rare cases it could be a double quote + var quoteChar = *(cur - 1); + while (cur < end) + { + if (*cur++ == quoteChar) + { + if (*cur != quoteChar) + break; + else + cur++; + } + } + + break; + + case StepTokenType.LineBreak: + while (IsLineBreak(*cur)) + cur++; + break; + + case StepTokenType.Number: + while (IsNumberLookup[*cur]) + cur++; + break; + + case StepTokenType.Symbol: + while (*cur++ != '.') { } + + break; + + case StepTokenType.Id: + while (IsNumberLookup[*cur]) + cur++; + break; + + case StepTokenType.Comment: + var prev = *cur++; + while (cur < end && (prev != '*' || *cur != '/')) + prev = *cur++; + cur++; + break; + } + + return type; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepValue.cs b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepValue.cs new file mode 100644 index 000000000..6b1e93bf9 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Ara3D.StepParser/StepValue.cs @@ -0,0 +1,154 @@ +using System.Diagnostics; +using Ara3D.Buffers; +using Ara3D.Utils; + +namespace Speckle.Importers.Ifc.Ara3D.StepParser; + +/// +/// The base class of the different type of value items that can be found in a STEP file. +/// * Entity +/// * List +/// * String +/// * Symbol +/// * Unassigned token +/// * Redeclared token +/// * Number +/// +public class StepValue; + +public class StepEntity : StepValue +{ + public readonly ByteSpan EntityType; + public readonly StepList Attributes; + + public StepEntity(ByteSpan entityType, StepList attributes) + { + Debug.Assert(!entityType.IsNull()); + EntityType = entityType; + Attributes = attributes; + } + + public override string ToString() => $"{EntityType}{Attributes}"; +} + +public class StepList : StepValue +{ + public readonly List Values; + + public StepList(List values) => Values = values; + + public override string ToString() => $"({Values.JoinStringsWithComma()})"; + + public static StepList CreateDefault() => new(new List()); +} + +public class StepString : StepValue +{ + public readonly ByteSpan Value; + + public static StepString Create(StepToken token) + { + var span = token.Span; + Debug.Assert(token.Type == StepTokenType.String); + Debug.Assert(span.Length >= 2); + Debug.Assert(span.First() == '\'' || span.First() == '"'); + Debug.Assert(span.Last() == '\'' || span.Last() == '"'); + return new StepString(span.Trim(1, 1)); + } + + public StepString(ByteSpan value) => Value = value; + + public override string ToString() => $"'{Value}'"; +} + +public class StepSymbol : StepValue +{ + public readonly ByteSpan Name; + + public StepSymbol(ByteSpan name) => Name = name; + + public override string ToString() => $".{Name}."; + + public static StepSymbol Create(StepToken token) + { + Debug.Assert(token.Type == StepTokenType.Symbol); + var span = token.Span; + Debug.Assert(span.Length >= 2); + Debug.Assert(span.First() == '.'); + Debug.Assert(span.Last() == '.'); + return new StepSymbol(span.Trim(1, 1)); + } +} + +public class StepNumber : StepValue +{ + public readonly ByteSpan Span; + public double Value => Span.ToDouble(); + + public StepNumber(ByteSpan span) => Span = span; + + public override string ToString() => $"{Value}"; + + public static StepNumber Create(StepToken token) + { + Debug.Assert(token.Type == StepTokenType.Number); + var span = token.Span; + return new(span); + } +} + +public class StepId : StepValue +{ + public readonly uint Id; + + public StepId(uint id) => Id = id; + + public override string ToString() => $"#{Id}"; + + public static unsafe StepId Create(StepToken token) + { + Debug.Assert(token.Type == StepTokenType.Id); + var span = token.Span; + Debug.Assert(span.Length >= 2); + Debug.Assert(span.First() == '#'); + var id = 0u; + for (var i = 1; i < span.Length; ++i) + { + Debug.Assert(span.Ptr[i] >= '0' && span.Ptr[i] <= '9'); + id = id * 10 + span.Ptr[i] - '0'; + } + return new StepId(id); + } +} + +public class StepUnassigned : StepValue +{ + public static readonly StepUnassigned Default = new(); + + public override string ToString() => "$"; + + public static StepUnassigned Create(StepToken token) + { + Debug.Assert(token.Type == StepTokenType.Unassigned); + var span = token.Span; + Debug.Assert(span.Length == 1); + Debug.Assert(span.First() == '$'); + return Default; + } +} + +public class StepRedeclared : StepValue +{ + public static readonly StepRedeclared Default = new(); + + public override string ToString() => "*"; + + public static StepRedeclared Create(StepToken token) + { + Debug.Assert(token.Type == StepTokenType.Redeclared); + var span = token.Span; + Debug.Assert(span.Length == 1); + Debug.Assert(span.First() == '*'); + return Default; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Converters/GeometryConverter.cs b/Importers/Ifc/Speckle.Importers.Ifc/Converters/GeometryConverter.cs new file mode 100644 index 000000000..c59ad90b9 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Converters/GeometryConverter.cs @@ -0,0 +1,20 @@ +using Speckle.Importers.Ifc.Types; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Models.Collections; + +namespace Speckle.Importers.Ifc.Converters; + +[GenerateAutoInterface] +public class GeometryConverter(IMeshConverter meshConverter) : IGeometryConverter +{ + public Collection Convert(IfcGeometry geometry) + { + var c = new Collection(); + foreach (var mesh in geometry.GetMeshes()) + { + c.elements.Add(meshConverter.Convert(mesh)); + } + + return c; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Converters/GraphConverter.cs b/Importers/Ifc/Speckle.Importers.Ifc/Converters/GraphConverter.cs new file mode 100644 index 000000000..3c6c3f88d --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Converters/GraphConverter.cs @@ -0,0 +1,19 @@ +using Speckle.Importers.Ifc.Ara3D.IfcParser; +using Speckle.Importers.Ifc.Types; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Models; +using Speckle.Sdk.Models.Collections; + +namespace Speckle.Importers.Ifc.Converters; + +[GenerateAutoInterface] +public class GraphConverter(INodeConverter nodeConverter) : IGraphConverter +{ + public Base Convert(IfcModel model, IfcGraph graph) + { + var collection = new Collection(); + var children = graph.GetSources().Select(x => nodeConverter.Convert(model, x)).ToList(); + collection.elements = children; + return collection; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Converters/MeshConverter.cs b/Importers/Ifc/Speckle.Importers.Ifc/Converters/MeshConverter.cs new file mode 100644 index 000000000..961bc3297 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Converters/MeshConverter.cs @@ -0,0 +1,49 @@ +using Speckle.Importers.Ifc.Types; +using Speckle.InterfaceGenerator; +using Speckle.Objects.Geometry; + +namespace Speckle.Importers.Ifc.Converters; + +[GenerateAutoInterface] +public class MeshConverter : IMeshConverter +{ + public unsafe Mesh Convert(IfcMesh mesh) + { + var m = (double*)mesh.Transform; + var vp = mesh.GetVertices(); + var ip = mesh.GetIndexes(); + + var vertices = new List(mesh.VertexCount * 3); + for (var i = 0; i < mesh.VertexCount; i++) + { + var x = vp[i].PX; + var y = vp[i].PY; + var z = vp[i].PZ; + vertices.Add(m[0] * x + m[4] * y + m[8] * z + m[12]); + vertices.Add(-(m[2] * x + m[6] * y + m[10] * z + m[14])); + vertices.Add(m[1] * x + m[5] * y + m[9] * z + m[13]); + } + + var faces = new List(mesh.IndexCount * 4); + for (var i = 0; i < mesh.IndexCount; i += 3) + { + var a = ip[i]; + var b = ip[i + 1]; + var c = ip[i + 2]; + faces.Add(3); + faces.Add(a); + faces.Add(b); + faces.Add(c); + } + + var color = mesh.GetColor(); + List colors = [(int)(color->A * 255), (int)(color->R * 255), (int)(color->G * 255), (int)(color->B * 255),]; + return new Mesh() + { + colors = colors, + vertices = vertices, + faces = faces, + units = "m", + }; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Converters/NodeConverter.cs b/Importers/Ifc/Speckle.Importers.Ifc/Converters/NodeConverter.cs new file mode 100644 index 000000000..f9b246d27 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Converters/NodeConverter.cs @@ -0,0 +1,73 @@ +using System.Reflection; +using Speckle.Importers.Ifc.Ara3D.IfcParser; +using Speckle.Importers.Ifc.Types; +using Speckle.InterfaceGenerator; +using Speckle.Sdk.Models; + +namespace Speckle.Importers.Ifc.Converters; + +[GenerateAutoInterface] +public class NodeConverter(IGeometryConverter geometryConverter) : INodeConverter +{ + public Base Convert(IfcModel model, IfcNode node) + { + var b = new Base(); + if (node is IfcPropSet ps) + { + b["Name"] = ps.Name; + b["GlobalId"] = ps.Guid; + } + + // https://github.com/specklesystems/speckle-server/issues/1180 + b["ifc_type"] = node.Type; + + // This is required because "speckle_type" has no setter, but is backed by a private field. + var baseType = typeof(Base); + var typeField = baseType.GetField("_type", BindingFlags.Instance | BindingFlags.NonPublic); + typeField?.SetValue(b, node.Type); + + // Guid is null for property values, and other Ifc entities not derived from IfcRoot + b.applicationId = node.Guid; + + // This is the express ID used to identify an entity wihtin a file. + b["expressID"] = node.Id; + + // Even if there is no geometry, this will return an empty collection. + var geo = model.GetGeometry(node.Id); + if (geo != null) + { + var c = geometryConverter.Convert(geo); + if (c.elements.Count > 0) + b["@displayValue"] = c.elements; + } + + // Create the children + var children = node.GetChildren().Select(x => Convert(model, x)).ToList(); + b["@elements"] = children; + + // Add the properties + foreach (var p in node.GetPropSets()) + { + // Only when there are actually some properties. + if (p.NumProperties > 0) + { + var name = p.Name; + if (string.IsNullOrWhiteSpace(name)) + name = $"#{p.Id}"; + b[name] = ToSpeckleDictionary(p); + } + } + + // TODO: add the "type" properties + + return b; + } + + public static Dictionary ToSpeckleDictionary(IfcPropSet ps) + { + var d = new Dictionary(); + foreach (var p in ps.GetProperties()) + d[p.Name] = p.Value.ToJsonObject(); + return d; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Import.cs b/Importers/Ifc/Speckle.Importers.Ifc/Import.cs new file mode 100644 index 000000000..b32fa2c2e --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Import.cs @@ -0,0 +1,107 @@ +using System.Diagnostics; +using System.Reflection; +using Ara3D.Utils; +using Microsoft.Extensions.DependencyInjection; +using Speckle.Importers.Ifc.Ara3D.IfcParser; +using Speckle.Importers.Ifc.Converters; +using Speckle.Importers.Ifc.Types; +using Speckle.Objects.Geometry; +using Speckle.Sdk; +using Speckle.Sdk.Api; +using Speckle.Sdk.Api.GraphQL.Inputs; +using Speckle.Sdk.Api.GraphQL.Models; +using Speckle.Sdk.Credentials; +using Speckle.Sdk.Host; +using Speckle.Sdk.Models; +using Speckle.Sdk.Serialisation.V2; +using Speckle.Sdk.Serialisation.V2.Send; +using Speckle.Sdk.Transports; + +namespace Speckle.Importers.Ifc; + +public static class Import +{ + public static async Task Ifc( + string url, + string filePath, + string streamId, + string modelId, + string commitMessage, + string token, + IProgress? progress = null + ) + { + var serviceProvider = GetServiceProvider(); + return await Ifc(serviceProvider, url, filePath, streamId, modelId, commitMessage, token, progress); + } + + public static ServiceProvider GetServiceProvider() + { + TypeLoader.Initialize(typeof(Base).Assembly, typeof(Point).Assembly); + var serviceCollection = new ServiceCollection(); + serviceCollection.AddSpeckleSdk(HostApplications.Other, HostAppVersion.v2024, "IFC-Importer"); + serviceCollection.AddSpeckleWebIfc(); + serviceCollection.AddMatchingInterfacesAsTransient(Assembly.GetExecutingAssembly()); + return serviceCollection.BuildServiceProvider(); + } + + public static async Task Ifc( + IServiceProvider serviceProvider, + string url, + string filePath, + string streamId, + string modelId, + string commitMessage, + string token, + IProgress? progress = null + ) + { + var ifcFactory = serviceProvider.GetRequiredService(); + var clientFactory = serviceProvider.GetRequiredService(); + var baseUri = new Uri(url); + var stopwatch = Stopwatch.StartNew(); + + var model = ifcFactory.Open(filePath); + var ms = stopwatch.ElapsedMilliseconds; + Console.WriteLine($"Opened with WebIFC: {ms} ms"); + + var graph = IfcGraph.Load(new FilePath(filePath)); + var ms2 = stopwatch.ElapsedMilliseconds; + Console.WriteLine($"Loaded with StepParser: {ms2 - ms} ms"); + + var converter = serviceProvider.GetRequiredService(); + var b = converter.Convert(model, graph); + ms = ms2; + ms2 = stopwatch.ElapsedMilliseconds; + Console.WriteLine($"Converted to Speckle Bases: {ms2 - ms} ms"); + + var serializeProcessFactory = serviceProvider.GetRequiredService(); + var process = serializeProcessFactory.CreateSerializeProcess( + baseUri, + streamId, + token, + progress, + new SerializeProcessOptions(true, true, true, false) + ); + var (rootId, _) = await process.Serialize(b, default).ConfigureAwait(false); + Account account = + new() + { + token = token, + serverInfo = new ServerInfo { url = baseUri.ToString() }, + }; + ms = ms2; + ms2 = stopwatch.ElapsedMilliseconds; + Console.WriteLine($"Uploaded to Speckle: {ms2 - ms} ms"); + + // 8 - Create the version (commit) + using var apiClient = clientFactory.Create(account); + var commitId = await apiClient.Version.Create( + new CreateVersionInput(rootId, modelId, streamId, message: commitMessage) + ); + ms = ms2; + ms2 = stopwatch.ElapsedMilliseconds; + Console.WriteLine($"Committed to Speckle: {ms2 - ms} ms"); + return commitId; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Native/WebIfc.cs b/Importers/Ifc/Speckle.Importers.Ifc/Native/WebIfc.cs new file mode 100644 index 000000000..52f182185 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Native/WebIfc.cs @@ -0,0 +1,108 @@ +using System.Diagnostics.CodeAnalysis; +using System.Runtime.InteropServices; + +namespace Speckle.Importers.Ifc.Native; + +[SuppressMessage("Globalization", "CA2101:Specify marshaling for P/Invoke string arguments")] +[SuppressMessage("Interoperability", "CA1401:P/Invokes should not be visible")] +[SuppressMessage("Security", "CA5393:Do not use unsafe DllImportSearchPath value")] +public static class WebIfc +{ +#if WINDOWS + private const string DllName = "web-ifc.dll"; + private const CharSet Set = CharSet.Ansi; +#else + private const string DllName = "libweb-ifc.so"; + private const CharSet Set = CharSet.Auto; +#endif + + private const DllImportSearchPath ImportSearchPath = DllImportSearchPath.AssemblyDirectory; + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr InitializeApi(); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern void FinalizeApi(IntPtr api); + + [DllImport(DllName, CharSet = Set)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr LoadModel(IntPtr api, string fileName); + + [DllImport(DllName, CharSet = Set)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern string GetVersion(); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetMesh(IntPtr geometry, int index); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern int GetNumMeshes(IntPtr geometry); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern uint GetGeometryType(IntPtr geometry); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern uint GetGeometryId(IntPtr geometry); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern uint GetLineId(IntPtr line); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern uint GetLineType(IntPtr line); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern string GetLineArguments(IntPtr line); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern int GetNumVertices(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetVertices(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetTransform(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern int GetNumIndices(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetIndices(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetColor(IntPtr mesh); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetGeometryFromId(IntPtr model, uint id); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern int GetNumGeometries(IntPtr model); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetGeometryFromIndex(IntPtr model, int index); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern uint GetMaxId(IntPtr model); + + [DllImport(DllName)] + [DefaultDllImportSearchPaths(ImportSearchPath)] + public static extern IntPtr GetLineFromModel(IntPtr model, uint id); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Native/libweb-ifc.so b/Importers/Ifc/Speckle.Importers.Ifc/Native/libweb-ifc.so new file mode 100644 index 0000000000000000000000000000000000000000..b303c198db0f9803461df0b4349c5c8b49b210bc GIT binary patch literal 1719384 zcma&P2UJtd^FO=^0RkchP(ZPSDqsutZcs$T78@ce2JDK8y<^}(MQjlSu@Xg4tk}UC zL=-!A#1<^r6?@lrZf5d7U+*tD=N-?-y_qbtv$M0abN80a@7z65C=i%2A~V*W2@D^g zl+&?u(;EMeD`zd44SeIur24v||M$)RJy2$%XhX>)SchxFoIA{+rg>%mV^#DO4dws- zoxZ(j2mSYqS9*UI>iLH9fB((`zHy%5sQ=zM=HGI3R}`mA#M1D0oHXw55>{jVgsuOU z5^RncN-_O8ry~a)ea|nYRL@ZI|Be|(gjagd-x*4-4UQ}U+_9p)}~(8~%>7=l@?a=-Y?dGu6N6 zekjpU8hn^*my^NyT9=;v84QP(;~C7#9dkY4K6BriJ|@~ zH7gdd09IScL=uoAa$u5Jrj8dgr9cGVyLA+>#YI|we>JL|si7tB?nobrg%cyRxbh2ffRI=|C`3*~{GoqN-APQjQRGss^I1nMPy7 zyj!2Lu92XS%b~MkGm%`(g!U39sL5DoA!wmsI;|u}%84?Mh-Y$%R=ilnm>Sw=EJ)%b zwh)ON1rkwHsTp&VIWwWeTgyaRrcy9v)gVP|Z&!IWF%uODrD7%(3Z)W}xk}8$f&&q& z;#G1m1?a|vV-h5-%+33cWIoKyOB5@RgW)8?IJxISDXTAblgBbuG}uLIBM?ZKcin}F zZegODQs@V(Y#|T`AqFHcvAIYJvS6xvF=tn?D!{yBKTuN0n9Rcix#k0NU(mP=R!vk4HWn6KH+YpdLZ^+7SIxRO})pV&j>ES21lFqM#vW^%u@ zwnC=Tikqq&<4QVq7kkPj3z?Zj6d(#oQuk$Ig;3}p;K9T)p;%$3$`{##cPZn+iN(&G zx0f)XT~9M_CbpIPL;KyCJ2%}u+`vq7fp?IIn-UqUlXy9kSS^DV1+lEmPRf*4Oe$c) z;WAI5K(&d1OeO_$!XT(rb%YhCMB@7Sa%rUjZemB)QB*cESK8KMxLhFjH)kG9@H|1l zv@)@TX(g*VGH;o)h_y}eh9QBV;gw(xM#!;hS+9ma*rtovAGmT(r@h90#HK3R2}UVa&w6! zHeeHT3lK^DRl-<-4NG*K>^wC8lyFlZlSu4TRVB=y3Aahy)CzTgr(7jvtC+tV2#tVd z#a00c!PPs88+!zJ2(?llO?7dBT|77;khMrI6|24F5jEJdC4=p&#)|B7;-vmo;+_f)E#M%`+?qK;N2N;z3hRaPd|AA+FtQSih)MvRi3JCf z2CE=Eh)y+?nlq7Tx57%xngs-jrFI%~3uyogkmg#5rD|2ERa}y}P#~2GY`R;EZCH_n zRaFOhGv+UpO677blX4EDimfeI#)G<2fl4H(1hGwEV`a` z0nF7y!pwr1R2-lZdb%<2wyJ{8%o;@5Br51_6D0X6I1}0I!$VeiY^fYJy zT^_BLDkV~Hb5FU4kO}3o%~GjrcbQ5gtM45o1mBVb__E#*endiRFl`?@mhhj9)f6NO zghFTV{A{MJtW9Ii0+HBWUPB=7E@QGFsnE<`YzL}4&KFiq)?HeGxd7BU0^sN<7VH?6$Dz~$3IJyS=K&mD09@1`F<5w!u2Oje$~%C& zfO~)kfJcDG00TXNgL1$Nz$;?Df$}Zj9iRg69`FJ13GfB*9l+5~z%Rfb?gR8q01yJq z03v_|z!JdqnwIrF85Gr57F7h0=$PeW9!m zXh5IwFBxk@pJh-s0W_u0EvV$yj8=fQ^jQvNM>;mh=tQ3bpzI6?1OyQ;n9A-@_5}2z z&)nZC;J7!SA0PxU05A{`1{eew4ESGC!slUtF@W)aNq{MUsel=PS%BGqd4L$ee1HlN z2Z#qO1aP#NO8mrFB79y7SO!=QSP4i5qySO@X#kGaK)IfdHBfE_Yyo5fwgR#Ny8wFt z9POo&J3a`CEBC@%x918xFJ0QUh80cC(kfX9HRfM807sBy5zy-i1z-2%&;40u6;5y(I;11v(;69)X@EA}Icn09;C6uoLZvpQB z9{`^KUjYXC2FKq4KLNi0e*pqB@JoOQU=HBOf=VkYt)a99Q~@{ussbDV963Sh45$I9 zO}si#dH}rWb6qHX0KR~F#A^U$BRZBr=?7>GXbNZnXbETyXb<411C??pI|2geb7v?6 z0l|Q7fbM{v00p2Apf4Z0C5U>-mPFi;#EF90k8ECwV3I9f*Kawyew%<+@pcoiT8kOo)>SP$3$ z_+Ltg&l!MBKo)(s6Utq5yc^2BfPH}dfCGTTfFpntfRliHz$w5Pz*#^M;2hur;4+{X z@V|5oKHmV80PX-v0rvn80Z#$tfER$50FGWk`5N#B@DA`E@Cm@t7b?F(`3>*`@C)z< z@E4#b5%?%T2rvggJ_rdYckaPhC4dcpqsmai=^V2MR0TK!ssmgAH31yehO!PFyF%#( zaHr3nP}T)_1AG9!fChj@02#m!&;-yNz)?#mThlT3xeXn+qf-7q-*Mk}gwFxQ3#76u zmBCbYr;@ARla3Wo_6GC;^aF$dLIGib!GLf;1c0MRD2D+?0mcBL022TlO@eX?U>aZs zU>1O*xm4mOh_Ccn1!XKC4)7oG7C^ZWun3SqyhJLOK)D>S5|9j71xN*?0oDRIT1Vvu zC^rH&0X73N0b2pv0NVjO0eb*B0FDkoc^HrfI085hI0?uH6adZu&H>H?IJyAkCBRks zd=tt$bbJrW`+x`Z8UF(R*8%Sl;0fRveg6W=mw;D**MK*G3V?w=!0{)*7r;v!x)CV*K za3q7$kB*yA*%ZnafR^;RHI!`t?dWrRC_4aPzk>w;0s%n)j=DkF9ncfd3!ngS)CbDG zbleZh{(w-xKtLEk35Wm;2aE)a0*nTX2TTM^0Za$X0B|%1%DHqLL*;xZV*zo1|A-e4 zM4WB|4RvH%9!3dh^% z^G+!D0QLg*0S*Cj0eOHU0FI7Ac><6RI1M-hC<1VFfy#?eUZ&$KR2D;d6>tr36L1?) z3b+r@0m=Z608aqrfM!i02#m! z&;-yDz)>qGTLanx+5?w? za|D!;fMN8R`+g)Gj|PkZj3xd!D!K1DngE}p0h0hz0n-5nngPc%0rLPc02Sarz(PO* zz(9#`yp%pKqjEWvYCsZw=IW-xaT;I^U@c$+U?V^S;Aj(-_zC3h`$ZW?SLJC zU4T6Rj`l*i4{!jGOT0WNj{%MYP7*I4$^yVmYwNmC_x!2nlGeiW+&v%Vw(#3_@f+{w zWhzg<$o<@|qT$Dy-SdS*$KJ^48yzxc%Gb^pkG%~X)!4P@PWQnxn^*?F|D(w4)q7JD z_g3p(C<=rdo+tcW?Ras*f{c0Rd-uqR**f7`yv>Ow(mi{2{jHZEnw=hf=6qyAX_MTN zK`F<6C)Ldq{{H-|%|6wJlc!I04sRWsc6j50iLB0%KO3KCg&f*e(xvR^#PiikJg20r z?r%A{OrjmLp(5+_nxj7sl=+N!w$VLVG{|F5-`nEh?ax_HY|%E{u8zaXxz(S}S5@K`e)aQJ`;3^M`&G(JjF}d;Y>>)Eh_w89W>84qqdyyZW6`WY~J#WWIklpcZ|AeH6PBd$}>P*epg)vuR*IDg5_+iZRlka1aTU5_j@9pTOYy0Qk zoM!d*?>Dm?I@al6-)Ki+?UoH=t#!>$A6^&x{%5hcU(d3GZNFMZwp;fid|vg!F)IRq~H9+Qr@k95x=JLL604K zCO0mWy%^fK?vUipHNrQQR=cvk|K#rP+*E!oAHMiHuD#-Mi%~=RB}}Q^{o%07Yd;FU z#3YBencZ&m`ivh<@*gLUbPhN_3G`~wx?72Exc}}orS*^9)MVV5(P;nvCTUKiwp4Go zvh_2!6X(6h-p@N`Kl);i=G(XUuY0ke^%Kp#r?bCAE|1*z<$Jj{b@A7^`!Ww#n5`%} z)p~r|{R-C;E4`Yn^c~{b=0vJcwYFqs=W=nM)WmbA7Itaw(l^Yq{-FY=$}ggh{FgEF zK$rgSQ*N9{FMd4d&NOXX?@xM`TY6hYg;ccX_b4)7peze^y632EWT5R8|}V{TbHP`NH&(Q?BiLFlzlX-RqxISMFN2 zcUi+}4Np{AI&Pq7Nzn4>ipXlwr{XG?Z=2FJyfi90I&{P3*xXQYO~0;=ijd$*Hx4(v z`zT}KrbF%5WL#>ysl)7c=4EEqK?g(|J2y^Gt{B^=B)-RrRJSqyyIY37DY^5Y{;^zj zhsRc3yXGe+>Gpf{-rziTw@3Dp$hvhO>^so#o7R5x(^~CT+FMr}aWBqdZspEpBhqI$ zr@!pEEY7ix!;qh279X0c?&DkYQA}$`JFD4n%zjO?{>0WUSgqI z+btwDF;I4>;DK`|n~uZ2HA@I7Y_>zE+~2ls+h%*ur)T`A`1E9!Tsqp}`J6khQBJyR z4YtL!7+P{=BiLk}S(OKGul?D)=RfZQg@5uazod8j^550+zBN17ed|zsR-1ETpit~y zvTx@phrY3KmN^30Z7!bo_Q_%ov31*wXw}+5+s}IJ-SxZgl5OV)Rce2>pzjBZq^TRi zznph67dM-B;Ni3td;Um$-!Fdp{KLnqac43Qt%{!G5h8q)c>B+@yom*$IuEc-uzO%> z9(|?N%kg)`irQVPjPcw$Bd132yL0UC>J9GSo^D)dR<>tR$iiJMIzQPtM6_goFZs!X zJ;F=xU5m{&?vn?T!sjwY`QFg%vg%+&25#f>Ga^Ra{Qb$l2g8 z-CGzqU-R%~Nc1$nc=LSMy7im=TD2s3{h`QcC!OoI|l&o2tRb+QIKwyUPdP#jW<3xjVaE+?@y0JriOY zZ0>%^vT5CluhJon>O8Fb?diirv$EF_q9xX%@%@|p=bQ1VcX(-2mpx}TzI^$r-pwy3 zEstp2N1R)zKKRLUWQ{7>)x;a)TB()|44kPs{K7Y4e%tBI z+kUjWxVmQkkx_EUsCDh(}c*7$mQ#`|-D^8*WA>v{&> z@tN4_*Q$^R?Z~)#G0r}LDeHICnbg$dVSc`@-8nP6d3)wc>YQz!oj7$^=9VR2uUHhF zN+~(3bw8LqHN@uA_9f9rI(}byz^rLM&7{his*IC)f?v_@=GWd;J?e4wo=-}*@%b5eV=B7Eqk_2dN46%?h3P>sm-;pP}J^|O~OGWYic&%!UgSN=KE z;KVGysY@rVDy?eYxBMnSzH8irIq(LnUk#wH$ufzQ1T;%Pac>kKVtyb^N?q&ON^B8msT!HLK)fmSA^tc<>z` z@qz{W7oBshTYKNhs6Fj|tqNYhq4ZRv80XLS$67U-;r-|5x0i2}vm!jM3Rjpf5|-!1 zee4yuefYrBnTIoapNMjw|6Ul{&-I#lrJmWUjO!_zqO#-P6*wJVoN+m8c$J*G=GXkH zANA<`a>>{qL+mzn-y)oH#xm&E&(@*Srp33|@FZkL*M^sVU(n?i?y1u`B<;>5hHA6t&Mh;8SVRimcrDW_}Zo zpPE?kx@T=G`Sl~E)@3Q%KOeujGu`)l(v?SNEy8Q|_*$^@`q8E5PT18FSMsTHt4;Yd zU*U?d(aTCjO=Fy=!|@W$hSG7~cUN`wd>ybQ*5%l%l8P~#du$D8^ZVtSCl}O}GN;;& z$@FdN|K~?VyT}d)r3GJm1y<1&MA}apJZi1mKeaz7;mLRym|6ye~g=_}^c3<;%Bs{9DXhys%e2XV19XM@qXr zP1$~0c*E;q!|zGoT)Ka{9Y3?}rkE}V2HRBfiF!ZOe88( zlHi|TYc_v7bw>M3TQ-!=6})=m`|Qb|mpfa8O_^f;)~i@u>FG?nF;1(tOiS9)@5#N% zfAixVd>o_?$A^i2^$Kh>biu*?(*}>K_F?yOufF$xUcOT?c~5N1$3B)3aYNG_(l2~2 zKXhdJthD$iDKp$9@1%**lWZfmeeX9zmu@vxy?m7Nz{Y*b0+)a_dOyoxG^zXY-^OQzRZcX~mp;LOh@ zZzaiLXXedL^Ih0T>3qNOP8Rgw;mS#!yRN<(>b^N@OWUzs-9j9moEkm7#`)~wBUW78 zmpY}!i_NSouryD=kgs4LA`x7MmGXUaF{wAzKk9*++TnHw;* zutWd;DYFKT8nXBN_OggYUSlgo#64*-YpB_pGc7L`PrQ0A#i^C!i@bRw{+#~wWA?1H z!sjV7Ht+o2Pq+G6)h@%|Hb3;F&jvxS52I(ee^@BC9=rd7tJ<-wSFR>8s0EBqcKT-NC$4p+mdxHT$ePRiL=BzWvC6 z<39V2UoUvn?cCALEAG7(l*SbPJS+4_YhE()`hK@MPgYL4T)Z!Jk9W${;Kdj0Kfa&p zRakXeiS%L1iWb6VwMN$&=x}lS@}EoMG9NYkdOyogeSbvzT7T@H1@`~jFY<4-{Kau? zW?DE++frSnm^9gLmtW!fE1O*%oF+ZGdrI+C+M~ndqKliKjSm~NzII`=RtK#8I$NE6 zJ+U{NQ|E8XhL#O3^tV|Uk@Kr-oejr^o))iu-r=#z>xZOy>-bsil5adJsAXaKCS}Hx zobUZQKF&&6Jo;_(PJKU&e*DAXOrI*PwOI{(ijMTp4PF$IK2`I$Wx|;H9&axG{BHLA z@yZX`zh5>R{60MLznSOjr)A%GY@4ICoPWFB`H}9uHujy}!n1hE?us?F8?QK3x~Zg# z_f>y!lip8#mJjXS(^i)2Hpb;-%C&WQqW(A5n_aVh@OH|8gZ?_}0=t|0Qd{Kvz4WQ| zu%P~rpzh|?r#{qmr0ufx8qzq!5stREL_$7pI+^XN3QwS9*lW1n8yFumUn zw{>Crw@ajFX=p5wz}k zhfabQ-(EXTh{)L#=Dsy(p;b}T+vX`*?B0I^K8*hLqmf|e&+#tvy_{U*+#jE~-fnBZ zqOkO-&-{FfUOqn;{j)63_qpIzGh5ivcTZc8*D-S8?cGt^^4?c=%pYYFw`WsD)9mN_ zr{#EFt|d;b^E*PbKf5BWbnf<#6Bo^qZw}cO+@kl>kmP5tn>1>+{Kw9X@q-^EtIDTr z&tJ4**DbeRPhzc`j2OS5T(aR(deE>g!zGShX}=DAKA83?>Q7L2hw7K^j{ThC=Ys7f^V!WhEFCm)wYs9$`2`&}T8tR9G24-) zhM#Gn+HiRLH0g(Jb-FgJHKP4gr>~PzR_@L0xjH#_(w>SgOM@E=H+*ciU8!02JAK_K z&4

JbWFTnt$pW^(tiNqYf>XX(x4RvVY%yhlOj(^7ecgRG7J#H>GT!sJXZ;RO?>v~hJ+V#ir?FWf+r;W0 zd-spMo_l7~u3LGtot(|Y)ymrk$#aAEo8ZSC%T zIR1K^!vUeBqZV|V_$F_6r_Mix7j3n=={JtMN`og4>~wjHV}V<}J{=nmmfbC% zRP#pRC#!cC|E{UiFeq-$n0rUJPxG%M8*_Vb9ZC2nuQb2J*;9s2?yQTLk>Yka`F&|d zmFqH5hf@Nv;$;jsL5t`Cdyf^B+@`<1w)X~4oKyVs8e z8FPcLiZ|SeTJ*VA%pUPwKh3@YUNWC|&BqL`t2_Jdu-Exl+W0pa7IT$*lQg zTpq(|&-RdQR$04lIWM#9o^GpidNlUyL-Ddjn>yQA7um}+9zC}O4cl_|YPU`&U!VK5 zw}oudwRM+V7xY|jo;1~W*v$!J_dl83w7FKGQ7-^KT2qG+QoV@`^jUE2H7 z{#$zv*!Lh~P5b^eW89Vm#7yfptgPwM!@}*EU+TUi%#`0Qdr9KCjpOZN5__|AW@4&OU zbGK|f`0?wO$oe&>x4!nZjoqZaU$j5QInG~KdG_m1pnr>T$I4mC6!U=eYjbY8*7cb3 zqx{>AI{7=NXdRkW_gVO;(&VaD@Ag?XXGPfG0k-y;^K_tp_LLVF`t)7)d|C9wsN6lL zpV%Jr3#)v*e@?u_x=7S$YMo^Veeaak$-T7wg>%UYI8Ny|+s$d0@BW#pHJdi|tkYex zxA?u?-ToU6=3Yvjyf`vt;<@*`qE?SNu=Q)h@9}GMj>RV(sTsZXM9yEA#%(udEE=Db z?OJp@A-bt<=(*oT?$um(9rG05syWfl`Ci73!zGT^FO$`;+6=4|ezsAQ0aKHY`L5aj zqHA%^zRxSS4!oK<)9ZQZqfopv)BJ%oV>UNG z^!s;tkhxiq@5#_Ar?b{aE_8pqEwld&ub4d}H?CW_!5kdyoDDFHfBql`>%2 zbB}TPhkI)M!ny<|k7_o%$DNl06}s5f_YRa~)#|meYS<;m!Gg{u4%eR@4GPPc5xw`) zj;7-`OWI|Ib?xcDMcH6xlcD3reqOBHadPyBkfO?WN*ihOu4h_aYmyr^U}e=RQ2}iu z51bh=r|bD6g0+8!$KRGuwfI%1F!_q-l#$jW8rZMsZ`ovN?11um*I#9ou37uxi2So# z?4LJxOW$t2yQS^@6Jy)umPg%MXZI^De&qP0)!!C4`BmR~D7*jJu)EcszWFdLdFa^o zqgu~cRQYg`c1X>bc58g2-a8-Nx_=5g+OfuFbNRIs1!uo>&#ONnbNl$epR4%=T*+|i zIas)6kxjT}cDQt7=RRhioBlc6{G;31r#lxE*799>`;+`iL|RP5qR+x--$qtVv#YnI z@Z+Y++O2nzTX@Rq)KE8Wc(zl{)B~GO+1j^W^rQF7tGB~CKM@OjYF*vh`&ftBPm`W{ zy}ncVLBp)TTC)`IGjH7-wCwq+oqeOn)o)T1{x<#5yG6s^C{{Uaxc~LWoZDw7EU@}4 z=pjt+dUT%Z#^M-(+l2xDwQ$xvjsF~Ut4VI^fRtmOJB)WYVwEtVZ|7Zhd%MKs-n{NP zrC)M?%T>FrTxN`#nC+ykbznl`UBRnheQQ)x=GLdzlxH}S@%JLN4}{W+XG@BTSAe=q4> zt423Nd%T@Gt?X!U_x(w^$+6AiylT&^8y)#yc#F9}alUsJT-*9T+Q9Yb#>VB3nQB~)MHA!oBQuTH@3qZ%yYX;y zpfUYZyBX*A*=k&VJGe>Bm>iLbe(kSiyndnyIrB{PcR?@X`usMb=dqo}>mS{2oG&q9 zw=JEF*S`oiN*c4nJQMy_+{JkPi4%tGXEH$CZsIkj=XVo+-rmGKs#4duoJ&E*$K|UDziMTI|FoxZ zIT5#w$FYO&jO(-frg1s*P548tKE~_YRv4F`4t!(re4z>Z=bErjINX43Y+PnEGtS>1 zU|dgkxQW`B9EFKEV{c-9T?BtK*01ue#^qP)Y+Rq(CiF>YZ(L4K6aAfJ!k(Ak7?-oy z#5~#sH`p8N*Hn;WjNjNqJV`YX{~w!J?{1lxcZnv(EoTbI`>6 z8V31^G5=ATh?8$j*mFHRgkVh0Fv!%5@#~rJXW41v^|zRapHs4p*H1E$Z#;z?@r~(Y zZNkq_ni$``Cgybu6Y;a4t?_ov4jI?KfrRy~aO*Tuy8=qfWVXQBx| zylol^yqxP(Cf*)>TT-KSGr$Hw2li4N4^=tv_ps{(K7j9gC zFB9u#_0Mo$ICEkpNsfANaVDRc0uSxk!^dTJkw^c6EKv3}xY0rCgh>KPH-00If&qrN_OgFleD{(r`nzyqb6K3YrE$A|c$ zN+_rJ8VYVla(uu)IXTKxVtvg+Sg@^$$dAs!cA=V{{_G=uTeKMWEFMQk_8>n8+U95+ z^;ejIdggF9g##Jd^#((6?Mkkp{@4oKFAwu~6WB+oLi?!ne+BnIL;T_D7n`G;UDR$T zct}z&=MhR6LG|;`lYPvwzl%tJ2J?lpe>9D|!A}ZDq8y#fMlS(QyYy5G9=he~YgYa{ zUJCF}eYzOsNCOC^!82U&04XP5 zwE_F(s{a=5G2eytrQA*MK-{w_9F1Ov?T%jaZ@ca1aP|a$kfA?p!|H4|`IT%C%718q zU)+Ygi<>X112|t=qPw%X)2Y8*vE4k9^KdWn4L8?cMDsC+-l)HFPbGa#ck+iWFF8FW zOj8B*X-0C~CR4wfq5MqZ_jE_T;_|=tncfZg>buBaLiNXuM*X#&P=CWSntLRu&+qD3 zpWZ6O;#Q*FB%A)VoBwpIpEDlqbCl#4Kg9aamt%c{|2W!VyNbu?Z)7$WMB^^c#BpCm za+;K(d`Ugzi^)FE^y>o5i;Kv&qWS`ToN;2KlmBfu@)_!*Qvb_e1_=!}j*_L=Uz*lz z+IG$#YBFgN)>n|<+WC~~P<@`{79r=B6IN1+A0EI?Tea*|pACUsHk%936Nb zVlmpGVgvTeo7!Ezj^uL>v;e{M)YI`!$d_;rL;+>!|A*&WuOPpo7LH>>vV)`k{1jT- zisM3V&g2)czQPjgCsF*z&SU-jMn`&eI9Nv7li$MFRYN2F9oE*>^?NHGZ?cAL7 zeApBDs&mNqBfhkRvjf=J9Ost{@vApR`HB}fjtz+4jMfVktrvBPf0z7Lm4*7_sKN7D zyRlvEDC7rFzXm-(`)hdfVilZc>Bl!3+cntpPj!?dt&Du`d2o(SC83<6&Hs+$=~U!9 zXZ*|W@)i3l<*mOdln+$!@`3A1P#@_&@*L8C7&ttqr(!DVa~RcO!$x5~@GT45HO%+H zwy3}Q7LL1t??rK2lZNsQ&(@8kc&p{D<3$iCxOTO?b=>g|>JvR2{r^@=RA{y@wp%e2 z_1s7LFZqLZ(AB_kH{>A&)?{ZH>Ulg7<*X#XlJ!FWp=r&u`aBcj{~6@>Ao-Cn+;>eJAbWdJ}Pef%WrRk`YUdr{)Tm@?KtFX z&tjZkP4V-@0F=+q6Pn*geJb41Z)x<|*Tz^sy7=FA_q@Y?F$e6|DANBW=_9#``Ya%R z7iw3=J>Uqmm+W>kjg#ZVbQ}Nm+n+FDIeW@@?T+n0`ta=Y^*N0r%{wrco_ zO4M^(`oDS>+(bL*>Y~4GC4c+e8|#aC`FZ=3SYN|ExCiu^CUDFquX3>1q z@aALId~8?6Jsb>lPX9l==1+!v?UjGyQc@4(8y?yYr25w=ACpr)R-gDn6YG(c4)xbr zq5g)rJ+(L5r(!>jqbtc7HlFm9p`IcduT=>+UNd=lS8g=QVf}HSxOaPS6fgn#>PE=- zKsKuZVcFRF(liJ8x;NNv2956p=%9YSlYQ`8cy9AK>QltahpoYkTzw@y7;mUwe;xX5 zaUW0sCu**^EuK${ixQ21Ni03CNXOt5?1wAkmtF!CPF+VBJ#Q9~&L$2Jz`Z`+g z4E^1)3hkrj#dEsSo;F zH2FhX8OjM-@vr`Vw4O%O88MhqPoMgb{~SjD1hINrxtsKSi9Ovy{64`{KMm{0Q@d5b z-uiLj^{d-Ws{a|ss}c?~YYt(Gt6$9XAKRCxzl66xaC{KivmyEw_dXzwuF|-xf-37j z=VJQ8`l_&9*+!ffV0JwC&Pcu!$zSP4@_FNUIh^FXVBkMUcDr1{^;ZJ#V?a$nJv~L0 z(s+g8cyaHA;mCU@*@1fr0nk%iu9!^})>qr2{w=EMzh)g8Vto}aZp+|2LZ5Fm!U125 z!vOEm;^r^xAJ#;DCZiZO=mYAhs*3yo;y22|^LN#`f7jE{6WFe1JsJ|WJM`4?Fxo-Z z8U6Vj1%myjvA*^l*6%hZm{o z=lc&dyo&e@lQ7;&9-=+T49w{_+F!~$p9+zop2fWWPV~m{E$)R9red?~&M(w6l(*ko zKOW`CC!(GWNgqj1WJvWV={qX*VkaWBjPYDIjP6qH}g%WqS1u)dmJL{dol zY=Jt`Zg(-Z5%w9-@Adel=o=il+V{+ZJU;+rGJ4MSc! z%|t#n$V9&9`U(5BjW@prw!nPjIprHtREJfk{eSg4)Ta~0&*^!nzr-8k34~uged~+* zN9W@B+Ee}2B8-R1+Nl2+s=v28>hq0vzB4Ki<>&DB1EY(;%wdqhv%JHPaP$XoaKtRVaF&VTET#W+w=i2i?y1ddA} z#mQnfY*)^kzd4YQbNaC37>AWK@cFdv?U*MKpeSTiowk7&GBR@Cjd0&I|D|VpZ zel)&U_3MQbOW?)%)+X}0eO*wFl3vCIAN6$Y4Ee)0Z1Dy0Z%}+-yzyFe8^=W}LVGr) z`cqBhfdOXNFD38#=EAvTXI_37@C3)PgqNRhTZ8p;s^ff*a>s_1x!5n67tZ(Qq|Zbh z)>nDqx-){t@$pmiH*E*xkE8l63$a}tou@bxzlA@_;pdr!ZBUMUFfK%f_Lcxg z;|1o`Q$vbNYI+gV9FpIxALduvD8Dk~1AjtMe(_h7Pp9k5oAy15r=x$KazR0jOysMF z-=iEEyi}i~Q1Z_{BmvC?bxoW z9PMUU$KOB4`J%H$J2b=UOr?)+a9y5vKJ~;4+s)yP%TN{a6_IGLuVm-9lqV=?<9`J4 zKf*%B^^2dU-EV?==9r;hO{0K2Pe1Qq9k=;c&pZ=(*Wp5xFaM77ZVB}(KO5J(oCX-r z4-%idtk3Dg&&MXve9UQ&^AVcU6ZdXiuD+DF4$A5xpPxrPFU9$r%e%j#ALQG5JMi)= zv5EX@!CjQ|oG0fU*+;{(PwzEY-+AM|`Q9z?FRon$FaNaGk{wQ<-LlF5FVOW7Ib9#Y z(Si5;$+3P8FAn$mf_|mp=^3Y&}^&BKf@d+z=d_>#yO(kA`)B@d~s*JCB?{BcXhJqr?kj<4p)nP@?A ztPai#SQhp4v^vSB>vyii-!&NJR8+x%txo)271*x|ON_%olz+aad`8R5XTDIrq~MKv z;TV*o8-W3gyDyES9wzdZ6IW3mts9Obq~ChF-3Rs89l~{F7qVFebvR_$ugkkXn+Q(fu)= zsFz@%ok9G%`n(>!8z=2v=IB7OZ|*+`#@uKfv|N3C+sVUSNG~6vjRL7TygD3nk}=3f^@b zmqRp;+zTLq;>myJcSOFNcYgYj_8+vraNZ@79a7nd9^K^Chd% z4pI&F)SK)d5rFOL=zazt;@>8|>^6><;r!8&_TMB|aojyg|2SWi!_O<8o+kb`?5`i` zIjs-o8=AT}AK^4pPc4hl&Z^63N!q?-DX}OgdL+)rCN#d*=~!Pe590%*ReE}>KtBII zq8RFzaJk=+D2X zzHle${~Yy)Z5BOsr1LUH*Y)C%&7xzmeg*CKHpOOG+e;{4QU&GP(|Xi})_s1SGmQ2< z_<2s67s}!1EmmJCZt(W)Uyyyi@y=&=(7MdeXEN8)IHsV2+&haoYD@cIIkXQ}6WQ$N zEv{Y2XXreo5%H@{rTiod1;FoC>8aKd)H98@9;Hsjc~P8-6>Z3GKdRB5ImQ3ZFZFAb zlfcXC-qSjwp>+h@Nl!Z{KB%9eKlsqN^c{}v=6GS8H{7rC0LGb%5B$8y3-C#oopgt95IF5J7Z&yT8zp5htGV#|_+~(&|k2YYt%DL$OW%^d& z9mx*ZZbdoza|rRd>91ekdHLk)V6?+GI`5NH{c*2J4qb=E(Si32Z$Wr6)dlM%Js+k5?-8FLRjYH z@bj64^=VwPQ6Izm^e@6ku0B6siURl6+lRM4UNn*CG^YA0Uj6G6QI4(&j-w%N*QRzW zc=ne)N4u#ba2>2f@!1&$g40LC%YS4uv0su|XrDt)XrF*{)Gotu2Q%vF@^&0AnGM9`@(mhx_AU$ePbz5tgocIL(Ef~qcRqD08SSR!1GWc5$0oqeV*VhdC4|_r5Nc)-1s9(atC|~&l1HTWA z*P6#zUsnn3V5omxZyzW2oVV|n)dR;}#mn2DOhEY+JyCzSOsS{wAW(0A-ahT11hkKG z{lEEMMli~k`{6*fA^q16AvqFMd^z#g=1kRM~{q5dH1EXO+ve=dHWvgreVJr-N!zS#o!jp@`4T3l>)jCU^mMi> z%2CsGKp)~iTZ;OW@aDy^i&$T~7snB{*YuI2P>>X3^7| z7Fa)r7av+KM*COn#D2{s`Pmalf8M%(`!(6w4*j+x$^QoPnA3-!KivI<^>w`a+@8R2 zbM^W8!=YBlXT1Fr?sprw`Wjw;#cxo59o=V+T7ln%p&jHmFu**aesv-F6+AmQQl2SO zpa;TFVCrdeDf)?qx9{O-kL{``FC9U4sAy02pM!D?{#Gdw!FdqJFCK~hCLw>KAhqO|ZuT*2aJ&)#N)oA~= zh_`?Hf#M-Qe^@KSen~H&B^}A2H!U%5ui&j;O%zx^dN=yXLF!iu=`Z2sKc_m9o?}qK zs`zItYcbl*nfLruRXTr{(DhK5{(352gY`AM`-*G(qdqxwpAx8{ry_`-+<0l}I(1j# zZ?r*u`1g}nf&5B;p2EA{-RKpLmsEn|1!mM!1l>o$GO$B!Xui~^JX19SMr;(zfVG`!(A(Y5jd7Qcg`z7Z+w{o~I%9qo90tR~qD#@R1P?J$+DF4uCvS%Rj^D*qQdK9;nyz{&A zs#st164$RN(zDZ9a6S5i?<n88{O4)Olmzd5_|lixlmk}O8U`LOVoNiuZf1dvjp>fYSgX0c=uBYHAv_r8w z^7HE>zdhv-y0I8%48NBg!4(4y9eGJ|@K6)w2SMEpo zVbpG2P>hqK%y!;nvdusHT_0%O8g2pd76^j>`xbKaM8QdMD%E{}X&2KI+LgoZ6-HS=i3f(@>ab z-1=C=+s~ipM{;=M+aw$N8~q49+?xC_1Qry|KKwjkA?dFOM>}t#c8?4|IWk`SyrIwE zoLDaJ`joked|-SRYM1W+@hAC>4RM3kM+#T0@GQ2g%*OG8+b#5D4tXFqe~Xu*;9JRYS7x~e2-;R{z-=p&y8E<``Zem?dy2G_Af#>uwKDdzl z*KokunZN!9Z^C{lVsTu$P~OtGC)SsjVTYhQdV08v;s!kjXRzDE_Rz;7Z6~9wotp{_F}s^eyAse7d>@-jrP>>^1VM0C^&m+c?NE=9FJmSm8pdrEzIxB7Z0vf%0Wi?AJcBLll&pd6j>)2z+SIIG#CVqhi>nph*c?4QPfo2-5 zYdO4iEsWZ&pmsGhzMo+FaQ))1`y~#@=dZtZ_s~8PUYtBn=P8m2Xn+fPt>AYfDIO|# zdDI#y%CF#!dlD=(oIZ@V-pzsYK8~+hjve(O`Df2!eeF-Q|6S@=9Idm(RR5tR{(<5M z%29@(o^5DhJ0nLq#k~BXvWaznHYDnLefnU#n{b-3eV)iy^X7HwXwsAWfm5IY(ld4* z@@3>FhIq0(o%pnoX^6x3SEByKB{<)?-}mO|!$Rb1={lDyvRQf*%HgleA`|O!B@e8x zbT2XrXknRkEG zjvrWG$J_VlJrdjH|jUc6vRW$!>OEP`;QqU!q;GzS035rVToPpf%3JqKQANw1rVq?yJ=%k&LH9|DGqz{;;=W23s+y7 zjw8N=#__ER`D)(tiFVXqCG{7kxt`jP&fXJ|KFWgJH^ zyPnqDp`2)Xjx2-tL(}nmS$+uDK}ZYr6xasGQNi1Pu1@)ttUCH(j5F2`xqku!`BXCFE5yto^UqbwW^Hj4Cgp?plkyAGHJ7pge>$X?^XenhuswzQ8YU5Dqh z4`_fFjl*`M8=-%~1ncwe5qOi$uCDmBB|XM6!(g6 zqMnV&KZpE6f0Oh4Ih*bu$Qg#?KAP(L!u|=TC+mm$d?tO`Ou%;4be*CL@&C3aJM+d- z-Ies@B^JOOXGZci&M9SXepzE4UxF z26{*F-|rjwXAektfcg>t$Zl-6g6`Y5LN{d*`grcdf_T>>4lKlWLwWaKg@W38yYcdw zFe&N7%YUjt0>k-L#YyaFFwKh|qp7|(>Tk#&YBxf@hIc(Q2K43Hjpq6J^|zd!5~i}p zc{*0#YxuqB9%KiepO5rJIsAO)@kf-Sr2A0Uu($U z0#>3ugLv0Lx;UYp61p#_CduEu6zi*a_Kyw4ag?3K`S^#%x7|T(S0lmsQitq((H;5x z{AWANC(fQao;`QDAYZ{7#|*muC8Ot~;WR`~TUt=Ny!B`*tef1pD{0?mG1Xrx$NE}c z-W3{z{2bbU2&MWbKBFAgoctNh$~s=d`ce-J42JszLg7XWy`S*%ja@qOe{YNfHOOw2 zY2QgI!Z@5nc1!+E{=j?Q_B!=TW`Xnf8r82k0LQC>*1MLZe+xHkR}zo)Pf-0A^^q^% zh5WkYC(mJmaCTGCeG~>eG^70uHSawGld`bgmb4EK=G9Yz6y+=Dp!}o6|4i2-blot) z|5hEp$e4ijRdgT77^>fh{6Wt1hvJbmUhX&`hP?FW5#*~B=!bS>=XA;wWRxcu&bxID zNzYu=Go9knu$1n3Q*ZTf>9+i?BW{e|pMkigwfS_G2GHfa3OVgLwCo z#HOMg6}`_>K=G$-W8%~M>qO+x+lapA?)`aaYy?>zLT!O!XaY_8O=$WJ&fISn!H zB^m5b`>XQxnAgE}qMjvI{E*XVth}<^9MNJ z(OVd^O~!Fo@a{vX{(Ja(qyItT$H~c=jrwGh z{`D`ToakzpFYTsz^ZzmLW1J?by7g!;dvxOA#FwkthA9ink;vx@q~ zTkj6%VY?Od9)_W0{~GR8e*x-m*cTez0ppK`;*VjSvKoi_X!9|jaV33TH$eGHp8t1^ zLw*k3cw%_oXZ0ZDtE!+s7}n(#OVEELy!-mnUQvH9;<_AXg@(SM-+zPm=kT7p90`8N z+4=ut?_B^SJF2?z4)RFkwLHRGSdd2$h;w^-UVyl--lVgyac2?&ig$au@67gYztY_^ zI~)9)RRja_7|;(;5LS^tQN*ku5PaaOfXIiii1?3)u%ICR5m^KwfP8$vQ|DCmy>;t$ z-`le@%Z4-|nLb^0&Z(+Xr%s(Zb?UU_>wq|^&pWG(XH71e=s1mQU(0m2S?7|Edj-Q! zS^SV&lJMK>?2(T${uA$Kjd4F7{@m;TR^aat_?F4f;-NmJw{reQt*7*VKYf7PJ8RureBrIa&$pQWrwBtk&T{#jwQk;a z1@n2n{xecL-e!2KX%o4ZE#7i))Epsr>1bGIbe3E#Sd`FXA7@2$!? z+95ed!?3E)!ox-XSoa<7DSGMjPxHLi_d%ZV1TMezDcoaFN9xnY1X1#4t!q7*kLNzZ z^YIB-|LF7QvLD&{bByPAc$(#InPfbNto`GuI@3Kl%lhO;pU8Ob(~|ME?2UI^DdY8a z#{X%-zYQIz>}NfIqW4}mPxjKIa;K~~3jd#|KOsAkFZ6LtHg_b!PWV5vufNTjr?+81 zsef$y;c0^Z%stt@yqSnE{R+cR{vq3M%ToR`Te!U^KFbQ=ebNsv#d$8-6ZxZ;eCmFu=CWh~jcHQsOf=A+-t`dIkHO1|{&C>Hv6#Mp!r3YRO!;<(s zCHa;Q3I2OyK-Ip_%9HT(Yg|6}VdnpLc{p=lk^R~^YhL`v2f4f*fAZ=B3?KVlmj7vK z@0VrX9g=yyRoeBk1iR($;m;@jXJtPEHKIOSRvCV3FC+d>Y1c<&UwlaR#dkkAIT;VNLXaF8{x7=k@VYSs$eva*b~@p0k#oe>NOnB!}B%Tv)1eIokIV|K}_@ zdFSVt?jdX6{nZM~p?#n9mcL~@V-IHe*M7Dt&Ql0~`vxAbSBm}iVb#wM&D~-7lVAI< z%;&VsmxoDzKJbsFpP$Nl>~_&7pW4gtZDKEZQvN>TA2==k0o`xUeg*Th_5tQ+QTVyr zB~15WmLLAlKFs*f+=ttxmR4^SuPQrFN}N@`!xuX^iN(@8Gf2Ojtmrh7u}b)p;9=Wpa(^)~Aq>a*8Ld*%NA`=$Il z;eRFkTP*wb())1#Z;?FnFb~w{ZC7&nHESJt3?7i@R!m**ImYV)-3y{GtGF; z*z3!i8Bgw?d0o)^uaA9}<@v0YSO1>`&shu4V;;l!Ph0K!RUDuzIr$#z=TER$yFs2ms+ZVcoNM>1&w( z*INEkN{dJ3+t#{s`2mKHeU4YOUDD6LBX-~k%MLvB94^0A@=`ul+WREYdnYVD-wpvF zx+g!&9q<-b>$%_iGV^(x=t^G$6( zyp!emrP8kXCvv}?zM19r5v)dYKlWRUf7QA-@rsvm`Szdk`t>KW@PGE-n9oCpSnpjS z_&@edhM&2b$Nddb{)&Wk|0}mL|EDEyxwbQZ6nv7NKP2;_D0=w$A7OsBy^rUG)&oEG z@67*MD~_dcU&eDv;`W~`{qyspe@@AT*GD{re|Ygf6CRw~%Kb8}=RZ(oKF>Ug#}Q_& z`aJu;x%^hkuk!czXFiu?J=J>ng$eegu z_4(|{zhJssUmxwC%h3?B$JQ)=LQU-XSxZk|4Y^Y5EL~v4=XuiqRctg!o@d|4_%9Xs zVfar7zU}W=PF^PZ^DPhzf}f>;LwvL!>CImgek{N11E0z5vhx$xUcu$Bu+~S4Q&98E zn%6JFdQJSFrUV7}VEI#@Q{o5MdLNz_3&Q^^p38W~#LxCbDSyA`F`ls;|L_HpR?kMpE$+*oUq2_RX@(~Q`S1W@8fKrpSAqn z4ZY9mVglmxE#c=AFXnNv?Sz*m*cE@4U?;4Iezxs||4;Prs->?U@MFyXIcuHzpAPr) zT5uo5=j&u#F8zY^|2Eb$HT7#Q_jmVZxNV1=zMSFPe8&@-5B+bZ8a&G5DNu|WO9Lz&MvPRRUv zH0%G*%0}Ysqq)3ow|sZI%)9@G%U>_$-z0v{wL?7aW1@$jA$sGa=#A%#Jlt>(l26zJ zl27>g%ueoG_%F?`oY)(>KOYRX32xgVKleGFr>mB}`Z>{ur^Jt{_3+0(Pvy7dwp#IQ zf9=b-+>7Vk$EE+@0fwmjAuAsB_Y&-iJFuZs{9EhtFD2Lmzy4XKoBK!Z$R{xQ+&5r= z5uVd>-|Zo?F24!=N$|73&GS7c`r*?jnC@(q_4$K@|G$)eJ8ju-&-q7bZh z^F=6j!f)FZg`bl60l8mxD;Lkbzry8DK0LZk-EWrR?Juz)NO)FmM(n`0*ny7_Jb!T= zmp}VGF8@M-KkoC)=a`lE@|G8H`LPDmy`Qvq{)f5znJal6d7a?-n9_$B#~*pHg0uww z`fVcraxeIxz~3VJ?RHDQ9rF>lBth_4%q^_k|yx^|{=Sf0XfT zdnEJu7UBO5(37-|v~Oj-bVB6e)Gu-Q_6^+L7Yp5`7Slar`GLQ?B>lFH5j;llzgOVr zp2hGwdj)v^a3^JtO(RhIw15`O*!hP1+C#m7F=WBfVGZ}yE-3_tW$ z?$1l4A71;*+^&<>J(RN;4#I!ZTKE48{$3idQ!n9>{XIsPd;Pn){8`!W|BCeIH$KXI zu6>y01mULY^Sf$ZJTy0J`4u1Y4_yA-x4HZ;h~B>WMGW62_X3usAMTKImJ^a!$s^XzZ%cxij=s|(z3 zTOP`S@GKUK+?&u4>gTm0<3}^q=Z_Bx9xD&$Nho$IZ?Eq!Pgs9{^#-PU(uxOu?3Wqd z{u>@g$^$~5cR^h!eyo0Yx!8fHEP1&34Q$8e{)ihiBY0M@q!FGoR{1aeIn$keI_qJ% zu9mw5=MHo(bH>s?<>zoetVw==fZ5D#|8<7X{vWmzS>R&kAOb`n*H>=j;~lpCwty|L{__Z!fj>7jF>#bBEP$SNsO|&(@z{`{YlA zp=Zke=+vipys)gO&)Z%g<*j>XpE=3!_6f%G87aT#7Z`rp^1t2v9?a*OWryFKurB{E z@#}7t^>M%8Z$W?3c%6P6j~C1~^(jICXuR5w=K1mtf#=UKeCuO)eYsNLNA)`XSjO`v zf&bwgp97wjb3jaI_4&mw%6yTyan?e)+~YsS?LF~vhJ0S+;fb{jlZNnC>O4ZgS%Z>-()m zmbW#@dkJ-?KBr&F@;Pn!OJD!*48OzL?{9em_s?nZ%Sk%>-1XNp|0gcxc6~tl=M*+* zv|enJ^AR2$mkMW<9_y^V!x!nD+ z0Vlitq!qXPY_T)f#LmR@SD(*`-)5WO*(&g_Kb*(KwohIx{-~2b%j?CvrCmF)ucYxh z^K90KpBMPMzaacr`;MEAG5)iASWf;z=>Ct$$r+Iowg&Nz{NuTN+gfLzj|~*jJtyZQ zj}&?PivsgA_JGS2<_Ag#eMt1=IZID|{aRkXW?w4nm+Wg8fkbJom#{ z>)i80Ph$RU`{6Mnwz*;p8M$U zaQ|%iE!OAfWPQ2j<-GoGwd~mauVK1v>;A&K_R74Lcx*1i(UpDl)zi%KWh(SJV zKb2rV{Pl0kc)gCtOZ#IlEsEZgcPpla?gxIK`OHzGGkhK?_2mc6kT1Fhs?jrGzk(%x6#ze?WzhUfb(fj?X9ket{d zVov6s{7A+#c8ull{}nzza!~A(C$h%AUGQ96{j7N z-iy4ajMrEGj_2bkOJ7yK%yN5D^5*Rnx*z&u?w_reeRxvrz_ar#KbOly-ToCW|3zya zO}&r#Is0Xvzc9;5+d&(lA~bk`osmcy08&riyFF=pi_slS8EpS~CK{|V{OKlK>C)#CrJUdnV& zOPu^em`v{5BL7=0JNZ?=F8yZd!`UbC{$ks1mWNYUa08xulIfn4c#@j5>-GlE-)%q7 z<*|II&yE){{%w}t_~I8>e$L8$kjKe-_hspald^7NSy7+&e4WeBjc*3q@S_v#imzyY;4RF_ZwQ|~(YI}Dzkki+nIGGJ@V`#|413AC z_gA@=H{reY=GXAr2zw8CV=Xbx&@b(dw z6S!a0$N#L*wa)!LC@#W(_BE`xb^jdK>(sBXo}s0cK7aKdE`R6%17Oyw&x78{@YCBE z{*xlluSUBG|E%S|J#s|kVVTV=m5(=m6qKV|$U4zqsH?<0F+ zpU*y$@$cs4A$KbjyRy5i`?)uXU-9fuaCw;J>htv1aJ$z2jn|z^cpBvX>`UCACnSH) z4lbU1^yj!;_PV_Pn+!j3Rdl_$?{k>{Q!-Bj!Q;!h-U)ek?3n_8)VCPVwrd#=wpZ%& zwLf4!bMj6irjPo3SN6GUpX71*j+76+!~L+u+RwiGhggrD6+d%b@a+B|^Lg^S+|O?n zJa4*&;W^8$xH}l8aX(?%v0wQw=709#%>S2o+UGvxbNSO&UeoKbKog#Abin~1ESKu@ zJlVf&{VASzzc2hu2>gWP2Y8jh7hcVHw#fZ2-OoR(Vu9k z|62qbQ>A{1mtM%oY~R=Lw!4eKf;QTK4LVH!=Sw z#|5PSf_odnGRAq!pL)j1O@6GxF{jw!P}} z)P3Bahpc;}_Z7W*$kMAX75nYb|K@r9QfcqgUdHl&v$cLb>5Xg$o{{@^!hUZ5t=#`- z|BL1DmE64Co5Zh}`#UIVe9j2|<(D%4G3)-t!iN~o+O0evwf+Ac@f&ZwiWSVi2;r|h zfZN-C9{1SaD=K(DXkO&mTGyTd0j7RFYpoZ*^XJn4?_tJ&LiE_{MGvpNo%=`AeZ}hq z&l|bmFALr8ihtvj<==S5Q$;@I9g3Y&e($r`p1<0#b%mUtXvO z{G0n1zp`5P7i-OOy>=rCK6kE{_iC-KzfkT5e!aHPDR++hwPvlif*<$qne4W!_14l1 z|Hltj3&#$Zdqwr5{5Dk$dgWTZ>*Xtl{l!+NQSO1CN&c&NaL@j^F@Fj;{6=>PU-P}j z!TsZljb46b#+w1zTE%Y!jTXo*EH5qwol<3QBR?@#oGX_q#bS}zuqfrdN~_-LNLOqQ z$uUi`)!v*&dWB}W5%g)5s2{!YZl%=@s(!m%#n=~%yYlX_NLSf&SDvT`D?xo!(kW}Z zY3IG};TGh3Jsf1i;pW5hdZV^KMa?9dDX%4TMM04NBG>6wrqB%D*&EYkZXpU^Uc*AQZ(Oew4 zox^J;(cC>U&EYkZXckANIlN{P&5+rf(M}j%Gl^zrNj-6>fE1CpubgS0OPG&p_{1o(P)tW(bdARB27IXBD z40=j53EY@gEjKIc8LZ5B-26mcLkY9PDwKd}DyWy+U3fqS&xZYTy~)bqPOI6Pt}b`f z{3+GvdK2o;(%!mP#Q(?i2X3ZhSIP!b+_W}sas!#%=Cp1zo3?4~+O$RuY?0H6INe;X z*ZuXlA>9}fq{Zz`bfa+VR4)q(Hx~mvidlFW0g;;{hkr5)AE~P+QIGi>vr$i3J&AhE z^O%i#%IZnfV?M}i)KgYZq8{@`W}}|6dJ^@RUoso@l+}}{$2^qTsHd!+L_OxK%tk$B z^(5*suVpssDXS+@-(}ld*{G+ioM5%yQIB~>vr$i3 zJ&AhEN1Ba#%IZnfW8Tti)KgYZq8{^`W}}|6dJ^@R2Q?e@l+}}{$9$>TsHd!+L_OwJ z%|<mB5#2WP(>T6Jw(xb93e;`50XsZGvm_e39MU){f*fTW3=T`p-6ER5!hmo7=+8 zZC<2ph=d*Y=h}XywcPAch-I&XK-hM@TnS1#0(GKWYaZ?9y>b&_s}h4+Z7uhFf~#Y3 z6Ae3FX*Ij8df+#fd%-FwA)a-mxOe{y;&_|O2*X|V^8Vgd<*46o)oYdG#eDw=;`@OW znY(FNnM8E&5~5Mha|^Se&A{yjkD)i_BQCqvZMV9CGrTtMJ_R0Ag{$@1l}7rI=UrS& zi>DF3NGNtvq4TbucseDpbl$1q@NUxyULcx7$QpZhF_U5A9;jhQ(5?lum>^<(#xmKc z35;orD=8o%3uj*X4U3x_&r7-EN~)f6yO>lxQ~Gz3 zs;6{LB~?%9Sxc&((k+-&J*7`Gsd`F>Y*O`<-sGg}DP7@7)l>TMld7jYgh;BM@&qNR zddlOUr0OZpu9B*!Ja|j0p7PW%sd~yI&!p-p&uf#ar#x&K|ur+g_3nh&!c!Qm*+Rv1Rl`QUKF%8nEr6??QTE~jyscjx>*rX2S{RqbR~1WncnesfRmub7AO))Z-$PE z8s(#b-#uLJ;HaoqUYhXd{9diNQk+10%S$LaKbKH6*X?yGjdoi8H+V|%c|`!8TF3dk z;(T|iIuHpHu+q7Bg+;njU@r8?B!_$tDM*qYngydJlZjDJxJ6(y$x{Y>HKqleMVhDE z?4HW^%lHnJY2D2%XkH<7xXGuQzByO24>czi>&xB45SunsUI2Zk4m;_};?dlq`px=f zxv73rd528Lb&n&1QG+|Kmh-P|9;-F0{=uNT+<;E?msVH(cF^gzC}~mexW6(+T`RIN z0@FyMgDGyrt%zwlw%n}UupH2tFHUj&naGcYYOq*du4}DOnw#`FEfFc%r!5$+FY-2xZFKlnj81Q!E|uLa=GsJ zTKv5XOoev2)+z15?@+0n=m&}qtg~QkB55t^P<*nq;lLMZo7BQWl8(kg_+z7zd`_M$ zQT@ej^Z`~YV5Is;oXDaWL6m8BSQi~f5LLY}uY-rE*JIdXGGJh$h>S{@DK9M{)mXU~ z+VaK*abW52a1AVI^+rD_S&Ux)Cxsk~c(7Ut+H{TD8kBxX3;SSBqMZ>!68*uOYO8E$ zq08GbUL9q^J>vM;;?z|_*bswml2f#K6Ezq$i-#NoW ziUqY;*+1tYEg9nz{noeCNY8uI{=o(O5(F@-DxIJaG<&lVaI;knR029^kjM|U=Fsxm zpw&(EkQfaiJdHLCGnIVK^CuT-OSNXNI9KrT4{0f@TfA~twSEz4?26E5HRxREG^q6s zmY>BoG1&khv>FdB>v@QfT7prHpr~{era~29P#g;|7TM@{sVao%cdd`aW?BD*q(fWoJU$={1K z$0B&6GBQ)`l$Tn~h1RN9sFW**1HW9U1l?|{Q>qrdN!s`*Fk;`Rzm-_p&C86V=uImj zM~K`~v$j~Pl$+JAV`N4^Tu^Lw{nnyC;ZGLgW0Ciu29VdX*=javiK?y8My{vquY-FQkkz@UfHZ)|f`!^*WvWqbmJy2R<@aGtsqf=&m`n?5l)2Dk7oy)Ndy}Qb%AERB zm(v#CKx7^x+cS`)H+faiiy-H{^^jU#sjC=2&<>i#BgFHN3VD!0GxoO1lnyja4UZTL zdOfJ)E?0o^nG6TMQYzTe;6T+pZ7Mr(lBle)G)T*sW{8NbQZp%!Y=uH%q3~(LfQ?~L zWr591Nx3J45_e%#(qiV6cKfLT=d`r~vdkt86;o+LydDF>K&LrBZ|Ar+NXha+%y6}) zlKrfdJ2hHoHPh~2y|HGiS6e*pBlR!$4s-(dc;QH^){OL+wrKm5S>A0G?@eRv@&hao z7||*wAE``e8?y7rvO+wwf2>yR9WJVrw5|;=Hmu&1QV$9R))V097K$ z$>^B&i+-hE#DDP*4On!&5}Rg{ZJAPIZ;c{8SLRjGJyKS0xMjU9cb2-!dL_e_atjL_ zJ&Q2xp89FJ+{XN(2}22n$Fc6Ir4ITutCmj;_7&lpR6Y=2O$u857m%&FiAAA~vNuMCOGaWzV%S+sLfUo)gPMmnAj%j)`G8o-94gQRgG%TWtzKZGvJMTYaoS$yjBIZ6oX+w{S62Ec7F7ckwB zQxpScTT9+VwZ;2W+{IeLnG5_?6Fq($!>FMV9P;Bh`A`mleE&_0+~Tng9H-y{dx(NQ zBB5J>a7=W{%_Vro8$H;&H##IM-7^mxDM=2yExKG3iyKQmX0mN6d3ScW&17Mq!MK@> zcwTG?*j(~MBf&OS5Mzt*=C(d&3vDL(q3g+oVJ2a@-Bf0VB<*B;N6cKChDjJ$-UEgVrJ@}aG1gj@|55QN1j`JiAMy{(PThVx26yZ(8D>ev#)Re;E# z{ts$XOQC@PXZ9Pa16=8qK1y~~;&>VEg7ZrYBI~JuMeZ|`&%%s|%UM{wrbulwQ**}O zhnUA}5h+!I57$GWqqz863r8?vi@Vwf=EsyP(wZTobdXUtIHDtT4%MeU{VXRtQ|b}m zGn$0{-al7N(j`Sw7;asnesb#)pmXXHq#RfCW{@tqtEal9y$jKvGTJ4w8m+gdv@43u ze{YN*oTJqJEKWN{7N=cF;R7oe z=Yev*O~Dbcnr6%avN(p}#+WfNTM`+DUlsMiW9l&pr}qf!O;0_bQm??rzAvt7jOmS(Y36`|*`GKC{O%)&PY*NlHS zs3XAG8{>mD6(WL|TO2g5`xqdE9>#NZoUSpP54^7QB^$aCu}wHHb|Y?sU43yEs2As9 zGrM4i-%GwYz%Z699$8SUXE~b5l z-b~+E>5aAi0!VM@3eSa_K}qRQT)lw}OV$^uHgpWnJMZKo+t`z$^UktPoN{q>G`QXr z#=Y1K+f*HwG};yu7t6dFo$U)Zu}0+i;$nE?x%FZhXj}`##_CQlW-(j<9%B7q3E27V zg6wYjnKo`S<0e|=Xi;6?PWI4ydA=UPM_sT#Oq84z`3LD*!5z80Zv_}46vT1C-5Z*r zhE5J#73YW9qe&Hq9{DF#9GciBsp8PgKS>p1dnQ|ak}AezKW)XKp(#lehc2D&ikU(| z5>V)!ciQx7ZZwYkwkbPp$xi$4_H!~@U-1CGy$8N zzUK|i7U!-wEG#%B-)Vg2ZU#JWXlPhM#YiIlgfi(O5ECkU`i2w22G|XfvNz&k?`bOz zwc-+3b>09;OLS;jL^n|*^J%@l31~8=K6PWk>0%lyO*%X#lua663Qn7Nvzd*e21 zrrI&XHB;?$7k}MdZC2jH>uoR>M&QcP7g$o;rIk#G-UIyu->{p1cd1-g-gO@Dwozyy+-)OMvKW>k;N#-c;r@t%lFL|}V= zsFfT5O&uw@5GN>tQOxI&YbR)^hbVpAazU;gm8`UM4P_@rimO^s369lN{+%YSFfUh- zD`~Db(OYiU0~A7VBq&|&mk`d64-Hd4xKr{03TZrmsZ;gQ>y@E=fFz<6-#&b0xcxvm8GPhUwBl14o|wO>*rPO0XyA;aPt-5{WWC|*xhgx`kQ`Fp zn2MxTVYJ*BE1n7IZraC@|F45=W3^_z)(lD&Af^;K{d_aU;=D(psB=?3dK4__ObR-E z;dr+lRJzE(7gUZahYls(VVLA2qqHx@sa8|vQ-j(V^KtoWsaa50QQ{aU)ZOG#oDVQj z@F{%^)j^--ank|Zw~qVe=+5)L%H>3%av=Rv>ni6qU2}i*)NCP?JXu3XbG@{<<_;XIKViq%h%| zuwBp2woWF&uqUJ`Z!Oj~uw&9(B;eybl6bLTs>^BHbLzynm8*4;vzVS&=sTQ-F+G51 z;JNC$7%%x&*PB8?F-v|R2W|83=ldjXpkDy3e5^EsL{ zjYI?Urq=4JxvS-EK0Jq~!+A;3uAtl)oSl@!RWdvSv8yaCr64h+P@&eW^@?;OXu_}n z;>ZXMoUlEC1cDUOHY0KBLLT2*F~hJskR>#L9m&%&OuWw{Zay)OF*KNFWMlyu8a3(r zE$&W9lI`rNgD5%9&6m=+BMU>X2*ol>Is8>FXr0V6(Sr46U_5VMLF#BqRm1s1<^#|v&OF&kIj++&R~^Wl zg@e;{SC2Q#4J0?Eogpka+9axsta{^!){gn!WF!MBGNY;hfz*jnfrJpNS3Yz$Y^cQ= z)EaiNj-gZ;#N(_@wL7@1*~Qxno6DX(tX=^*!PIsbQJbx@oeNgAwt%++wA4UIHf-S^R_5HXJjQ%y~E=&d*O- z@UR1%EI4YoJN5X`&T-ePjaY9rUN1KLhU<>dsu5mhFt;J0P^3vp1Xt}hPKlhqc0d3x zU^{F*HcSiPn*Bg60CmiH1d`MUtdPM7;=`#j1Yw}VdR-|XV+||MHYZ5vTah?QLr(Q( zg`TCz!)m2@1rM1R(14JwN7gKU;Qffo5RRQ7We)H52ySkmmcvTPQ zc6dtC?*=f{>Ghy4r%R9ORd14)R(?|kthL!N;WY4AHO=Eflyx18XF;u-U}-w^77Z3d zm9~MlP7ZyMABz&f#!Rips%Z{NAfz<9GKU<;b7TX?yRQI8NL|@Veb2q-S*44H!lfd9 zuav;&46{jz+8oQ1USwu*$^kRYX*W0-^H}fEdnV{J-H`TL`?Py`aQCY#Csv{ z>38p7IfmjEE5%B^v_Mu(c-iH1gs4ai!~o}78XR7MyOPem)B;v1VxHC1_AsIE+>4+C zk2eY)8G`=H2zwiO+Xm6PqoN+QttKkolPH|@tkGv-9n4q4_FA@r6MAvQ%sunK|-H(`}gQNvo zzNpR>F(Yi<2Ls=wAH3=3#k^gNzH&&L+t^%;8;x41`%CGt{bqvAxQVt_T&mp7t)7qOdKYSYowk*M z)yjd(Xo?x??n_&AHin8lVwtJLtje(!F`DsAEvCv!Wb4T~3kuC)X2I6uwO;=yc!odL zL%wIGE{Izm-OW2 zxL=yv4NmcXrHZDIFR^hh?l)=3Bq+n1fO9MC_$k)ljh$mtKf3@Qho)rq?wC*y8Ab$!_fhg%^@uWL*|5Bl%29+w0!>qzYU~5~ zO+|BPY#x>&HEkWTdsYTL*#23Q^7Yq$y)bXuJGjc4uv_HC?&>?EX*V<}P5h?n1>hl; z?BD|M5WDJo0eFbXgMBG-lSN^3$;SfbH*hm3e=h(Ju@&$F@DMYBHl7EZqlWKt;H$%H zMb8}F+3xN+uLt~q_QlS83H~H{UkIns`+c13&h5hK*xU~K7cOW)C~&|OEOp9t#Hp*0 z*j{NtT^S%pMT%Q29!~C?cy-)gINB?^F0lOI2;NR_J)J#2M|08Nho|RP`TEM<{kWaB z)Lce9?JDlB?QK<#>gT-j%Jno)FQ#Rza@~GR1;SWfsI7RoCy8i0JU;KUi<#bq#=t9H z5MS5k_eF6>31OB&DIG(j)QfUOR~WlBH)GZTR5U7VzBKsfIsLPVJX4XMs>#%s;~fNn z(Bo+etU5y15WkwHhqp86=OlXabDy4EFu+BdR_D0fCoILzfcyAT9vaUNp%6Rw8%7~s z!BDVz0H?o$dO&_QwcQOmvbQmwr#n9=9z~b3{G4{C&hXt$KUft!;*zxCxa$$DR)RJ? zj}RGPH$n7AeqxL`l!Mb09cWcBEQ*IX%3m00O3s)~TePqRH|4`GB=Vq0>+K&*4Sg*j z_D)@-`oK~Km*XmAlq}do4aX=MPpb8r7(=KIjC?P^B7+e z!^@JPJTuWw)O|D{V`dC5MmORDaAS0qis2eP`AfWShCDawG>#STF|N|REuGYE+%Smc zHnTU(33S~VWSo^_?e{WNj~Z_O9hvfV!DbBim@y` zX(^_w=%6_Cf#d{HPMLq#K{1w=Fl`&tRdi5HmuNITYf@$?bx@2s2Gh1NT}21QnByZY z#dH-N6l1yI(o#%U(Lr&jZ$C*^(^Yg(jJa~swlQ5r2gR5ZEiJ`#6&(~~F4VLX(^Yg( zj5(*$QcPFTK{4i{O-nIdMF+*0LpCkNbQK*G(-{^HEtjsMgJLYvYT7oYtLUH@%R`rz zV!DbBim?QeX(^_w=%5%f$R!%Di!?}ZiQuivYS1zJ)>sHkx{3~pLr)Ep^lG|_4vGiu z!@IP-ny#XQ;?Q`Iq&B9j=%6_CWGsndx{7g%sdKT%bwKK>F{(q;E2bOS(a^-X8M4t! z$;>EN;=Bw?!<>?tkFP4>?7^Q`sv{?$`m?mRju+PJ9;YOZWF?OAz0m|WqlH+75*MQL-=BSI z8{W1)sSO{uKBtUyJQA&cMq$a3%AV z^c3(Yd}YTK=WB>(E(=>Dql$Ai%+r^Jtcg;CP4RsBo63D(_R?zW?VT?)+>~o-I~N=B98+O zd`$)iFZNVHB%X9s1QrK*FT{a*<^YlKBQP>D9^68}6G@@SepDHa@=8w07`4;_qXR8_@&CQCur*kY=s4Z3!dGj2V(bklg*)T`<59cpm z>Vm^!J)l%Y{PflEN>g}?pkHfmtt*|KqNa2Qbp&^bPFSOoDWY}Zn|nu&sQVExd(4YM zGk!^uK}Fu0!Gmh@(##RgtvBuC#SOnxZY~ALZr;VqYD?+|T(H>{ES8t+J^rz(e$_v@ zpPE6|Cg;0(V@0|yrml?9b6T+nlXMn+c>}>KP~%%igXWxiz{4BI_uY6gk-sLqoG`4G z^$1BiT6o^8%sFRq=nX-EmYTpr3OG|frZUgcIkwvB(6b0C1#PyrU{>LlU2j_BDeXRj zCk&9hTa9u?TbVYU;jj6!*;)ZN}IHb-jiBviveq`V)2UwYw$>p^rTDs(LmSC6JCt$z)3zE~lR zHrL{;d(fg4d9WjTqfMp}y?+z^LDjZk{Rd2iR9O@g$)l=Xa$ z6JFsdKe{4C_YwWpO3*=0_hYI)Wuw#6im~wZI`9r|)E&lr7|tw0*D-J$mmrs$jdBkU z23Gxgu!yUsopL3BQ6eSiMMBbSs<%VTQcYZHU98tIjVU>Evx{{Rv~^rEBbRDwsaoDb>7|%mI{X z6~@wmVcp(YT2||K>RG3jp`C}9n@6WhT{R5pX1mdZ%7U?mG^Pp14hH2av&cd)tO73N z<7v!&>Z)kE8nlM?8>61q8Y*uEblk3hay$!jy8pB-;_AkkHYL2KO1c!i3N?Z)78kla z3Ei&NG9HD}oNVugyDeD=@}x9(E_XVx-uB{E(!LbB+7KHcs!d~bU~v)8COdn)FS#Cu zvjP34=(ra0P|>OF)#}wi9CWDke3_=Rs*>CkFArwaP^#Il_)lHh#g5(D$$emczQtGd zElKRNUYK3(9xl$ZiEfp$F-FP`<+WF?&monyvzKkm(ixE|$poh7dO?_s(rQ@4E5>x2d1bb8gcHUOKu>e9)a+?_r%s`@vDs27 zzxj%?U+cCi*pg$B>$TMLTv$*GdO;1XQcC&pqH4B0@oDDSG+jc|7lbJi1hB}@A=o<; z^H?UHhMrsrDtI^nuSD~0Zv2OGt%tWQWGn=A6!WlGLLUYlS_WKJbN zk*R)iZ(M*bapS_97nm)2LAn#S(7i|M4>h(csotd1UIHy!_N>JVAo?X+OD6iAZ2us< zB~O(+>BYV-O>G}}WL9mj*GU1(D}x~m5s7x`bum0jG7hU%Y&LrJqTGbxSI3*vWMSjY zD$6D{_0%K2Tu(htCdIKR=A$o@aT!>n$nHU}pcsVw5bC%G~YBcT58_PXB!-?@hvm)*nJ(zuQn4T-I1hg@?H?h!c*u#Q{=#!U{ z;i3gS1!D~V9{xIK7>e!O3cpN}we)I(U;Z==4hH-Gg&2{c5=x=Jd~cP61c{Cj37Rw+{n{d@X@|S0)$vQ$;N3<1 zE1b2xH`7sOqF-5|R~R{uc)18wQbOLPuKuH@|ETLfR4|=FH1vN zxdO<|p$(tj>>i9R67u68OFpR@BOr$f9^*u^ezgic1lo3$4&D*E*#=7rm|Ka59Hv7QgEE--ostiP6M|mBK7dvPzSU(#-F+lR2tQQvGiG zL1=@)<2f5!vy4}X&Q8=$l`Qp0DGTdsa`o8v$?+#DZeh*NjN^hGr4 zwl!i#)*G9pH#S0cZDP@Ba&5URIXR9X>9Q)@HoaHCYsY+Q(^~G}5pDOuh67W`pzO0T zS96pcPSaVfPrxf&+s6B8s!zn(qBgg9Ujc6j@`Jb@lpsA#(kLU*Teqt$FnZ(#&x_WU zkP5L#f9Lb6P}PSOzChk?Wzy19cu1t!IH=TX1gVFILnqi!@6z+5lXWZ=0h09{Lv6eb zI-%_S!Bx5qoH9kL_(;qLgHXAZsl$@DM;^IBqs}un<AFebWGLie3OG1v-jYoia== z)>Z=F%TE)p&qbENey8c!j43=0+^nL03n?GVSZ!bd77L4w8f8+8)W}aQ)S6{vx)Tq0 zz12Fp+}1r*1>JGs1-;Y5u|{?T`9^uw45O-_t$UPcBv(-z&I2kCAaIbl1OxEk9?D|3qE?iynkMANp%sR&s^Qg4dMw-zAXY`4SJ1hofIp&rV5s+q zwzkT#XwC^F2SJpr&1GsDOwr5eI1UfHwFU}rL6;N{?2w`HrrC!{ZPzu2I#%-quGIG- zq^>$cO@dFpVZ}Sd_ssb*CZbX6_6%zf`Q&h3sH^eRO_ojN!wZ)mfS)VFb=CbJv4WgajZG3^QB?Fmw}Csu~r zgRm=vCAB)$-eMkqF7?!ZQ;*rM-Pmd25oyOdJ3zZTm11m^7!OokklB0vKGORS^`6jpDWSgRn7ROYEu~ zn43XI;=OtwcBk6*;6`pajfPwFnK`Q-{vI>JqP0KmyURsty6$wuEuBpodg{(I7B~PO=T`ylV(Uw6{w&*teFCb`%!;0?4C^> zTNQ1xH-@b~LO#>SW<~2qg21x19C0TN1SF`pkqK%4GJs3>4CzJ{d~&{!QLLW{-ISB` z+C(=9jxJ$uRak7dx+VAm{KkShE$6jo|6Hwr*oP_(-&JV#kj_x8Pa$YJb_PZ+f>p3z zMi}Nw&o6^CqM;EJUB&|~ySkMqKlxe{{t2}W#R=s>{C{>=7aQt>_&*WNhHbosXbVOM zEP}6+8ePp|E{v|`LI?dntsA=BTb%asFK-g9+}rRxuYms-_tF}n%QVm_VTfG)#P4*;*ItS%Uvzp zAKCDRdLm;*(+B3DeBziK)xe#ED+oP$(`Tg7>EgI_7os%O`H-G^p+J`nA|zpO{b0(9 z&4CV_(?6IR1N$Ij$JVIz2u;b-`gM_ThbH2PGw*STdPn)%1An!&w^pD-7WQ0Yc$4JO z8;66Ij)>|(bE&7p!l*c3@Zw8x>YXR!^fi4L4Y+`=vz)6e8u)h+md`%FTI*sdNQh~k zLD(wMHMTxm-Pi0JM5n$M~9V z*cd4%ugSvk9>Ota_n>R1)k0*ilJ23$vu85&1IlAXh1WLievkTW0I~@ced#nr#un)` z^k54|$?o6#(hI938%t{MGm7RybJUHhb<`cQ@DT;IGYc<{L)RV6S2i`FYb8x`{H{!x z!2&-CO`t57h;5{VFTsWxjL#bb!sRBe(=NgsiXx?8;e+^pI?g75h%B@y4n!O$*=j== z^MFsO8=OMOA>vR&#-r{j*N>Htcl~CI7S6OaXHZeJtE&YZUpzoXCytBL7=)>stnAZ| zNFt7*V^ND5x`~K9=O`o>PwxN3I;nepp&NuHQ+v zld2kf#En^*Z2n5O*+!6fZxN@iM;V)5b7rtOuniZvK{&k>v>HLLb9@>bMBMaR3A9lr zy4z78YE+m4DpckmE}`I7d_7ROiq-1=@uhlW9JfqiV2l^(|JA*;)XvZqmD*wr4?SRK z5!UktpJ}8foKLF$zJvN=A>bx`ys_rz-DF zi8-%0ycU7yu%W6F78#>A270rd)*@~$z!ErsF(keQ7V}K8H0&!+&B364U8`1=DH_*!=Kp5 zKwL>Vi0?yFJGF9_u2PXMx*k$o&@BZdtII%KVW7yOatA)tIu_F1Fxy+4f*_r^(tXmt zs78*^Qwhoxd7buR+j6+KFDQ4HJF>F~?HcS2K*DxGO#mI4u2pPo_mEVXrUh4y#+8jD z+>PU=*Bj-=x?k^U!>W_@@0hJRu_c9ZRVn~nKlk);H^U14a6lzJGzQ)tQtQV)^go`{exM>^$#)q zX_!!f<#{@Y%k!Gm$Cjp2oKk5093ljfCW_4+q8>uT3vr?}Iatq7Io1T}#qb#R+0s8c z$1W^FLwFuO1BM|OFay{QD!>jZC=(`g&!tBY>%A0G6CHTI9zg@vsF%oUvy}!QV%c$v z=KbptFb8W6Dg>Sr_JqTr9eP~`j`Y$IT)z?}r2bG>Ncx$XfF#Wo=jo(771POgD%4Nz zI~71T{7yw*%J1|o9WGQ}$V|+l!rb+Qo~_Qqg>~-_EHj+%xZY(&pcnZJ3Y(l#Gy$S( zLu~rxJs8w;!4jobDNzO;mhUW`HWY=lJC$`bN!F3t{D7MpcC_}gGlxlvDT=Unny8+0 zX>yb?eV^4%n&fM{MY>Z>eMydrl))z0*fbDCj7VozVlm-}Z=SsIoqV=|aN@<O0!NqwJVhR84X0w0&qgAT57;8ILv{~Oh$bT_S7pk!#E+E=Q2yNos@ZIQzhA-pWc z+8dgcES|P?6BExcY9o`b1tPoktbF^OK&8G6U6~hSSii?UjXfDIJHRyoIe=3Em!rbR z|He(Ab~VL%z1HrE*I{w7#tS~LmbxDuZU^k~!@&rBoZgP*TD`ixQyHIyD{@cVeu#N6 zu-xIF9*IJ%_s12s@m)@Q2_6x_$G2iQm7`(LD65!fgpsB4j1VP+TA6$JK5zX~TN{m``wKC3T{55hhqvVX5yMnK5Zl)A{1DuSU7E>h6j0sNRL8 zO1-RZ@2Ysw@Bhonw%Dm8u2Cp-TC(=qs*JWo+srkd$I!U>F$IxC2u5U&bU*Je59CZ`SFmX zY3FD+3x@GAjX_rr`Bt+aqKG==*xOmgb;{IpU0IBt=-@4Mv5pVZN|kGNwfAGQ=Z#ZF zStK;YZm!ll-p@^gse?Pm`W9FkshS|egO20M9UMv2%FWpp&h%6s?8tpoV-7kNfxPl{ zJCWcd>U^LX*QrR|V}wl$T7I7IY+J*mf{bXGG_g${DY}xqvsK3#26daHYu)^89qEh7osy~BD8s{Ex|wOJ7muXa zvD(xp3+`Q6Y=4?oid4jjx`j`ZUgZ5q&P2gD@$`EHotLj7rx)JaXy&>%bW%&N8f!xr z+5+>*%VR$EVeXd3_MhozH3=~(InQVnHR38_Flo^l-??iZbELXq5IYY{MW5}Wo*Dys&h^uo7_aydGW_4g+AoRxXZ9SR-OVES^TR-VTTV%#r zzVXK63oV4q7PfESv16hUAlr}Seq*0g%>AauI*b7l$dOIz1`c8kf*q|@&fw-Orq2=F zKPDVR7$Um1y=CQ_~+SVLpyO}5$;Ctc;`8}56y->0G9RWKGS z2k2;etE8mH8|RPc+Tt`p)SvKovrl+WxCaWPk?@pASJ?yyno2=M{hb)Km30UdL>i3`!| zUAa=;Li{Ms04Bo=uL8*T1NYF-O*cx;M)h`r^(6BLi$s_aZU;%Pcq-33bQRBx`zO!1@0BKOKeVsM}qEzs+Eh<*+-JwqbK{>SCyO6ZFudr9sh3AP|tWWw$$|E zP3j znuh+~4=s&XNL(-djVDKwsh`}@WI*SPCgWHB8fe zV?p)jNSeaJPuOro+GSiD4yv;)WJ$udOd}jvCS$ua&b~Ac?g#A#>6eEI8P?cC;*L{m z?6i1d?QMVr-q46QO#cw8p{=tjo>Y+Gj@Nb-ieZZMomW6E7Z{9)34=Qf`?X}`DeJ}P zX{PY3XfkqFA;A=ur2Le)*xm(v%IXwwj` zBweC>G|5b-s}}2!NHu0BB@L@^472VrMl0~wLHIbmORvhD~= zn_h+Dn8F&{^XBNiL2Gr1?mct_b!4iBUPg&;p(C4bCF*ykcl_>T?G*vBeFtu*;yNO! zRQ!3$BL#9O@l|hjlZR{po6oqbjpj$n`-B53OSh0CVFn4(nq3Ms&3ZcwW{%wCAE(!} zFfA)1Y4-4!tJhK7&MwI)=!a1srv}$5LvLoP}gzpTEE0D zZ92-tbx@2uI?zy&2sl62%sEtPx_Y6p6F09nX>O`Wgo?VR62I&hyQ0F07|4kPp`z<4 z65$rU2BU7_&@~vO^Ti`97@U!@LpIbyD8}{gS2(24J5yj9dti1ZglQ1FPaFG8q{fRDL z=!_17Vt8i(&(+M-s)zuh8znrCr~QKqevgihLI!!i**Fa-iG5B?(sT8Ad; zN4Aj@e0V|)Bu~%=%DcU*o`&Qz@wCAVQMqT%or15GhSk!DpJKCHs)(m*X_Zbm?6y*M zXIrDTFRRJ$-Yvn?9(|S?dH392b}xC?rhano+JMfvYh$V2Y^O3hmwdQ=AqanbAsjrF|Wdbb$82(BJ!U zX)r-D&hHC}k^MX#>Yb~!kOvBDcs1zTT0g*jVC+<+)7yo&ccm=Ka=UdA10ct#XKx^w9UOm7fR9rz2^5ZT0%Eo_VsOb-==7v4mYKQ6?z zM&-O}p7%oZ4+bl(`Z67uZ8%+TQsT~os^(91^CU$Og~QUFpLlBSg;FLA? zP#bI}UgQWqN+=S7qP#KAT|vTVhk+G~NXeh~**)4&G1L4+SW<))p0~sUF9CLHxeF+JyHZcVP~;QVzdy{Ym}g(7hH{yNP3V(iw;geY}RSM5Doe-y*C%5HMf(4hmxqF zTaf64BlSbQFsLi@dBht9>LyHI;Zf!}tG?Pm_MhdxlUpgyyS+b1CQ9DJvcZ!~FBxR7 zQ92Q2H*$sqWy8@8e>VG7lwKqdXrF%4+$k?G1^d$hU-WVz@=vF=A*ThF`hIXCtt-Zu zRVR>1wruhyhkkMIaT2yTVMDh6%(==$1YWww;9!WX`W#h3r=v4Lv%FBp{nf?N_1z9y zjh7djRd@i@pGX2ix_};ptl_Cm@}|JcdNfe)Hk0E8P+DdCZkHO6i4(`0*1zJ_<=T>> z!)l~Bu~M!tlb)2J zUPvlymPnL~7qr4|JP(L<(5*5_LcUp;8@vKG7#4H+BHMG%Kq6ev_Xj_w-n%vUNYAGD! z&{s=5n<8>#iw9Y62y0QnG4m~nw2n)ac4O0qu0$Im^%TUwpqiKnlO%>WQ3GpJoDT1? z!nU^7I}*o21`-cqWL*x89tMI}l(5SzaYcy^+l2^Eaf|4krF8=>3UqhGqR7Ldpi{2_ z7Da5Jp=!VHr{#e=TZ0aoRa@_Cl%;2T0HUECdZE`ym-%>)|!Zp;03oP_6(TRAt_DM z14B%UXu~hCX<@r@+@U+_)d6FJI`8+mE9NI)GEiWzzRWh?qT9Y4j-Y&1{zV@SV$WtwEJ4^{mdi6>B#~%eGOHvFqY3xjgL)DP=*I@TK&t*7ski) z6XS^aAV1zx(DV^YSmmfjH6nad&l``p_~`7WAM8sWHWJL0gu@$%503C$d$6#x&m2~V zH(~vAEBFOMPCYue5Ax>$HHSndV~I@>8ajn5s*=r8;f z*|>P(3Z;2mTsc7bU}XAQu9b_sk0@?HI>|>?SIQ66<=)~}lU^Cn;80w{#Tc<4m5{3; zA?hlFTSD+tL_!LqNXSLrVM*e0HK`X&lJw#dSxWV8QLUX9R~SrGg!Vv$5R8LpNvD#* zPZ1H)=Pj9(Oh|<8ES;DnR(m31g><77!zvyIb;Kb-#yFMbBMxQb!!C=KoP>@uuMzp> z< z&PJlOp@H8q(+`$_I!Z8>qk3!|&;`WEAmSUFC~U3p56|>H$^sd3y=jVGGQ;Cm$Y9na*fc}49oz}0&;$bL@d7ldADo7gT@#DPCT*jSQK+NU@OdK| z;Ny5jV!7JFs|d#r;OasrD)uAog!ja^!Z9yENaOXT2H_PXJ-i>@|0&p(^mr*ww4M|FE?Wf&tD3#t&he&aw($&)^wezjM_X`JGc3;wrvWH<}|8i%cOUb?C z<-;0K{c2xfA|FE9=rbndjpNbLI(CVi(9xYD&fPnd$!Q0kn&BHgc01g4^2jcL1l$y< zL>VHKd#PMk`JlpSik*$4{U~}MAI;pr_mN^AJz5>;zQz#i^5Wc~b^?`J5&>@FeU2QC zT->|Mfk%Z&J8snt^r%$$0OI2AhXUS#rCg&DuHeWI>y0DRByNc!WON7Caiod$#^#T; z@XxN=;v!tI?1Z&?C3Glpu^lu;&d9ashcZu@D2`Ygha3-oUmdNiV_V@(u!~b0Rw~Rp zk^~U%SddFPG36h2I1Y_@FB&vKvwDoEd%$lU083mx(3^A;68 zvk4&u1A?ekTSoLOOwpsFlyjYfTGgM>YNW5$F%k0~OfZ#Np}#R!*K^3w3?KHyt?w`g-d_lVp?y0IpusF9Ht0VbB3n3EC#TL1W=V&O+6utdW>6#a*!I=ma0!P~m@0#1(} zitzH4$}zm%v_LPcY*)5iy0SYml-)U`YyrO8<|KLl%j;ju}+7ZCi|l z3y6bX&3_~RJAHl_;SOO=(IcVK!=^&Geetq7Q&4;( zUzo!^)WGNtr8uf_tuYa-mMc9x;#{e9D!3JdmttHhgEfe)IQl9lef{-FJDo1=Mx@OC zAgCgMD>9SxrO$Ot)%--z?BY7(uAp9CZkCVlI8Jr|5u|N!Xx5UWaRM5%a+J2h(Q`kg ztJc8;+Ncip__Y}JjIIY=p^uK9jUT#!3AeNFsK9K2X3bd-MGzi2GHj9F6WOAc@j3!Nh*ZRAO{=&$Ni>9wIl>nK=cu_| z;^SQh+qAsUVJwLYWjRof$&d*k;ZWEahq|(FHXOtuCk6Bw#!@s9HDsv*`&a2kP$&e? z&i?xwcGduIl9vbWTuwRz9z(~j_$Ik-fy=r@X5aqFfUM|Id?gG`a|;l6Lo0AJA?|0E zOyNG9Zi%Y=6?S7nL9c2m_PK^?q8mSUYZD@GttU(-u5FS*9zQ4nR${?EldzvanVwr- zK%%`$Z*&x%w*&9p$V*4$t~CaxgDad#s6z}0&L{_At|pnD^t^@TTD_|7bESzxj@}O> zW(}%@_a9;}tii!dL2xGBAi}06OzfxK_wMtc3*CKguIOY-#hN?M{37R}bkaAAcSR|1 z*EK$F0xB@xgs;1)X*Zh=>ayuv8*Vwu1y}Xky$+^gn_lL`!qBTVk2mS;(3?1@ zRG3L*L1qE;|4MOhSVQ5ORjYCo$v}|2<9HFz+w^ayAoJJ;k}=msHkQno&f~eEWZ+-f zhijxrh}Sy4IRtf1mnvc}v05peGs6!gW1C7cxWRJ5O|Et6at1d!mSR=TmOaWnb1bMW z9mcg$<*yi6^2TnZg{@;mi%RZKYF1)hyvq$iK8l<4S?kUagNYTP&2iW)>-8WG=pjgQ zmO}{Ym{8cQN^|?GfnbR~$k3m&({$Q5htoWotF_417WSD0n#iiwujSfmNKJV*Vzsetfc(J2<>g^FFG7oOI2z?O1FHT-g6rp1po}Z<|44*YxHgDa z3TJ_ZrdIk%^~7IZa+~0HzCRLfLxgyQ@ZQ=u_A{Uxdy-P&jw?E~yy9Q@$EA!}EMZgE zdP*GUuiN0MlFS5UHI7>dG5aA)fJf5&m?G&cx7(f8Y7IA`*oE02UFu}_r4DQ+)U6JB z)B@wCGSTwAp(Il1T6G!9Zv?%=Ew#ssC1;975DuJK8eu@`EHW@Z24twHC7YDR`D)KGo}BxWzs+@KUc;Empv-OzQ3Xkc@)(KO;p*<|LTcQME54PdA0 zR(9%4saw2Zxm?HFkeJY+4or|pcIVlarAlJqA^nl~2-PCM)>v#*Rarb9+3c0E=}SkI z8sMa9-q203{S+}%C`J36U8S(hlyvLT@r-y|7u&|f_a=AHZh@XF<>%$m7yY$E7G1jE z9bW$IPB7TiWwFFOsIdv}9!7&rJ;#hEiW4jbQ!f7aaBR5yWht-UPV87=FseCF2ckY}26QDC1;wp0_J7W`Ae}PSnxZa19*iDa^1&yCzB%a3D#*lV^6kB0Nu+x%KJ_R$m8CcrYfg&ocyiCLfE z95SeWYQ92_f^PS>9q zix%CF-DEHu;`cobbrmMPR{#3h+2QiyVGx%9v zXHalh+#Im#-e0r82{pWqzTwnL=8c5y?OF~8lWXwFCn|Nb+eVGNPi|K96Ez53(tqDB zRi}iCr|1|}+6-1mvF2;7nI*)4(^+#jwDp8J7OabfkU%KCoFVW=;_`Q6i zd^DK5?kW?~h0(2?FmExN2t&B97>AB&UvnLX1sn(VuV4De+V%6_YaM(nvoY zHBg>nL4@}+$nh{L>(SZoo}Gr?u1@(FW|ZBgAyaxp?O}5!BBu04NMVeKJ=|mV$i)^Y znSN1@^5a)^%GDay;Hwegb0h6QvF|;wa6~ILJ{Z$>joC(9y_fei8eVy0NJ6s-r-N~H zG=b<4D$1QVrTUBC%~aDevLU2{#$;6M?;IwtTgGZ3v>zQz{vg^j3JY_)!h0vuOH<+O z*Vf>;`&HSk;aXS+2Xt_>WI_uE;2foy)<92Oy}gc1v1AOUYhfOyx2clUx{2#dk@JXk zoP^RK4tprV5`l}%E)GZOE1hGTZ}~waCZes0kd0o8Y_Kx6cg_=bsvLVbsEOcTTj8Xf z`*SU_;T>tsi;^4G9CIWIF6bGU5My%0-NJ!WLQ`XR@S?Q6JT)~;!D?str$pkTjB1n* zs}Cq*#^|e{>t&(RXcb3g)7Ie98-U(|H^OqD<`a=E+ZehB}&d+r|i|J`%<#NYSIU5bC-6aT%t`t36HjY|D6 z{!ia7%iSCQzbtnjRfkI5CwJf6{c`umU-a!Vh3THaL8b2oOa#A=`bKr`o7(~i)p|hg zf$G0Rmume`?m>z&{e2l~J{WZ`1B`y5znDJZy)1XRd?VaUiAvo)_Yh#eulntt_(m|U z^-%Q}b3s&@SH^vRg`0R|E*^$oiR&NAJsglNfZqq)+y}4+?7sL$7%t0Qf_|a) z)8D!k_foa#w@U=0{)HfS{qL?GxT^>5>Vdm@;I1CHs|W7tfxCL(t{%9n2kz>DOLFi0 z&L!AwUs2y5kSode7vJ<`;NOzFUcQ&r@Au6u%J+}odh{MS z?4*|EdsY2@@7xLbeuMgcS?(3`eOd8yY3>d3{kZ!5p1HTm_nP{CkK7;2_ui9Vb!iSe zw7|*e`u`!hv-17d)b9_@{r~d)Hue2}x&M~$ z+`o5M{YzumdpPwsn*3d+_pqOT2$99^nm>n5++F>#)quU?g{*63qB$6H4FZ9fxp&*|D?cATJYThzr}*j3jCA>zh22D@Us?N_sEHjoCW`Rf!|@le^KDMo1$|2B7t9O!GA^ITP*l1 z1pY7!{;LAtYQbM4@GC6%8w5UP!QU+KX$$@~fp4?m?-uyg7W}lpXD#?&3;d7;KO^wN z7X0r8-nQVk3w+gre@fsdEcjW0-)zDERp4tD{EGrVX~F;P{X8FUvEVO%DZ@`$@YhKB z+bsBh2>#O+{Qe(eJRh{+50vs}EciPF|5*$EpHlvu1^>Fhb0?y5_-%o2vEbhm_*M&k zuMYD$X2I_(@NE|SAp$>S!Efp^p2HUWmjvFn;4cyQss(?Qz)x84Ul;hz7W|C@U$fwE z5%_B@_}c`2(t^K3;I~-t+XQ~fg1=Ybw^{JN68LEg{vm;X(1M>4_!$fS4+6j4f}a)m zSqrY$moHjyy}q2Y;Cg+z!-DJeCHD(axzhUcQVXuvmn{}tuP+a?;Cg-8YQgpTa)kxg z>&uu0*Xzr)1=s7#HVdxTm#ZzfUSDP{xL#kbx8QnxIb^|g{~Wg9dVOhIaJ{~)T5!F- zoUq_}eYx3!>-A;Lg6s9=wH92jFDEUyUSDpp;Cg*IWx@6Oa+?L$>&s~iuGg0jT5!F- zoU!0~eK~8v_4@Kf3$E9fa~52$FLzjQy}smrF)HVJeYw-A-e1=s7#Rtv7zmn$r| zUSGy6xL#kTEx2A^wpnn!zFcj=_4+bv!S(ub$b#$jrES6W`f|d8>-A;Lg6s9=qy^XO z%P9-4*O${4T(2)@Ex6Hd7ToAJ3vTqA1vmQb1<`TW^Y>B zM!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptqH{bs>+{~Wg9M!#8bqu(sJ(Qg*q=r;>)^qU1Y z`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e&4L^KX2Feqv*1R*S#YD@ekm&F zM!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e z&4L^KX2Feqv*1R*S#YD@EV$8c7ToAJ3vTq=3!~$%=kKK!+~_w8ZuFZ4H~P(j8~tX% zjefJ>M!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptst{yA*HjefJ>M!#8bqu(sJ(Qg*q=r;>) z^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e&4L^KX2Feqv*1R*y(lW@ zM!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e z&4L^KX2Feqv*1R*S#YD@EV$8c7ToAJ3vTq=FGt5+&)-WexY2JG+~_w8ZuFZ4H~P(j z8~tX%jefJ>M!#8bqu(sJ(Qg*q=r;>)^qU3O{d3rY8~tX%jefJ>M!#8bqu(sJ(Qg*q z=r;>)^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e&4L^KX2FeqyE!W7 zM!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e z&4L^KX2Feqv*1R*S#YD@EV$8c7ToAJ3vTq=i=*SN=kKK!+~_w8ZuFZ4H~P(j8~tX% zjefJ>M!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptst{yA*HjefJ>M!#8bqu(sJ(Qg*q=r;>) z^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e&4L^KX2Feqv*1R*y(B8< zM!#8bqu(sJ(Qg*q=r;>)^qU1Y`ptqH{bs?9ezV|4zgcjj-z>P%Zx-C>Hw$j`n*}%e z&4L^KX2Feqv*1R*S#YD@EV$8c7ToAJ3vTq=uSCaP&)-WexY2JG+~_w8ZuFZ4H~P(j z8~tX%jefJ>M!#8bqu(sJ(Qg*q=r;@gf7yHY_`1flaeoV~7_<>|!qAC`ia|wC>7XL$ z>{6A<(1}wgf{Gbakx45~73o1D(uttrR1s91DuN1{h*T?16&ceBLmM&LwI{ThIK`m- zJ@?u>`@VYXe&6}NfBpWLem+gsb*+2d&;2~>S%-a0^!#T0@c0xOA3eVrA3eVrA3eVr zA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVrA3eVr zA3eVrA3eX_vh6&Np5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5Kg* zp5Kg*p5Kg*p5Kg*p5Kg*p5Kg*p5KfgKEG8wyzPDoOxnwTe@?>EZGG>RVc)yj_y~7J z^2@uKPIUj}Jx=m(D27k24(GA)`7wM;4Br{U_r&mC3?GP$gRLhkhA)fZ<0Io{^YmaG zX1lk24gc$fzuL*+af?Tt^yx8tForLR;VWYJ`WSvFhEG_e`;m2~#qe1%d|nJ+6vJ1< z@bxi#OAOx?!+SA&;LqFdZ&D1O9>WJ?`1}~YG={H<;TvQ4_87h=h98LG<7>7*4#_cm zW(=Pb!xzTzWifnR4Br&PcgFC&G5k;rpK$B;$003-&x+ymV)&vMz9NRNkKtQl_^ue< zi{S&c+wX5u44)pu2V?mB7``-yuZiIsWBB$Mz9)tsh~eXJ+x|Et$MBgkd`=8s7{iyv z@O3eKQw-l3!}rGULos~9?b{!Rv=}}shR=)Pi(>eS7`{G+Z;9c%Vt6lx58Sc+{wBrn z=`nmThR=`TOJn$&7``!vZ;#=7V)%g=K7R4`$H9AO`#u5pOWWKh#PB&Wd|?cqg!?Y$ zPmke;V))EQwqL)8`?O7Ra~JtH0Do!tt?=PBxL?`{@d@zN?h^&W|B~RJ8yO)-26<`3fw5nqD*rSQq9rwslj z?N*=${yX;xk>P)J@XLm!`yG${OYg1L{Z8MAJZ-3_9sW~{Ll^v0i0_4e5%B}?%i#mK z|2!J|D<1wQ7`G(&^~jS9pMu97nK67$3||<-m&NdPF?>@D-xV9j^5K)vuTuDHP-hK%IpQ1P2T*4_{0Yd@10VUwv|sH2d_2Z89@nXZ zQGYW0@$i}OgV^sm@E@bjLijt8rwsl9NcSZf3@c9^rUid-OGX(!Dw3~qI z)T?MW4PHL+Km0EXei7=)gCB)FMeqk>|5m`SL7sZ}w&6zI?-uyiQGXZwjqo1)NVFTk z_2?z|B=|=3Hy!?4)ER`|1LL0$|0U`vg?|L&Qv-hh@;Ab7L7sN_eUPUIz6uP=7M~7s!(d|043_z%NEUh48l{PZ|6?v|9)N7VEO_^&hS7gP z`0t`N5Xgh?g3pIP7x|0er=p&^$MpFw`clL{gFIb`r!PbNIf$=-FGHP8c)pRo4)Om+ zo_hGd!j~=6`stexe=6cz;9D^c?eKZ1p8)T{C&AwXpA6p)pANqZ zd?x(){W8Z-ifk@o9oT664Sgzc1!nCwwLHcfqH__rSl0etGc!Ks^KS z*Q1^x_`~1>ck6t+1>>Ip{|)L%g5MkMCc{66JZbQSs6P{a5cOoi--Gxd{0Z{|@q3z|TN@4gArlvkw06=x;sz3y5!mKMMI<;JY#Y?eJH@ zcfy~B{5|jw!1uz(pg%Q{|xcT@E!1J@K?g8!_UX~WWmoxzk={9F|Tsq7a~s{{8H@4Lijx}&PDLAqRvwI zKf#y5-wj^_e+AmDgMSYFs)zqId?S1#`qcuzKYTm<1njR)_>?R z6!-!7Z;*coehu=+->38K8u$eG%h0bR_&wp1;h#ji>G0i{Czgk0~g7@HW#`p}uKZx-OEYW#23wh$<_l8e^KL_KG41XKyPlKO; z{-(o!fO<0Fe~I`YeB>)){aKL%e=^$5gZ~_P^5MJTi{O6&Ukaa(@hpQ+g0FzDg0F)= z3;nH!e;ni42wwo-1b;5_x5J->{nZJ-9KH)aAHD~E0N#Ut4fPMeABy-P_;*of;C`KN zTQSZF@DmZA1fPKX$?#2xPlJCEXFU9^$ddqn1bh4eXP?}9%U_4mRzzI-;Dhk{p#D7gQ5c_m z_-D~>A^gSgMev{DI4y(!2l7|I?~FQY;2%YN9sEtGzY)F-z6t(S)YAfg8GJi@2lh)B z{0bajJ@7|h9D3oqP>% z;WOcTkS7Q~1N$onz6CxH{zCYC_+=Q+BKQH+Qwo13#;pu~Bzy(@bmXanpMrkX!(WCv z8{re-o8XI3e>?p9i0_2o5$$%t-;O$a;O|6!5B@0Z_W}5;5Fd~Chun?$1o)}&N${Vd z{=68z2(Py?J{j>p!+yz+;p?9Y&wnX}@o9)3iE%58;nU%7!gv& z@P}dCa^U}paVvx09s8vM{vy;_1AhQ~9sEL!Lp}Tcl6{sfDEHfw?JMxE{OO~~H~ ze-?Zf{LN^$2Yv|W&tCX`#1Fs^Vw~ggKAFkzN$?Xe{>ktgkv|>&@91wPd^Pqx{7*3c1MoHI*ARRY_G18_qkJ0i$?$22PlI28`IZSk0(r9FD-oXqe=73l!Jo}} z0{=bo7s8)|{6+AG!k5DT489EhQTPh@sqi)M7r@uSr^7eG{}%hb3BDTpu?2o2d^`O9 z$lnS70DKpGGkg#HvGBd{=fivOv)~8dOW*@|A7c*oZxVbW`jv_60(~;#kH>r{Lp*&N z;`=a9(&3*+yIJrps51|KGxk?L{1wPk2!9ZK5&Ty;eoNucV87tkqTRYj^*ply<6IBF z8u=UHC!t?W@b4i{3;cBCX@{>vzdGS}MxHMCY{d7#ABBGP!slUsdGNa-{{TJm55fNg z{S9EA%tm}X{JDrvfIkfNB*7PAe3Iecflq_K1$olpo6&9-{9EX65WXMzbKv(ud>;IR z$e#~?H^#pZektOM;FFQR6uu4PSpokS)L8@n9NMjie;?!12%n4Nq6xkgb+*7SM*epA zlTl|6{50h0g?|?Hc<`6N55OOeI)~t2M7sgpCp?38c&w}3t`!@)`7(NI7ZRE*=-vjmJ!#|Ar3*k@2I26IxAWtd$U(jwD z{H@4e0skrD>)=1aey@k0hI$&|kH`LPf?tC=Ti|;!Ztd{DL7koOQ<0|&{x!t+z_-Bn z!p}gzJotMMKLB5VI)~tYK%M{|pT3RpiHH9M#yJ80cJwP5eirIUgFgy+(&2xLb~EAg z;IrVzV1EVSe~0)S_?=K^9(+FH^CMoq5AImhSs3wq7+;D!dm?`s{KFXM3iy9wztq5g zg7`Z4del=7e+lYugwMqIG{L7Le+&H4*kA4Nx1ill_=8Y?7yQY{-veKQdV1kIk>7)# zfcyjSr(&Fk;GaUCz>|94wFCMU5AXg&Z1i6O{BqQv1b+tVPlo><^`yZ+i~7^ye}#54 z;lGVm69{C%--7ys@H?T-9QZlNlLvnld_MdDd?Eas=vPt1%W-i(>M4zQIWFkSkf$E; z74Un&*T7$dcI)7eM1Skye}Zvtgx`YrCiolB-xl~8*e~tyr@?o^m!SSG_*(cL_#pb# z3;##Nd+^_&-2wPtV;&B{{}S;5eD3K+j6*zp2I3Ro-@te#!5@M6WcXhpe;Rx>#yK5+ z8uDkt-vXZnKLh;@!v7ihbKtK+J$dlwV4U;eH^3LdcOXv@d=bW>6#l2EvjYA@^s5HG z7kTR7A4I$L@P}dkG{V1+acF|y6?t0V??Rq-_?s{eo$yy8PZ#`heE0sdo*e-eBH#xoiIee^dCel+r@!=H`(neY#y z&Mf!_j6)Fq1JsiTe>dvMhhK_z3*k>e{v!Cx5nl?w9(9(%H=&*i_^07(;8W3V9sIM1 zZ-l=SU zKKwPvUkIOr_#*i45MK(9@IV>-EX-1D}98d*R{-;|w@$vAj z=vM;#MW{0g{^#(?@aMy)!EeR>O^5#sb!NiffN{%${}<{E!tVl~1OGkh$%B6b@%iv` zF|i8a-$gw|@U@69h5s7kTn7IWv|9mx7{;dtepkfT!QX`VdiZH*w-Nq3)ZYaEJH)rZ z?~Zoc;h#o)C;ZjO-vvJkd3xX<#klpt45d0X7PoP=n|4%XB;^F17 z)9}9p_)@f+1pi0mNrsolTEqX+;1h?X`<)K|5BN;@J>j$9-^6?l!vBE&=D>&lLP0oL z9{ellS3dkh=vN{9-l(St{$S)Og6eKB^c)x`27&y4&R9QPWV^RZWsJ&)ZYWo@3-lNKNS1LgFgs)2H?k{&LQ}-QBUAm zo&TRAe?0upktYHEaO{^P_%irp_*{%n8vI|eztZ9NLOq%Aai~8F{s7b&ginFbfnSDp z^WZDt^Wi%%&V}$Vpd@A}|0lyLT*TAQvo;vtTkf$F0GW4qv{t(pD z1pgQ0Z-F0;@o$IEM!TKxC!pOf_!lugJ@6Nyo?iI35bwbsi18VKUx{{y;8PJFcuwd4 z^=LO9{vgCBz>kAZf}e;wli|~mKMj6Y_;mP#kv|juA>_}3KLtJrzc2Pz4n6i)9{h>O zlMi2sJcaO6P=6788OFa9J`MdUgFghm0=^V=*1-P)@pbTLVcyome}ni&_`f2)2|gLV z1-=6PYKQ+F#-|g0Kji6xKMeKsz(0ll_QH2!zj*M6BhLW*e%LQV@P9y^f#o{?M9`&cg--B_;g#R=0XTe_$AA~;>*0?=d?WnPsIv)vEqn|7 zI^=1GzX0)_@b4nN3w{yiRS$eEd@uab$m793hVdVO{~78TfkyvwM+Ux#_s0)IO4x5M|L z{!aKjJPlA^M5JEAs+tsh);l@hH*}U zuS0w?{LS!b@b97BbojGTeSies|Q92cLp|<-_lYJcaNVVt*CE z=V5=9!XJb9GWbsPs{;Of)Kdfh8S>P@--mYV;lIRqHo~8del@{QN1hh=U!%@;`02>s z34b2OxeNX;XtxJG555;IB7>9iLXOX86eqYp61pj-~ zUkbk#`ODy6hOdC%jPa>~zYz7;!9R(5>fzr+{zmwRk-rIk0QI-P{|)i&@CB%+6Mh8h z>4IN__#XH@5Z?=b61)fhIqDgJzYFn0@E4)ozzUuJ@1wu*@Sh?+0e(lEmy+P);FIAW zK>jrNi;+Jaz6t%xgl|QjEckz5{|4bx5T6786nq|hDaI`yekSTHgufHVMG^dCsHYUZ zAN?wW{}A~r;O|2{HSm`rz7D<+z8?NE_(u5O!#Bb2h5gt9e;|B2`~uY32|pR*&;|bo zwA%xJIeahtTIBcO{{=q)KMCVJ1b;Q+1Fbs$A3=OP{Epba3Gnj~p9KF$)SnFh5b~tK zk48P|@V~{lWy1dy^EM0q0qmC`{ABnX_$yFn9{lU@`S3;Xh43>`PZ4|$>Mw@1i2RN4Bapud{txgi@H4R=+u^Uo_;kWAL!Djl$D+<2 z_=Sk?g})p1c<`^IUjy*J!T1lspO5%Jo6i4dkUt)N6Y5NWzZ`WY!M}n0$?#_&Pa1p? zd^-G}P=6-;B={`&DX1q1A3%H#d=K_l9{ec8=ff8xz7YOT@I~2Ujsh?KL>e+;IBn|;ANfvpJ06A;R{e_0{jKYp9Fs$@+ZUZhdgQULufZ0{s+Wo z!mq-3X2E{|AB4XUJ_mjm_&oS2Xg43e1a%g|zlL!rg1;T}wiNz)j87T-$B3_hpNse! z_&X3^2mc!SRS#bU-w59h-voaV`r87(2gauzz7csk;mhE=;2(hRfqxPG?S-F@arWSk z#r0?az7};3!B0oKfp(q$oyZ>#KNCIy{%-gr_#07wGJH9F8vGr|lMX)*@tN>5(XTA{ zB8)>2{w?%32Yx>C=fR(Xdh+4V!+a}*Ux0dw;EPdDDSSEN%is@0dR0{yCk zPeh&d@DC$@BmAG?o8WIkyDjh)@a^#L;dtqU-wXM>;LpT3^uYfPz8C&xwClm&j{F1g z8?hgU;IoiF@QTj=D&&uczX1J8fd3jk34S(wGW?mSCk_5y)RPW>3ifX%{NIr$3;r4G z_aOX9@Hz0epuc(W6Hre+{12$75dJ{)w+Mb5>MVud0r|_|m%~@U{{y}T{#p1s_|xI* z;jh6sG{P@L{Y~)W5#IuT9DFIZ&L%TKbD-mA@Ux@g6_%`@P z_>(X`P4HuozXkqw)ZY$22;T{R2YeU&Y_!`0zZmho@NtOu;P1nJ9DsiqehB_9j6-0h z&i^{J8xLQKaY%qa0`(-pKLVc&e=yojgTD*yro&G{{h9DD!)L)?k2-_!8SpvqHK->K z{%+Kh5C1WIA^bh?Meujxcr1m#1LIQ$zYBZ?{BiI#@YkaLI{2SseCpv(g>Qtv7xg#6 zABlEb;JeUnJNz=lcfwzX^FSB;eQ37_ehGXp{Ef)t!QX*#9)SM^>KTGR33&pq>ioYS z;}cJhdJ^D|Lc2-u%ixpY>yal7ei`OxI{YfcXTo2Ber3Ubjr|gYFGRm`;2%YN9{fhs zpATOKUkLvo>MVjEhjA{2p9o(Dzdw8h{M%@^2L9*pb?{GMeCpw=(ceb+Rmjr>e?RiH zz>h+m?eHffz7swT!XJzJJ@|(({sZt2!wTiLc z4Brkv3;U}R{v_n@f}e;yJ@D5cPcQtQsNaK6h97|MK>i{428?GQ^1To{yRkeF?Z(4r zU_2Ax7a~3hz8(Edh7ZA~!S90n>F~$HXTs;9zgh6lU_J!lKSY0X;NL?2Jop`vKOg>= zh%bZ>!WY5cit#Un{}kg;2LC+bE8q{oIM=|xgFJQc&tn|w;V(mcBm5VrzX{&MIJCg0 z!MDR-iaI;tx59V9x1i4dF8+4}{yPHy9fALjz<)>Jza#M95%}*2{C5QY|1<($j2`>% z;JnY`gHk5c{kw{<=ur7mE{YpLUGEYg$K7p`^7~xvw3Bu*d#|jrKX9^c6 z%LleYxyrv3&Q?B7I79h(;S}W)gcFq~3CAg)C_MOGwEtPceaa^ZcPnQLcPO7M+^l?x zaD(!x!nMkih0B$HC0wi=6fRJnBAlyynsB!A>B1SxQ-xEM&k#;jo+ccpe5UZ=zoY%n z5$;o#5B`O^m2-tVlz$`KtbCSmgYwzJwaU|l%awmCT&$cYT%df8aIW&X!r98_31=vu zFPx%$fpDVo4BtId7f~y@_gY2kWV%FhcIE4K(2D8C?_tNfyHw(?8D z8Oke!Qx$}93YRPYO}JRON4P-wec@c?4}`Oo|1O-N{Go7)@<+mn%Ik#Vl-COn z{wv!5Ug19FkA=IH`-D4`KM`(L{)cdb@~6VJ${U2sl{X3(D|^BP$|2!g<$nriEB6a$ zD1RoLqWrmVqVgu;IOWa4g9Fk24+!@u|4X=Ac~H1R`3vD@0_AUobCv%soUQzwaE9{t!YRr>2q!9U5sp*dDm=J3+JE^*{ZOB>yzw>EtsE!Z zp)4P$4K*w8B;24ZA5;s~DvuN{SKe8;SXsX4HdLUzi*T;;PlU6T<&B%64CUQ~Qpp8){Zg6>d;INVrycoN&4F!NSGL^2VD`f$|~3xyru~&Q?BDI79g`;S^>0 zz*Z;f$~J*TxI#gL!oSCd82bEL-}~&6lM7$(@>(ayg@S*r+lLDV1Km#@sco6V6sX zT{uH|s&I<3d~seVQCYqKCKRVEALs}T{xjPD9N|9YUki6D=L&Zy|3ONqI9FM|@G6w8{0HF-<;#Ur zl>aE4s60zJPWcMqK`+|>BH=#eD}}q2i-kLs|0LY3Tq4|{JX^R{d5&Rmc%B8{u z%2x~LDqkai-z40p{Iqbla<2AE>QkfI9K`K!r98-31=vOFPx(M zgK(nq7U4MMt-^!rqy3jJ9trg+?;zZ*EPu!%)SLHQuzT4niwb*NnVVBuorG~oi} zLxgjce<7T$e5i1S@?pX$%7+UlDvuYAQ$9j?@WW{TY<;uSjE>;c-7bs5= z&Q(55I9vI2;SA-e!YRsU2q!8}6OL1sFE|Jdeh}@yd;wUfPx;rv-O9Pb9m?{BRiS3( zvxFOz&lav#o-SOjEMJ%wDpt-DE>J#4I9K^x;cVsegfo=S7fw-@FZ>B5D$fv(Q~sUs z;QP`3=L`2KUntzITp-+`e35Xo^2Ndp%9jY&D$f)ySH4uZSh-NRKv_Nj63SKny>Pbj zAA~cMFBeWx{-bcB@+{#v67EyJQn*{WShz!3zVIv5tSnz}6>3nPEnKTS zN4Q-1D&b<~QsDyStA%rwuMy5xzE(IxS^l6xC`DO5U>!p=_ON({^#{qs`-{`7OGQ7d? zI>T!XuQ9yZaGT-fhL;&$YIup^#fBFdUTAo(;W>t98J=l)hT-Xkrx~7Xc#`1>hQ}Ko zXLzjPF@{GO9%*=s-T#I+8Qx%co#C~H*BD-HxXti#!^;dWHN3>|V#A9J+xb4%te<0e zmf@L(XBeJtc$(qKh9?=GV0gUYafZhl9%Fcv;gN>7ytD1`{*pArWq79H8HT4Do@RKm;Yo%k z7#?qUoZ+#C#~2=Ec%46if1*6Q1g z=Ng`4c$VRrhG!U_Zg`sE$%ZExo?v*q;c@FK$t4bL?^$M7t}GY!u$Jl*g#!;=k9GCaZXc*Elik2O5T z@F>G04R3kf?0>_X3~w;J&hT2pYYeY8+-7*W;bn%G8eU>}vEfCA7aE>xc#h#&hG!a{ zVR*XXX@(~oo@97};qivY86InRjNws+M;hMJY4*S2O@=oZUT1i%;WdU=8*Vea-0(8P zOARkEyx8y}!wU`1H9W`gEW4f5V#$Z!o;h@LI!b46ioaW_Y>bWrmj;USfE$;YEfQ z8lG!-j^SB`XBwVic)H_X3~w;J&hT2p zYYeY8+-7*W;bn%G8eU>}vEfCA7aE>xc#h#&hG!a{VR*XXX@(~oo@97};qivY86InR zjNws+M;hMps@eaBHyPewc%9+3hSwNgZMeL6EFEzZx@M6P@3@mOPc}Ts@C3u-4UaQC*6bWrmj;USfE$;YEfQ8lG!-j^SB`XBwVic)H|V#A9J zFEl*Y@EpUl49_$?!|-&&(+p2GJjw6`!{ZH)Gd$Mt7{j9sk2Jic-RytEn+$I-yw31i z!)pw$Hr!@-x#4Aoml|GTc(LI{h8G&1Yj}>~S%zmCo?&>p;c12^8=ho%g5mLo#~B`L zc#PpuhDRFS^0L|ghBq1BV0fM3wT9OiUTwI|@N&b;3@mOPc}Ts@C3u-4UaQC*6b zWrmj;USfE$;YEfQ8lG!-j^SB`XBwVic)HK(H^IuCgA2Z%y<4#QgemQ#1Kz9d)5^ihAA*(NOsV|RTk1Z$6|7ttoHsOj z&K|+)(jB~`-M4uJD=$b0R-PINR=NN4zT07T{7ESA-zgBdIC$tz2c@~qMlX=>e+yRaoxj9IRULDH{HomS9r^9nt^U`KS8jH- zdh&T}m#V*Bf>xyF?dZ1gQ_fG#k>#pWQcHsqUmLyP2={4Z7uXRAln;Xp2g(Oif>rZV z%cMbx-9H?=I1(!#oF0yq4{=M)JRL1rT_jMdo-K=@jeJndzy&|<&#%s+xlHt14LT|okyIaC- zg}!lZUF_PLTKSE4uiK*kt+sl%wamf$T-G0LHhRI1Qi>~cncLJ=c&F@8X%kaTK7-{= z^V=Ws+C8#|u5(iL= z4KJUP>b{SEYN|V&+*HO|Sw6B|Y=v(}jJrGBaL#bU0k@OAPWQ>3A9ZT>vC^TBz7E$E z&VOY0_F4#5-tOn`U*e5-^U*uR{gAPG*B$+#8~y#iBDG8g(Cr(4ULUe0xM1t(`SK0* z-s$dZLqdga>C_`%pHk^ft^D}NZg*Odv2Sr?wS|#bL+{d7$`3Jw+y0s=)b!}m= z>QALXzsDsbybC^&gxBUcnIDzGuuOAfkp2N8pPUG(ac_MQ;0KFj^9)BpMEQ{$cOzKqgc>PEif8r#Lc3Z3xpHE#I_ zccH8Cjt#H%#PrLhulj@!WqG|@4qv%OxDWHWE7vg>M6X;2`bWZu5APk`^KxCZr}g10 z*U~#(RMjz;$}cxiR}BtN5&z0nC{0$4IMP2D|AQ-6d?fHcxpI9dGt*rT|JN(mGm*gm z+m-87f69)S6-n|xUTU^`7_pR5_aa<#i}e4Te(VD^ruR2~(qzAiPvoAtWvS$B_M4yMH}(%Zuw zX*J=v$$p%hJ?^@(P3U^>4-&e;&HuI>ceu%sdx&c@Sbc4w*YuWTHz$u>Wo^~9dh$q; z6U0~RVxK(TcOO*z@yTP##4U39+wA>Q4h}g{JneGye_kVQt^00AIa#ccb&gj@xXtm@ z%FxuxuVrn5yJm)3zTYw6&U+(nlYQx~fyr`dj9lh=q_opIrTGynZYzw4bN z12eC+$OQ#TejBWME?>f{eBr$%m#eB%J9Wg;z0!?aw@#@#aZ1%ydKr1>M{)jrS*!cf zS1(iQuWHS6X}u@hw?OtU3*V-%^k%rKL&rPs#^i*{?nn%HEBwiKN@`FW^b?gxqRno` zxya*FgH{6E|=e~io9)V-R#{i@uMYP4(Z9; zjau)`lBkgTA{l#IGJB1rAHFTQ)4x+35v-BpVDE2lb-(=ElBe7V58syT=nm2FZt!nQ zzLb8umUnY4h|bA#7rkG-IXaNzh1{yBy4Y81sc!YvN~&ePYI167%DVaxc6RU4*ZA5)j_gNz1zk+PY&*R$EOBLM#-#l1s$L2t##kk;oa))JiX)H>b6XG zV9RcKS@bndhX-z@x5S;%WUsDu^LW_Z9C01a1*==LWY$lR(yLqL!15k*N5Hm6)Pa)X zws3f|gzW716mzQNBkv1$mm>4+(3P^eoj~io-?;6)HU53mMsMvK(w=(&;k_kG+X+vV z@cUhOP56f9=(l8xV=g``dP5`Mf9%e~yUKakKR^FZH#C1;Bvb8}#q!Gy)KYg)gvZ0b zp}F&2KUKa=#Q)@>__2|||Kx^d*GTODdPCFa9}O!~|8F-mCH^iMabG0K|N9NiJomss zZ)l!bJ;Dveh-v>xy6xW394+a#dqcCYtl92E@qnz^?hVa`wQkLJZ)o0xU$Dhlw|(^?_cM|xiDFuFm+;o$-#00nzu69 zyW9o#f9@UQZeWHFm~-Sogv)WO%kJ%m6gM}KqU8H( zy=n=q?4LUElhO0#uegMp4SJ`_WhXS;;zoA}PpP^g-Ce=5qF0eVcT4YNl9Ops`L>gC z)ZOuFxW>c%QqE6Jo;vZnlJkbMZ*e`ncuU{=4 zD{+tA-7!<(n)3E{QC^b#*c0)`M&hs7sNFs=;?8rf#{aW<@}$@9V%>qC?w#yEJp9Ic z+?})J1b_>w|H%D7x1Bdb3Yd3YYJ9-$A$PA6@6OfU`*KgQ?G_{a=R>?J+ys)aq~N^Q z61b8DKM#5(*3j;+bEyga;|F3XSk%Q(4(pH;cdZR?F1 zZor%GqU16Dhp+so7=OZDEaB_jTyX8l_4O=2ezW&PjQFD^{;A>kG%wY!Le7x;`b+Ml zf2F^vdoIMyn{BSn>%Fht9P_T!t>yk(+RgMn^q1V$N5$T{MYcXlw{DDXy(F>}?|s=W z8MoW`)w21Q@_^H|81#N0*(S@&k1Qp5i`{o~$kuXNGNm6UTQ84no#`DG*(MlyepJRT zFZR|yxcTIjMz`MNCS|yae?*p&ynSPD{jzNROMmN^^5hvN_XNg1!K$6x{2G}KFSi;ibAg8p$8w(Y^HXZ)zjdHE7tInPf#@rROK{0AlbNxtfr z(%m{QOKPlsDM^;+clgWlB(3MY6h5f){mat%scACNe&ax{@u&O0H+mPj!`8nSIM-ir z$A*^^SxWFGN0ySjla1VFORIB8(BX_W`|op%kj(cZt%SMuZnriT|*wbY4`%YvrGYb{#U2K1b6=zTIgS! z?{>eu-TlL4qj%7HxA~8v!_R-YHoOJy*3B#P@833hL+-Zp$H7NPK_5l({dIdGqZh~@ zDv>Zb{=FkzI)6kPw--Fy&sQDEw_tlAqZh~@R+4-(CEv$xSIZN9=WH)__Ms9tDUxo& zc0(?Zke^8^IesM7sO`r2slIRrj)e5PyYC+l#(t8j%Y}HSyHws}`Eio`I9`4n>wft2 zVBKoBv5Q<9Nwy}!i+$egwF$dZFP)Pj+_}8$d$+u})y5qsWv%y50hijJ zlBF*UB0Soc{J5Y$NI?&TxAxmVDboJcX#bCB{{Xk%<@QH*?{IE^Wc}wu zt6IJ9Tm|xcsEhGO_DI>by44@qgWR&5HTMta%aUsM2(NFKz4<@er(7p2q% zQi^-}L+o%z4-0q5?`U#(+3)CH;bp(0@v`iuca}>koy?Tv)vdi!;Aj5rRCp&O`;Br+ zEjYl{DQAgQANfuC^`7%$xZZ#HPwIv1{WQGn@Aipqedtfv?P(&u4;P&*jb8PRpKZ8z zg@W7kF0?=9-4wT4#`Q+DH`^`uuW*Cl=X>o1*TCCoak+@gF_}mBEwXF#cXgG7PC`{5 zyXPE2PenSsQ-_pzYL8xe+EX(ytTxw_V#(({n*R>kbztAiUitcY1Vrs z61mwO&;I>hnpff{lpEc1dt@|Lq}ID@gLi?i=ci`6>%5lYUs~k*YUSP~-Aj`#+)}(Z zetY31?|KXU6UTL_rQU9lh)$PX6CN&o`&f<{cduRQZS?o{{M2oO{2s1wLEf=0otNQ$ z$ZYx`axHI=&0U(u+{SV)u5~OU@S?1Dm*%8xy5P5XMWn?d?^7x8M?rpzr%8*e+_C7j z%K_I1(ZN%O3vajz1&G+%g+2&|Nd-Te*2 z32zK19Qe*9{7MSo3AiN1`&bUYaDthVpgaQSIPm|vw~XfT(qwh3pQK2xiPf!LlJMg2 za+56Q`Pa(UOzFjE&r3tCHL~0rUe1!`_uO*$C=0jvr5l^j?sCM0`5(eRY>D!F!k>rP zJJwb|dch>Osmz9Z<$U7y#j9=7?l$w@zw%$_)=NLW^v^ZhtoQfP`EI@UH+OV<-SVTl z#iel%=+XnD=U?F_kUY8!hG%`8e-}O9f8{4S5k@aK#YK5b-K8M%;5b631Lbq4EDbk(D7|LHdlrePAbjX>bZIv`+i=E#gEs5Qs_z7 zly`@8)UUbZ1nl!s+pTv&j&!rxzf5fP?sj#D4i-}{Cw(_+70&c`MxRr7LE5WcknGxV z7taP!C>JHc-Y$MOS_4w&_2S*7RQ%K782=i0 zM|j!4URJv0sa4OlxI9y;=O%eq3%lv|%CnLaCza6)!%N442@SJYAZqZf%z`-w59(`Q6&`H|Ha_A$?)* z-$|@>%b}o*;cn8|d97J)OLqv$A6j%TsANhl?%r6^UAt12*^Bw|=P|uK-ATw>Bke}F zmOm?Nwm!jbJ$tnma+l8G&hIXrs9q4e^G}4&dw%EBr3c~8?;YukRCvxak|W&tx4YbO zRjc3m9nkqt!`|=w`))aOx*JV7u&28Gp>y3x2%IP|T88CRxyBDj;z;jG4mCZyD0~Ca ziBpp&duUhx#$c=Wg`3L#>)fL#e`g)^gkP7xv-Sxu=S%GuxQQThP}sui`q{Ms$|zY$q+3RYywil_Y*UwDTKJQRrO3d zQ59J+0xQ0K%t4aS=VaZ7y6$1&x0LU2+`lMN zVue6;q=jo83=i@ZZdnF7d_4${$m8y;7`j`B>YEzo`2(QbTc8; zt!Zv@D~J1htpx6@8~#D~LM`z;;Ui_+s@5hsb>8igZF7PMKQr>D@Db|I=;xpE!xP+A z-sAoXVu4{AtuGgd2F0a)c zeQpH2uiPA{JcXYb=Bppc^@gYEQ&wTG038-@8F-2Z>kRoRe7a6QNG+N}hty-kKDj#y}UIx!~8%7G>?ETd_uf|>8 zyyJ$o3`3jftDTNq+r9hT{c3;36uI}9;$Aq!la{wNOAn{G%e#A--Cg6)kT-8h%oKM! z5kF<#tLalGZgibI6xq&{yI z-hXAURW5f`BNond+~PttAomA!K%-F9Eu%aS$QePwT)tl91>d%MY+?Y^=%_@Y}g z{L0?mZnxHWXSyq?eP!>Zhh#!+^U7YDf5Ek{?A5wJ_afMN?rJxDbll($V3~~1yLs(p zW5vwKigo^F%H8wID|;8Zg1r3@l@*C9mCc{=L(g~j`0mBEX)ddKIWfumq0w)2v0FKH z;>GSI$)81ElI(M&AY=L+O?*UR0DI)31ZexP(*-bLnhxpSb~%awkMaz>u`n!K#(=FIR0qqg1Pe*dKD z*7v{TJ?QQ~hsWeKxk+|=ZL6Dr-pyFCEV5#pU(6=CmwDVhTJ&Zj=H^IDhuc_^{9aCx zZe}z)jy$GXmuU z-2Z8KL{@pvNsaE>F(`zS^gW#+!#l%st@|*gd^O0(X-sM7w)ZRjJPpUaDw-% zhyC>4dcU`q%bVF{!-=a#&o7fQ+`EM4tqOWIZol{c!+RkTl{{tQXC;NTK8kP`^#VT2TNW_ zbh*;xm;dIo(euyT;zA#BTZT?`OVP*73)}{B1NOE|0{6xrw{D7iXLR*_{sS*L{+!K{ zZTtPPSnnO>cFvUQm;HHtsXJ-QVYt;D$=luvPM0ZH=nfk1!KH59JpWO3pyU|$U~1q8 z2@XHZ9^+q@aZ@;Zf3HI(yL)EKg?XzVbc0tZPZA&I3haN+yTi?5X>oVgX_TaL<-5W=@POW~I~CBn0kb&T1(w8Z-1Hc?(wTEU+Gf1WeN5!amzB4`}>bNTP2;hM|incmLCoe zR-G(QbTx0g7u*K|)_Z;aA;B@8$cR<7 zR>(HTxO;uKJRr-5gqOqP6JGYmXOHl*KR%x}gvaNEr~U2x@i{WQ?2pf<{yYhH=Y3hO zZcTTi?_FOn+iecLul7q=wKv{`$?{NABh{G$6;pfvyMG-Knx+^@5`C zE|oSN<%CHF(NRs9q_)s0Thae;KV(`(CePIBCljQ)EBssG|2S#*R;yJKc_ng)|5J{g zU--jnCU42l-OlpwNOpB?$ayKe*$J}QGj6kO_xFMX>9V}uHyn7on{YBMrAQ^sH}_ z=I5v8@n|2tz<<`uZQbrBqPrE|=l9_|>rD6gknlSR=clH-<>=?Jf)2ck+_n&vtMZhuOz_71CpQZ$w~g zj=Nx8mnzpHuWx6$F)tBt?^jzQO}I7Q-|upJVy){)=((MC33yZe(UMK7kLjs!pZR#4 zo6U%B_K@4`M_qS2V5&Q@c)xuyvY*0juk_|fBUf&3v}V68?Q`#`(KtGB}&3R(|ev`L_Tgu8wRcC-UKO zuKCe8H_AA-$;R_O-@)yu*`;2xJJ`1w=L8w&Yet60*};16@cU$#RNK&_tj=st5qn+90 zi}wyU8E{R?KH4Ua+eeLVws_CDIXpbluGE!Y_npqZy}hPO7WBUv9qDbhSt8rqwY_ad z&p%_UJ9cgx-tK+(e9Sj(Nz&!3pLAupzC7R#M!Dzhl2g-r{z<*H>|bswK z`@0%kcyQ2#yelEqt$9+;h;VxUq~Tw0s#`trpUbr{Qt|<=S^r6Im%wj3!EYOFl-%nb zAFju5pvW~4`rTGPgP(c5J6POvnUT%kb(1SJ6|39bYS)gO%fs8&$+k^0o87Z+vizRhPPw}yS?=_g(T~~J$XNZ$OHRarH;^_kfp+H5jr9){Pw?bcO;?2 zu*jF0G&7ttO^Wz;lYip%YTd}VmtA_@jG9v2=HG{|_g8)6UF8oN2V{l}NUu!%>hOCZ zp7lfB^Zyd+9>=*Wl~?ba>shI^cy!nY-IdC#@MGQU&(4Kr`(>SQ`9<#CX)n8zZ|Gtt zyb=CDwED%q;I3)z)!|4(r$-w4#0|x8L&u__H=XalLtZEF0=G;1+q|2~?Hc!bx2xNG z&}EgQFX=1S?dpg9iLyC7S<5!N_48aFxr2YxKX6)0#hrPlB*Zwlceu%80oT@ha=RSP z<~1VC@lvLH1C4B+9`01SEI;celk-__dARj=rJuJ9C%FhozKIOjnPKNAJ6V?9!STII zc5wJ0D0BlooNTZEkG(emkD|)jfYTv?pkO6PG%85cpu{y%9BBbfLkFv|qo}ATpo}=k zxFU2A6)?~pp==6p-$%w}#L-bl5pe;t00DHAWz+~Niz3xDkN^q+f&A}#ZdGrD!TG-V z{^x(b|Lf;Ts_uU7x#ygF?!D)pBCqvQLoWU4s~Y6pA?pJ5E`U6XR_%J6vh^U>NE*x9 z9r{`^iqvzPz_Q!P+lj^P{*fN2HRyAH?1zn+Vw7Tm>!@R1fznPw9v2`m zrDK6!Ozh6YWMcbqCgM9G-n#xNCO%&U*kGxzRer-&Sa3eWaJ3L+D2e1lKXVeh`88>e z++)pCG$8Hy0U&^KhO@V*atdM9AEL?ENUxhP$kt7S?00{GE?|TDXQb;;@_}ebR}u(P z_;4y~WSgoRmYlx~L1j*-Pr*Vda;b_~!bVP3P?Zo19G^%hAsn@Hl*vTdGLxO7CzyVK z>3@8$9vx>SS|SdtWgMJ6NV6(zHXI2!BE!HR_T+9oDN2kW+@YSADgNz&nu--eZkf^^gkJ6Q zL8;>%g^!{HguZ~Rkz=LYZfoUq1a=_cjE6@_74n4jCB~7J-+@Y^e|B=*i1N`#0ZgJ0 z{i_;s>B~jP9+`_-26?6mZz)0h7f60qw+#|H@&wY!k5>?YTmoPd{;-6aeg+02TM|&# zHzDzBCSIY0o$%PHNQ^v5Vz5P1E+hUS4Z*&F^Mc*RK1EXk?aTy>X8=MJPQ=#3kD!hS z(GFl=HW9d5C`!rTmpFHQic|+V>1xs!^gV%A*x$3&ILg>eRxQie9HUwmS@I0DmB+89rl2y#&K1z9R|Oc?ob`$oh96LUwOxJ#THIBA?;UW@nRhaahGM~V*sE=OujR7p z{Ezs+5Pk~6P<$^3U>`q&%EOtJ*Q>SHVZF=@u`~Xb1F#}HZ&Sj;tVJ&~ZS0KywF9uH zDNx}5<~r4dfByh%HpnM_05nBP)eiw9uWvAPxyz%FJ=iw9s`nbP6`*pWOXhLbFMKmUE*Qn=sZwBk!6<8@yx~?6qT@`g?tcLkbwKQfTmye>cqzso$3i*a z!a1oJ7S4B(9pQKB8sUhg9ANWeDezi1rz1>{@t~=EhZK6tg!8f3Lt8~Mp?@rPht_%QUijsLMzp1e-zc!~mI<0X>~cm)@_*J@IH_4H>&ry`F@q;Nm!eyQ-@w}BJKS@VW>DP zcj6^Un^l>PWu`}v#ytI7&a?Ax$iwoAfHMTk=XXCg#xy5`Xdw62kU0)Jsl0N9(DVpC z(B@d^NePq6Eu09$nMDJc={Hzaw6Qb(mPuvJRjSg%PAc!%8UJgOidPsQ^A5X`e}7WB z3KMI5Qn~%iqkxLc6Msu}Elw&KtggjLWi#YL%ah7-rnESz%wt{VMAl&gZCY5|t}3Wj9KNj%bt8>Duj(Pyl& zsLBEBuaF|qR|S4H002lz@!3VTSQddZtrDa!s37+Pnjn{%&AWFdqUH478O(G}msP#AsTe|AM#Z z->f%9TSJo1h+0I?R$<^$CA=s-8BGH4?5{P(V!0*pXW~fuSJom$F9a9?7~ygEbENy|ojg z-I5;t?48h~kKu$J)1#ZFGL+~q>%k`&^I!Itr9@s1C=hyrr$bESodb#iS6Y-}hZTA6 z_$heKAHxUf0c4aQ@&c5n;mqEbE9rDtJ-VZv@wbRP>oQg8VMX32cE$UxuD2zjL(3jNv6j~asb0Qhg~8de+WWCi0=Pe`D@*XrmW*D@$c~$frD3PA0=*Lrm`4Fyh4iO!pHmQEf06!0z9la z-+D!u9%2|GC@$Ef=7(5wCOaXrq9-b0+4H2bRN=7J8qDlpVW^quD9IEOB`u}e^O)~V z>ay7RIDq#J;|b+jzwxWJTa>c-75fn#o`&ee4ZreB*x#QyP2u^OWKC4Fy0PIek!)p$ zSoHbXs0K!Q<({N!0wq?FYCVmuhfq&6Y<&l;$BP6`LKAX|UWxwW6x|Np!_XU6+ViQP zyp+wxv&Jkx3-sCu&y6yt~$V&7KyMvlNmd-b5BFBJ)$H0@%Ei!%`}x zuE5b&78uIu`gq_h`lXeb(9J>tyJeS|zh_7D2>7*lLz8}Eqt$eu)Mqu~$v$KWfN*~s zClPGqG+5b$?ovQk=Kd+r554vU7w1`f0Zm*fdE*84AIw2DBtNzQc!d)XI4xdf;CQR# z(bUNDsMV8=16wbFW27SS>shZG5qb~ZW<^D-5j(POk^M_31Idcr*$2GkS(^>M!7wRF z>&Ri9m!nP&ZX|ozQE65+*R?DxEmXx?FcMoh?;lPJEAMq$n0n|Iwt~c@g+8C7g&Wxd z+I-N?GSh<_7ClW)~#ZEB~oFnr}tMsqEdX7pN!zmGcfpWrowy+rC6c$Fc>$ z{3eRB?Y~GB2Y2*ykf!B31UNZ~-~?AY;9MUAC;QOgl%rz7`*Ujm&L*L@gFF0|NL9EM zVTUKLby{e;$La8!vNUb6!$&(UJhKihREk2?V9jSybo@Q3BB{eNSl^KyFj$Y<`OJg! z$zZ*Qd{z-Ewaz#M>^mv(!9fE1q8}aDdr5`VJa;_E3^1)bc(ATT?Sh^9jevbARVl#i zLQxLZp0Rep)VZd?I+0*KEvnc2C6IsCKbRML^^||>L9h@4Wz>(AM6%wLsuHC?X3X8z z*MCCxD^ZQmFY^E;lMmJGTI*HjKUtbRcn~*pmT(Y}vBN>cc~Tt_5y6Ce2t-_liUkqJ z?gS#LWJ5(=0vq@=p8u`xc*RnkB6Oiu^Q-Mf`aP$|0$D^#@a`vWQ2%&NgFr%D}G+4WzNG&OMb>C*mGXRuzs)9`B;ppvd|wG$`vA=PYh(@a)vOzhPlit02Er6k~Gh?elz#x z)>@k1>^%$n@x@C$*Z9rzZ(xkk?73Qe(@)ycB(xjO5HEpr`^iNkj4{k1ygM)u7Q|-e zaVW!$qddHyChy<-&6^93V%#vqbwOO2v0gWCFTiln`@4#RS83gROl@qTX7NpAW@fX7 z;1dl{@ldoWW};c0o)wKd8ZULq2UMoSDQJ#R(X;U2&Y+Gg9DXSdS%z1xWEowBXIuQ?bvYhvmeKWi zw&Od1Uxz26h(G4^0~^PBuC@XgWvqn#;odv?fD_ElM-L`LtS04UQSz9X$4d8s)7&{3 z3e(++mja=Jzsw_$%8@A1&CXAvEIX8+jTS%>cr9{})5Gqy?jUD?f((d3wqXu(Mmi`P zMZ^$8gRa-jfd!*DCV+S0W6jOi-9RzGp2QWIQ}sy;Ni68W6+9I&zDExRqa*n0fM=-Z z2G5NVH{^%)GANexC(`1c{R~u~n4-sjwi0?A6{p9~8S`(_qk%FGJw7S#$@Dk_ajEpk zxR&X$f;A-5<6Tl|j2>@g5ZL-(L61Mm@O~ z(BplGbLjDw|9N`s4tNhkkJWO5crZP_294Y52w{6DdhG0Vksfn>cu+o4D*DZ?ccVUh zxWnvh-AO{nHJC$-$=fL=hlrTmk!F*n-wZ%Fnwh^!#5NI=6bJ3gjO~bSwDVC+HsQUj zMKKv+u4J;Tmx3{}T!kP9V!*#ao1o(VuZhX=5R=zhWug~;uZKH-+MD#affJrpA@sPr z8Jd8x4U*?Ed9&$pI}nG#o5naZ^9MfAJrRv~D!FK$_2cbIWQusi?8(t8LHchKlaPzZ zdytsC)_Pu)GC+ypU29zoK(G6dlK2L_F7qGYsKQgy(mvonZ0uDd47<4{dbM?;Uc5yA zW7QvwHn*GYU>)1;D?M1_(kJa51*u)W2Ae1$bRTuJ1=x(M=#f_5adDapZk#7C0!4%~ z&tL`vels#BUDzQp{Z^GexQCN|g*z$zN|pZl1uds{zEGu)>B)4gpELiAw}kdjR_Vi0 zt7`x0UWw_Qk5K8)O8YF|HW|Jh3kCjFzq8Ay&M+P98HV4nQ8P-dbq#htMrd8U_9rMV z*_Sk*bPnyu#*mq7;E}+;f5%~l;@=0@)NkeAb5V;-D-Qqml!$})x5&;%{_TPHmif1k zxsv%ePYTBP_h#kT{QDiYn*>VX-v^-GC-5)sMC-Pze%OPgjyB`M*LR{3rAywLZBL!wnuCgL4skeKL|e zWM<|)O~fzt!H)8ltPkFbI7c6R|2`7`|LFRp0Pr40AN+e6Dg0o4@M&y_Ss4=#tq^n{Lxs@o&{{u0$o-2;N+!!5QZPoA=OOsNM!)$Rm&T&soKZ}Al=X?ujW{#&TI`7`{pM%xs$vH$QNP*3 zI5V>^GdZFWPiK8n@Q@(R{}%mbE{+0P)^G5Ym!+4WCNr~!4|h`_7foIU zka&}=ZSy*NU#!-CBLCBp|NKYzzyPRX)X0U{WaX0v|oYQv|Q*v_yQhcwYg+0OC~NeLeu{C?;e6&&y>eyXXg#>s73gL?dnfUP=4nQX z0*f<_MZ-O#f3oW{>Y^M^ZEowS@K>+$MZZF#gYVsuQ8K)CIQT$b8V@lp2e?biv!fmD zdctiH4zw=mad%ev4(wXgs(63+@+@6ju()`oZ})b5YCsRSTkbPfGVf|Vj6oQeRnp@? z;8cG&tqkMe)x#LwsK(*5wxAAWeD0Oyn%}5Gu5y%U%c_f)MxURl>i1l$_TPNQzJ#H> z5#7bdu-rQX=is;n7_3E|eVg>UQsNYNKnB5TY|9|l-w)AQ{xpC10-v$AtZ=vAXcBI6 zFV{ltuvz1G@6{JtID_d3wPq+q;pnT<*vYy{z5nx+im>_r2C9B3w+pj$|^IkUw9C}6=)1y zt8$ILQjbBcyO--)KcM(aU-iaTJPSG=HR<82)9B|6WTi0RbKxsfi~1WKd$2c^H=x71 zIVdXv%^jTVh3WD9CSswv`GM$%`aJd8tf9BMcFA(TdFGdFJo*B}&ofaR?Y#$XoT<)_ z)OcVcCAg)VZqPD;-wyo~5Jxrz`<3Jg2Sc7|p+DHsS^n^-JoH}+6(goBJP`quYK?#| zd}AJb$7vxNGyB8Ck@92UW?%Sr94x`Sdm{RVmz7%R?~;Bi(zgZ*ec=gcW+3bnZUykb zLs|Ha>;*;0Vi|W4AxNST=-2-6ttwtOzP9c}5{v)QZ)}dftA}rMlHiYtrI2(M44LGT ztfD`{p)&C(?QA>KBA>BE%>l6~PDoQif^b<6^HdRg#c6ZryXezZ2olHTcP(0bKQKSC$;kfvlizXA<5ejpFh44*I+w-0!MM77Rgt*|NW0W=Se zoP^NK+L=Nw}UIH)w zsU);ZtGpOFbz^mLl{=zqeZeYy;Mr>-D5YMyenV~XO1Cv;3);^wUPB1h3j}b(WxewU zcCMx;+7F7KTksS3cw%0fu9ep7n)j>doDnni-~-*#%I|hO9+r2A>_E@rD1aU4A>ad8 z1Ti!WgyC}!Dag}8uc9dMX}y03n_eB(fuGt$*drGU6@gzB#O_;xoHGy?!SX=X2YPTE z05n!>l^qd-J{dKUBP5LyjND~ov2D~({yj8&k-;bi2PV23m5q?fv_Tf+GE%p}VboChfbkkeVL7Th>;FnhZs7;lxIahBh`rz!-F=3YA)1){x$qD}C z8ezZ#^=+<_iUY3WmIl}72dh0(^>iiQ!V}>uYxNE-8&H(;(DZApqd!!Kpw$4pS$D0) zf|8~yFptMQ7{gXy_X| zMo09z8rBkh!p4t_h#L)0nyVl|SNn_`APLds*h#5Yc?$cP%!DImqIOvWIt_ec(>ZX_ z;S?g`XrjOnPv=0vV%+kP-uunrE?^+3>sjDGUt+(}V@wn}-IF#qOW&ot((`TBdQhU> z=|buBHf{3x$mn%!0F3zWbT)Y~-`-I)E~Yv%QG(@@x^OAg^k#&y4-B{XgJ+i>xKRarPQch6*ac6TIXtl zTIzGJDE|Q>_EevAs61~BJo7YIL$62wA+r79p;?k*lxO!fIz6f;XE;U3UCCN zKmzRt_*)!Y$4AN3*Vp5rzbQGRe@t*3!`euph%@I zE%F4f#Z?H{^GRy|JE62uQ(P5V8EB6K&FXa-daK}5ghtij=yw?BNn5ycN)v+tcpCnK zVZrtAFa(Pw9i|-Jc%=|3I3KdG8;J=*@J;934{tNSQOz=FqP1b@fYaYG5Cb0Rya*= z+@Waur(V|5w8F;<8c`>!(vEpdN-@s>#POMi+L&jS-NZQ4;{t3t?Jw}dYm@z|9fOla zba4~_39#tfQWRJr00`4&1Nx9Lf{YUe8p3H%wWju9k09;yZKq51dfP@VRFp^P6|6GV zea|@p-==r?Iaup50#A3+wKopr>(vdwb)(+4seF?j{54;jvKfm-;VCaPkbv&46+MIY zENG2C2)lZ(fmP{q(pAfkqc{OdH=h%PV1A>PQWP$-vN6p8UW_90uPt0`b&<@lu0ap$ z(pV!$e;!eU8NIXLd_(ZHfGJdUKe>jL+c|zoR4-=0{z$5^wq1_F!R=HHGe6k~J z#on{NdwFo33rNl9XgcGN6`2onpWXF{FEVOGJi4mf%O~zdm86kOG+o`4POBacB_To9 zY|Pyl1=g#3KF&wve5UB(+%26ufCd`28d0w~{w$0ay1+e@nR;kQ>_eQ_gZzIdHxl$*-HX0AYE{f9^VrIQ_)gw|hUi zDn43vjwaAMJg=$SpDSKg_f$bSBvz>PLr=h_5#%0;iL(Yt|7|{@*JI;J8Mf(W_e#X2 zS(o1g1_iHHLT4;Le+AZdTIdtz4!>bns7R8OK&pxy2}3UKUS=VX7P$oD!eNlMu>r7v za1q_bD?P>v%t~lzhAnr(SnpP0Ofnw1)a;mL48T6o=6vRIFE0Nw z|4t)%Fx7W_o=Az23|gU_!s;7e&QbCOTQC{g^ierL-H%xN0i70lixuN2WT0rL>1K8N zWCV_+;DB(XIM=ZlIodWB*>D8`!tDf!UxfDgO_rqg<(8J#4@-LpCuWoOo3qjW&GGg{ zTtdJi6Xz7`gI%at7K#@W6k{{7NFsra>cVJRUnL1={Qlo2Cpdlb)6t^wj6OB)enuB0#Ep|@TWENcP zvaTRp#4}kFlQPI`6es5WASkYJ;GA^qQPdE)|KeKXuAi`%OKNY6VPl*t5 z??vV(%6XZi9s`J8GkK00@UP}5!XBTaR6VOE79BiK%?ua+m*%Ip$%F$yr+EqUleC&L zKg}iR;S9`ARSEMGj!957aegAHT3yQGLuThlou5dsq$}#fpvCze|DE~iEo@QP^V6vE zvmon>w9s1sknAw>NhwYr-Y|J0<5IIz zh3;Bq48pt=%{NwKTOQ{ZYXV_sJ|g9+`AB-+)t}IWUAsLWfg$GzbTS`7$YV|m32Rff z*z-}5b@X--HUSPyk(G%MF_`ZNxCHGL(OJ-s{aUHz$HsBiE|_trW8V^-UL=>*MZj7c z1`4wBUG)$`(>uZVoEbB;$_w#|I)+d-J&11boePJNUUOu#x9|+AB{Q>#RhUHjhXNI z;@ZI-aqS?c8h~FE{x8P?Qh&2kpM(K`UVs6(z!`u+7{4(ms+L~uudpwQ2e21vGklZ&1&S82)*EOD{@PXxean|x zm|J=aO3H?B4c4MZC0Tu@cEWyFW>XG`7|qJ`YztJG-I04-Ow&^HzO89(97HHG7uY3d zlN;=kvNC}vt{^rYHBHt;j+!=G6`o`l7PhqulNbqPk61|(D)cU;;N7W8USgLNJlQ3= zB4A0ZOl;MV7><%1+qRB3Z#clMDBRz2(E|7|L%KKJ#XM3rt5o-a~8vwLDh= zUMV1^qWg%-hkU|B3buGoqI|;_`OSh>G5wqbZ`0cfoKg5~jShM~RWW0cA9^>Jfe~#EGbS3tBobqRu?oc@-E98o;e#( zdBY{yrLN_r?rN`5<6cWu_) z%e2X30GwX9jOT{hl(q-}wR-i2e0S}{rx^+Pk&h||U_lLd0D_mAY;a|>Sz6>V8a(Du zSDEpXXKF?Pl=B&PpdS@j@f#%_CfMh@%Nd1jFAwqTl1llLcsojoNN_d(11FKS1s@Z{gRPz6Ufk?RA9wBwGUX6be)T?Nd(zu2JAX+3=NR!`GA* zt|rBc_;~7av*V-De7l|CW|zC}fm^xE^o0Et8Nt0cZu=2z>T&xgX9U)9zdSt{aYZr! z+rgs_S_nik0H1>fc1-mubh=2;@i;PRSc?My^zTOO;}kE&Noi;<-n8c&o{GGRpi{X} z6BS-^cG>V>Y?AW38sQ3^BsR4*#%^j?u#P8KS6n*vB4~G0k3oMasY~?XYkc8LpmWrZ z(R?^(7DGPn$}_H(+fX7wbYoC9Uq*ThyG4fW1>JCYO3X(7@N;vs>}5q}>?A$m^mG@N zNn$aO7wIZ8$X=OT<7I}BTI9O6Ce*?SEk9|8trh^2*f{y%ysnh4f`5@SQ6469|1z(% z_(w=KD5HK*DaX?z=ed64^D;BzgYZRuV~^j!j&;<3(i-eFe4+2&q`Q`38^wRp3f)!B z=`m-OzI$Vt_QsZc<0v0EM%P}h!G7Jke7|d*&-l!rv)N~S=hNQ!HlL|J*Fs;;mwIq9 z_E{Rs|0EYN0f)b>Rqlz7ll=#oqVMdh`bpRw*mQH8OB&*mP&$PQJw~TVs09@S++O1c zU933Ns(kbu!e{J`E^}x_#-_o_u`4I{ME=?sS8uYdQ!TV>strPCH6^=*)-){EAkqUE z!U1ZNaPKC}5RF{J0`*X))>`AfV?c&#wT|1eO_x&egGMT=Kn~g33$>h|abW3l-;*~6 zB+>@6x{!((hOlS}&eJf>+><@EQ#zz3>jTY5rNM44>lm~E78pW~>j&H@%_+1}pl}v< zdDyPO*3Qu!%Lf44kir@qolScfXBaN1RFS8UTdQ1(eTH4NE-h4rm&jZAM>!jrP0|Dg zs3$A{fuKP`H~dRIdJiDqPr{S3PXU(TvaRn-$&b#aST&qvm> zgsMMc*48a%eFRxgPRKfwS=Y$QBn4otayYwe<~E)TAogJg95~t271`ftIeT}Ny*eTL zGG?EE?CQv=Hqwj(bmx686l&*v58ji`r##o{=9GCLE}D|~jQw)wSgc8CKVnXi4N9eT zO{qY(mS-~=y~oz`JbRpDdZ2~YQ`-(dKU3z!SElme{y_`9h)m9Y zJ1>=Ug0&vS4yg~w8Ac0__B0L}1?xfUc7VueandN!gBX3a9bFX5UBc*#>}c4k*p+l+ z^l1{^t3YPC4uWdf9^oE)KDi4SS|bBNtGokrgHH|-RGRg4z#aCd2)41wU-*-?7J?gh z;)fxI4QNOm#dp-OP$lUJNrUX9*HltbLQ;vHG+ia-B_wsTlg6kdZm>CRW!p)Em;?{c zkQmkw;n(>kcz3e#G?E|{s~Wl`B=xY9j!{Y32}${O(yy{MozIW}EC^<-Zaywb zYh5K*IQ;2#m8@T0?F!sq<0CI-_eG4eJPN##ENqX?IKBhCQ;|fs2MA(x2jEeL)1}bM zC}!)Qv^(ih#>E*7&;s3K@cY6S`OIrzy7#pfnvHApzHq;6xV_02`=T#=B%7V(tEC{# zitM1aFw?zQWRiqQXEG36)6rx zHsG%tJ7`w+-~;Pmu)cby^;5BAd43&f99Yka7Qx;EUtLvJs;3Y~F`vwt$Q$!G*QC?x z?8ov|sI8u*;aU@qgmL<+x3tb!j1$+M7#uEO`NJ#Qlvlfgq;Yy0)zhaF3m*=yJCHX9 z*RTY*X0bHBih)N0To)<07z?A_9*Dxc<^h@WoibHIt9J%5iuIFm;t|Q(nWBQb7`2e?;}bR}Ypt99+E< z;VMditB9pRFL)%tb(DgOv4Cq3A9a-_cnC0cm26X9!;zpmuO0^@-(k{vUFjeN1+piB@Sv<;<-^fh=sFB;O#b@A zFU>+3fB0Q?#~s&AlSf#%DaP z3e2xU0qgpeY#y4luTGc-acOw1=Mz7lAzX#Wa)k7Q>=D&?kSZ!0_hWT9Mmma(t;P9b zO5U>xkwfs$rWZ`JGQA$j_~+vBN*NR-a3mm&?2^;b1~E~lle`~rG9Nh^k;TnDug`}S zZ(XDr8#H1+ro;YBY|jp;DWr;!LJjJIsW#8LcLh2~HE6K1n6{omRb;mHU}RD?hmg7? ziH4&%j_HcWog^|alZHytgpu~Bmyctlt|A9Gk;52yo(EyJ4ex?9&!U7JimCY=G z1NvBLJ}4kBfq#EKpD@5?-7M8X3`NLKqUa{iaCttpjkfZk^<^cJQ+jb6KF|(B30m6$ zhR9n;vh^z!Su6H>wne^;wIUeHwS#3`N85MPKwLXpX+2h~7Dk_e?;L4rK0l98V3~70 zmL2VU_+GM6}R6WBo8 zp8a7){R681gtTpyLlK20*AB}rtbwdu(3kC?SDV|-`YAE|{-|`T{5&ARSX^pYUN}eL z$;>9pC91ia2)JlE30+Zee*?Iq?d^5jUfR`T-8LHV-$(dIM}4$D*@5_S%kTa)aD=C) z576;G0W7vU{E`D!^%j7wKi5q^&BNxujU+$fy3kf6-`WJ>%a+iLjXS?_6DR>dRIn0b zZLI%#cofW|kSh?-rdNr@!K==s(EqERrE3UfvOF`SwR)aoz~-@fqJlj)gq6 zP62T`EAq~Rup(Fd%P3iY8?;w#nRW)9qiE+cB77jw5EesJJ$&Z!*uvV|4PtDTAfv%* zgH^a5ezb}~^L0gJu;-y51*qu!wy5UNnc<9Ae>GlxWS#w$ZY-1W(%rvcmEA9Y49*U7 zZ`o-Nl|4=$rHs?XJ%nof;St?1j|Or{H8J_hz@5-%6MFzREp-{o0Vc#EMoB>oGRcXa zmkb{mQNibR1HjF?;Q+Xa0Jioz5H8yBuOa0A11-Ah`q`YHG;+r~gU!oTA%X?k+7?OY z_zedK+4i}fYhleEyM}{-vn^+h?ga-~#1>aoe6o%eX_egl=N4RAD?aBGa8-z%6Z%OT z$%Etp)+eWP+|Fv+o`a(%2rqnR1+TFDs2X8RE0A?6ue3poX*sZULOndR8;0R|P z!y>^d7}`Y}J6~@2{I%10Nvyjf` z+xD{xPiu#WugoKN$(k%{u{Xqyo5a*e2#G#C`J)ZdIy{MThGmCs z0&$GpV~!lB9ke-*uWk$1i7ZHbUGr}C7jD(2ZsX2vaKDD5RBSnrpIBL$d!rVrf#n5j ztGowAab!x1EVk-doN+d4&&>Kc2Y&D-k|x7v{g6Oh^&qNGwL&Clb4$~>kGU0FRQ_<+ zvCIUpSc?xZQIhh=m`#!g26@AGlwc-(WhR>m?oZdIpMbVYLqBSj9SA>0h9q43(ok{kZ$zF!|xL~SeCe&C4de8C&7iRk~3OK=&#g&eW4riz-5|=D^$_^t0`v5>q z>ssZSEL3oi;RNoNVRXshinN+A{G|6zq<7)};C`1@$*VQI(5omnfxOO4i#)fVIwH&C z_-7i+Q+tAy%O-2oxlp-px6{LAz%uS6Lo|+~q#R}aS&+dXrbwF96CVHtHQ0856yy?q zOjvpZ6pe4UVuBcMP9|!Hr@lKfP@g%W70A;@v!x6w{x6#l%Adhq(%0fr|<{g;Y8muRv zI73^j>;kNV&}~5y&fEqdWhx{;K}HP26X|noJAKTNXacCC89(<(NNZA_5aUIC4ntik z;TR(e&GoaLYO0WpWy!B2eA=Dcz~GCt!jB8M=9Ti&7uOE0Fyu6zdEIDUCz&HA%gj4K zYQ+T8>VxWAZ70gD6<{v;!;ZG|o1i9_d ztM}r9(K0P`2B;OMe7N~Yx;8U9(7<$ZI_L!F;>Am;MpwQGLhWyyS=`^ey_ol;wHf!L zQM$gZbO{ZI*^0xD#!E91irl=9xOkntqLk%1EPri$Y#-MPn=-_d^>tK0)2~pzv~S<( zewYEArB>3yK(X?~ES%EgBD>ML6k3O2iQT0(7qmMrLlA>Y9A54Hk{#On`abW}{*5EN zMjzaTzwhS}Mt|HWTUfrrSGeVJ^X5~ri?B6tBxWYiqqPTY=Qm_K1JF(dw6>h^8?TcK zBA)@9aec4BYQhE*g#M&x4lnkETH&ae?7LpXYVRX9W0=g`A2R4~s_QotX#b$Yjh5Q7svBG_(iG*->Qoaf{PoEteI!8Yq=@6hww@ ze1T!Kj*w>GCB|`YA0OSK_9CiUK03x4vLZvUNubsfkUO2V2VFv6$aXuJK3M0{ruN5h zJCme!3ub*#3~yo|rNk3veQSki4QisoWtBh)I`aDGr3Afq{zC=9P#o9<-F{)uF5vhcnh_9zG&aTnpKsWJQ_8BDmIl^4B z4+Twy*XtquFEhrUo7LaQI2Siy#kjCeWX?_5k$rgKvE`r>(cmXt@J~K>3hxJ{X|~vo zY}gGfd<@|Edm!=${P)doln`#^KST{;Doq0frBfCIrJnh*>SDM&0f1pi4gJ}wIG%)} zv>Io^@EdOk4k;sy&DI@flC)HoNUcx{q@9R^a3zURH`|ry)$7~ntxQT{EvMLT`i6<9 z$_4~l&b<_Xb3}k?Id|tvN|8z_l9Un&++89mB4Bdv9Z=?859@b!CVcNmzxi+l>h@zF z>@+=m_c(e3f|$mIKho78YY9l&5276D2XPG}g$*JpP_7a7QSuBGP%P0ZHPitwy5Si~ z^_$co84b@k3RRWaGp@|NZp?Au7r*g^YUJHKMZAOjVGm}!E5PNRk!9|MW!fd{bOXi> z*x0xti`HWvXfJ{rzwvu8i`+OOndoqMVLUEK>-qRBbclCa`?ydfSot=Bb_S-VGHAYFpkJ-tj%I8c-U{COl*Yz*oAq70l|Hd2_p3%){~2Tlvw0?_Y@OK}1ZC0+BCj>E#R9Mi z?A`G-c%e8)w9eG}Izt+sf%+WVj;AxR_wnNysO}urd3uX=UWYdD zy@f&t>1yTYK{j>m%9PZWPej4JvlDtU{UkK_0m#>y!+&q#pR?z(3VM+9zAxeZG#n~9 z@!J#Pk4uPmC%hj>cs~^zJWkou65d}#o|OF^tSES$7go<*@7|aLT1&W>->n#CtaCF8 zxZqfb5yYw_6L~nR422fW`ME)&)nNzr3y+WQPlN|_GrpP9zeI=OHVh*m^BaukMQR%x z#a+Dh4RFW#6iJ;5^m&7?E$wrbuU}u>aEF=-Qq0!p^&L96>+M6kj%DyzG565Wpw$eW zLl5I**S!`K1?W=jx2)MROi4Q@f7I=5GF(coKv5C$Z_75+S?(XzJPOe#Gv(74vew=; z8)P1Rc0YT%&3Y6YSezL?1&zrkEjcYFY{az#6?8cTgSr~il=UV4Ihb!w7`3B;`S@f4 zJzO%usLFwhVYy$e8=rEE8&XF)rMvHjsTw@yVAd6jM2UqDBkXp-X-|?5qj&@AzP8k1 z^y`K;?DkNn(XYq}*TxITe)0c>W7qZn4K~mFz9}VqWlFeDO8DHA@X0CR4k_XEl<*Ero{9L}kP=>*60S)J zzmpPvF(v#+N_cWgcyvnmrj+oNDd9dT;d4{MC#Qrvq=eH`!aJZ?B=tWfyfPjZ`lv|> zzmpPvF(v#+JS^iqIVC(gC45s#_{x-UpOo;q@vzX>$?>qX*C8dGo)X>x-8iZLDdCkV z;hL22J1OB8Q^Jp=geRwjN2i2uN(ooS;bUzZ_A18xfi91*WOzuHtMqsYuShLo$Wl}gUtb_q#Y3C*VofkOTlTlh-&cDnuIQU_@onqB{~o-nPvmmo zV0b(HR(Oy5m+-!>9Tr|3$mFiZDn!mu+C;7+;W+z&YWwHDjH=!op=CT(r|B{{;g~V}|O@7nM)ot{%n|haFC|%o*Ozs4+fd zu|0;1;rRok1Q$_TFA5Y}1F=0L_EoqSCBRv|wa^Hx;G*9vJC9Vl=zEmlS*t8ZCJ)X7 z3|Hhvdv_qW;^NZ-$5{)Z-Bec1AP_<*l7v9f={^p2!B+CDCfoV~CpyB5 zTAlSmhuE$IC2a*_d5FFQ{Ff*%V9!JD_lI9qwg1X}jYm}j#d1_uSIU9IM$bp}(tc1L zFz9Lx7rxB{vhV@7P59hSceaMTd2H0(z^_HgK{7)b^f z6~VKOY!q7Sz_N&54kNdE*uq%?QeEjfdAb|u;ur|1{;3r(Fy}aePy*rOI7<#Oo4wzW z+4+l{H05+uH{T)xIq(>;7iMwK*=Q4!r*Mr7O2YkvxFG5R}y~C13di7G`{6C-$9QIaK9hIlT11|ay{#bt$=O%U4;H9e!5Bzzd$kXU7v^t#*gNN$2)Sl9p4bm|q`>MUaDZh;`%HDJ?@KuS=ex`^QXJRp z2~5md_Bpgbi*#-~lWGC&2I`DOH3x*JE|>u@f-jnjb-XWOv)8Jg!aU}_lCM)}24%mgrq*ydZY z&F9+YbMNwNeRjd7Vccyzq`eJusSigBvGvhVc%9+#_lu&^SCg*teLP<;gJEW#50rii z&L`-l=4~kozvw>Nm%F0?C2BkG2V)@$t{8rgZn9t2d98#F%iqE}sm)YZ^i_}`)=#Rx z^N_1qS&;gSe~PvMmBbsKPTmYp%=U&K<(n5;Z7DcK-d$gKKf_*_HsM166@Va(Yo0Oip0YwY$3&$sfF|yD!YV_ zUnfZfubO=&c)P3@?8P>=Nc_faaJdBm07Eur0P7)cH?-k&Yqsdk&@R|I%#Pr-bzL~4 zfQZfZ8^g0{G}IS`{Jew9VWRK3(&CkL+FE8_3P-INfAe1WY5fNNqvgOB+Il=iWMkO?jBEDo2O{5C=v%P`Rzz|*4RmOe zJD@fU`YWVAYht@Y4EndSEP*M?HtVmlloi6oh;rnILvIAfbY>ooJJf3#_qSOa2v5eH z$J0=|0E9BY<(E79)vS1l+)R&bV8>yLAcbO_C^V1R1dCoT7|?MEHW-zns{G1<1qE8= z=O_)odih%DA|QYt$e_T8WW%JRE{*b?_Y;p2iDDJQDLqpuNb5^wG^P_3 zL?ffXx?tY{wCH@B2zJHDL998SG=c#S%Y_f>{IjGg2zMI+s4tF#NY0<38Q{9dF@U0-D3v9~7;h*2IBAFNwMrTEKBAVux?nQpB?=QaUZ5Pp8_@JiqQIT~Z zqeZYXn3n$Q0r*i_4+AB8_v|aYl9eNU(3T=MxU2yAPeO}i7zJG91|U|eyoAugA&V>0 z8*f_WnaHGe;Z7C+7s}@%S^#VcI*7S)#P^shZFeYlt%tGC$yqJHT0R6>FPaiJ_IZO@ zcVnGd%|(<5RDzR-4*K=77>Xc)_9vtS)lZq5(4)ZmoeJ|FVY! zS(*n^xpsa`1-Me?F$W-O0zS@kNj*IC=*H0O%9Z1;2<}ZEn_E`6u|L>Ju7m`eva~6` zLTLGiFNV^TjybRr0H>7|;&WCRFue*~uum`i%8|Ey!UN~+gOJQH2Ee*@G3A7BGvBxY)^q=;Xrf}W4@RdHZ<0JTdm9d2SGkn8+fcjxQTWzF6eolWM#EKgO z>_s#uroXHCa$>u1yUE640MdYs4m~_H&p-Tt-~H>DyM4yD{_q{pi7-okTjt&eooG{R zdb}|cY)GA`G({(Bjn3LCTUa(Zp|Wv(Q-;~`4@#drn&6n-pC_%-K=)DBg@%3ZwKfIX zLkgatmC{g+*PY5M7pe0ZcmMAyiG0oqh`io|*gQWDwz8 zMTDP$Agu>vja5MqjJ5FMhe4-5_q4(nJGu^0$1RIP{sNQ@@PA;3314Zud$ zLO3G~x{L6>HvEx9APkzB{$~i{$UsCwv>3M_5`9Q#A8aRBqu7U!(m_P9gdSeysg9)k z&4E)I{VvP5`y0PGWJ+Ukm9Kg|6vnij9__A-bdQ#k(F!m^Z?7)j0{54}b^8iy3Kx5V z>so1{?PyOQUgHgCOworg4sLUKjf^Q~A9^eceaW<^yy13J{APv-7-Vsj5U z-a@WEVQ-s#hWCPf5yG!krUP($M%pbMtc}cJWoGVq_2^5b@}Sjg4f@i61rFj*V0=); z7cl;7#3$^xd9LNUCBFQ{#@SBXp=`qNB-llU@v&nR3YOT!(mG3oese=DtUNWn0p2Af~p@Zzs(b1Phi<`+O_Ar#!u1!*&x z0L9F&Ef|uUhHuc}6C)LfLDF(O`14f!3csE8G={E1&=*{lR=uHJpHsY{Vb$wfPuh?M zpF`E_I$UP9J7LoLD%f4ZM7r%Vudye%{^GXF`h=&2W}#SHe8Xkc<~}_i3soRwtk52* zs*W64y{>g|&k0IdEM7VZ3PX09_GESS`mBZ5eH=gFh8{fW zd&FJ4`Opo;`(mCN&9(-HtG63}GR%AqbPo5Ee4?BTPC&SO~3`O=#UoXgX@= zfd#fcVNKlVFI>(YifMg7T#@f&w(!Dr@6rljA%Y1EGw>G?m@q3k^iyv$mLp9TdH53N zNkX6aZi_3p%cW1+(;d~{b3WAVw)1i*uR6J~!&qAyT66CS{&44?-_LtHt7{tg zxgRnd=WSc>DXhBpBl-T_xd5Tey+WJ34=*tMfMW}vfh(0Ek##44?CQt^HtY#DCILDOFdYQwrH2Hx`rZ#qX$pTXXH3@t-37Cj7#0b1 zKIuE=MvL5?0=2?Gjt+@0`#2}^p^>`+922q*UA}WGITUmox=vz!O$!F1S zxGz3OfA&wzU&mr;X5EC1!{FYN@hu)8A-H#l7J3*j9C!%7DIwJ24`+Ti2Rm?cKObRq z#3+7IW)8YC+Cj$87pzJzgJv13MXw-%p`{I9Qf6%Tx*8EGD#apZ+H541f8|~>QNI6^ zt+#6b6RHE|x)=CdOYQv_ZSF~>ya5Ypg#ug+AFE5tH*=#bJNhj21j6G2Jd?o+fam=8 z65#o?%pB*B9+d!3Q{dW`VA(mor2Kopv04_sfa5Y$a|k%5VL(#gcnNUep58LgM>hZ~ zi8N9I#)#3!iy&leN)AUkoO$Nl7HH&HM7B)K)%VVgd@bXE0U3sSR5Bpf;>8&d+Q(>f zaovXew88^d!{PHUewWuxCtevnCMFNSsOdhgAcN=!x_E;cmwK}!D6W_6R#^+dee(o+s zD1V-2+MTp6=W*j109-gXu-;c~dN%NtTuj3SclJ?-uAWZY2 zPjv>5&>p;6f*USj(4{@t4?%3;M{bemSfK}ZCltB|i;piNV8fWq?sSD{1!xtFDU!NgR+bzg-u#$1`7Xi`{j=wpZ3RQ{;xi8banI5g$D{3 zo0p+S7im*IVD;hlp|`Oo@|5R;5(&1e_QT1~ZhQ^12A^E^8E`7S9#+uUKJvS8Ev(T4 zwaxZPr)8AJ0;K)h2)28hj;=6$G1_1LOQ=308gB zi;N4h3%EK)Blr%ZoQb6*I^9}&p%8ud5^EJ6JX(7kq_pbc!N=z4ER{Rg~Sztt)O=CM_LlLI6(_xGOy_><}7 z)$G0Ua{%8t33#r<06)&_HadGya_B#43-=s!<2~GAYEGcH(j{2F1Rofb7QjJF>5|ys zXqAP;dbsZ}-TXtnZa$z7cFxC!(#!>Xh~G{ zE3Vu#k9>n~%Y4C7TzEVqTZe#I`b+V=jgj5 zdi9=*{bqRu&p)g89?#P|<8kJ)PTPz|j6DlVPzMh^%-ko&02%q)4`AB}Uv5@#Xe+*>&^sET=A4bYsGNgB?qNS9eJk>ca?O-(3LZDL3Nz^=>dO zVX0t-NOWx?`#AOre*ogu0-6U5K78yMoqnqd1$5h71kQP2hEWPY4bqW05}&=3{@y=Q zH-i<(i6gFIFyzoec|we1#_5x4EAVP9*$H&RN@Eo*286O5D~%;=Kv`+LgiJKcfWN=0 zfaWu?GW-yWDkL9hUd~Tr6ww83H<}oa^T`}T1V&G^`-P1eBJFBHT5qVz*wXke;FEJ8 zTua9hKXz`+t8uu83&xbT=*YU)Whl#Q9mJ*sf1neR@*`X++Wa^unIB8UCG>xi9|z3-m*ZKyCS^Q( z#P|{R2V&}V1BAVJlqNsIB)Bec7x}RpxrR$<;YT+z{pa`*_x`hOa}wM71+kI z%JGbOAD|iFO!mHlaA6i0SG)^8^JlZH zV+{F^_3Xp=g5@N`dLOohiGOt5E69Mqi%o&RVA@36G!%Ju3k3{X{}=NCOcI^>z;EJ6 zAMk{r(%`y&@#0pPha0T(f5PbCIUlpVZr-0|d2x~#c^xZUd)|oADHNYP96VW9t(JC` zK5FL9`Q<2VayRiS-o(E)_b6@do#_d>DBRH$S8?;>^g@jb#v59pPubj+G?o}qyboYU zt1RpzW)v`A2jmN`>w=Ub?r>wnuva>F9=U_beaTE0G9Yyn%W=!lfPad;vCYDEkBKEx z^$*S#_xcWgv)x6LeyGA0H;b?Arlqxo8onm@!^O-xtnKRJHQey_KUTt>?tzcxbDO)i z8r$4IsBP}kz$(ex+}J8CsoI*+_8V*#1~+1pJKDOfh3zhT%h3PWFlWE8pX?W=qXu6X znwA@SayIbv;17TvyLn%Ki*0A96Jy&=+Iu5DuBuJpp*(%hr9~FupR>P(!XIKZn^9yr zSp5@bK)H*@-hh}i#2_$i>=g*)r%9moSTFYTJdq;t^y#u9u8 zUhPLze98@N%%~Kd(ECJ%r57s06|G7s&$ZyKw?Kur&!y_Cq3oXmMaQ}m#0?lLR-h|@ zaV&NoJ5JhrF$e-KRD*T+YOOnR7qDS|m^KhwFU>EVfgEl1pesExNJT>>pTr%hw6PIX z)R=&>w%UWIAy4ET!WdicDSEd357W@jDAKF9|yP%vgmsFM%en@Qk2BYFlY3+zYY8z zOTpt`$^qveh@LOyec{-ZmXn~NL&Oa6g+KX!*n9K%D2nudJb?s*qMc}>@g!={#4}N0 zlLcf(GSVXxjUtK%ih?YNB1!^yfWb*5?J&xU=dK4{E4v<`?jj;b!jS|O4B&yH5-;ds zgrJBZLioPlPj%1qWG0y1kH7zZdA(q&tGb_hs-CBwdY-4As;UJ6%nT5dGG--YoKm>I zD9^zO+A=JK#gVI4bp#V(wYle*+QVeR9Mj6z5nsE@-2SopvS^L^GFor>)#kUD zF4;NkJfkW6no1)c#%nZ$A2O>Vpiz!Z<*@yrog4M$AyN1zw21MluKmX zSKuHk?jE#*g1z|&IW@@Bh;6~DXBekIf6kz_oj-G)!m@qxdOi6|uCyVNvwR4nIPeg7+%1ITz-_l%!|kr94GG827IL_gByQKp7>J5n>-y0;A#%C zKwEGtX4@2BMh{QF;ZafX+9HUG-QRL5s^Yj&_6_eN`w)jNLnSH8!O?i3Uf=~KhuFXV zyV4E;2V4m_IPA2PKX_fcWV;@`qEqN#z8fPC^uUE>df<%G|+W)zBYvmI~an0vBgnZmEbr3P?T9sjcEKUfjEcL@6#X!jHH3tMcxp!O3OZU*cbe{zHW79n$_`4urq}oh#f>s1a+g!>f@7 zx?Es-5Yqwa4~+@`V_nv3JWaIl!291&i3=;;o-&;3Ux{p_ONZgV!Q(<6jCRgD<~lH9 zc%gaR_fGD%=mX~a=oTmcUWUF^{CnI-iTHODCiYnVZ}0mr)+PG>A93G5GA5>e@Pw-W zsf6E;jQjrI?Ru(Q&;i%vx-8h49;G zrbS@lyknf?oXHJ}>)@lue3fWE75EjY7*j5eNBiKXu|*UR@2*YMLDd2cdK2YUd*6do zTFko>e(!O9Z`+d}$Uuyp$n)SL%?ksCK-LY9!zX0aml)gqjmg@gS}Z~Yx-G@l3q*wR zyj=h8EbXBln8{0xo$n&L2Ey~6+$^kk&UoiA=%B5`C#HsP^cdUb=dg?ew?78%Qa%53 z+!okLj*z>csdV%&-K)cwVhSk1DY*!S!Wm&lbVAf>58e38J?4`U`ArK%%?g%#lFV&% z#v0gdVtS07eYI1e-93X7U%O5m;`XmV7{h@5B{jFFBq`;xK5 zQBRLYrKd#E!vzw-tgHC4r4Tpp<-^Id z4*6zncjY$!sXxpHSsd~W=k+23&i|ka5mLeHfz(!zm=0U(#M)_%cuPAHQU#q%yNmB- zo1>uWK(gSTUwHk$1vO|Mjf2*@(g%uTAd1tlEsyJkIfq*QjK_;(lZ} zr0#l@4yiu)++8`@hvcs)v&E+prrw~ZOgFG|0at{bq~r+rU z3RDVDDs&M0H+%-mrE+0z6B+@bIz5+KCgXo6@vykTd3x``1=@XbpDzx|t;9>>3oyMq zsJkqb*UfvR_fx-rj1Dt=YRAiuBmJNpku6mOQz@o>G zt+B{%FpOj8G=nqU)aplcn(_9QJ6yCX@G7I-bjtq%&IEZJWqG6o4^=h0K{r)WAO9oF z#F_{w?8}fdBDW05p~HwhXMmf=SyMvjJ^+S%QeAK%J+#AlwMc6hZQ3zJyKYme-G{zp zOkzB!=F?u`#1sB$}ct3 zFz*sAj+v+}VZxR;i;})Aohw!^pxXk2_%Ari9`ZALb3_Xd@rVk}5$C~eWZQf0D{$`p z$^V9s#BG;5?Qtt}4Y~u0T;TdN$KZve;>aBUr2@ME_55`*M7SA{J0mRB?OHHr^@b^# z(90R~GZ_d$dDE&EB7t#&sSDd6elq(~{e&;fpc3!KechQ!6}e=NsI<|lKW1xUg(12X z%2#LTW)4%g60su@r408i!@v!{W$9zk{Z5ekls`0AqML~VhANtXB?=5A)Bw%?C-XIw z6>f;U++se343U>M9K;LrTILV^-zGz)92m?z#h3i8SY~a$#sf>amMVsiFL>rXZ-Pv)fA-qi0L(7O`h5voLZ9R4ah%z01-R|$;<;TN1<6+N*8_dI4w@t6mAn>v` zQr=>2$7l%MAqpid{*9oJ`p~;(|G?noeKF- zSQ>OuLJAGPFkK{?4{Oej@q$1X9;Xd?R~o2*z<@fCzr!9u+Jgabx(K=Q%Vh+;k7p&| zKD;QH*~`2J6C&hEcSaFF9rocdmfLU_b;7}-=9kE)ADS72WQk6D3`iBb;Y%sp5Pp*U z>8!dL`CyjvN;OK$rzH}a0~gy&5E*=-Yh(;n0xgUq$U9&jm3OC7-ctY(TZZZoXThh7pxzt`Z`Pe4DJk^cIc8ezD9*=s1U8Q{ssSjgt01euhcyyzo6G*l=Ez0PZVsj!y$Y9HpSvwX>6bH!?D zk&O#UXug5Gh*bPYWO5tw-HX{QhJ4$w(&8ka@*i`)f=00hXI@+PXFKS3St9y9c5Re? z7cKw8>GvtTHP)QYE^8F$jk9f9bqDD8R|UoHGkXY{cOpL#{cd12ze~UO7yK{uOO3@v z==b9X4*F$^Yc$ex9x?Pg3(kXf>6h`Zg!Ic!F#aZ76Q$n+OaE~C9fg)T=$D4a z|6%;Cd0(K!(eEAPC!*hT$p3x%9fDnG|NZ#$#Ns0KD@0yo{9P_$xefjHV+M$!-&k0O z?b7d3oc!Lw@i%Wslz#7lbN*oYdF6XC^waV9KhQ5jL5ZW^uPYPN?`!1$KK%y1{lCz! z8nB}iglGfi?Z}JJ?-7XQ*fwJP^}_@iL%-MI8E%(;fBi>7`Xw5F^RA52@8BhWIQ<@n z?cx}JHF2g)hves_3Q8RPijkja{GG^Zeph}5{`0@kZw0n8wWZ%1$cxbLBZ%cV`rV5e zGKPNJ=<|xK#YF4_YkiWlo^|PIoRua%Q>|(z)CPL`voKNb)T*DM76IKwBKxSnU>bek zMcQAPx$x>KHKwip0wbHMi&oW$uSI>?j6`YRR-KU(zkv~924UWVsg#;zzE5+fdc&O; zic)b&Vx^+jzayOrH|c=&UJ9u2NwVHKMK@mt%n%l|;qP;>#qDv1lvd57Q`)FSmK})u zrh`|e@!o}v=3m|gPWZhZvNXKV)`Ki{3ufO@glx~ZA)MPw=f0&MTXr55GqLkB&!?I9 zJ*@{K9r~HB7)<(|0XvSMuVW^OA?Wd6#1b@Of2&o;KZ2eMp8sFziPKYe z3*O@w!0C)2MCdG*$J99(!JeyT{T{K8bfb%9_^z~vugO6JQoE!ZF?6wp!=al_lL|w3 zpk>cp2Cp^@f~XUW{BieOk~(74;{>quaDKE42-lnsa+isPKr2U$vljCWC~mPm+R^d* zGHC&NKMPshmfkHGzgH4+gx)8%Gk#kfQi2-i9e6hTcQrAc!{B z_MgEGAgir|apve>;LhyM*pNFNp?8SavgAoj{9Umf29hxDx*SW_skcl~A$1KgA$17B zP%+n~Z-5%bUsNoy;X|`x@Lzd9SkExw80BgE$U@`9<#B*Gxm$&1m0*vE|31-rp3T+) zIsLRk3l~PaM8!j5`7+^oh}%S%$a#n*;AHIRM+hK1uhIBFu;lN>|7F_of1zgq&hq0~ zi}q^#iT@J4$L00zjQB-BoxPr~&O?OXxy^ZqxS9vuhV>P$J4gC0)JLjtVUocjH-g)j zgg=t`Bep(7#Jtl3u~%H({EZtn#us7G(-KvIIciBekTn+69BB;9uJ3;gM&S571{7d{ z2+)_J(j)ZXplsd1bvKBR3nGFByF{ya49LA@&-j(Pujd6eUb5Sd!0Wysy0{KmLjU*ZDD`u@ITy+LmNly4jSv-pcYMImWg%OHFsha!)^mQq5*Bd9~y~5-#t>8EjcIzumasE%R&FR@SCR_DY@pS z5H@m865@0bRRPv=EK2ng5z7!O9#fc3!XfZD$`7$`XYg(7HO85-yL~}7_SEi98-IcO zm)aDqdODEtP$4RZ?9k@v=`{n3P=eJ5uH1Nx+6%Dluv6>E3k+YERsskOL_Vs7zl3Du zwlPq$glF*i4&IHM-wxaD3l4O7{a^3)<*#-pZ};Z!z>yNWS*dp4!T6X@g)5EK{yKOG zGtVtGG7C$J>+aYV+KLcWfJCK$h}g|eds*vVsr6%&+1-MO86Iq`2j86y?9E3-{Umkk8^1kP@8VnXD3jem32#mVAX{mFqrQ)gu7!5U?Jbo-y+E z#>DZ>qkvT;zWEwF@UnEoH-D?*n@?^V-&}qd1o5|%lpua4Mi4*4`K}RN7Jfw07gHnT z8jpJR`d38d+D=h;CnK!60#VKCsAv2(qZNp0ZYg)!GEE}x8(?Btat$t3jD&Xfxg7sL z%IiK+iXA9^-32rv@$2W}!HQo`EV>VuCLTC+JHu{f=sWlyXwQfojiM8?zAxb#5O~=0 z6*!wawJ_STxT+U#(W)LsysjRop27YLyi|i9uHENwr+*bM6la_{3nKyXD1`vWj@%ji!9JGq93@SjGpuYuQL+WcJ?H@f z5hNvBu>4lCakn4QJQiq*=7IeXHl9mqh!u~(S%lSR15b;~DXP$i5`+i&>&xF{K8Y6* zSzz~}B5#$-wEIwz_coPj_n{*1)hg5OLq%SX%2ec?!ychJ86|HImKS5)7re&<2rywl zL&<}H(5jx5*O>vi6&T0B#iDC)7qGQs!+m{dGo2q6MHD3}03>ufSjA!?VVz25){;i5 zSFGMRk=a}Eu8co59;|UNmPI@8pN*JbBZm=UdH|M*=P;}YIJAe5UcPv(P$Uu7B~xCR^eAxVYag{&nm35 z3X`0L=~m&3EDYjS)f5Pymm!;pfC~>1?8^86?C!F_l%?E z3v(;+>(~;t@HK@4v%SGba_90FTcUW3CjXdbEt0mt=(t$-P@Ju`f|=%BsD-TrYDv+@2?flMhb;51=h)t-a+@jo(7S2j0^)5r&#CVQS(zj4$Cq*rK9Dra@W3e^ z`;KvZridgJUFM+28Lz6|WY8Juf!#Dh14c{nkMv;8lD5Fa(qqd!g&(8Deiy$*csYXK zTs%bZn?(dbRtfZro~Az?x|p3!{2KWhaGGo5gfwfm@gta6{4TQa8^@C0>%Zfj_@z7X z8->q_$T0jm`tOH-Dg2mC{ATbMI8DN@;Dj`5mNfd0U}Ew6mpG)K$}M8a@8LHYFGu=s z99{zcd>sq**in$i@T{i{H(nr#>Z{Dt{NhzE1oK zocPsB1q)>lrUSoj7Jli(posik{GP_kk^Y;3 zhe-cXD`o#x;@5%SEwfesF`M|!6^FIzNf752g6Kn0=VtSDHBY>U*Pzag<6Nad z)2n0=W`j3XKDr&o1k|xn%zRp9y6ns{X4a@oXk+TlB4&lP@!B3X`i@8hYtYyp}5Y4Ac zA%Vm1i>tFI*rR;Ld;VXCPbl^UQ|pbxlEPi6S0dzpbS)$Gjnxvp zUuX6hvwK8-t6O{fym2FqbBxtS-PBfz$o~k(-b_5oUk7Xdg8elYVfEy_=>1=abG#iu zQPirv-RO59)j8vEE-^&Hf=W=ft#2D z7pD70Z|Xq)w-btia9%^98Ci&lN`!3VfD zug91bBT9_#vC#`JyNw@8wK+fV8$dky01zFZ<`a@no73#A`{869RsCXet%4@59Mle+ za1V<0g$tF7;S+H-R$Lu5EUf)u>U^7M1HyH-y!<{w#uoDvN)A*7Ck5PK^}2sW)+Bg? zGhsq)H1EWe5`N6Q5j@|fI_{GwJUvQ^XRASqEuebTzajKc@lwy-AGh8=Dkj!u2x7U9 z6S;Wk;1Sr=Y6rRTuq70o>Et|YJD~6k7td(S0TY+$!lBMF_w5k_C zY*{>BOV-6E)B@qU5*4=iG5Jh&fNphwR;ou^jUj;N5wz1goiyWkVtzk8|7k zu7CL`TPoQ54ic|F&wG?or%g~>_!a2Mk@c$0SXbJQDJiAuyu1r`F$s;QdMHWHsu^U_;1RZG?z! z3z6Ucq401Bky9-pLOBUIyS|Euqr(6xB0c7qb08HGu6fo>~bSJaw!6ADi+-PqXm}fI1*Ixq_nW|T`nuZwOqzvsd$LgD% z6tFr+rdGqF3D7@hkuf)50s~`e2G46(%z1h&-L&dVzTcKPtMEQ`EO235(B+XcBmC)z zkC+|hPZh3yJ?aMb5f-(YVHA_sIK(2PX)(uxb!^he0ZG<;ZLiO6HZuS%vATet!OxC~ecHg0|Pl2-s|X`?%tT7=C^bvWgUs@bf;nQsVhp zCd0r4S6gPT{-vUO8~z#|;Z4=Qh{&FFu9MlvkSE(P`?)r=ABN_IUyJAKUiirFyzp}K zQ;ty(&M_t^ivQ6g+V;#!wEcRF9cODw)P6=c2Iy|Nq;eION;pN1QjLo)77i&~%liMgNuJ=s*8==z>-+r7U(`lqUZ`bOr$(X(e34AzV0XueagFU}hh_QHVF_H?{)> zcq%+@QP>|E#^HjNxKK^(&@Jy}hB@)X$YIfd7MvWVb>0-vdOTRiX5}}D^f{PGt^JCZ z%SuMv##6Pg_4rs$(yF<86P;HeOC!F($Rh5THFi?iJcthACTn9O8kJ&R4_8k_GfJ#4 zS-MJnN~b@=6$L`~!r_UQylyeClgS3^qewTXkI*}MQL?cC$$%cZ9(|+6!}k&DwV0>i zy9o8_%m$9}`0?=ANzpz^nT$TVL6Y!6V7>n5i=M8TO-kI7XX-yfUA(;Rd?v;7V`{pbM&kN zbMLeNO&9ZqICQdBL-%1+$syn!FAqD-3(+?5nY^YAnSrVOuHlbv~mGYHyA=Sdx_-S}(SoB@f$73)ccIo01l>D}g)0 z1;10{kZgDABV@bHW_O?_qa`|CF$8%&!bWr5GeFxOS|NxJWe@m_t!_CWVI#C6IZVNu zyw&^%UKWCc{G3Jrdih`5wi;vaHqNavT_I!d{G2FXy^6D<&0VwFjJ-Tc=+0kGn6PbNn{53b zOd4IA!+XU~4wk%@l#Byz1)N*rZY-k)i#G^6F~+Bt)a14`Y6hz*mDcvM8FBVZz3OKU znW$XpLZz`id*+`{QJR|%Ll`6w8aJE}CGLllK-^<6E~5OV^h4~wT6ZV3Lu^}YrL}2O zcTya6M`0@|L_>D_B<6N3#37XA7P!FodMv?%+=W^K2NU)=D(d@!!}gH_IM=|3;$Qo>9Zm&*Z9z>*F8n-}eVb5zm1K4Q{ZlDyAOKyF z32-QxP%-KdN@q@hw?iW5QKTgS3Y%8Lb10(~nC6oZgV{1M+WLs98Y&51I~y8_xg75Z zi-cOSfXO}V>1OkE#qrUufs6}4cE$FW$hfPIjShoG9Q|w_fl*`Y7juc-T39AZztC~o z4UVS{^qg}!kD|gEaE%BaDe9IFQ9Vjy}Pv{N()!xOn(Z!0(>s{6m$tJmS^ zisU^w)A?b(QrFx`&tD4XSjwd%jV?Se0|yxN75CU89t&;x$1X<gX2ir*7HtI#8Q0 zMXfq+g3{j3ylA9x1^i=c#Xq*-7<7SkT*T0FbV2&xRTtR%ztAl)_Mte<{s;RIHV!Nr zdMj-E@Dp^8=muw!bEC6CKpkDc^FVfUUN}Za@8#FyR*2+YH!atu^Sjt-fA2Jqx9zmQ zS6);0$UoA1_h~|G zXO7$dg+NYo`}d|!I4MLi%=KQJ{_XZJhoLk+y*?!aR}k&(qE+#BE(mU1(>Df(4&H&w zD|U|mm{YnOp<6I0BdKDF&oFt5tG>p>Jy?42b{qi%@v>8=T04P^h?C;}@dSx72vK}> zxMMb1d$0lp*axcfaJbA|^Aj-$u&0Daq%-ge_j=++T}bZw^3!B@!7lR~8wM~XE}>HL zA0!(Nz+)D{GrJdgD-xi=(N)Gc!U9z$LO){au;#be zdMd`7gD@EaFRdCvaX(J+?^2T-nt`PCz7Ji*dR`r;Fy>J}J4FT0%rj3#b-3-o-;5(I z(M0wPc{3yzTVkrpF?-(MwrQBEnmHt6+ACAloXqIZJ^nTf-BB=0Vy3E7WBq$@f57q4 zt}gC8BEKC;dynpP={#{C@S=>}5nTlFg7~rs(%Ukp9KM=7rO?WGRP;AQq}oQa6rgOW z7Jl8_COjJF=vj0`w8f{7MT;kZ!=m=aV2d^FMo!3yGdNHym~A7O4TmWS1-NvB;{|ak zTqelTV%}$2L=MDp;IXXUkO+=!o*#Oe1EnW!1xnw7#^zbTKgxTw<4Kpn3xv%qBE;f` z)fm(c?CSN?al)K20RJ}Xn*Nit$vpEw7&n3c+Msp-j3*r)?Zi#D0OLYpd=Dm_D8@>^ zLGUjmkm}6@*q%Nhd(t?4L4<7}b9QZ!GrM*>=4dZZ_K!HdrCH|nm5%;Li%EjB?f&l+ z-FOwoQ9vPEFjNB~uR2o*N(h-S(WF zxIL{}v^}@njP|?@QajpX>6f>osR{H;Juo2$({q1s1`bPd9E}4f6_5R((w_#6Ja);< zsgifYES@#p$JxD6?|t5T^s_)MZ@Y44>!QzNu!?f<84|I|<+GF7KeB8Hfhg9CRzn4V zGanr`=LhiumCI^mD&_JNj!>tsHq7@Uz9qSX@Jzm2Z1na|;^&{!#O!E90I>9pBrIhl||I}cRkgjy5pj%OVfrRP(l zK+nx&4K)8Yj)$1$LU%j{V#c1GM0Ygc7mnB?EOB3{8$YQ{2aYX#qhhHof)b)ftGQH^ zBHV$~0PXCI0idgYCGD@3`tX&wI}Do4q0d}IYH#=T?(-ul9k>i9gu!2F@8UaX^kLAR zFkyQoz8%NIa*v-d1ayHM7b#?$DAE0V&mmhFqnYK@&qYRyDcWNC??&6(=ZzNgqyS#P zit1$RjHMp2J*8E1@u3Z4@cj1pErFvZkt<@i1iopFrwF~dPjAixs1hwwJmICj7cDpc ziqa569XU_UN2l_d z^Mkfx1>-yc|Kv@G=byQW_~$lO9N`~EB02fzQj~@&+VaoJ1M<)Dged&8Gco_H?Hc7D z*9h=WKsau*c?8E-TmD%L!4tzjXTs6_2k=k3x`5)Jw=Zaye{wH8ApZo>q(7Q}x=uvT z9Eg8r)42Ep`NtgJLH;?L6}QVj87Td4`RB`OKs*rtJbX};f0Awl{|pq4+ib3b(2V1s zDG*LE{IeC--5GXAZXaD@KgQb@Ke=*T`Q*G20S0Guko%i zOR-_Lc)J&VDjaemeyY{{9)7A;4o^CIU~~BQ!A~V2WyTiKks3^~4^R}~$-e`kj?qKa zP>ut3p@!}^UF>RpEgq_hWH}JhnwMY|+kPs%02Gyhm$9ohM_jqP4>h5hW(^8tFk^StIpgjZ_@tYrr2T^dWz6 zjf@UZZ~iJe7bSY7EvMYmPdLTb8^@kUyqdx(sS|pH=vP<%l?40(zvhAYWeB*mWBjt3 z!?AsS*-u|m`}~qlx%7YMmzB2xjFNxx{BnzB(l~gbWBhV5q-sKbIas(nhP%iwpCv{4 zWxzGymxtl{vH9h{^{+?fA56Yc|9T>s0$~zVYpyx)UT#Ch^p0WGo|!&4#{Fhjz?PPyZCQ zKq7zo1Z(Lx$NYY*>au9l;7^}Hzcu-QZRIr)Col^A*1aD&;i`dm&LpT_#% z+*kU7_of>^(kfN6`fu>AXY>3MU*J?<@Ydwg;?39}Bh8qYj_nzDfPOnGVb zCD`nRIVan>U}3M%B4SFbS%WW2lYc2K-l^U97SeD}mtwgD7f@+6bMcHjzRj8R)m3i| zbj$S`%PVjYPUligrALDH>9|J#Z!m7f+={pGiqAONhlQyS_pPgO=JoHxK6aiSzN9-L zo|o%hd;$_?Z}kO$0wgE#a(rE{a}M7OfzZuo-~f=v;Fk*U0W*1c8vO^D5tH0CDY;Sw z=;{qlNyg?D&EUC2=8+V!!M?ZbJrwsN-{Dk|*w5-b?A7r7VWS9UHT0>tpN-$JAy{_m zB-ooFDv}9-jpZ(L-XU1z#NAK%!3#IKji38mrA=e}JH%>Q&0)A4u2vtOavv_aIX`mG ztZbCV(hI281y`7=;e|8sAqCX|1;(f}V^lgWKp&UMI>fgot3>8!tPG2WIo#S~pYwrd z*_;%4cCHxU$n$Q%#-Hf?Y~o-(HW~~~5T2@EwCY`l&~JBJ_TnCF0~`Q<8iSh$w8cL& zeLB)StUrnFX9>aif-lS< zPn;@(B5VFR*y1w^+81gEH~7#+JYK}=BPf07CiC5cmH((s2l4!y(5C44j)C7Gwtd#@ z!VbW{2JpkrMf`^`aPC!b^qw7na|Gaot|0$ATiRDasP70SYp}&2#6|oV2)|)yKok4u z+z#OI5FxBZrw9aW{gU2(M?rYNfdhn4;@&PLg!Hx$CMpP%95}QK;SfSt4Z#_MLr(?a znT|kMnFa{c+d|kuuT~&y;d#-1XcvcRgm6(?2yZ9|e?Ged5IlsC))vBT3WDk2+jep2 zObGQj%3w*JgY(Z+5XL(CAra>{xMcJ-xN`6;cYRxC?Q5Z za9;$YT{kAgs0q>Bp_w@AAqJy8bVmiUPIr*4U5p+igf%tRBD=Eo&=@*hrXURL2%R?JQu|Q8je|Wcq$>#d z9f9y7A#ApBuv@XZLU`p_N58h)iW>=`2O)58yp6+j1z{gLQY54`H}T-Jsc#)7)0K0I z3S^BT6IkQbIvlGY_JA`E-kqIMS&@ydU0HWk*$fA|?Xvb;gzyVC<;KX>FX?LwWZm!R zvUVGMJ0YBBL$Go9yMpk=X&qq2vkBpjwh*pT5Eh)-0SH?=0YZTd!6w^L3PL41-PQ-% zZN)2uFm_j)e)t$JWc0%}M^Cm3VKgC}VMDO{VWxtR>44BKElwqbn+d@=BrgSo!nO6T z>>f&=GB#QV?YMh zGe)Q6cce*|6T;(dAxu#a`Z;iDw^I%$guylho3wotguxvlZ4++%4b9xyrXTju{f6~= z2M+C$_CZ3p)P`X9!+ZtdDhCejw!%jU57`jxR!mS3x}V+wS{zIWtA1|Nit`kN6{mCn zLgRioq60PryA?l;Q~i(^h0ty*?k9wmHUzsBa}|WE&41Qh8+j6Y;YeuhEc2~QGSux z8*FbI%ZD=&-YNgL$p4`TCiUt-#PDLtUnBp&FaNKQ|CgX?=2%$he8T?3(0FLpQu31g z|E&D~r2Icq{txnh?quvDkMBpSir8SvCab6pU1-4)g`aOr@S`LcDItm8c7hkyN>09= z$gvYg*@?sK1g2K?@?I$6^3@JIvBge&Z70^-2`;kB%k_2w`-)Z0zwHDz?5UjR?ZlII z0v;+=gqUEJfYGiJn4whS7CQlLQsp2XjpPru z$Gxnqjk(F^|ARf=<>~|4<1b$mwa5RC^a1SgSAV0M%LQv&ISl>~d;D<_7b3RNA)MM3 zEvE|tk@{_i#R2W{KPmXTb2}iq-rs}WMeW$*E%a3cvgURKPe0(q+vBe(2p9I~048oi zh_lDXCM;y;8CXOC}$n+yCfyL$&(F`f|O z?D3}+gvT5>B;x!;_V`Hz7-x_B05IMzTMW*RSc<<6vPXD~J-&7q;KkYFdq+tVzyBQs zg;{10LYzIm01)CanhwfGF#1bkj9i2lXOG{kFdF0_e4;KBj9PyIggARVPeE9DatFw^ zkPzbR@lAh8)TSI~n`T~?u$ONkyf}OOF~9>OZ9YDVQM+wAjS%AO@yiop^b5!q>E-0a z7=6AI@Z#+86ot`CCqyx7S4ccT2yyoK(vi}p4IOFI6@(CHk5?)Pmv)5GnS>B$kDsp~ zXdM}#YkvlWID35WP11^6(TcYA_>V6nvd1@|uHU!EZ(?O}_V`1pvb2sg_+&zev&Tyn zge#8g0NK8VW*2XdAEF>EKPC#HT~>US5aR6dl_R9fj&XE)yAXyFLYzH5O+gsufY2`U z9ZLvt_P9qu=;dfdyAVG62@vA!@y-gu7ad{W#|a_M9$8S^+0!K$7v`dR$S^y!=9?ww_@9-j-YjkCvJ0n^g7q+$Gjw#UD^BLeLIx5sTW`FT6>q@9>yC#KnnKinQy zCuIMOkTKcEcY-f41pzwuU{6C}4p$BJz?>)W<4xX(NP(E06F7v-Ta3e8?!e(0+)tp+ zxBrOIFoA=-{`xdrQ{gM#S@Att2}edAhxPv10;_nVR`m(qE8H3$YR4zY$)DUm>kHhJ zBlph+OR)&wEw>adDID0>s8#(_;(-R|`EYN*eckZjO1-_Zn+5*eUA1Z3nX4^ci~VQGIBc>2cvPGi z`T>ZHoPjvOhf!85Wx>nKngq!vlmSO<;oMf>Z|yqaGs)$)zRKPwYE`GAzWFXZ>BUR2 zi?zxBb!S~$5X#dQpUaV-W^RH(UAUDn`C)Z8IE~oSd!*FS(y0y7(urY5ORtO_;#xJ& z%x-7#9`pr4K~1gt2(V&^t{p3`%D=4BJNQsKy?QJ1+k*X-y%G})z;kcZy&|Vvi4L?xpoE{a!x;jn%_-0+o%=}NsrJrv=1w@3J-~Ixtdi4 zQ?RoRdsDo{E42H1AP3S|g}59q4+!ZrUx#zW$DJ-l9S(-5nBXf;$t_2)h6np1u=Cjp za!CVrI-*?IBGg%$?M=ohT%Nqp{ixQ8C$dRVxVCVmc@&iO!mS|?WxtApxtc4-jDs=z z(4E7O^%L-9RqgffO)j4xQ7|9+jBk9vI@_FiB~e2PxP?Z5ppJfK&xB^O?`Qamf5V*& zSaS_cmuJN$WV|S=%*X3V$?TJ^b;2LZfldgG!uO1;L8K`ba?ld&=i-*?tXR@jTwu-{ z2&{vXl0)y|qc)`o1nRqEJpylTkh!MCyi>-JGav*v&Xf<0Nc!;S_WS_}v(fw<-4vO> zu;q%^+Ju+zmGB1p#kpv_Iv;^K^dBmD#ar!hO2pJ37{%j|O6vS$Jut12ttKh4?tKF^ zY25Nt{d`JN(voI;V9vP;RU6CZAB+cKKZd!mbA5=Karq!|hG`jS$Vj6qw-VXByu}y% zx0SvX0mj_gkB@Rtn1tT~4A_2*pC8BENdgKYri_f3Mo>kFc+#|KaxMS^n5)mgm>~&p zIx>O_DUXKm)+mZEF#BPd&`g74&`&rdMi?Gj`*Cctuh`V8rgEGb{jnbnA0r__MnjN5 zfO82j2oAypfU>*Zmph603?Y{FJck+ZAU?NiRr{oW`se95TDuaZ__~PqPBH8`Te<{c zSOPCcH4EF_^RW2o%PoM14_Y%?iO-Vi)#phK{dGR#_NW^E;t$DLk|6K^>7*NP&6OXy zj7m3V*7C`D-;~^LrDX&fQQ#~7Rjc}nXyUf*EQn55TH#uK7fy(`K2KQ#Azh}V2e+nP)A(k-$dx*`jDy1*+|pf{$JC^ z-}p-%An**%>XlFk6oiT-fXM!(4lsrh#!A9ClrRo%4PA^JD<1yxT$dgUtOptqKAFj< zP-hA%d;H@*1)R}?figbZSdHVwd+vsoa?Wntd6lF4H}BT-_av|J=3|E34TQA&wm~u? zUAWfx#J?0*ZFR$5fNp;(e(#Q!&^i=RU+IO72LM-OU<>v=y&~XTHn=8&Yu+tacYRH8 zxVfthxTOF`S0d)K1f*SpMwsOn!le(~jg`P0$I2bL7wz90x)@)%1HFt|Ab{L1$nCT@ zbQf~qJ9tDLBUy2m(O}+MNnBklOW4^Ubf69IFLX#2LDXVmOzLn33}#37%OsCRSRYb>~w_q=r7WtB#>8PjL9j% zc-rtikz8BeYYEsM!n!n#f=btougqF@w%?NnB@lQRU+RXb#{H?fcXAB>v zBL?|6Ty`=EYuJ@&fqBbifQu_yK4s4?!}}_qS<5BM($CNvgb}mfcc)ag4`MT$^wxpG zP@td(uEVwjYL`4OW-=_Gk(hjc!?fKGngddpwo{RUbWF*uq4GFXu5YYQ;WqoB1>Vz# z;`}*}%r{zwCr_)|#d8JcZ-A3@F) zcmsp;^x{vns?A;Sa{ecJa(y`4YKPyQ2DSo{SR%rqKILca&~7_e4_pK-1C&@KcB8KRx*LeEihQm2P;y0cDL+A}~h* z?j(MuWmG?bZ2ZhtKm3YQSAjVfx-u2EZfHI_TOd`{YLC|5FG*Ja8oy=YKm6JotmfBR zhGc6QlBpLj)2ey{>C(V|YWY$?5X1djQd2;%^5ML-{Lg&(&D@lNix3*M``#qc0@eJ4 z=wwUbQWp7X|DjK`2W2-y-ENq<%ZGUp#XkR)f2ltl?6}<;f43b0!^5p*T%J1%G`c1o z$!l}xA~`$<$q~7=NRBB$@|N5tB*(juEYEF5^6oO;nvo6!(EN;ha<_x=N8uc$aX7Kp zJQpfC4|PbhI39OuaX@&Xs^(zA^meYw&Eqeg$MM&{4Q$KP8LT#0?T_sgXG4?M`HFXF zRpZI?fz(IRc;(}5S<|OugJ@s`%@WaOIZU83Y5AGCk@ix($SVyl%&i3GwA+X2fpgKG zYp`T{*xwW<{~xTh5yi2z!`=raMml7%(PPI)}zpDoCSdY5v7VoBY{&9@IOvv z#s8Sv@c-qx4steXmte;iMm5CTMLOs{R@{@?m>Jgj#S1}VSb_Jq_of`I#zT8 z_6FEygI03^Sqp+u^tJAIFne%bH-@5D2}L(B-(j|Y$OiT#fLZn*G^+>yML-c=!{p_y z+jkIH&g6cs+m7&J(jSJNk>0f!E*%9H!$o=@eJS0qI#dw>3^$H=s_u0%+)`aJTt~ap zzZDF}8;E($Teep968ad7G_VUznjz_y9ODf!qr5?7KJeOj5%DLIn3F7)HfwyCh6$u% zP3U?+;XH1Ysq6(I;D&6>cl!KFREa-`Sq$P2ILjFynk#6)l2M_UkkD0|*@c1BMX8Fd z|HC^yoE)94I64WvaxA!4xY%ZCcBR-vIEI`2Jcd0wo_u*6`T1`0^EHZ}g_Th-A{SG{ zZMnHNSJUkz{9G>l3~LiFT`T-N0{nahcq@*d-IDpg@blBPXstEieZ}9FUx=13OQCCJ zR6;tGip7Ab_No{$(TnOfF?HTMoy4qilW(t zjscE&^N0R)!@TC`z|!LH%g;v#-q#sh4rAe4Y)mD^s%I5Ou+`LXy^R~bUZm!p|FG+L z+8}oNq?)s2xMS+YP9u0#Cg+(C620K$G_&Gdh3{*a63tOCAwxsK<0#S>Kzx98TlY7G zKVSu5@MteAgXT*Cgq1YIr?7cF^pNrEBJHZ&B0D@bq%>(3()}W$ac~k zjPI~55*j!<{ZWilUvNAo9r`^|>pRgIxXW^lnB9R26h>?@=l$9q7>eg%_Zklp58y=c z;t$JliX5)Jgt|0}I@eNcKF*`#L_5+0_hSDXl3@x|KJ;fP{5qaAV&OBI>ko<;IHOqyqUr3SEr861?ideKEvVafq9}Y-VjRpZXIeZ3+w*PoBB4%r01F zcBV-TF7A!N76q^P75+!B@r$)NbLtPgt4h#>=IC}}h@BWF2?Gf80DYc|VCe<8XA)-|sNIG>ZShUu z`FnDU3UMBAbE(m+@7l$oUEm93HhGOTp!3HBR9d}Ot2z-Ho;T157oVrOiyF&u9}@Oq zYPqhZM$m!d8f@q+( zZgg(rHp|1aR&_3*D`&4BxD{&AR;{`Sv|7@P@601UdXb`ZE`zGL zPZJN3?nIsJF8-m;X8!&$p5~d21VvACfT)8(e$UekFE7^B#n%i)zQI*MWFpH{K=cV_ z;E&ufNeyfV3*&`Kmg0{+$tLs997-`BSZL9xMR}2HQ6jso?{%xvCS>@EH>=WSyYvQ@ zLiCI?r$IY{!F-{Qj|DaTedKA(G}-2@)SJ-PyYZ33`}~*;M!qw3Ii*?D%(3S?*=1x- zf%w!L@GTHBmTB`mY450}^-q^PHDqOY_Q|bLOA|vlNXF?wjufQQOs{AWpH$UWTqMKW zo4iVVYv}dSGI4a4M*~ZIkbv-VEK3i)B-T_3sj@m^6AII#0Ebw@D<~hP4+fjMklCRjS$aw=bgo48Nl*4oRQaA6|p$91<+=2ZAlH!(5HAN?Kx~MkGbzbUF3|QXWW2!j*wRsN=s}5XeQH?JNj%MUfXB$?4Kw4>)hPy}Xcc zJ>XPAOS~S?4Mi}DLcd~#17>0fdRd~8cO1IQyz;DsqmuXDn!Qox23GbGL5f-;cnzJC zU_HSjeHJ&q2R+j%trEVmaIpSfhv+4;IM-}YQ zpRF`kG)&MiI&>|67wngW`t^H)MO440z6~K1(XY?JSas^x&le=tudh0wehvM~(ys&V zqFD7BYW4xuYn+wdR=qxf@*`fohCR|&uf8Hyude6`y?Vy!cCR*=C1*JF>S-|At?o8o zp^*y`d<&-z;4<5N<${AoYYj1GARY41A0|K-n(SQJ#~g)QEq?)Pl|l{VQn0bY%hli% zQD~_tQJwb%`ZSeN&76*2_XfJtq6iEu3U`MuhepdJ9FYd)7^l?YoDY2OEpDn9LG!41 zRmB(ZyQk^B2c=g)dB#LS%MItAj2BeQFdE6Yj5HYOZ+Zg<`GVuXU$x~}MgeY)IrTS; zUYIDbk+(ah(Xy)1g@5n9#v#Udtp^ z?sjbWfhnBlu7@o~uZA@j8-vp6b;8-R9%Mrshmry-7fP-9A*XMHGcPyMKo2k|HChUuB;he7kF>2 z`4t!4xY*WtmK{58SM!@T*8DDv+~yJIDO3s)Me{dMTc zJ_TN*&pE|w?q~_W5lH8Uf%0_7(~P|W{AmC;e!>Km&Iu}`RWfU&#=Bt>(M1!aA0~Kr zn)%&{SUx2!$;+EzM8=XI=Mvus_lG4=!i#B|{|L^v>_-wX8pFZ>7HWVFlMy;&A(lo4 zU}~H;8%0{iL3o0bVgSfF04qcT%64e!sbg`W5|*hZ;jL!81;aN7Km66L-*NnH7%&XX zi0o;V__30<&WYR^$mJiBvm_x&*2_QLm`34_LTV1y*R@FU54nvhg`u1=?Fpp$%LxEQ z>#ZUro2}#$Cd{5N!L_%~Ts-kGF6vTaTgGskG9RMyhKbR|dLSMdby7Bx{z$VBea}b? zQ%YLQ8*(@j`#t~|G9aKwQ+MT`8|Hxv>EtC%P@zfyvhisIb!pE#NWv(z_prFf>$GMF`6ye5N|JZ1r>0OO1EK@^%hODf6L0?dCOh-39C_;bqdWx))SDrBnn`xRn_sIp zsimTiK2vWFQ*W-3Cw~*40;%VO*s(LmsqfxZ-&Lyb-d5kuP~W}9rv^Xy(rU}@Xp$^x z<&u-EBzeh7k_)XQnb1lOi6%!ylar#!nrQL~J88_Eg(Og!ji0XUHiTNKocWQQK&{GY zjO6&&BWXT=PE;R}0mr!%v#X52$dEK&Ih(JwnBN{pN$B5BV8$yZe**6|$rC;c`jf^r>r*W!mmU^0@o@)8i;NOi}_*XBLFee)YDkq02 z#3trv+ZgmJSgmqPC)|_ExdH6~kL)EJ>UO0i^>NYDBaJvcxL`)70 zNcx4$%NDDSzxh~BHvS|>Eoo81dN(O?Z*2 zrn9Q17Ok}#!@(*{5vk@goFt~&k`k$Ai?k(CH3g1ps;p|BI!0PUzO}0%^Tt;5V5FL@ z1TKM->)NfR%u&tpRy93UH5?3fH5?JK)eMMK^GT$dh3!@|&QZ<0g{sq5A1$rn2(zo< zFpI6G2_sW=+LA~$FST3E3`aGWSk?SRs_CC&)iDO@os;;1NCmG)DtM&b3g$X0*!He! zM;ECewIAk|CC#L|%tQUt&B?S>5u_dLFCi~W(uF0+-+|O$aaT~i2XU)hy$+y<@G>KVw)WccJgqX-PYSIy9%1JjLWDbTX15b;$fVmfQ$qs^iVSm??>Vx0cjG(u3`mr zhBRM-e9dvRG8njK0fBWbKyb=3mGa_!<)=a-m1m+mKK?#ENxGsNrfa_kT_Ni3GkJtC z2Fooi=1)fwHz=kK8>f=8EbewJS#N>=s;Z~>Kz4<1jvCF|+0QC=-SWewzVS^uL!c4a zQ*}OgQ4gH?spP=(HXH5?JMIDgu&XI#Y`@#Xc-PztYmA&zCOV`u&UFw`2fAgUHx-a7 zQc2wJRmm1!cKqx&92_>>L4^BgJY3~r+k2`FmYaqd|ABU9w}JNn0+u51jw3uzd+=V3 z!22W$@9Z}4?sMYzJ@~-fd0Je%6@J%7;BAe(uDS&ogu8`}n+gkIV7a1mZ=d+=_Fz&k_13-rCAIX%g&>MJvI z)$4G-!L4=7KjGHOf$D;L-zfOO2Uz)PWg>9qD13l$xqST8c#_N~VcLZz<2&;4b{Py9 zF`+GRHpcNk2@~vlWikRI*PbNtKy60Ib$G*^D6>!O(DAU~x&#Ghu)vd`;0P9+k)U7? z$Y~ytpx|p3>=9WWTX`c3zGgwNZ^~?RO{yi=>A8Ix{R7?j$Cs&7H<%Z3+*8TvO0Eg^ z{7Uj$%yaDgZ#Za!JwLGWkFoRLRrw38{7!a$iGu%%mA@s+f`7Mq|4A!fDu1Gt|Gb^wMdjaQ7^DfAu&$ zfI3#i4gQJ`QP!VjZ^W0qg|Y{Dh;nK?-jAbfEXzX2$01TZkzEq(dojybCMdsBm7m4( zf1;d@F$BzpueLm7p*O(hc6u{9RHc`Nc35e=9GZ^STKVBK?3epSGFODJVkY0b4VmoP z^ABSe@37S=rPQqKPS^CS;?JS}GfekSPJ@H{)*`L?8KA)r2h*d+?DC#w@!^V2KOV|< z_sLZOH#<(o6R6fiX#=W#i|6oTROh<(f@_e9BS-rO$Y%99z(`epkyNjIRdgI5PFnBA z>(NLqeqa&+J=nZ7RIOcvxCaM#GK|)o35jhq;QOQ7FhzA3ZxMA8R9aCKi5ZTSpXt}MRh}=B@x58v}F=(Bv+AcxbtL3BjR31 z8dwwxPF+v9#?;yT3A)R)jHxq_Bp|)PO_LzW7_Ha4xu0)p4W9Uin+5IewDM;0mqc(eVO}Ph-I+5#qjlgB z^WYwiHO!C5A{Al9G?)Qs*3?cKrOU(;B^3hmO+qtj<1zMXq2-`!n?Ty&G zft?4ZquUUbg(yWF1MlnI!c)>a?MQH=65Glifq6vvqd zcV%j!Fub`hO=TCD=fc~r!-6FF9TuRE7*Ac^h+M}iSJd8%pt1quIW!LSDSJ*X#AtEv z|0vX(d6D~|(L;3~k-VS~c_9aYlPd1i15YbQ%0}~VuzuNBvgxs7eMMPwayId|`-)SH z>Z?fiRDX>;yJNVaJoF7;BC9}<1JiIV1^Ve&8?UYf7ryxk3E2YlY+elACZZbFwLPYd zCa>|HFE}9CW7N52o23slC|v7C$VK_VfpoWV_yX{45}rGiA6BBheO&rTk8#}LkP@BT z{;!kE;Sfwo$Gr!Kqr&9%lqnPnmZ(tjq!z1TH)1Gs(y_)FgrqRa(n=6$A=Qz?-Tr38 zWgLx)(QQ?4!A!z=2vxb2C@QJx#J!!*O5WQg$*nkRzXV%5AEYf6iIYJ<naRaV@7NYHVc~j= z<%MYLce~vsUg&micEV5EszKL zd$z-6?y5rg-*!|LKbEStBHJ7&npYcSD@;^+JF2qPpDZgO*J0S1MRLW%A`lwO$V+Au z+GJFTG{wDHNL3_wZ=RV4j3_>G@Ef|w5&_vbKSE9I48ycR9&IOb*hmSahzL?8R-%Fx zbVi4~i|!2V#K^I~l(6^kPU$42I?V@rg!Xc9VO(wi2Sta!wLS`xN=*323%H8Gz;K>S zf@L=b1r-0}J36fSU%_OsU^t4IZ{^YSTcDy3BYE7fwm>@-VAKvxyozPTqfNvP z$OTrO!e2bbKHP((8;G^R3=(z=|G(1@7hN&Lyf~yEy;1Xjf!=-R-p8K6JRRbuv7~G$g%8cR`$@>|3*p^wi5~F27I%>zbfaBEc1L^wCv-c+_dAPQ@%k5v0qCnsA zD8hGrf!th=(Lz1K7q}%itpp*7)4wFB;VXfmFPQc7Pp~2vH*22_0^y)0c>Uo{9>fG|ubO@I6IZ``G`sJ_Mr6U=jX6r0$DRYNKbmF zAJXorn7=EN>RL1Ncja#%z5kM#$0X@b_yWf*t=o^?i|b2`FG`X>%>Pwi2l~_v2xcZ3 zzm`BAHzuzGSB3Pt<{Vv{gE*S+z!(_}t6A=?`ymI_KeALe)_6yM)V(@omHFMUjFDTShmn`rv~P*1R`$&y!C+d9-%_CIC%djU59y*SN3MyKZ+6wc}XX zC)JOmxbT<4S{C9R_fWio-M8F7<|+PKLs%#K@Qh0Lnox<+T$11DN#0r#bfscW9idI* zePr&@jeo=7F&eeESJs*7CCTR0U!O$A!~oQ)2OnZn_V?2s8jD1!HfP-e7ix6-x2NXs z!EBuD)m~VuJ-pOi1nYsq0}>>32?&Pvx!*YquYyS4g|`(v^W2SR_iXmQYp0f=Tap&9 z!<(Ur!g8)8Tup5>h0>9w@CT{8KHoKI0S}uw^9lTi+p1^3m!33rTldz^pm0|HPorDk zxaIr(`tY^BK+2kTI2VG-rN&a9u@qGH)@?aD|5soBTI3*|t*_fsn!MC)tn;qhg6r7k zv!hFlwQm20{h)ah2zqj`+r!B#ONu|!?)wVBKts2GPgm`JH(EA&sYS%bPJM-j$64dZ zSUS3vMWAM#RW>0!da01Hu`j7OF_mpwn!Fl<#Ysp@FJY|eDvS&Er&hHLDeP}|FB}03 zLI`uR$E!Pd(SDNT40ba~atIQTQt!KWK{s3VP7dBjbB(aRE{v_2kJOb^)oIn`0QZhd zia@JXntvNILf0`DvI+A+tqcZ#ZSoq^SnBrw`epf{CB^IgYr&tg<)pCom!-*zacum4 zIPLP6BA2tORU3NJsPi|sdaALl!c!Nz9B?56Ha`p*&>84K2BiJ~8L&NrYDCs?Ch{wl zY}gt`{(6<4;>iD)`L!zlhs}8ZMg?aP^JlC4kC=ah%72OZGgSUU$NNF%Pg40WI^M5f z{xIZI{j`Vuq=e_E3J3jM?eOdsc2TVgOv!!TERmd-2C3)lA8e-NdU_?C@j zCBa#%pxB93@;R7Vme=1og}7-8TF!Hi{(=ob-Pc_Z>(!QBG}EPKLJ^kqIXVxbY*%{aQezGzzDtoEUmIMqba`; zb{D$Q6YO@LFPPg;L|>_~4pUM|{z~2dUb1&xxWvGW{fWMgGoN?YH#mHWQy{p1SF=7p za${!ld%E$N?q7rLy^vRIV!HOoGJV(AZeuk+uiJLe=z0?kbLZE4u-(*Ojiz}J)K>ii z5>?nT{2hM%o58so*l29db}yFq*8qdyUOjaWWsNqiJO1}@Yw*2z3;YO1_aX&Gb<2rRs0z~Alivtw^o=+9qf+gK z<=Vq_uA&dMs;kIaz##NFQNg~f(+g`0w_=j#BnMNko24&bBJVBFbIh_hKgHPRe&bb=pn-S(%5eW~Csh7PBQ@t|<9*CO^BZ9<@{YA_5WCV7x<{E zYmYw@0t5}7sG#7BsG}0AHB?kap=Mx$XLO>dsMJ#B8mdsOrH}wxg@l`!``hQtBP43?|Nr;%k<2+~pMCaTd%f4% zYXdTqqsdT0#jnFDSn9F38nonjexV2PSrEcr|9)Ho(eAUYwfSMwF{CiferB-X>_MN7bG7;sf5(NZ{?MH`|TL z6Bg$Kn)sT@tBkl?m0PnfBL~-DB2He@=>c-EIg5c>b30g2kKg*<0FRRd^HO%*^Lo|j zknvq)(Z1|m<-*h(ZCEm!Sf}2hJTn;oq;cP|!QxfH;>KX&>W=9CZ(DPJ-~~7{Nz7F@BYxK3 zhuAn5%8>v6L&U&$j>KY1^*^Mcbk7RkOOE8g!wuL3$%piEuFbSd$sCzkyqRyBO-YFn`#<2DA0E-A9XXi&eOc|+sohIm+dW3R z`StYYiPopp?%^)&tlA$j2ipF%mA1p(`OZ??$=$Ra<+iO+TjfCln`_i|L^o}9s0aOC zr?xk^ZO>HOqq}L_#@f-gIIG|N@6+}}IpsRR$*O(XZF_K2rr$Mc`#f#a>tn2N>i)6Ve!54j`&>q2%XV16_vnt=yi)}g>0Mq8_U9HSE3|2Vj z?LC;%v-E({fv>f_@8X%R+n$4enErV3=eAY67Mjaz?bH_IcYk%Ujo%q;arY~$G*s8| z-go@}m+`(7=VP<^n8y$Q!|^^;%WJkf-h{ds-pzQk>k)c;tcPU)TB@D6 zV!Bz?TV5x3_)ktXW|KV!v{L8Ce8AjQ_q6;ThSTQRcjBg81Ugp||&Kcpv*s`3O zgEIK72gcA7HK{1*ntr`}@&{^4xx_(^kDf3y&nUb7gNdPH%F8m*itXizi9aM?d*K~F zgeU<8)Bft2q-Tzc(``TXVgpETro!OtvrXTJP9O~8EE}^lp%gzn9A<6Ly7bT)BIoXX zH)~SPMGxT+lS>+U0ceBdMJ$q6xybqV&mjEx+m|OQFF-Zf>C8W1FeAAY?rHDP@E=@A@DR*U*zQi<#b^<=e4r2U05vJtd_N~AeUvGN|LBn?2@6YqZ@MwiOp9=SMcS2-l`Q+ z`hzOA;l%J$BG#xc3hhmRHgq7!)<|GM#_$J;42!s-n*)}8prfFXPE zz196qW3FIJ)tJIaeJQb@g5%23hp#WUE^Ca$OAGBDWAdqQ=-VAbpkMIEISew<_n-P> zg+9Sv*vCTnqMI#TyHpe`II8Z5Dojb70H}EV%*U#x1CPOY;d# zO!?@taox&Cy`Mnlq&iU$=z7!7CK+%NK+YdNV_pBG`G*pddor@*f1#0j*S&Oob>_Oa zu7g}J0-QN6B$GpQjk3kH{!N~$>pXLtB=4;=GQi%I1D){7}7@4Vi7e z(QT7J2N#)zE90~cbtpSED#;nB-E)^^?>z~cXC^uJUIWshelUgzM!tttjRpnwS_d4Jp&W%1F4zsiY2RvyppO~0nLxPWbrY(|z>ntyK$%wh`5-W>({su;Wk2tbUYE9q zrJ9k}Nh}r3_^flaaD$zT?n6#rOFyQXhP$N66})FE>IYvo82p^B4aS-HhXs~ic6S88pfZAT9E^=}Rsw7p#h$p3>bToP7;-&P32l_}3ugEW6y+mC{>U*~S4-f~A zlh=(bFDyrL+Ku~*YMQ>wfExGrh&K5`iJ|W9^@?@D#F8gj$Pi@gX9SpZBZ3P_GYEE-Qgq2gT(a)9B0_WD*li}*2dxhO-B(u-)wcA(js zGld`F#Iz1VJMrDdPe=VhyZ(X;pDD~KKefqvX`RN|BM%R@Q&bJR%B9z_@n$QQ2OJ`p z3d73dn~6?E5*Hko&%WCQ(L+aA^F|P*$6a2LH#g$j_3e&U@PU_4C&wZI!aBCn{Y))_ zW}_Wq9n|+<|4)FDr6=~h{C}kY1fwzh`tTXnv4)?#6hMV71m`dO<^{8g%x{* zJI0^H!V>ZD&g|z6W_}p^aqYc$d!y5b zI7Re|yc~de*5sC))xW%?_|5o!T-Fiax|F>bO56l&E~o_>!T5@3LrHlBmdAMi*vspO zHY*Gf*lk7s3Gh)neZe|kkfgKue}o~RALm+gcN+9GF?v!Fqkl6G2%-`TQ^8;+5nata z6r_`2$YX=W4U0Os4)6`o#ky*vR421miBL(07TbzN2po_bxNf&~V+*0?mUv^lsWExH zwQyC<7Dbw^+DB>eCn#XHTTm-eqiFLIZj#z$SQs6ZLM7EX$>H3U+(zA;+z`Lyqw4@h z0AOtXyk`a&$vvQa3U0K!ef7<^)9%8_E!C(yS?$(zZWn#;L^24RZ%u9~MPbTn_lK-@ zjZROxTz=y{N4V?o1fnsk=}%}1zQ)@Zf9Lq;*5bz|&%rr&a*J{{vYL%G&AfT6FTbUb zR%cFbQD`Qs6*;-t^GJC$Zf}{G)d;&flS~Llo7dq*mPG<9qd4B*t!hrDJx9Ags<4}Yn54~E46Y7 zC;1AGGV~~{3r8D$WvY|=0Gz5UzC5{t;dp*HWtXs_*P178Xk!0k7=*1vfD8`L8O}X- z{K4poA>oRRWpx3ZVU_2FE8Yku$_eJ=^}}`452Ro1)*-Ae?ZE5r_?k<7Bx<%)_N*Qj zn7uVvJ=`C#?q9(K4R;GR=lO?NwYo+X&gJr?5>Z6B;@uvi1@MAD1^|JLawBQ7qMqnDbl1eVHM2wzV07oLw|Q_qgYdh9YXv~BoVK8#~*+tCZ)_9%>FwV@{VPf=@} zq$bB#J=|A9&2EJXAJyINKcsIkys^ou^m=Nv8mdtr7%w`ef6@1VWpTT?Jsipu{kgN+ zXzmR*_hMS+oN&di2wFd>V^jk+;v?ew=qe5=!tSe%-r*nXEBCFtB9Yf85`VM&)UAXa zLW$WW<$<@Y=!xKdsP5ar#26pd5F>$>X~kN%z}xqXj1V0yMt5B~?Kpl?lOqyXJ8fvV z7=FGo9B7&*i_I{k;wFzD0Ti*LH#&&C5?2cr$yc;G?|GtOL-6lfkkO+D*J$a1Rk$4Jr5-)9$+r z4G-zCeY=+A(ZW7@Kc`9=Ihqe8ast&AYN!IogKHLk6)&5I^uJ8Zi(}hZBk*_YV2~9-S zW;$M|AbR809-L`lMfDNFaz|KmqxzKya<)S|S7BY@E`l$hboO=m!?D)9-_buYU3@}e z!L*qAY$GZAbM+C*!Jl&h_ZAJI3AwU^p|&8D}AmATp|d^k-B~v$dT{ zD%mSQ`JSa%geG_vU*1Obr~c>vfwuJ*eD-^3shgZUW8`dd4me##gM{4a;P{}a6{su(ZRlJ<8Xd6;UOBVKDSxg!B zBLo-Ef~?qO<4Wq0w-*(uC>UP`FCcbLX25uaWux6gL8LcjNLF4Eif^;E`-q+o;V zSFvgz6QZOYr>Qt3_Om7Xxe)u=!hWX0l(YA4#gy*wpAz3ek7oZCUGmqnL2uZCb^nCX zSN6WkU@v2^aVI@oyb7I0n+WBi|2IzknG0pSUjp=~{K`4aIp>;V(3F+x{1(FX;KllR z2bZ`j4b1xPeo_cyR@$ABJVlZN48gLgXT4P^N0>mexvYglDVp4O^ix{%-S#Etd_uW0 zcg>BPv2iQ*-eXb@adK@t{-&S`T;G2*UE6y%68m`>9%3iXxeR%_Nckqg z_%7lBUlu(mpWNVvfEwj}CvbPP>v<11I%n`&@b-p@ih2pH{3OnFb z{Wci=h*J-qgC!GZQy}l&LyNg!UwMb|zv4CYo1j72kPoC66gn?#qJ#R|0sC@=cS{uB z4KZ+6uMS3+nFufS$roNhp#}=mnfPv%;=5&3qNnVfN@FN+Sw(y|)k^Q#SgmfWD)t7K z6|(E2qJOICG|(-rxqCgRcisur`E%>PJ0KCw3hutfB;+*d%U^}s&J(JXfCA?c+}&f4 zglp$c(o%u@^$AyI(5@sY&v6HU|o)3uu+{cse3AMP_xT6rSAZf8kh<$*#9prn)K zGR!c*_%7ET~|-3>OnWYMz7y^&-13H6TH!e0;FOd4cVunb*Dj8SIltlemeO zd?|eohX~1axT;?eDH5)qkzW==Iqk*WNX70K`isQ_krIv-1z!n*aySP>{T>!LUIVp=*w91JyogBxD4z3ducHsQ)dP!vQ0yrtl$Htjw5ZPt*w+&Fnm!FD{)?^H}PtRMs;DbM5bV0=e-a&w9mlqZIVQfVI2_{%5n z(IdvqPP2Mb^h%;-FsOW%Gk~sG0hqxan8D}N_VknJVLnI`QNSIL;kn>JhiUI{sfeLM++DLQwYKo&@+;3xHkD4 z*-$Zg9-ZNG1w%-_ueL6q7xsJnAm91*+Jlrh+>k`nrl0o@vmZqKV6X`rr1-&EWSs!|2}x65{RMhmWNZb`w6n zp;P!coC+UL;+uqzr|J*k<69S`!^fHE@wUTM*HrYlnlB-YBGL!@m(T;DV}i*2`IU|! zcj^yJG122T0=J4Dmu^I(=`MQw*Z%?%zc4sH;zU8>Ruo9*pE#RS@$+G_=HqXo5_i(= zFudztH2_#^*W1L1Y~ttrjwnZCyA=Sej>K&=NjtxCobBTfhQ5<4`sS3y8W{f+ei8LX zr`v5ulgOUG9LkGsF+p^O-S6nSqxGcE{;KynD|S|GOy5IIPQ}yTr$cr;9Yu%biGpM4 zyPw-P)ofQS_>%sQ$?9LgS;Iytr|3=Kvq1DBMbfonjig9S$iU}|#lUAY2qk`lf~r4%+aTSyNgWZ#F6HRHb0`B$g{G_FLva;ONff z+Co@r9Y>2gl{1%;>XsDHX}@#jqE+v8K6eyu-T433;LincrnzAOIu%OW0(UqMEJus0I-;-6D8 zK(vE%UcX>4RFo!bmrcPNxZqc=Rr@Tzv>(B>y7;Kg?wIssRC2GXABcEe4)=4EZsE)ky&@nNO3He&f`WS(9WJtM|Q;SW3M{ z)eZF}_0d}wjAjF0uUju;OE78vxu$Zr;j5wgUS)A#(1iSx15Jn3OcB+8|ByXFiUMN; zM4Q%9iH~8UPO~d3Jf=W8t?B>(5+|{#-aw@;aNuPH8W%)zc5m|s?Gd7pwyjE8ZvX!1)XhNitYfVu*RVwBSH2ea*6clO z=;r)Qjjw)mVYGexjIq)7Q>PEI7oTbXnUfcFPGg5e(=<+!ya5fX1%fWk!RI&q#Atip z%B?ARctc*>mdp&;#XjTpwj>YT^%xvXiU{UbW~IsHuj6y{7n!{*o&yZ$I#&NBz` zPvvjqRkw>*;@X>+*Y;B;)T^zYe~)OZg_Qfh^4$yv3oHcsv41Ny*!9;0Z_tK!wu>GY zyuLiX$vd11j#jg6FhrZh(PE}LFy|k|^ZZE-aDmA?*n!_Qx_{90KGFTNt=cHOPV#$- zw2_%q9jT_FT~CGx3gQ&IK4xxE(qp2Us6t61?}SLP6A5g!iYHPN87?#q=}59-p5Jh@ z=kn+PD{Ks0!?~E#pv{xOPWD&vM0GtP@q;?pdWxws5-EoF7{xw%u!l7_$sEcPW6wQU z9(cowY9kWgKDpuqPS%R=;LIeh`hTA*{`UQ$`?qJ6o+eKI^+$cZI1}enSqo?7QV`_{ zW`h?w2gUb#pSAGL9#-+=rg%iWDZY>Atvu6z4O@9K-`~Q|=$1h|XwY4%ij-SRh91k7 zLaX>8bBX|uOsx?f2CEPG(DSY0n12_SVYW9kZYdafdMvhp%f`*UYPRHX8c}2GF;^xE zF09$yV4)GjU+J@!bd)WZ_E|l$ett|J?9())Vg1&Tmpl~v2Uqd6)`Ja=$s-$Edqwx1 zXvJ1?Z^)_|cKZ`(f26T-bAGU4Yi?=7&b&TUZP-#0{kWjCVSBGopEvvLEVUMP#M}F< zRL>exbl2JI+ZD{g-`^2j0x)w-PC??nn}!@@i*MiQ-%H##sNcbkntgIkPQNN~-SITkF4qH545H~>OYk` zTJpR3OXGf-#yw|niw{1pWi|o|r%xpDkm=AW#s?mbZzDcr6-TgFixCi3vD|Vw$XNxK zs9^IW8u2gB`IiP}msc~tX=nI|!KXWYeE11I;^EWiT##yd7DDm3mB;!IbYfRY_ZStn zmJB~O4)t_FD3~0=a9;|c?C6^wLd`!Mpr7Mv{C+vA{IPH?bRofuY14pLgn1uJU%gS*Zel8+(nbBFZ%FC9{(t*_*{ zJDy#YQiGX5A3RXDz$(V?^!)$)k`-q zE_WG~P*e(Wq}NXhzcmkK9c<}2e?iwZoXNfJ*YJ6*VeN2HRXbFbxbL*@NVuGeFgKU4 z*t#To`nI{;a+xlD)?DqBB!fD+i@#=hD~Z*b<-MIBspYL^%vexAPLM>RHMJI^25gBW zW?a+O7h5Ga95`gfqCfy@x=riJ2}vPeD_3WQ0v}rQC-JCi1AttI-GF`DcQ!robRzCN z-%5AgtcAsD8~b#R3&?O_WmTKZtF~Vm{-0XcPZ^7~@DShk(CZK*dzt?1#8r`S{M9xq zMeiEdfyx`Kg+J1e!g0svSPRb!26o&ts%kTXd6$8F#EWbNGT2q9v2Y%i!LK{AhOtd^ zWIc&19H{z-hsW?4R0)KUE9Yl98A2$)XFjEr~d1@YXSV! zJi<_6f*_Tg?XrQwKAd=SvfDlqr~D0@+c(*`2Av&iu!IBKl~12`ez|tGd8z7KZ6A5? z$llikDHWi+dV9?>E=GE)q#$ROBU1a#+@@`BW{vj-<3ILNs#V)($adTXpW;`-RiEW9 z7&fGVFx_$=yS(zMK4*82wCmW_&{4SJIPFz98lf0%AfcdT+J)@j;A^A%;7&S;{VcfT zqOF#-q`+sd-(eT;);Xtu!3rm?KN3fwGis$=ZOgSU3;Vj#e>_&`@g>Hu2+35+D~sjr zJbsfrhUT(EEvU7v+qK-rPk=|8l;#8(bL2Ektsp43HXOgMFx;aozw$cU=fM9Txw$3@H!w};K!Rmt~puMg9B8xH)|JK|q z^86@Gby5^m&NpiE(~DcIg=76f+aJ6ov~9-i2ihKO&~_JLL7{D-D3&ahBb|Dd(`*f; zj@WPMl(aWLg_A_m&LBC3NQ=8F)!M{^-51&}HuE)u9_0?Y)EjhibVk1_i*2vEBD>F5 zR=X~XEEnMQayOIuHbIZnH&4&;K#|6 zcYly`@pth}Ur1|b4Bl@ML)ND#WZQpGB(r#lKd^WkNrFuI1GIi5ASC+#GEDZk)$&eNywlNj~L|$8d zWyBCo-toaG>h2T~py>+Ii?)oJw z+Bq9l5yw*7V@|{CuD^*YK(%{j-VjRU9hdRkl8@TkT6kBV=*JdDRbJ&O_2In0C$p@? z@FR*pQK73iC}QV>9o1kdxPNr*x|zp@;ndsMZDq#`BP0l_f!r~}FV8IT(@(O*pM!N7 z`WzcXM%Wx+P3CxXTj!k%czrHof(n4o7%;7`YS@vj(mA5toR>R3eUCW#R|LO>t@*&K z^@_ek8vVJ8N=h)8QBHdq49H0@M`ks)$u-Pl5;aITX?A`AXVn7br+Io+0Sg2P8-Bjj znPixc>(4Uy$9d9T&+h>|F5)^Zy+=dq9gOc#+=Vht=T4pA~ zCxuGEn_c=&l)V>izu21hguaw^=^20CJ?@wFQS-(0CnoTTwzw-_zHD^Ez0plI2ij}@ zbN938=e4U$UI44e&~JR}l9?J3+;8(D{GaFWwC1335`Ms6nJ;sdnyBCCf^1NrF}}h` zJ)l76)Bb=uC1L7E%q_nF*t}t|h+5olNlPeEd%`&vEDswen7e*PH(x#DV#hK!1$^n{}X9vg0GU z#85DsMRMn(tR%y38n?USg5AJ`X>JgFlMs9n5*O4-HUQJF9K&NaW4N)?7$9T8p^TgQ z_Ana)bN>@~`G|%R!bjKLIFi#OCWDxsMwGC*FCWj{&{~Rx@luTD#zpz%~<)BzIATuJH z;w@4(cPXnIRkc=#r7lSUXR>bIn%S%8(AWBgh{;#7+(ET8bVzjS^?kL*pq~ zghT2RUkzvkiTu2wh^lAOOM=z=PP1y~i=_BSftT4+=!~V`o zI`#-t~Z`JPLr4Yr35*zi!9zB1|dz8;?JKFUJG$5%s-}42vvK9_2 z3%psiHCd~sorO9ILVy3L3{F4zD{%VVr36|BW4fg1HHa-my~Wo(31WL`n>E{JvY7P$ z<7`xq`6qD~Rd!GF&dMVUuGjwc1X)v8VKJhdl}j?C($ub+d7)DFhYVR)rZn_Y^tC0S zzBy+!u-YT4`KPjvR$8fueYL%V2zS-L)vmnaJkr>#+LQ26lj9bVTH}7`VjPT-gjbE7 zsiFx!?pJ@51Al@)r?GU>*5Yntz&Y(|co!TH94C-r_O&Xjrs&GV9sL3HME`_xRx|!? z^0&O4=3kgOR$ap}pn5v~a!x;augJ$yz4Qhe+Z-Y(pFbW{d35c1_hfFlB=wl>)i|b~ zbeqcb(~#uswThoKBXyp8Ssdtbzj5&aH;#y9cgxjyttAd%*?XO_#=L9}2R2!;Vdep{ zM3I^D_<;!LQR+k1(J?cQaPcy$u7ELzqX&r3+?AJ;b7f*|(LuIUSkc5$8j(hyICs!% z##Mjvb2;+I%YEMeMSk+P?=t?DtBh6~S3R4}UGdS3UtJDn`PCJ+0Wn;+dMh`G(Rc&CFvfc&Sbcyn%@(UTW=`D1^rl4_4 zubRyY&k&nAvt~;wHp9O2PokSI?X%We*fR3;haPI>n?o8Jw;W@_H4o{#CRFo~K5}@d zrW~~D9IBCj-3`^?Unf!{_j;e5p+0*{Gm)ByO6e*cslnArp-2sVF{}m0N+vvG&3!jF zCnq~ZgAdKz$%JXFx!RSR9jdYBYD1npSZEmY9^reO z3{Au;p^32Sz|OrTU#48B_#h^mazjZkh>qo62y#@+Mtnx2@gmik{w;26KwoQm=vt}NT@^>?z=j0Nt3HAAeSWSru*CdJjHH7-CM0)jEN&lUYNt<(?^TM-TcOXBq_%@GFcu8x%M)X@z&o4^UpUwyPFFjCe#F1T*VE<(Rq0`Q5+_B( zQzQtow0Xk`i5i}n)B#}&OuSJ0VLZ96USnH%!jfqVk^V!Q;cB9HC1kwtfEzRXHh-SaZt_Tq(@l!^w9u@i2GiVv0&xAuaC8l&`ZXFW!dxMv~GW%}X`{-r7Z z5;Y9R$q)DujlYzi-I_tgrffXi+C$;K`F?|mChnYtiT#f04h#1aB3zrn!F38W6LX&5 z3M?p08Q<#028lWojCLc?iW6>0#|ibVK251Oq0ldWSe&pw_qxUjJM*z^hL3%m#m7wL z9FLDxjVKpMzX2I%MBM>|2$@?ZPUs3(8(EVj>yj4H9?5BgvnE)WSZo~29lq&5Nh~%& z>yEzDrz92|uGnFM*0<26Cqe5D6SN+iSZugqhY1gkPAoP->kbnf9OhEfj1qCc^^7eY z98|J9+Pz)euELD-hl1A0Ic%0o>63){%HYOsyl^K^UA>F45t4pILR$puP6f**bkZ1H zbwQ=?r#L%oPOT9JJ7BaSnQ-C;+`S(;W1o?>2LdHui=St4Y?Ri2FRuCe#bj&CtQ8Xx!@nh zX;ZEokkfgV&H?GHX_!n9%5kzR$^^L#?vcp^8OfD&Ey>xkj>18ghU&9@q z^u5vj+w&IvC7wbah>6>$#Db?^%=$mmqsaqtqxK>hh&ZEPq|-o3d6Ja|(h7XOA`K)I z-=8ANm`jwYJP<>ahvk6`Msk0ha>H^gRI|vGp za&dVARo+;sFkY)RjJ_$Iy)I76aw4?RQJ4~a%#<{$k{nIF1jqbp<&-DOzb}DeE{}J2~9Ua5ptWR*Or^T(5-1PEna5z0=1hItZ1e0XLhF=NKQrW#F&SQ8R zm1G0tCn_wzjgDx^zqCuI+0dLjwEt3i&9(;^Rte~-|F8zWN`4;uW%9G7tNe_$(jSub z%j9P|&&DHFPkzP>ss6u^pIz;MY*MW%D_6Gm!ytc#b>9MOH0c1oZqkvl13zLMV}=APIHX(^h?-8dg|HbYJR z1=LL2zlY0DuF-LmXAnU)cE=*EYjO}&i~5e_i`08!4>zJu)H+j!Z8eQ-WR8(~n8lKM zSoX;`h*xJJcxS~hxrL8pJr%{5iXW6@p}AFeI`dMFwxXaT;<4zq@?%80!G z)EYwO^}`yvtUGHcSiK)}D1zaVwyW12W)8tSkN+}r=-E~lt$zNqMNH5&hd_k&TQ7O& zSwm23gVux1jmaZ1dfY6?r)l0<`hC4E^lT}er)A$0prp|&6VGI9p+mBTHq?A%Y#~G( zw$LHZ7JA0mLWjQE7Fv3Mfqf>8fjC_grRmClTkKgdn%!<$k0h9&%^jJm3Ec9y{ou+gL_@YjgrZh zm}IigAPIb9)||Uhb&a@7Wt8pdOf1zEMrfOrKxm(t@uz0xKN&zu zZa?vZu7I4+y{>?ChDnrqrOiu}YT}1jvfjD} zgdsUenMp;QL=cQ0AUWycNrkW_a-}@~u9q)$KHuz;n?&~8iQKPxi~OWFLI~^bAeb&Dg5rQ6l|c{6z| z12GGD_ik?if6Nbe0jCdk0cg#AjD^eqao)wSbdNY+Nsgwy_7mO8vLd_&kPQbtnH9Da z-|*IVDWZ_Yn(gMpwTFD|TwNLp9JJ;?#UnQ#PNGOld?%d|A*5W}N)H}1KDsQh--@mK zBm=pvLf4YE$Gk;@FDd)2Q6ovrjJ`b~6 zCKGW!KfLw1Cbd2=nWu}C`Gnv8&MD?seV%V9QS-> zf!3-W$rs@4eD;X%3q)(o$HXyMO|~aq7BNGJa6pF1PZd7dfkTz$ynk43Wm({(doHYc z4_5Iu-#wA;-0!lS;x#c~B+byUh|1^O1k0+O$>DrH!CHm!1c>kbTz zJM+z*T|RI?Cv)6uE?dmyrPka#b@@yVm!<$_^w0!r?r!*I@^}2xRWQcBi$3QZ^H(p0 z`HO8HX6@#OhgrriMc(k-e|E;K*J+X&|J(*HDOi$@Ai{JYCNd83SL zV(-jK-&RWO?@ioNdWCYFJr-^_L|ai8{;=a;Qo24E|w<-r&LLS)~shR^P-#TWhx2#A(PpQ|=AhV(?Ge#sVQ+ z{i-qvNv}yK8^rv>XskMtJr|Fs2u;L4RQzDDst{?99(frPMAjz0oeFNtbnkikhvZOV z@sA;r54w}@X1tfNf8=x#cyr6n!5xS0^+4W{`EZJai zu1~F)_JdhVdc+!L-93DECA+Ja`hva{WgIp9gHYfe|Ik?#(kRA75g4rO@27q7;=P+e>~c zU(xF-i9>3#3A)<6*Pdr?snLycqX{w6?K$?l} zcW_W{6`@j|m}(|u=u$V6M6Pd%CE8R!wqgV6Up6BR@ekS+ODS$RAXL1S%CW&fzgX4d zF5rm5KvNTn?7-em`C{dC|6{r@1GZI#(KhuCK&uLq6M%p^USwd=(J{yXXdi|NNZ0D0F^{p>e6vl*eQ8fAM9E49ma>}(C$1)P_L5JXOLjF zJHo5F8zHs5KK?^$Bkj_*zoGU!*DqvGj^V>@K3;iz1ql^y$!|6tnA}4$564jl?8NUD zX72zEF$^q{1nRqTWvD5YDr(y=m$6pe#8}B%ykuxg^c|81ofjX_maIcQ&TiR6f(s;H zd1tu(c=D+8IgzsK#@tY%lxFSs&KT`$4tzSR)a2JRW^K&X-LrkWPy>iF-#^mO@--QM zkdN~+c`|#i2Up+gQD7X~%_32+mpU3?tiy8DwQ`4KT~7TPYYwVY3Q+V5ny%o7UGWMG z1*Juq^MU_i8IU~{LJ*XltZL?;Z=G}?U z%P+4gS0nR>Th=@k#beV$m`w=r*GYUJ!!-BreRJZUaxl1E(eI}mFZb<^Ezo0-MCv{{ zcbzx9SMd3ql3Q{X<&=!fSNA?SbXyN8mJ zzdQF(N3d~Qe$|IICln3HB>EThQvJp`KY^EL=lWZ*$-3j)<I zcVPDmhUY20ER&n`T0Kw%c)iSJ5dyMU_TG;3HgtpK*G}i6L3S^ zIX6(W8D^UY-0g}zVzxcb*+tTxd^|#qBm4Qa7*_2<-Vu?h+$L*Rd44FqyyinKMWrdB z<1R*K9kRxEVrqPL;xEPz>kbiF=S&fMQ_k@Q^3I&8KXV5x(#{|)^{oE<^wUqfweBbh z?$$RxRj6SwP2=NidZEi*1#C3PCpeP02rq(%Ji@A4*x_sz~|AL>^NIh;gMRnGW8W`Qr%Xnmw>=PBxl;CR3}X{wm<$6 z#@2%w`M;LQ9oaDF#04d;^tXI%7$!}(ISfOH4v!p?B6U@U_3Nf2>oI2*S2dK%971mJrV zSP{_1IDZ~2IPWxY#t?JiT#C(?Vwov8>pk;InA0kpp}gk8c}3OxX;uPc$TW3+%5(vm zRDtE>38HEVZm6av6?KL4oEpGuE;343wdR}!HyD+NpD)+CaI*zB#+!lL@8Nr2gP*;B z-#y$8!_RLpmM-`S$V>`+8SFF*KY^RP>;`Vr&Jx^Uq~PcF6x>RHTk72u+}yL=0JUm5 zItR{7!EO1M;pbX7aA*9K@p%}2X33fHuCnXd3kkV`<8Bqk5D=5PHv`U5-_IY8Zv?c; za)U14MxU(?@*2Iiy$>$yYR$(oyIHcq}e4SgTN!y$XYnaIAuqkuT#C zHNX3hR^j)kiEcNPh2$KnH1-9RRfgC&&7-fB+)m?f+ZkVnzo%s6Oa^}|c`Xtc?yveN z(n-$1Oq_h`OBklYfgW3(BN9yCumFS2QG7MY&jFUphl9~}U)jJ_P+Un1dOg|+KK8Vp z;!FM>3tr#16E7NRrakHL-C6Q#qd7jR)yGi?=nc75XmDGdpU>CgEKk;?zw@8JFWGp# z_x=XH?#YX<`F?M{FS(P8+<6H+_`2_9wNGBo3dw$v3YgY5D{pkB{8ET>*!?O;`=9z} zw9u!2gckZarjAriCM|@W&i0kAZ(_RabRPQ?j}jy19nV|8iFVOfQ)g3}>NV|VKv~WR zhZ|B-gGNcMC5;JJHwF(HYB;_hCG}Tq#?sE*w2JB}Zs!c|wOE=ddfP2I&r3Z;D_!hr zr)yCaxFTaRl&Iqa94Y(~+aaio`3AwA637 z>z2azi4xn?+R{Jy&YshR^xN3g!&TKgl5_pS^&{DudJSpxo}9Z&c~54m-8JmA8;P8| zO?NuWIq?zOD6HF))vy^?UoCQ{ZPn@g@^F09knJgdgxQ_Ell_2ZE@m`owOa)|q&Ag$ z6Vfy|c^uYfW@YTn?&ou6=lK{R>;qDT5hH&a_e4>fobn*XT}787wu0iXG@sM*cgCXuafRZ zdW+k`40_N922c{Y>Rs0_tpOU8a{~7P2Ra?hd{AG0;HiCs)9OpRyMCtrJ$g&O!}RKW zr}w?s@@Ud-B`el^jCAU6W_0R&0darlbc|I`D z5JmFito#L*cnXdg<9s$AVI;MSzdyx-73r1BAl+;*4k~o^|H_l*%bh_#LDBgoon_=N zCwVaU%ykeXq4sKzsy!|XbS=fBVCR*6f;f8<${|hLif>r8KVuceJ1$ADK?(=O{?16D zaA*E~;mMu&w^(;Mo+-F@8je2^gX_e-Cv&F@9A&4lQ(6Y&w&cr3hpQG|c{qu@K$kuw z0OdPV?sf@$lGu>JlQe-psIR#MZg8_meRQ_>p8G}jxLMR0H{U^L?}VF%C=FhvC>+|v zk5(!A#^Q@8?+O0ns?{e^`cSXC#Qm1R&@_d+W(kHWG+lXy$0yu=Jk1UZ@Rt;(^@zK< zs#W+2Xgi^3D{`u{g1v@2fL8jiw@o}7uKIov2H*r#KaIO6ji5WE8l$I;=81>jYdpxO ztiK{>-%JB8)xY*n2G~bo2L9diHXSlRsr~?($IuHOy0GRQtwNDHFT3(#s2)Qj^FE`(1^&=|I_=NRONhNWc>2v zaAKb+eP7@IDt+G@f7{Dlgg(mi`B+3CGOaT!zDNBXJpVJH$h_xK7mt;KUH1~cFZa=T$_iE(b)4s9i&8eQc!EV2LZlsR%q$m%C&e#)43P6C2o1xgUGrRxA1;_g*&V#0D_s+;*RE zPlt16o$D!_aee_?l(x1vx|9<=4|wOr4%|8QG0OQXt7?F2_>yFW^Ad-#IaCuP`eWyQ z1U-nI=L^LDp-*=)2)1c!&&WXEQ%RLQc#zKlAjHA#xYg%}E}~PeEE!&U3>k+Nk`KUKtupQXSeEimKwwuK#L# zbev!XJ(XsWQp|5_(M-7=W0khE`!F1TBN$(8tkTa|z{`Hlo&>hor>)Wqe1g?8`{Y=4 z2N|q!*t9`GhW}W9dCLcb2}X6$z)HK%#;R?>`tRl`?W;6#ErF6_Bk^{tmbfzN%eu<% zhKSlpx3UxS{ngC8=6&OL85N1EI{ifP0MTXqT|54Ye~pV=tOFoC*CTN^ps7 zvFoM$>Lr(a#`{alEB0{23%cU9=r}_uT)W$v)0>?`2x8nU*W!u20t@wXDm6xYpJe8z zLtdy4UT*zm8%1G!;kDaQcrk(){n{)N|YLft_NG$c~Q`~5omY-xXPV8V!yN#d<;0s;s@a<2HwW2R!6bQ2)nKY zK&9*OVj7eI+|NM)dM^2ft=R&FZQ^->>kRUzSpXI?xEc2d)v5Y$6qt& zC!3SGjRCyWIj8Di$ICjc*=4h#_*R|CP49+FZ<_i*S$uz_-tRXs8}A}eewTHcWeoOp zmEXy%)0L69ADruMnetQ16w;XF{p_?(e>ysQozw{cu@mlo!t^SM3I1jVOi(^kW5|~} zI}xF6CwqD*OX>z|nw)v)z-jyQAw%F<9P?~}re>L#LDoK1ul-ls^XrVCsU?(H0D|Qv z2W0%`U+ted?7ejvJAv#kN)d}kPry#liMJ$)AZ(pccS?(Z@oBRSWb0WBrQwPmGG>2( z@5~qsatWsb7uK8~%ErxRBSD>^ivN}~TPCUu?izgp-I%I3W$`!2SJZkKzxtHa_Csd? zN|?(>#6ya-9)mRstW+XFz*!pVl#)*0sk~kvpyTm=TfK8`@8@B76z?Lh(ce8fHT5z& zBO3^W2_CeCp! z`@>c^Eucs83$sR$PzugdLMqw88)oleDBjQSym^Pb-`o;2nyGx2DdCD^wR59~Ja&P# zp?Zq6u^7h7Udr0%SaY66RHc};f)x`|pdMp57MhK|Qe?*|yd5W<0qzaN-SRr(+Y_|S zvzo4)r;bX&+pa&!<=YDC0t51J=mKa@DA5_nd?fWn8N}C_51Fro;3Z~pd56uVw!{R5 zluDU5NVT^Uy!Wvq+=Dk~$V*C4TqpB29VB6d#h8qs__@%^2#PTX3L8NY;|_vi!Pm$K z7hSAa71o5-rZk*z*JdcBoV?lC7=i(ibc=YC%IJ9&1Z^ao*5@MPcP2VfUm#@g*!R|O z{4M9-Qqx_hb>k28(@FNB*EIh$4AvFO?st$wJ!E)f3Ffw7^-uZ`S-&>#E^?JO+(Q+b z)<_?RQZSP0k`>YvJ%PQH!AeBk@+AWM^6mt7MxJ&jx1TD=tp9%`w;xfww3FPf<&NZb z_ImV)Zs|=v90z`91a@n(4O7|JlcEPh3gBnL)gVL>MPfgN&a%k@Igjv%)@gm}U9|+d zkojLK;`m6z5OMH=r~^in=cg^iaRJOV1t5dBo-{AZpsb+?qtAe-!c!!aM;AzO=Vxes zZhX(6sKHNzrx3)DchYQVg3E@?H!81D??obr5*=vH?nIXX8FokM7Rm1{deCRK9pMtg z$02bJ!|yz5a9Lh=)KCIibf$(=gebmGm`4^pbPInIskCC>#|F3Sp;?a{&ZvYO#^`3T z4pX{{ce{_6toDh1YE*RbK8`yA${1QD~w}dBheaRmhmQf0vIbH_$ z6n>P9+=NvW+~$hSaRvesn_~>~7S4L2Q>U}1FclFx?TV~9Tr;=3IiNA(|2;ix_y)-e zoja#y!<*rEl8GsSfIx)Fda{={T}j~Dk=@DPNApwsAcOh_K3^+;UEDY5ewh5_^F~kZ zM*b#y%a!EGUzY?#Z7%-9Zc&jd+d zgp7V97SjN};77U$o}A{-UrR6Akw}kD4?bY}PCnm>zjy98oBwrZub7jVKN-Tp`0_%VUX2m{cZ9kZMQ$s=&vnbb zf*j}W?+Z^hIj2>0*UuB6kaHP!yQhD<`HtDu#cH;x=uG{E@c9Uy#T5}$GL=du zV(J>VfQnh-Q z@EN%`kreP+%6XlQ2Y_U?d|#Okw|ylX-y4j+OO=Ih0wyXc>W#r}2SeP>OF0!wV=T*~ zd}^q!(tj(bwiS&|oKr;8!eFATgRQldM{CpAuYqo~{eYFwDb(?%y>DA~3*Q=-W5vR{ z^WO7(Bqvn-k!4fWbdBx9=N8>xVclQP2Ws{^{A>NH$@*2JwUEO%*RgY>7k-H<9|-l%7|ZTfy%?Rmnk?bZ_p&Rlz>Gw_E(7|us@$4fGel=;(d*InZJod5I}+ytUL zB2{U})%)o1k{=6rh8)(RO9wFE8<3Nr!mVt&udp6aKICFyJDfE6I*%6AzVmz`*Va|9 zuo)(CJGX#ap)9Po=_pdsDma2C%iA+uc4A=FE-%bs^84hPCB8fa7V$IjVDL;WmIW3P4 zB`)uvHsQT9M*4`h$_@GXtc!4&@Vu(kT5`N^gYKN++buUr;Eh=)T1&zydh)GyZ>Ic~ z_M_Th&YTdokdJ<`cezAq&vlPs7?%e=v*tVkCITVRK#o-#K+Q{yI8^^bj`6Ypp%nJr zfQV%nh6EOck5PQfwau9?*XWR8%^R`kuH}&Jti?>?#1mER20&8>WR}SzlunPX!Da*( z{hVukhdQtlg9xVgT>`1iXCSJ`Ub{)(=Y>+|wVU9)zY?TV{zmUhCPc{xfO|Qs6Pw5@ z&g;UV`VmikgQMF%out8Xbeo4|oZe>F4{y;)D6zX`TvON=V@JaZ#+#j?1m}|{X6%*c z8H$PfTRpql5-o#rEK_;7hsnyp&3$LJF^%S=73Of7ulyw#h4*X!aNZWnDY zxN?B`P#0Wz>t$;&a(d!6ec}LSp0iTYi2r3+nCIfbrlEn#!a>74nxOhP0-QrwCs3@RwxyK!y1#X7;?8dL}Z z9XdoVM&jI0D9vonb@pF|d5KdEg@~LS(7G*eL0Q~!`wuL)tx-Uy$u4F)8%MeZnrv%i zOZsr<!<-d5W%>pV!>P@W>f z-}mILi7S4rn9oe7^`Q2Ounj4|_AB!6ajujgmmUPaU2f|#GIpI1D42$#o%{ie!oy4G zZkNH^$NdMh*+PiX)c5>;v4r*}>5naH1ril$JB`_Qrh^QPc+w;7J$vqN+I!}nz2xl2 zV=1m8h;MZcOyr7hRnye)k|FPO<|e0m;{jX5Pts179!yR<%>wU|_eqJ7jdUQc+iL!b zL-R(d^Qws>La`cP{fllhvpFeMv{Mrz5g~RPR*+r)tjQK~uA2fhuH%k#1%ZgiA@4|`)YeU;cx{$kwRTgX}xqcx0e5~_$|0Jg!pBP^q40{bM zulg|gl=)-~KuFea-}|n#px802Ef5~(Gba#hznb0=l+eNqZ8zB!y+!!@MRBSj*);6} zY$?ULpyuAp^Kf&JI`5)o6Y&y`e$(J+T09tf7A&X|^*=_X&?0IcDQ6+*>I4|R$F*d4 zoBC_NWD1@}ut}>fkgXM}0J2#;V=>(MrBx`1!RSv-J(JDYDyir3w-y;N6mPb|jRZW$ zCC2%Zy9|J;^*}Z7>cH>7yVm{H{8b^=8vYtcC9ch-KJ33-ChL9=o;nyn=9o0ZW_%izURDc>>H2L5!9_LicUfBwMTs93^qG)b%2Wz z^#2-`u)tuU#}Y=OkQ&@G@d?RA(p2wP&7$NR{NwRo!yn)Z|EdDK(DW2L;R=3_KTL6{ zF79$X=iYWYEi^W(i(jVr@pW)$Q3PS|5AA^%1x>lhD~+xKi-Uw*X5m#A1o53cdlA{& zE6g6Pa=ri6zXr<-RIL~N!=&RIoc&QhxSK;DRa>3e_`(c`q>{a~|U@^14fcRWTv z5w<4!`@AX5O!eeVX{PfWJthZ9te`}8k`|ksBjKbH`ooeJ7$v5Qmbq1)1{&li3xI>H zJ&Eafqd7R64YuLvHugmRo%=HJPEQn6v#Hm&s(3Yi&|n=0)Gx&=@%66_HLvX{-ko|a zMrMhW84jvF(Dq>Z*UMd$yQ%<_fBWN%ZETOkHvXBE7A=O8#OKxJB`bD3Y{Gd-R?Okr zVwK~ZA*gh@-@=D}ob{niK|XZ0`B2Ol!)b-H>i0Aqoz?VNHSI9YvcsBMwbPYPp6Gvk zR`XglZ=t!D=hAjX>c=tq(e}A_X^y`AT1u(p*bI+KPLgg4SW2DTYrC1ERhtwRK*pzI zHWSAvl7bMVRI|g9ELmFReREzC zQ--B3`xA7xnBPVG56;VEfY1k=k&|;M$L`ajJDAb48uqsQ2`zJW8NAXE#zpFDBQTz(+j@Yz-c~bI|WdE&q4f&SeLhQ zxL(yMN-<3xu(L!yllaEAXVUUZq}*F_KOc$H`&x}5@FU|zk+ymTcS7+U#*I?^UdD@3WV|T% z@|Cm-(8Y^VjsH?^6rv_2a-A5zNw%jXNMaMLc!9wkP(_C>Nl~rl#=upn@~st2TG;0m6U1b@(_?%#%FbJZ*47bRcbHlCCw zD|)P!1~FEMhJ|+ZCw6ThoaB1%E~m)#q`dxJp%0!EhT*wU3QUm9b)!6Jz9po{xKSQA zuPjYY=b7}zA$y`XBLk!786s0@>6 z2hmmtkA^uXFr$?9S6L+{`JX#ff+>f}o>>+^I z|HD9x|3tWz?L0X<<2;G)tjqH|`=kiDCGbjfviv6ZqW~<>TH+bhFn=s*gs+Gd6dy{< zE~|E(Tn07E#K+)yFK#2r21h@)28#WE0vvQ^795Mq!g zySs54kVL)@B*8&qCr)m@Sc!5UM-rhja_IgYi7#EGZrSF6!v%V6iWKk9a*l+HNjk(U zvS{h&gU3J6^!ecO#68DTQD-$0AlKfz#g4yWN4FfX8@J~QIElOmjV)?7w&pS*(%2|& zwa@7zmEU+x?7+sV`@=e=1CKL9!)r1W=Jhr+muTT=WvD7xSIXv)X4i3&<2)AOZL<{0 zgkgW%SoOA?J0)_PteZ91xJ@80+0vw3;BhniohLc}*p~5^l(_y9$SL+uDYm?itTlYf z^_Psg9x6~xdzX)hp~Kh zlTpBpiv&-=SGhHzN0A?BYMTk+Jj>9VXciFzi?(qC1fLR*O4XB?@ljJAa z=@|_-h_e<6P?MaQj5GPNvB}|E89=+9lDEwQE=``TzTpp*{_DjgCP-D9;2hYB@1wvk zQ|ur;$W5YE1v2A2`^R11@&0j6i`wS-T{p=`$=7I4Ja5BA!W0SR_%X- z4rcIX{Zv|)vhyc1WRFvwCT^*StW~=gi4uu_n*6PSSv8~flpqOlg_9IW!V!{(d&1*; znBT?`Qv8Y4XV0q+^~8w%XvA8g%!2S0T$rXO;j4h|-+%Qe7Beq`8b zOrOmG2GD@#4msT<>sRZ3T0SPrwQk+|LrPOblcE=^zv~Y%bRurny*qKzFEi9(#SSpQ z6u*=GDYA0;9SCB>^f>dQ$N$6Kd%#CkbPxXtH7I(60%Ad_ zj_}!tGnk8aD)PHQ9NQD&cW(c8!tdP0`>SQfvK_WOzY{MpQMKlU$WvvyE8Mv6rZ`Nl z7_>$+xr_*t8&@;NoYT$ba;Y+fUFdt}C!$!OPbO%r7xOwi<1_tiE7)o-(Y2DQ-6EVr zu-qJ_nu(+P{2?3o5VDJ~fo3R}mK@L*HScAT4p2$Xy#InN70#p|5SjEN&HO!->wv{? zmlL_{la&{t_Smp;6?T5)@WSDa^?U+LeF za3yqc&%j6*hnQ~z!n%&E61S&LjIa1}=kJYmALTmSW5~kl>?!`I5J&7PSJFy$&ZHG) z#8^ZPQpSufWBy^880(1mFdR|hNFLRqUFNh55gHq;?{JQUwSb5c`k3=_y}CdusAswC zFlbP+vCQ4kw>7?kS5^B!U%gMrtU?jP+Zbv!*NUxC@g2^Nc1ViK>CDRp-l%F0CR0sE zsiqPLadz~L%DO_bo>x`Yh_j<qASO)qn7 zl*qoda*hqeH*zcD*pPSp9hfNGvNV%eOYCyIBjbOlp~n1IIz5u%9DAh#89! zJI5^5fx=f;=I6K*KSyempJTA0j*hhN)X~wFudt&-kEjVdIyT%6CUA6oB+ywNK!PGW z4E1lsn*~2%maH{raS6TRqwIb~&#$J)o4|xP4GB>fhs1@HcWZ1SkL}jz66Mx_V7ZB?#h=R7C+>PboWHqLycOb8(J&A@?t=@6(~%zTfj#BsLQ5h) z(p|+?!cD>EH%idQaS8fZW%yoz+SOe#frm18MLU$m4y1(L73oQ*!~Tjd)mzaS;Ai$$ zI58iY{=Mp_5Ql~MD)MAh`9o`#Sdctg*U5GzoKq@{9aYPKjOucZG5Mm?SPq8Bb zl#ffsUm>_0B2n8TrAs+*x-o^BiQ~mTF<(%LZo|@U#5Ey95apUU_a0Sf{@69qMwL`` zO`w@+gonpj3=%Ek0R>s!H4&>tmRQ|+2XnXe35oM4MaTb&IYaZ)Z3o2^H2z4O$7Wtd z@}r|Hj0Yw7Cw@;kU<4oLrL0PO0g6K+GuY-L4fALh17&oOFpuT2dB+L!ctsr&#*`NT zEnyxV-0UEOm5MJ&!aS0ry%Nc$7h1)>|B$yaIU|HcJ;#$QI7)#^VIG%7hk3NOy%NN9 zw04{lJ2c9Jgaq|T5aYqVG>P$uQGZ0rhRAt)65p|0$6JNFk#)KIGarX>T(z$`_;2S=L8IiRFol> zDzS@1$9`^G*x#^A{SDB$Z@pCF_#58T3X$99xgDeZ4Ffc2!}d3HAdh+3&B7l$9;<`D zp^IoR60ZRXm-9Eg!@xMf8vgwfs^Ra4Kpmpuy_~<{E0WaT01Jcs&3fuwReysph$w%< z9Rkv`ROz}3f5QNCqewN@|I7Rh7xqITOgiw#{)T`s_DEPpYnKACa--=}!ZME08pcM@ z_9JLOxoIb4WZxlJndamOP}|>-Y@UOV(|FkZ=6xtS;&3=F1S=+qJ9Z0tuBd#OvD;k( zFA%c-NM4GYVKxSe9KnK;5p0lo7c)3%1%bUc5t?zjEWX5*gzAUW$hJ+mCOCNe+2&9k znI#T2JtLNmFcsIpy#m|E;VW4p3zfbWc*Gdoc6j|- z=y3>x61#|9=8Dq0guYy6yB~$VRuHEElFIDvw@_Uwn}c6cizT-(JNh6~c00(-4BE~& zW%{xX5GTj4GpJ%^RtiigqJ-Glmrk)QiM9MTFUNCG^^CZ(%zm-wh4|qHn0Z^G=7p%+ zD*+=cLBOGN3)+&+n{~OdECN9@IS~j&T0k^Pi9mQ6f_4RFYm9>VE%VcQiWIw_=90nu zUKIK5*w;*1k+9takvui%-&gFIqmI7a&1_5)t^I1|+5ELKLZ47&aEW!Jz*hS@UFK5{ z0olWRaWm?3&%_QAhftRswt*cUNZ}J<``TrWl)P}#a2&!G>P_?SOFOz%q_8)ZK?A?- zZ0lO$4kn$N3~e%>?T|Su>!)3@`^{_9kZnssHE(YH-QPspsHJMUPMew@1JtQjY#w*Brc~w~> z246~4_BSN^LBw&`wmZ}6_QkR?4vNcYwhG2o+veoSjbQZNI z%dKvw+vorG@~H4{<#Z}ovs4y^yID>kHO0xKQ1E^Ymd(0TFh z>aj(x;++YbABwMYtj>Y_?PueDPyTT_+C}L>Bi<+9x=!vZP z%Pxp^BDY5y-e*`-;;C9rU0!H(7AG7ZGv@lHQ0n`AG%?LzRAg3934RKe2hi0E%Y@rVruE6__Kx(*0}M@p4t^MEs6Z7cb%h zsU>_E=^VDPYN|`l2}mQTo3jGM4%Kr4g6Z|>&i*3s+n_r)F7e&?I{j`+THl%%=yN~) z9&9uL=RLo`(Ek3>>khh%=0y};Me-(!T~&jugN4BLtgcKR?W^*0s*SmCuUE%`{`@~!vE`;W91d(YQ_;r|rn zH|Dcp%;|ZMQ;e0%K>oO?1H>Ww848tZEkOhFKn9ot6sC{lXJ$}o-4zJRG;;-X?rl4e z$^~cUSDl#WBE&LQMi~?%WKA@9|0Y?zOzW4{UykYMulsXBxo-gGMis>TQGS)g?7L1{ zWYa0On7jjV}Hlj%>@spEYS@S?J6++Lxo%HVzZzzr41IYsL=iu=JOIr z#4+aqWfv}gP&$?Ae^1+yvLt6*xC*qtnF>mA;Iz%@xOF~V68~@@sLctcarZ;9kzZfA z?H8_ftkr&@G2UGkivdQ5{Bj>dg@J#RW|?N2vis6#hr;uJX?=unotn2`46Q?vEP?ni zdxSZq8Pir^-_)`mR$U|yJSq2@Qc51-S%&X-p4d?;-c542sv!Dw%@B$l8uL+*4?f}$zQ)Jy@JL|pDj2K}N zq8D*FIpX=!EJVi&WwbQIu~5~R@Ch$>s5FX1t!znVKI$$MB{4$XN9Te<9p+_ODZ8?a zn|_sH_NaHX{4hT!{j`VqV^JE;Jj{l-7^;sN>W>wiQaGd`og}z4)9AK6;2X)0O#f>_ zP?>=_seB229-ywwfu`J0JE;ZuzByR`O6r#7xT~4vvY@tsUfcQ}Sdej*KWmdJ?>4^V zjLbTm^YSDB*bjOdA)vckSLGMiwzs+F7gd)rMf^<#K-#=ghR?`YiLVzeSZ7T}%8EOH zlVRM#D4os>24|5`D7_Sg^&UDS4R^>lEn5l1dzj(K@S?<)@W7;%{tA(L2ZNQsbg9b0 zO-Vx;4|cfw?NrHhgw~2_o^QtHb*P@4vjfdSy2t1k`D=k7(OYsSi^=G@jhisyl|4ue zh35+1XXYI?8&4FzNy9;b=*;MUcAY*iQTDFYBw^FmsU8h2ioUSLwQq6L6 zVvg|BQ&If1k#K+t{8S>qor&hYkz-y zj)qx1;u0$gwl$|fQj-+@HnWlhhKVtR5LFj)1??~BxXzcjDU?UpimVvJT2^LCIwmHw z#INtIw*0ck5!Uy(Knpe~?I!!Qc0s>oel#w$7AHhQhaRECv1B$cLr}2FAH`@Eq@3b{ zc?|w3hyo`Ykc0;vL=PadmBX7d{LD*>rm~x=JH!_rf#zxvr#rfjt@cPvMnoTT@_$+m z%*|n9wIBrtpPuES>8T2(U|jj%IeMVgLdBL>hErycj*0(=g~{^MKl4NB=~dT?pOPhR z9ZiRW**wOXB1eC)+CsPN472XiY30BRc0&-a7=1%ULKZ9)PM~`tI=XgXHYQQg)F^o? z?y{-Td|KuOo@ohsm|MLt*7|}chm_DtxN$tw=(-)&qHdh9AHjE6N@@OIc#{3yG*RPP zd?O_=Uth^-2PkK)i>yI1aM9Xe?)~O>%~1$^|B$hmtAt!w+ZrdoeEX!U3gKsEE;XAU z{u3^wx_G$?4DW0(ZH_`l{kW;z8!lQ4HYoTU%l%SJ7)-ye=VSODhsM~?ZpAV2%4h$a z?Dak^GxR4)_Akip*vZyim5LMsbr?06`PT?jDW?SwmE6IOAI|0VAboA~&PM2oR*JlY zd$h+#P)5#E?e#wY+O*!7z-hh23hT+);+%oTRfnEm#|Z0TeJVj#{$$ZFZ1K)c9Kx$| zR&PNK1S=~wOU`b2CrM z#6%RHASX!}G2fHKlUle(!WQm^+N;?Ul z!?%Sqja)h0wws=qDHu+bECYCON#O)@O4!=L3FQuEASBtf#Px(ZXGsl1%udjXcxz-V zqRgSC{A7K_9=!7LoNC`WXa9{sK}I9C4+4~}*^G;A|Mg5vv`-DhloJcl%F?&#oP$R9 zK~B14kVkI6v2!$wD$fvGoKh?BD%yu){fX;_`16idhUUrRCzNEgDw5tO2v#_Ul5qz` zYV&Op+_BN@JV;pVxiQg$Rl+Wq3WMdl1Gtrk;5X!qtSqweRDF6S5<@mXWcl*|)aAPg zw4{5m{tfnNIp#}<0Ba(^$|elXN{K;SMn+thLI_wB%h}ag%c@4ksc@tb@Wlwf7k&N_ z+HLFex3JAaJgNf(bRSRa~ z$Xz&=Kh=@*9DXS?Bwjiqe$v!KMm_Z{b0!(%dxP0(i7r6Mx_3u*lEm|p`9%ql>^D+@ zNOlIqYRPjYI?l;9&#j8S^=ynEJ}G0Hu5)3V&mh~w?!{)6VCBw+BV8wqvHKMuC)hFY z5zn3FS%{&kxwZ3pd0A<04FN5}M-O!qqto6W)8`NQCmd+`UZjk$QDsBQOO+8-!BE}7 zT;)xx{i}sLMSO}I%5&GRx1jx;4V zNzD5~Q91KYS8xeNPt;PgLo>m;@=2Bj{wkjwEOa7Xp)-tSLx`h_v2=+NUL~K5#7Elv zav>RGtT&-j_@({h1%8y{mka4QTdt8ieJW2P+XNC z=A5H^lVMtGO!^Pd!Xwg^x+CK2`;k$@GC)VeHwx%7s<^H$vsuxS4m!?@E3u>U<1v3Z zn5&X$##5&<%_N!^;XeD#2V25oq&~F^q|(-$>D%g?GcflPO?Bw3{&xQz{+ax(=HCu|4iv{oB%3@>cE$|e%S`ybkD zNzjiY4^+RgilwefJkcv>+nDzuEGxZJUfuHjGG6^+9K3oDBogM;msKt!yt?2+`14Db z2*@+c>6=ues>Gjj9R7TVxTAs{UwH>OeSqWi!`62>iQ7H`DRLR8=U3@rW?+OUx%Hi8 zooR`(^oso(?31AOkKBctfBIbGsekbhtUHI#827h(S-3C^?__>(ZJ?`ocMVtd$JpRD zqM?yAEisSewERDNG@AQ;?<5c`rC^$(920M290Cc!6F7ub#4X!B-K4gqIH$Cuh zypi;zwkX|iUr@+`c+Pv;18*lmZs45#x;bu|MqjyDk%&p)pNQR^67`WMZA)4#rRS0C z@&iqhh{Gu4TMnR^MY?B)y#thBX#0gLm<0l!w0D=`MV)X~-k8|&hW8@)3|=s9v13WW zm`kwl^?PpMs?9Hoe&GZ_0=q70NX_h`%l{ViZ+68laV7oWlK2Qe)fsco&kJ#7ae(K% z(A|bt?1wa^=Dbh`!`F|WY-=&Ra!YaE@v(+Ct-ko?wz`v+8-=&YbN=ZXM!`&;k1WsBj>#9fW~*`XQh zV`S*i!tkCg-wC;w2{^%vN*94|7NdY@sfJFeD-CZ81W|`%!z=cR2I~ZStj!B?QuTtOpl7& z7|4boeE$*|3ZKMdrP)3W5brDCr!>b}#sl##4jQPNAP~^-8M50t%sZ7QY4*yOJN(<2 z8}DD2zhhgz#R*Oq8U^3Lq4Gj>b`=l#zjStSzC>P#o-P4%vJWFz(_(J{J&hMrq9HA_ zBwjAk-f;a;on8NpQh!dkKGAbspHT{vez*DlRqW_FMl8+D^9VfkI)qLPl_j>7_E!_@uZ}4=?&+w8c)@yYg{kVL>5d}WHgel8*GIt0zdMt zu~p>hDre>8+ z?TB(oU2EJfIQi}Tng06|tY+eUx=gZzQM;Vx<^0D%5_M^_e)HHs*?6$DM9!gyp*Vcg zDUf!gc)#JDquoA!9_z#Q6IJg3tX(xhaposCYV9SH!}U`GZ)H2=$WnV-wDToRnJUys z{m=1jwo5owdS_o+V0C4%?ef}QCzH*_=_4Rfj39gIkN`IKGFhbHIYK3ufxk1A!y1e( zSJTFowINLJGF7A=W1)?w4(Az@N7fX0m1N=@O5YuOy@_ahsJ@6c>Xq`+tRps<{f4hE zL@hTjUVk+iQ;%%3BaUi%VSY8wB`MR$IN%ycDQXp`Krg^%1v@lk5z?6S9$02fK`b~l z3$BDE=viM=!&BPrU&R|Jx8~dTW0^UF6&}(o|1n%xGF=4G#BKzZn7eBS=Fb+Gv;-+7i^a#Jt#>)_ z$J+42?G+d?z#t3#8f-lLqE=VFl_cBk9BkaTNp>)7HNV2rk^#oUN^?_VoMsBb8Y+jK z7HQ(kY&0tRrL2WJYX_!HQ$oYpCs&W}an;!<6J?A8Q`hwz7Afr;001{fAdu0)C)={h zw=ghG@o4UvVqRjg0bE;JR(?EeICgEa>2;a|FkJzr!a#*969&eL znBg6Xdsq0cBYg|D$wIgYcwUl&9lv~y*>F$2h~8U8 z&JmikL6Ad47cSQtI?gyrDL2&3r1#P%yUo^P%x07e-{V@MJ3Hz)xXGRJmEqk@77$TQ z1W`NYhzO!&zCny+8lZw`6EjaZY>Y-};Qa~8cB$z2Wc4prh+<0^bCGQDQ$&%E zpXq_DMlOHdM7f9ZDIaZc#E|F;3E%_OxrzDA1!!SVV=@V1WP6Xwd8@Wqc{MSWR7U>Y z#2!2tN#e2)v9k3-yK+L3Rkp||(Tbe&ToR8U!=0Bx&$_^ssz6{%?N7&+uY$D0hM+n% zrb8{GARB4NRSC;e3A^^oBF528pS57vtm-;x^5_zpYDOcOG~WY*TQo(u`g^g%saF%> z5;59Jwj}c{s%&9jaH_)fa(Y!kxSlH=EfcK(c-ICXd=UAnKx{<3tM~#DvlUN9QgaZ& zb|Z5aZWj@%Lm<^zQYrYbUWE=_D;A%gc%sy0yaE@zOt`u;LH&!7?0F$##Zu_Pnu(79gdcV>7S?EaRS_8Ln8!y>9pZmkpjtQTTsd<;E9DpNH8gtJIrY(}vVu{&hrpr@s z6ddz#?iQ?mIV)GD-5BPRD=?ljxHFPn#%Fsv8Tl&?AVPw!1MXmt?VM8TGTiGj12@NI z!F0Uu@UHbL*>;Uleo>bHYjG1n0AI^sa#RTM8H{nJzYWyG)(qJpmmqr*+Lbg4>w6NZ zoWCTVgTM`MKfq-MI34V$*$)Gw_H`Vm}|Ro7q|v? ziIejxX@WygTwg&&aufp{p&_!c!Tt^wsrJi!_>?!gNqxvVmL? zUa~)b4~qI?l7yF_5~LX;I#AG7$z9Slc!0}8C%L~K4lk^31)5IqCd}*HCjN{@!s7=} zk@*RzKnobjv#e@dC=CrWHJSO^q^UfVF|`5~V?|K;1;^O6Co&w3d!0w*UcP ziT6u6g~la{Lo^#)Da*(fAuzz5f2z7M`CRlHn~e~09(QYSTuZKKJ0jc+%T_MKjW205 zRrEDh2O7Zmm~a{qw1sk+DW^yMtb9)RLY&)wNbb~)?;fntG82;Y<23O7hRG?x&)Jy+ z=PNT)_xWlqeay($ivyB4oz~W4FuKpWMkZR+_8~XhhXgsX@Pepmtrztw*S++7;c<8} z9hSS)+6X?_pA=lRR|g(PP=+{y+68*x2b!;PghBDmVZGgYjXc<))i^mBa_?a+{4FwH zw~DA(7&Tv)8~I<5mKp3`-S)O*Ay(TAo{FJ~*0e}X^4nx!j90i{PwsVd6QoO~+#j?2 z+ucbk!6%Uyf$eYx(0=<$+^BKnTF9N3e{JpGAv{$B}h3P3CS z&DrNLpqxRg^VDT@-4HcT_nWWtR_1AD%BkE1X@TDMJk3O{VJb^An4(Mw8X!|NS;#ya z*h1W?f&__rLny8}7aE_hI*N4VddXtb_-vg7I@@Fhl+CtFm=+P@z7bBGZzgwOp1sec z%3^D6(n{-N9%YDkmjF(T@QQ<61hLB?kAy8*MdU(`aOWe$-5SSMrtG}u=7*0_`9(fL zIwVUQ=x4hFdOj3s-7i@n2ni@c;j`+(@7YlMG98jX z9%ZV^pHcW7pCDUfo-+kK>;M(-qGXmf!E7OMPMtI#WC1~F8UkV0g^V(8#C~!i(n-O6 z6TJ_@=GTGdjCcLS67FK<d zJGPhXNmXZ0wX-)nOqN8xmhbE=2PMnQsT&DWaNPQAo*|)ikvrumfnVxXCg{n3f?Em2 zjycXtai!K1e((Ri!;QI5xCV}DBv$xG_=tjCWBoTZf{)df%yr2mc1kLo${p+j7)#j2 zGU!K65aW0<@0S$HYlnwQJWTH3J+U%W(tByf|0ZRH3M%_ zyJQ768+J(=Mu{7vM2(PHP$!DR#PcIcgL?OTxwvr1C5U77v^`2K^p*^=Xk^id_pNuDx;BRQ-8_uS2B6X;@c zU~yqHDwl@4Z3S;9Qlqa@r^}HV-yk&zj?GqP!DYi7H`Gotgbxu4G%C4R^yz#K)DguE z@=0{1u=~sK#!J3Hdr|e`%okXHvlTd&cESqW#j5UW6bUB-m<8k!8<)6;-1o6BbKi0e z933YFB|dMOZumy4LRyI~`bcuH<0)=GG@p(=RXR1SM@cZ5+9kmO5ZZEg(iW=*NmGT< z>#=LFVz({J<5iXuSp$#v_N2lrJotxD@3O#7E?1WhBJK!*o^90Q^ws>3VHEru9SpN! z8#}_dJa1r)r#Wa|o%$#!w__|XK?z5{*=l}WN9a5w!D^zWZ7Mj=fLIXSpD-}GRJM~h z&Qh7{TT@~*y=zF4Wiog5TyX|>GLqojwjS>e^w+lar)^p7!YA9xy3lg~H0r&m-m&~+ zG*ZvE4>ov08d*dmC)q0xj-45tSdCKvoW&+xZw{ZFM-Cx{ z1Xs{@V@4l#DN1=B8H{?fb4xx_)rZ*FZXyttYKKxPWYzemGhQzYQ~t=oB}}`Pl1|sdY%)* z)s|&voXAR_Eafor&faRY>mo^`TKSi*_Ark_6L;Su23=?JhV371H}X+4rJA!#PfFvh zOEgO=SdxB~z4yjw^R1JNj@>_fFa7poU`Wv&yqfBiQ+!-yr>~L$4g0Tbu=4sKM!FP} z)%ddUE_=Ti-B{lLquhJ^+iGG7gaoua$uWc+VfY%=M8oC%0L*@Q?}~aa`%TM6KWMY( zFsT&U1YoY1i4}65)QdkkGQK&+3bvuKalU_JPT2|1Gq&kaoK zNu5y=X_RWzn;)Jvbi*#Db6GGxKs-IEE(hJhMFeUg#mu{21lP-DgupcUoJQw3jeeIm z4zhdN_{pQBS(8O2X?C#c*BhPJ50|}m;BHB@`zw66{2+cK!DoP!IJk17>xK~JgMLDle-;o zxlfkqq(2F`mQ{hvor8oL^AxZ56Yf$O(hOebTD)Fc)oVnb&`Gf4vs7ljS9O*ic9x}6 z$np=#66`ooAWq=9Y%U9*5dE(gjvmh1kO;dXj`x*s0*Q5Nuf3_)e+Z?}*1#gM9=%p# zmgFDfB$~Hk#hWmEG0_-#oUBnRGdO3Y)bF1&hOZSFg&+_6s28?=)^kQu#w?0mW=xS_ zWBh`K_gh{^_)lJYG|4weaRtY+fcuLpDP$CWiFjQ&mPE60yv}j;6C9IVDNAy@l;oE6 z$%Sr%^NNiSXaX7#;k!|Ef|RXBp)B6xF{T~c%ybki8caMsr&x)2-boaMQ8h-&XNlo`9dhwS!(8QPm1-QE~&uQ*Y{?bU|$rKt5VEt2sb?CCTX zHGGeDQ3ptdE;IOWHP?y^xj=%&g31FH^vQ^#H)W>m&#hl_e-ys)%%qg$bR}-Y#gcno zXlzbD7RGb;WO6=)_XnDnH{MIj7Wa|my z_De95UX%1p|MVVwx%|Owt#_kufc-sPf?!n#D~0G`6m2gmuYNRhc#ZM;2gWef*vH9dB_s$ zeoeO_1?EUrToSMy;O6f;n*)UkjYkWA}UX*)@NP=#bw`V z!EAI(zP7=ER#)1vgBOTLU-XMRP&cfVykHB8-RL>BsnZo)AgVhkkgr0Yq?s$GllMi< zTdsrKP|++e>8^mC9#C934K_y}p@;XM@pT%*Zgq`*Z6m55gw`q6_;lrE<39+xlGE8m#ix*XKid} z{n=NR^>)cRvvSsh!U}>7K8?zHjbt5FIqM2L>y)UhC%2KcTji`T+F1uiWnCv(FR7R{ zHxeDm`&dSW*viMo@EMzXC%%qagAzY^NO4)%KtH+2Ie%mi)9P-c)%PXs;YxRHSlM=WfSc38{7PL971G7w*wG*|!5n`)Od3l{UKOc-30}vt z5gzR94~z1p#R+x-wUxc57lZ z%uGbqWTL6F^7_k|lfMa-?N;BdBaVR}f-F4T>yBl@EFm7sUr+j1$ebM9XL z5)LHeUNtupph*_5lWz{DUr%Rcw~e?M(`cF8+*oMe9BD`8i8E09K(^$Pv9^47R;X(d ziXc{#Ndv<9#P=Xdac0tq?!gWnGE)w@jc!|AazDl7U5Z;Ax8$NAa@A zFBeBub9Mb}9(B&TllB>f<3$m1YGS$ThHx!tx}&FaXSnW`{?XYjtwGk}1jmP}D<$R@ z=32Oc;$V}*D5rb}PIZl%GoaW%tY#6uJRvhoMC}97$I>^6*71p?CD1$5Ut)<0qVp?) zeLo>c5&~7aR>?#xVg=xgPTst=G>0A(7V#~&Bto06K#wM__C1n~N#g}C#LaCdkM8d< z156-=6saLFPl}o!>kO@VF{Bi(#NPMr#87JUQ&vPBWII6ljJQ2xdX?oY90pR;Q`SzblOL+ZA-CExZ=y`dC?2;&=8tEo%;M;K9wPf)3||vbP3LCB z6mrM0J+4**)mHQ9BTcUaa-@uggD$fl3|r)a+%4l0D}1EHR1R?kIq_8eXM&17?D1s+ zvLn-tX)fwHzuryE;~~wcH%ND3+IQgcbGSGVyos~ymjHC*b;{$HB|(}t(i@73tRpjU zWV|c?G(kAqwEwLCh$k=HJXb7-00v|@T!9&;el6V2mknhtDw_~4$kjZW>JD^Gb_XUj zVWr5PZ!8y8w`s(Di2@OLcQn%cuE5xMb22X|lw6K9!a1V=+)X}fHM(eI{u{nF{6vn` zApB9is?NM+-3gx0@sL|f*9Pv0w|*y^$REU8wz7!?>l}v3{9Hi3#8aSmytSK5Rg9Q8 z^3W@0j4RVCYRJjK;X&*s?hL5fp&ffW1d-YlW4?W=VyNcr^ZuBS4c}fxu+Zc)d@m^_QAHTCH7?*q6Ay2z?TJn9_`j^yYm{%Zs&D@m;R@S#9lF z$A>o6RZYWYv1UV*ReQq;;$cI$pVn}=ft}1@E*q?CL>IqH8io{6YRVte4h+}My^*VG z)#JU~+$@1hf^=!=-JEhREq#5@$x`!W@sv4})angwn)l#U(@Sn~{S%Jq3chG>nFwBg z-vrKU1|g8L%7DOa?E>yp@vCm91D_G&76T_cz}Kf=fkm^X!d8j9)ig^Kn`Sb#mJ~W2 zDA9|;FcM4Z*(u9PnoHBpmZsIx;uSIJn+utU(7y&@sjVq7x9kSynlQ{d;Rlw0OU)wQ znV*ZJtRmubKD8bcSOjPY*EL^1iRr-w!=<+VAgZDN6v`pC{;%0l`hxHXyzBX;1C0XF z#zst_YXReUugT zY@0oz{pHaxsGxkUB`B<-r>X9WD#Wq9gx&6O1!^9g&AdQkNkF45`jo+AULk-#LlLo+ zTF8C`GtXxJ+~1P|TCFF9_AW#FD^tD{z6=2Vtkuw`?8*m!ae*h|%w^)UaS%{7TEg9f zVJxpv?Z&|P8s^l$Ux-#Njk~MA)r+Ek)Sm1AKIj?_=nzt_tkYHX_on#Zm{{{0m4^11 z|CKJc3XHF7&iuQDh|8>RH%yqo(4xzHCAaxQ(4njN*i}huhZPM5w zpc|}1u4=)fpO7jODLCYqL}SEbIZdb^=%#zYck@DhuMLW@f%CU$oPssX zcm5Yj#hAHL3RBKMj+TgyUq2?7#?zq)S0D&VnxDV4U6kT9l?FC)RUa1bN-;-su%bFB zk8Rh6HO`E033J zn>M7}c)eHEcs+%3TQ**87@Db3?Pzi&kP zn7t6_boEjt!2Rar0~H%>_+;4woa-f=ass36H*qMIqULQBV(bx)`yxm*Ph#1$-dyrZ zcs;cYs2Gr2c8Lx^0f5ChH1H$=untvtqXxi+`Z*mK%%X7;+JP zUHPMo$4_7VUmA}mYRG^r#TgwnAiopfP@amo)vxk^q@rvKQlz9=Oc`OB<;G(;a2bzR zBjaIL*NbEske~l(Kw`F>X+VU3aa&#G@#q-U1|5%I;Z)X@&UoC4W4(N@7>|%6l|{c{!fobL|Tc#s@zP16m4#{uT0`Mr3W&b{7=hUn?WU&?*%u8RUR8J zNz9-s2>s0;!gyT*p>J~e`^T5OALeKFV1iroH;fT&O<1C!f=sw3e}7%^+DwC^wB9^e z_*Hlk7n9#&tD(vl$um;(*zqKc7jy#H^7AJcu0sY(;2RG7Hk2*-59iebr-?kzkO?(K zIco*xmg4x6BLn!RDwlTuBjfkXs{iTnI|F}v0%c>hnZsg96mDJ<6RR9o{`2|t2xS~< zDC2LJ0Jr>n(&}oG{HOEj!%g9FugKueIG^^i-6-4!olh^qy(06eR5@ma;dmR7RF1!0 zh{{@dK2_&D?|D3#e0(xC-{``Bn@n}H5{_c3}uoM?U{$=CwByh`*hgO$M@}G`J z!gqgrJo-nqLC2#m6-CBlgfh$u<8cvUvfOz1(M>Cl$LQt%=f`6a3@PvgZl~3(Y?!yf zc%!DsB=ycjH=dh7g@Z-w0K^kS5q$o*UgeM9)N|Rk@+rhca4byGGW-^bGlp zXA{0+B2tF*v`y5^X_ zTgpAKD;eS0kE#uc^C?4 zXl$ctzqzWC#bNlW1F77^4eL{71=pBUDHyIUjO0J4_j2lGUVGJUaSgl)l3D!+*$;~2 zmHGaaO)-WyTc%d^D+gd9ZgFPrntbyRJ=AC1K(2-W+0Ud6cnWUl{7#ucT-`qCNK zgBt}*g>jvUoGCZ1by0lFW_a0pC>sB7MK%XMCG&gz|As&0_e%4-Yj}R=>ipIf?5$-g z<_gvJ|Av1k4Tm-UzrSCsL!x=-UoREB{*^(|ex-l%D~(IZ9M2LyB{Ne@Ea46L${WVx zXK7x36b#>j%B&&6&#U4Og==Ia;Tuu@mUkljLHGLE>|u@A6Jg4=UWE{%?e~v(YmHPw z68)-5e@jpxD0>*}kkLEqrSb}7)EiM(j*OO}??vqQvbE#1KHNGQK8flueqM2stCQCi zxTV6XGLAP_`#x+x__T)1)$y!MtjI_PRrr^46AbSplGWXe3r==y__LA`zIgcVN(*$W zADlOwr4jQS+h%s$;JNKav#fE{?6z9^kYT54*<7b=3(BhZwI>WOk|iZv@Z3KtII*sI zX_cimeH{g>Ty+U)fr)YU`bM}pk-GkK#!@#@s)qTos_afDBBh4^QK`=6_$mwCP(>jS z$&x`Y@bVBb32aHU?-v?}h2v&xMH)-p|T_hL)PFEHnP<*sZ^79dhUE&_H9U1hRFp0vh%S#_DeGOKAz|Gy^Y#lh>A85m=D|0&bzFDeJygl^n{ zHi>RR^5f(prDwLvp#9Ic?ytcF+tMP*EVqHiyNPLNg6DetLoBuw@2tVr4+#_r^w75M zQ7R{^L_UO9d@8RTg_lVF9y(=ZJC&tu?=OEDp9@=&)yC*>iHF&5))X1c{wiWyT}H+) zl61RhIikpHa|L^{AL9zA6Mx=*s0iT90@;Mn?EC*S^2q&Vh@Hd zTd{I5WkmncHE`i6hgL~DWIDQHEjj-Q7LI&&1^Oh*W-{MA7D%n@CA}>6fbzmMofD{8 z8EoYGwDhO5dlFy}<7(Co2EWoidM`cjK!OrZ;0|_(kBrTbEnn*-SIR+S(uX=Q_HrPI zX_oHawa8ysSSYj2_~4YQc>h(V7X#q0kzP8hdNzXR36Q%0VRHBDRm1jnNZQ{&t)G94^U@1HZRa`@J4C1^AwvE>32FZImV~Q@@lt+$(Q2=PC?@Ub7W(vu zwA(_B7DwLM_>0m;btSMKqGK1#QEpfby62(3_)Wo>pAXb{3ih z+ngv8#`jj#o#m;eEtq4a)@0F_v^7yV=11ok49%9WIhX0#pyi!qaV9U$ChBkx)L>qV z(A)eg>IWZzw^VHxnnyV+uNE8Fz zq3)W$PQ|_A0a!N*V3DW+Q2?j@Er4l(T&3YrN}j`s00?8XP}T<{W9W*E;ggcn9>c5t za#ayJ9v^3Zpz9ZZrN0{Ymi%(|3CYyIeYh zb-B)&!ObwsWRUMr`9V-y)B>!t#55!lno$KEKWg($q0{6jI;~H=5lWr}B|H2wD$8$Z zIFT%OIiy@xy#(nt7}%$bl-J1-;+Hs+Eh--(uR;5$d~ZpNi$%62SpHHVm-hr=c(6Fq7Po;&MZ&JsL=hs9-k4W4uB z#q>!|6-E&p5)vzh!!yd(;2(tg)T^*g$ndkU+;!8~M($=}Zm%_-T1M%NKyC%$3#T3~ zg+%yn7WhsqjtJij|KYIkbsHa?RN-6OULa?_*}*tx7H?di;E<}y)lB1q?e5}VugVzq zbBFY#J?288Cb1?rP-|MASd)(mcH2b}O?PQo{!&-es=dU`MdY+QaEr)kyPtC6OgTZ# z26!a(M(b=PtJKPTGv1-MD*RRlie#+I*`?Oq4jde*t#p65xUFsw)sMkRpcgS#9@H7p zCnEW_nf1tJUFwwQ65l`93j~rw=PvGEmuukH5JlixcMPz#HJs7>{2QAfQJgv5L^edn zP)g!8{{wYGf zKA^jq19u_IG>)svkgrEH-!~(&q!Y{Kl!Klx~yju zzN`iCiE;1=a}6GaX!DACtC*j4&xpYPH|FQPfj`CHw%eod_tt!+w}0Z;E2B3#C|&|= zvRwo3tX~OXT<0@%vxEvh?#K(Vc+NN&J&*V2S?+VRV^8_f{3# z3Zr8$iOuLl7}?U%&Z}M+HwwQU-nxnKRu^%xNy~!i?{U>f(h@C@zXa7owhI$)H>zb> znZipd2Ds)%k)us_vgrl=q%=NKb;&}p6RO~M_5R`Dv)>u{-BY(k;j{1O(BoL4$IeKw zKc~m&4MkWnj=WeFt0F@;m;B!o8Mu_rIH%cj7Mar#`B%}dDsj%=r~;3x3jdTYyY+~| zW4+J7qr?N6M_B=hw)Y9j{8~kb$lE(B$=hI;!}%wOM%@&l$M?(A zR0aP01%FD1wQr5W-#T1QHedWN-idPf19`UZT>{kO*g(QIg)an0{sXvDT*W3g1xPp* z#{vA#m$cBl3G0w8THIP}-vj&cVtxmEK{0Y=Z-&Nn$^n~wGi1wSR(weV+wQ)=A1^(vN{Pv-(cNEnshe{w z*#b#OJHd2;+_=n??>HBg`_#;qYO(ewd^qa( zM1F=FEh~puGjV29lu}Mvaiw&L8{M8bMTY8G9EA2D{fnntf*mBxltC&rXMQPz6mkY> znR!mJ{BD-%9~g(t#DPxBavsVI3~UscznS1P6P&v9Pu4dIBrZ8KFf3k=K>eN{9M_tA zVac#ECYBX=h{V0zDeIE0WWJ_PyARDDHeY#!yciC4TdpoQtJqh$7BxNWF44 zC}-A@fffvL=XYWWK<+OIw}m4bpn-6IKdU{|;7Hul(&{1qmC{|}T7Ltc-A4%tAKR$D z+rN&rsz>jE!Ev(ZT6P=e+`-w1oYIs~(z*;EG=V*_M{;fm+Z};h5?X(gC0>-3fO4m- z%e_SIoR-6*Wm~+HKleK){~{T5bGI1(D|iyG5Om%vPPjoJ3vwULz~QoU`+MQu=f)5` zz^ZhoiRl*T!nzE0lsQM%i2WPAMY&9@>*Nrnn}c;vi+E-6ybIHhL#qJBLU9wZ&@zJq zcpTWslAGgfKXtIDsQBB=&(YSoy^%S3bTqYoSMq`5$L_))52Fph0p_{v6s4n*DbwG4 zqbrCP#vfbqAJ>X5I_Ip(Yz4w}?U>V`JPG7>HshAsW>y(pgXXmn#ALOCr_wdh!;xu(LVL-W8Kev8Xrn-SN@)3_IQ!)s_!Hl zdvSPfyjh-Cq>_hREAo!9)+K*Q$AX1Yuys+fRsE3b9kR2ifH!&=p)Xw$Y{t;V;Q%%Y zS9EC?ql}?Tsz4yy82L8pb#d{}>1ADp44z7rU-M7fPVdvr#>R-_gN;$^IAMG9$-zcw z1>cx*`-{oM^^YTt@p5hW(;9^f)}!&fSnJ7iKDjVp@%%a}8b ztbgM@muEt<>^q8vxB~2??j5(JZ2l^J^ptV89ZZ3Tvt>_zvxj>`5lGHZ7qV3UCbIEi z)DuEx*DemnoT~_f zQr?(*u8W%tTNf9bamL(L*VT9m_erjGbgg68w=P;TRq{#yk@|8pv462Og_$|H47elj zT=^4|WBkA6;!o%%hu!6#XN{*>4qs4qFeJqlmwRZQkg*d7ALy3gKLAICod&vbaC6vJa(N()11cAqYeZa z$E7V#Z!A+gT92@Ire?&KY_;VP+#uGxK^PcO$tVlLui;pn_9Yk1{9BkO60+n&4jhPm z5kKfSBvTYdb$_5J3!c!~0V~h&ZuWr40@OFg?IA^-ta_d0sqUQXVX*#z9Xz zMoY@mFd0wi*H62N~M*ad{r|vxN*kFbMnv zuYY30c z?s!7aG<&iO*Ig+d7hNMM&wq8zO@{Z@EXng$8%bHy?Xxs)Y`9BO*7NBJUHDU9QmRpx zC$#bAv1x|SJ5X^wkjpd7tEIJ_Y3)=`XkF_`+t6i*H8ctaD^2w4cIz7OtgSk!cpls} zai!t)Xv#rt=a`<4Ej7H)DOTf@CVqIn{t`}1r52;0%Oz6pu)EqWHoW&~J6&xh<@oq* z#fJ9^sKF>Gg?gZa!*`Oh^kI3P?|ZS>@NKzI+ZiJE$($gI+|M$w5q{BPzd2UuL_Gq^#(eU2(h@^;O>8mTDtp~=+bG2~?2N=HB?^Ud2%W-<&x5KWx;=llFF2n0Xj#jpV;`a;T>?lq;%xd6T0H51*AOts6793`J$H%-??_X zX3JqIA97Z@wTdPvz7F?z_cz0Pi_V5~W2Hp9(S1zA+e}l2E0vYJckCy_dtSEGuv77M z;D>=b4eyB&k}@_yN@euyu!H-hyGqIzH%ZEWe`>s)Tap#0bNGaVef9=4{*rQ`dh^fP zZulMrk8qwnPtdML(k{96Lff@_>}MAlUO#;>3YOd0X?9yf!~5%Pl5$e1Y0<0g>T{tU zv;cR|QF|qM!TE-FpIcI9x0X78e`p_^wM#EaN#N5Hy63COr1aNT{J3{LH)|ZYM_aKO zcdhwPIU@cY2*=@n&z>{;xZ%B0+aWilctQzZ4&re78-@zRx=K&=^BQxsT{le`dZFZ5 zH^n^25dqqcFSQ*vT=)YioBK(rd3<_8LmPD`W%4L_{>Ri=2Mym4yB+7;MLW)tc3fH3 zj=M&9zBjxJa;1FBI#Om-_l@g015qKeYm1a#uIzP&x8p;Sr@=*%a_rJa)*9ZcGbCk; zj>@@jTt~{=k4Q=ZpPta|KYRtB>95ps)<4f%%SklMSVraHf6$Ie$7sh3)yQtkgAz|s zAMPzs-Z4YlQLWkdo`yF^d5~A}(dN{=+YN7qj{NTzOC2x8oJWd1F7>aMlna{mhYNqB zc|K6;cslbcQtsC_Ju)ThHf|8I+tIC%c7!0{r674Zx{iVJAReYB%wf+zI( zs_*7;NB9uwkzD@h2|fK%yE)9)+a<-O&sWy;`-GXJee9<7FMna)$MAZk&pVn)sg>hu zk#fF{;sLGyileWfb51#P~PeW$UMKuQ3N(7~WbvrPdir zjpL@D;-bn&hDpjx%B#+<`DjxvzSmlpXs_>k_zqGQ^p-sT;?on_^V)kzvo*{&PiW-* zEt?v?FOcZ;+J8T_4yV?V!ZMW_sWr$y#qdthdN0*c|8MV!|1i8Yb<}^*-ab3)bHCyJ zZ@ScyqP-n_>UZ>{*Y1>*Nql-jPxSwpltis}(bpw~hVOQ}-cy91n1{KD#JQC&FNQx) z=*Cokmf_uan?Sf)xxlz#FLq}hfg?Ea<&x*^m!H1b@HWC! zUhDoTI?xMBZ8scGxS3rrw1@s)HHmu1Nxjq6tKihT{Hglq7~X~5r55(^0-@QFoo7Kg zT5oHeZ5N(;iAJ%$^niv`@N3gyU(t-=ppK@ zA@$m~M>_SMT+dKS?m?|%Op?q6;Fgw%3cW#C=I zJ9jX=)&NP#)p{?!yG?tpLe>8Mc(v5B>m`Gfn!O~?PG|#8|KtzM)7jdFv#;FAnfs&c zdS~P0HS0^gEu!oFt=}gz4exu<19DL5YQviaFVH(=g;8K$A~3T(Kfr^Ir%B2yDhK!8 zG?SDp)g+qoi6(J}@Ts0kR})r_`WJT?FuP=YIla$(@gViiLCuTwH@(H=1=t_=3ru@_ zduDg}j4MKQ>|SjwFqgG`@l(TlkJekP{jF7V3Mtc>K}NwSKEZR7?eK+o#dE{E3O+S_ zlk9r)Mam^gy&a?L{ors@+>o&Y1;SjVtJDsOC1^8R?~fM>%+4#@TF{K*dArV|ryHy? z4evaiYt#8e*I4!hDFfhjp3sR-Gfl&HmR;}1qp0^??tHP9p`bIpcz!d#{!KJ@E{NLj4)#w*{*JRL_$j*i7`e0oCv-u4Z0X^={i^_#Xmj)xOT z0G|Kbk$T%my;;%qmi#04T`2QG>2EC^-(SxveT$1#73L?JGW(TSQbHXh&!!ZqC1dVK zZ*mW>=1J0e2Q1DfWgKukp{u?NylMC@vg@7HoqFdVpxzBASdsqr-@Ruz{OVSLY3nr? z9jWmk(vsO{6lCc5_Pc7tP{W&)Dk+C_d|&#q11Y_9_Fc=TC$!kRafsoquXvuft?^L9 z_aDZc{_f&54l`Zq?H^t5ZO;}6J@31`G29p~XB6ZqJ;&|xUBVr}oh0Rp zD<#kHhQml%&`nbQ#iu859rofZ{r36=ht;#d~bNqYA>~{Y%3|F7QRHvhsx7}e0o9`mrNpM z$Z&af@0j{Mr#CXY>F=xz>g_4@J``Q=nonk(wJszv&{ zy#76RVbLgsysuik>+trzIQZcuqtqK$!R74WzVHD*CmVq?|Qp zCmM9|%~J2b`SgT7Iyi(Bk3PS8BzVN|^|Ncq8bK|mxeUp=fLfyL&xbE)v>Hnid1Vyj zC|<7^v*2rV8Ks(L$_2mtRQ&UOmB!oh=?NWus1+#}>hp>3lfN>2hvAO&rqg58Gehe6 z00j?w{Gmy$9y7eYhXwx4@lrN<*UPzvw|!?x@imo{cAt4k>7`t@t#a83$3p0!7wYql zeVMt2Z<-C?-xv681^%rz{Og9^n__tDz>kfB9y%KPF5h{B;my_d?`b0NANCF-rLRiq zwtRX*{!tsy=`PggP8(Bi;G8uZe&$f%Z{&U*Yd;DZ?GN=S>4gRIfWW^(sjTynt8c?k zz61Dkxw*+&gX#u;R^JjDgif9#@P{Zr$o#GcDGw=^U38VS@V8g4A*JsvlBX@7p3v7* zf5dZep+46uI6ctt%|?3yKQ9W`=`HX_*zmvp`I%b4*LnZ&SyHxUp9M7yZ;8(G-xDR} z@i&H%(l<-t^XUmS-u`V3;Oq0W!$~y_Ur!tU6~axA`~rN#hQI#M&TF{teWa94KUd1$ z`0-D8TOQZ;k5&Afec}aDo>wd5Q9hB_uU<+@UwvLaeAv~{KX{}4%S9^A5cnUUa)F<{ zZ~eN9c|26$Pf++h+ch9%G(HETV0?3d*6Wk~KSM1Ff3CuOYvy#}se6l~f zg_KYAxrUk568g8{-_;)Y8!h1PM}?yOGuM2+jGij~4{G~=c>Tmu=C8K@{uTo5u?zQ+ z;_oW(2lMF(U4H)Cq`39@;sgIap0{A(v9q=C&_)ppJAG-AQxnWzoxgllmF0DaI zYxpSAvZ#o|NlDT1ZKz`!H~rtF9PcJ? zf9W$f3;Jg+fS>2D1%7XVKf;DTsrL7ik=P>z{<-xee=xfVDZQ?jls6PV1LEKGfen=m zA|E`VhGVZHM4w-wtud+`GuKcWj?RZ_Z{ci*T#n5BOCY|cLRSv zDi`e^?fv?7v~|_y&QbbLS^3m!$YJzH{8m?M3$M72luuO?nW6MEsIfuHHJi_oU(%G6(U!b+#c+tc7GnIZ`ZX_w^eY*Z3!@C{5%qS4s z+7pTm-9^eQeLmlu@euTH!*7xd{DuO*l@0&-PtLjrFQjt&*alK|{o8l3m`}Q}@5)5yjwvtj$?f%x2Uq{!jqa0&5^?E|v z3+^Ljl|KLU&lfI({^6z2f6uPKpCRx+K&1meYaVX4)$sP#(R^3oKl7c$?^Rht(JT8~V55FPRGbjXwc@KS~zuZyj1U zf%PWEhP^Vf`4@AX;XR=Ie~QAd)pi>xFFq*nALkSO>haa2^wVc^EziF7@M`c=N9glW zf&Y{Ze`2S;o$PT^nok4s32zenKjRSmuS zTg$N~*Xr}DfmQE9|2F(jI{<&~PT;RW$pSx3V|$!7yahU%=PQ41|DX3xp+779?)HpZ zJc5+$+XVjgd_rUAFFt8_8|m{qeGi?4{*eoUAF)Du3;Yql_k^tFx4y%oXB#c5#5nHi zoVN|{cm;N+0(fwKeNu`Ta1`^YJ>E8a57@xEr2?#u0J}ngy}Ps}wQfijVEeUY2Of9} z8)~m|#xIl`&MbV4l$()up3tSXs za+C6j;&rOdvy4rbl2Tvi^tRhNtu}mlHn8DY0J}nfwO3$AKC6cD@XK}5jvU3=fk&Pn zZFs-dN&YsUp3tF3vPUrq_1QP;p3#QyIvZGX5s(|U18g5!7CwM)=EoV{^{oWhor<&B zlegA}+iS~aXv^MC981a!0C+<0#jUJu_;z>IZZ^CIV1)wgWd+vYR03*IHIzQ1;OA>3 z`=HKimS8*&m6Q+pWW+DHhm=S3`TbizTw?g1w}JhCti1(PRa^A$4+@HL-C$y)qGF4U zP3cC#?oPaRfn5k&JRY(2+8x(!>_AlXVs~H{h>eNC`+nDiedG83|MA9n?~ZYC&CgnM z?$v9qwbwc4JZ^u+*P^jj%2<5Gg@IaFZg;9q&qvj`6N5qIOs`lolG&Z+_r@u%3fn9x zAE+7rVyqnfyf+VEETb}3V8PB$TG(Qhvz)5VMwZ+C5eG;eY5qQzzmVikMGAqeP~jnk z>wUxx6D)9O&D}bTt)j7m@VwwNcFxfj?<7>6J(GQG{aqtwWf=H^&X79f}a(VeCK(un(%j2Yo5!?4q_(L!VjylIbmvdkTR;DIjDZ-v_EPd zTqV`d{wj=EEH?-y#uI5C#c0>%o_SaoHra+!Ny@ybMv07qqPnR8bVzJ9|&ymA~eJ#_|| zslw;71$@Ipbx1AxZ=cT&$3x`8hbFcELXx`oM&#n zbqYhS0mB=6G(D{ukFop0K=<~7u`n82ri>ME-E&t9b5X@?q;i(hra8zGH3CMdUZ3;s zq&wJxsjzbw&%2s2UyNv;hJ}C{dS>9*IH~BFe>pb0g=H9$b z@c+cv8GMpAKJpffU4&nS&1nJG4O-Yw)E2Hzs5<-hCL7579wfu?7l-co9s3|DB>SyO`?sCLgnrh8Psx@=Z3I}TH$w zHb>1EBgUF=+Act2Rh6+7NgoomurQ2DExd~=W~XMCKtfSNxbmXvX}eJeq=*V1n9wRw zGs=mv&7EQF;!POC_im$@Lz6@DV%krv+hbGL0=!#>z#MsEQxYL!R);MCB|`)mM0-?$M1TH~ymg9N7zUvn#_z z_usCp8FR(h9ljo@N@Gowv2^{Xg=4p=8eo<)lP?}L8l)Wx0&g3CLz1`k%?jeI!iT=Q zhHFLxF;;F2jK$x8Fz=bUV~ZHm=xa2gu|CRJ_KPm*u?<#rc3nBhJF@Ifhhq*e8e5FNA;|>>cK{i$ z!sQlO(`iOmF;<(cX-i}Il(9K0cQ3_$P}SKWwW8nacz=l&R$H~EoXWanSPSw)&AOc) z-dv&?*~M57w&tGeFm@h(RY-ET-kE)I+@(5gALY1w8hhCXSH4sO3{jPy{$8XvydV|6 zP&?K~Gfve~b=I>GjP;?hNy=FE_lZ_`u&S74RXkRWnA3v7=m_^3hmjW$euUH)XZ3C#nIOtF5tb(-|P$G5z7P3;yEpZF)wKA}XAi z+rO-4lo4Z-@scV2{52SR4!;U}^b9eFP#?;em+~AvOYAy`w)3O0*7zHe9Glz}q=pI? z{5JTYX55EgiOF#d9hXTown!OEckn?EycAZ`c2WkaIyd$Mxu(cY{6)@kobHZoBq|-Q zLVCT2X3Q324cGvcY0O_4JKV`R6dN&BXS!-l|BiPjYhlBX4=ubY{^EYh`e7iIRQUVh znUgicM~vm*TkGdnVJroH6)r7anNl1VPSN*q)TA0<$?IGoQJDVlk_mrtwPNorR~*2o z@T+AHUGe?JaGX(02fm74L}R;@u|V(Hg|H^NP<5&5v`a5JgKWX*)50zI3tw_ytAbkC z02N*{)3%UiY!YLE-C@k1#(FDbHLe`&k3&c`ZMRjEW2S?9`e|Y5(Oz2kLlh?@xx>Z= zAkixP{6hbJn$cN|4d<+pas|emm9Yj{4*SE|Q#sqDirHiJ?;wqov6A?UJ^Da95WdC4 zZOIev{+i(^#`NAWwu{DM;a7zu=a@4tmlpQCF!M1SxPe6$7#JWUjbB{taQ(c+qbo<+23}~7Cl>_P&KMmx!)--e4?JmOaS}|O)hCUcSj3#EL zbb^_imtp1|e5sJ+?cP!MwXk@}jjAV)b>l&{sR2{!^I zESlM<%;;+troe4e6HZN)o8G&!fP7K)v9xppgr%O&P0yI385_jRkP0w^uj5Qf=%LIw zO|FIem;(y2S|6*rxltozB}N=JE+NUDnvEHM-Kq$uO_&{jYAP`qQWyXS2?B`Rx$IDUQIcgX`syPjY_JAdm1V?xmBUQjGPLx zL-m{HTb?02SB3M;9$OFNU(6gD3Nz0y!b}Q0BwS+r(eRxX)=%Z8m&V*|SaAHU7M4r7 zLiN|(NBFCnhF`kxdW-!}RaL0KHZZe-X7(#H15a4D<3vq$zq+8^YeuA)$-pCyb~H0onVEIB_X_xZ=r=fW?Y0f!wkquOQd^-JA)>UZ1eA(V zskTxIy7b3*+zwOLW8VIW@M0B?n~@Q})ax%wQ@Hzka{)>jl~NCnt|(bD<~?+zDnk&y zr^0qOZBWWQqU6adAP1;)1%6gYa=3G@W0)+J^($oxBiurTmu>lY6#hT_HMDmkt0s&} z%aqb+kG%CT(<|$jo0ms;p9%+jy;D~+wu(|Y&I(Pb^t)0zJpKi0tfaEObHfLOGpq0v zm-DE-QKIxXHGsj^Zk)UEM0ag9Qf*RFno@O4#tz6qDMYKFHcHEjr`XXl~x3r1r&LUcr|NNzQol1kNeS;KTqvYJqm8 zw6JU{oayOqoLT(9i2=$~yegEIQ)!=4TG_e=T%kx+j#XFdAiPM0-#ffLfc=jsjmiV1 zzEqm5ln!sd;(#N^vV4-ycAHFE*wZo$r=J9F%n_w4d{PxE1t_I~oyx#b9jD4Pd`xYG zyQ*-NHV$xFJB!lc;!sNY3rf!Nq&@zA*v6{1Y1Ly0!pY_Mq$3r|`)P)oD6P*0rN5~3 z1l|^21#WBt&)-Y+g3+OE5H7C5+y8pJOEZ#CDX0ivz95)SrEN-S=lOIOvFxe?@_7lK z2)|PYzsVgEaDshQls3_E>PDr}N@>;EB8~CU8r3#UY+MmeRJB+0(-vGPwTM!A9>|xW zl8;jI%aMeAesl$vqf0=x{W$(m;Yja|*z>m%rK;@ZpU*-`Q%cPu?BGmyQRO)EPDj{N zg*#14vS>zOQOe2vLll+nz#j`q&fw4z4&Z@Od{T1GnF#X)0*Bd&Zg2));;E>JQ9P5J zPNj89DfF*nePs`iu$y1J-%w2iYM&PXkk-Tcuk9bF*yGcrLJtJ{ZzUPR|`ASEJ0ovPpZa7Tz`*n zl6q3o?uuTT@d(`u74az>ltQVrR4G+nlmE6BCbz_IHRh)gx~RTaEBHH3bhn7oX8LnY zsMJR(b^5RzyMgEGNuM@uMfj`=Kd_tBT{A|C(qhg=d8t%MDg7}$Gn~%ms%_4XDuZwp z6`nlpYYxru5~YnCPfuf@^b;-;uH7#jQU(WvsvP;Q#v*)7h1YJ(Uq&;26QyYG+qP5b zj8gLcG@vbB{iwDn_hKo+jZ}E#y;5y8;}*(?ifF}CoiS9JtCV)O-<*U7Rpr?3p8q3G zO;k7`XnvArtP!PHR)jB=x+tZY^PW55s9)9Clg5b%w^QMKwnv;aV~{BAt_3AWDwR@7 zUD{gC;_wx{86QjN`x)UjDtxSVi?f>HAxed~YTP{yrH^o{FzXc5C&LwLOr;MI{SXdN z;X7AzVE<$%N}1@ftf$g3rBq_Zqw~1DqISCXI)6YorwTubjybOx7csS=BFZ>IX(*MZ zDW%=()}4UQ-;htT{c#=PCk+^$*J;TK%~&i-M}C7+Z7Q`^O166oX28d>unyrmPv+tX zXIJ6KS z8s-h9%2e`KN_h*Go(CUKr_u$#8VHY9;XGB`=HdRMD7h4X(yxb=;8no&}ee&ZB&mP(J|RfQxwSonjbe|qytNhxm-wyN;mt=DZe;{(=T zRKy|<_jy#>s+4woXnPZmFVKsX&7@HL)4;do9ROd&6p@kb814V2$gCorP_-J<7J4C z51(|SZ4kmGRe0ph{4MbQN0j_{Q|Z+SDA_BepzkgtFomgd6ggKH;YKPPRdRo@X5hak4l%|RfQyPIn<^cI%xo(^!&hDgx{-nx^k{wIh=oD)kj6#rJFOEN=uYd^S-4Q z!pDOvjczpXcZ3~P_`%%lc%iXblnS#V0;m+IlrkRL{{^Q_sv?4OTtv8|3cK3Y`=S{m zL}@0S4`(X5E2Ud?GDqQr1dSMy{Ij(W!p~6-e4KVt=Hr^-DM~-M*LV^Ir62IBaK@1N zRe!uQ_GQA42P+J~XERjoJ#e|-Uo*0bl0PTQZB&X;N~TmX4ZX!HHg$Kvf z8=@IEv6P}B^7G_sG?nHkC7bA)M=(LEd7)9yJ_vuQ$EV(k(~jW&yC@yxPR)l(ot0AF zu(%Ywg;w)-Bj?WuPgda^7Z;^y#z0Xz%NOq&mE4q4)s;oJAfZm{6^B$sxVH+&e_XOz zGir#^dQL2NjzcL4UKM(F*t-hYGpV*|TQ^@tybw^~qnTe-z;9%T(ykm(T1Ta$N~wL< z*mZE-)Ol8yxU)F;PgL#XRAB*bfn9)Wii#-C9x;SU7NxY~*%s`&Lsi?H+VckCKo#E9 zc;!31{}-jq8KG2*O0ASqf6sb2cyropytCWh@@d?tx>Z$qrRhfPW7gga#tvrKp{wqpxblv(;X_8W! zx7?Z@pYHWz_L^2HW(Ut%g@-4Eq}PmDqV$4mZY3%;R!ZTKXS3m!iRuM@84qYUu!6gW z1-wPdZ<^6jl$!F6!q1~n%B_^Vt5q+CIYJ#3&fe1w;gTxsV86MjW|R=6$DGU0Q0Wo8 zD$ILPw?1iMg;7hGEPd}HoKA&X)IIe{Gv32TM@8J=$el~2ElR1&v~*Louo+%da^7?j z;h`$*^!``4X7IHsl=kz0vI~_)Dy8yS^F^YQs{XdGaZQAE6<*}x7>S?W7A4OnP%1?w zFQrs$f&C0j`l|13X|E$ZQNpqLBk=h*QEHh1N*|9v={Kdcs%q#nEi4u*UP$tRzn&nx zO@;f`81PIp3W`zzUduj4rCac-@X7bwFGt}GaRVyV_?&q(Zt$w`jFU4)X+}KUIFxB7 zuQ*Jj(i)|7WmuOf_z0G2r!J8P5T2#No)0Qb(Tv@qgkJ}-iEmA%K}zXec*|8dE>Ugs z=fj0c9!lxx+S|D>mt%zDG|k;9H|BB`-dt&RF3s>0B`a$$ z@i3I^lv2^H>T7AvKX?}{yh!=W6*`BMyp^Q&;bcKMg#{9BZ!m4=c( zm3k|sqhltW!laMsHzc|1U@O9PRk-Sk=BG3xSd{GRLMacGDk`PXRdy6dCv8ZjUz6`5 z{7kh|lf)&(@%c|t8b+nZhoJNwUKLK-`X$YT!vO~u{@zN*S@p8ZmP$vIQs)hiWAX72HGiMZ@C)HNDr|I(jm7;p7gZ4% zxu^}M(p06iD1W*Ka11?J_)(kMBOIc_?Ha$nuNezP$%_+9O)9liN|OdX>k5ZMwavZ{ zGrM7!sBmP>*si$$AxZ~0p6sbqNGZL%RRE2%- z(g7$Xz^e*LZXQy)71k%!Hgy*CML1A}`*(3^h4-I0Nk`*O=NZcqD(w-aJ!dj&VSGCs zlKlImM+kRT;W4FlWY&z6qBNWr0RyQtQ7KJ4`fDuKCmg_FhTWZa9M&flKHc%@Sk0Iz zN_G1}$(>4#l+u89HHW1+@UM#Sv+DVkleqBCo1vP~L6rQt;s3E8O1YF$wO-A?VSQ5b z_vZpr5H701r>pvY(~RPxq;a^%Q0XDOD%=Fw*!m9MPkJ$X6Uw$lxReU}PEL16Gu{IpCyb91EBZxlzeeDV3d&I}TsupxUP7zCs9pz-Yx;-;GCiHKVyG zo#OFh(mp61Tz%Sb4tS4x&C3G?w*R;_+Zmbop!l>rr=?{jm$X5du0}Jw|1F>@BAo`MNmN>-l*X6uz83pj z)!#m58i8;&6~1t)&05XaC`xX8!_$~by_8a$`*F!gSeF&C!#~@14E;I`2ie3XSD5tcG2zf7F$k|#;Rl^uUunkm z{Hh|x7lYDBD$P<#*G3=OfHQJcri$S=5%yK#Mde3s(2SL$6hd#=i%K1pQo&+-t74O{ zI_Z);Hr4RjONCQfZLg{s{Y5E|v(ax;}jppbsnf5kWG1C}iw7r-(}g2?A>O0ysu+OF))R0NV&+1T?40 zGJ;3}%lO#o1nUIsPsxJ!KLqmxWTH3Fk04aQcwd0_1j7UrW4q`C-34S}X{!@7O9gEK zN)Xf&kb|Qp7eRReJ9yw>M^I2ef4(nF+69nRzzWvsV}kGSoKSqv`~a5;UJB^VryM7^ zEg+V!+O`v%5wLToW#{39+ z2q@SCDQXZj7x1n=KuLo70>apoxd|!=@ZwT#Pf$oevmY?}aVNlU0?Kf?dP496{t}A+ zkcGQKkSO3C*QO|fI|6)?VPgluSpk32=n8`U0+zc$Wd^|p0oU2r#}h0Nu$4v!5Eue_ zRRHKn5G26;JB&6W=$WeGg%lnHEd-qBme`HJQ@~V_A0?E0nZ3d5Zo0|m_2AG!CwLna+t0pI3OSwn_(uwp8_Uv zc9=l$hk$bg0|}-G@MHhzL=Y^XFh^8lf?fjlbpWVI&{Due4v$gr|Raom8$Olj*9TB)BKw z8neEe;GBTs%;{=^LjoL_kJ$v91e|7_P9j(&U@hBaFu_y-x7aPa5R4QslRYSaAW(oS zo1r#AYXP}AfXWc~2)M}<`3NctsKnusiJ+)}tW^2B6~IYAAg8St1U3SW@v%1u-ol$g zeaz)5c8cJ>fDD|J_7I#G;LmAm4Z&dnm6(q?1e*nvwE+krSS+9lYkdd-y+b@@1Y5r= z!6*TJIDa%D=p$eh=k+=SZBlKp^Oq&?6|kO*XMTbz0=~2c$V^a7Kpoclw=DqK1>EFv z5>H?&U5u$JJ6fF^uVGnZhCfC&1TlL?jx z$XN?uD8V!V;W+@h5sVfP$NFeW@VkKF%vfE5wgMJ$x+q7`KtLT1u>u5D1$5;6k%hoj zKm)G($(sRk2nb}mBoL$%VDABNi{L#xClvn;n<0kap@2JIP=%2M7gGV(xpf3b1w?;D zig^TE1+?pg6rlu51#IJ%bQpnEKq#H7?gV25>}D@)M$lJ4aaLhHf_4Iq@?J=Jf`$U_ z@XWFxK{Wy2IMlNe6c@1X6EgOF6F^P@qgjP73DOIwz_EXu-~-$xe3#hwUxhUzpObQ3 zGjgwWn32~JiMqM*4fZw@oK&gnB;4tt8Lu2w>Kr_Gox#Wrl6n)Xc09oX0oQ160D&Rk zD%a4C1VPH4Pwkr(HDjsRiztiKbs5=KQukoDD@V{kKnYe+0fMRmYH^@uA#hdp_MSQV z0{5T9UObEXW+NgqO6r^R%i6L&N693!8>eL{^mG=lmef@=Wywye4Haf9W@Z>lsQ%=~gj?vvCL*nJ`h z)(g1BRvJezUw|7+(4QboKo8Df9SDXC*u)a}5%d7SQSPjVGc;qGJaIx1M3!ZwucSUo z-!DHw6_vWexiz>o#P3u==0|e={IwpD^bP^qQ2jLly+eQnoY>w}pA##>f~+9nI0Pj381#d(L6g3Dyay=map9V4kv@bZGzSU)b*q?1U|~%oMqv-k2OH-IdHzn#>kSA`i>6pa~(i# z0d{m^UlG^~aN%-!m*68jCVcN`_1U*@{v-A_xFPZ=BX1%SwR4>d!B&FP0#tulO0ZYJ zC^|h>g0;%tvfpOz(~NUjRCzaY{vO20a7lffYf)!{5dwTUX8j3z3-ID(Qj4IKvN!+S zQ+#T4oY>1skD?GGt4r$f=>UEsC?UX)gYm~&fLsE6IG_^=?3BHZ%OZ5mC@c2t=owsK zfUUi zfdo?o%;o~ti6B@&IcB&qK`&+R>D$Bje8_aM7ww10@{DXKsc&$26(p!8;Kf^jtOUgc z?5+-#?`r^ZDtq-q^5Mn|zu^gNfb3)syTJ4|q0fG68`Gr>s# ztxEzdCfF_D6ANu2SPg*h0%`F6Gv>cc>WOzayaq7Rkkn_`Lpu@#3E0m8(}CoW(Em1U%_r1qq@pP!(L zO1+ zU6EHS5os@}3*AhHl6t4rz~>^r{^ln}6yd-5ME0CEYq%kGv)U?<=w2h1IUB)CebfEL-1 z;w-^q0DRL%j*EM7{wq)XgQIB+BTq?c?G3;Zf;}qrzRj_VG5^`C+Oc_w$O(-6LsENk zzzigqB48mKyc0pNfQQ^gHzw#MAeg(?nglHcgm8i=Mc@U1PhBtBR9-Xs$rF#$dC1Dh z;*wfzT)!^|$f;7hC3h>0`As# zi=P85CfF??7oBVi!D;|}VL;y*=Q01;sT!Hh(KLXOhNS+%1-T|0H!B z$8TLmww2WQ4N~}j1Puh_XLA-Hs48GQ$6FQxR{>c#pp%yYX z`A?qslq>!@Mm~d2g&JAH>OVwq4FKNQkIT4D%Wu?Yb+P{~XXHLf-I2XDf?&OXx~#u( z1oH({)<3>Pq;Me-x)0f29_=&j?z;WT+-U(WYs8R;vj-+aIm^Al82 zsW+EtwF~o~q&}kNzom%GBdLdRaK9$VAYf=?fH;CraGOx1cLcEnPX+Yligl3Ss(?PM z;f(|*0C3~q(V;cwzjUfbp3xnc&d7C=x*KbIEWtdLy5+*S519WX^=tOOE{q&0sSk2< z6+jRuAebp?6SNi($GUIyCtRDhqJr2|y--q5$yNZ%k~6`A?qMmZ@JYL8QH; z{*&YFF2P5*O}L4=5#K>;6p+*lcqV+5kv9>E+8M>}v6bMofQdY@R)Vzx zD*r-?F$8l3EMt%AOE4J#w@R8+yMg)7R@GmB4jz9-_LkHkoL_1Yv{I=r&kXF2`A<@J zX5T5q$m)`MGndET2ucWe$;tc2Vt`x%oawPA64(jYNR>MTNpPD`#z7pSX9*qy;8TFn z;ngw!$rGEg$8TZeDM{U|G*T}i*rQT6n_t<2`Oij`<^{Xk1V;WLsXK8o7)UThfD;?M z6G5;5f7Wngf?fiKa>&;tXerAI$|3+~ zm2&eIyR*SQNLh=E)N@9pz*7R~_Y~kd!5aakS#Ku^?g>but=$CY1lYpOrO!L5FpqWz=eR`A;1M@S|e~1u$9x%uY~}41oYtc_BBBU0eM+xaRi^>Lxm(?*C&SK z{!@ywx0Y`&jxq8UBJqHC99r85Vg!8UZgv?#q<|^(zo!$d6R?$e8cQ%wzzG-F=tmGL zAfA=ho?w`O2CO5UpgRD*Y%O6Iu3%bzsVtmk>z84qkEH(2J$OEX$^xwPXfhEL74VEc z-q$|>oCMe~#R~!(0iD^aZxFnN--LpW;h;E0a9=ugDp0o~X$rv#0m=1{BA8%?far%v(TiZbfEZS7OM(Fc7PF6f5p)zVlIy-ZK_da* zxlp(ecmUutoLyi0XhwI*(?OOoJtGT9>fEgN4+{XY2#Dp%`-mVJ4igH!hn@8jK>`47 zg1*@uq8UzNFP00>ZbqJy)D0T~tR^@lU_R??Ho+zVo4EE(B3PvCHSVztS74%ksD~Zk zupFWY13nle!`kI3X!UarqK#I-;BLviC7W@f%D|=Jj$F$Ro2(kB+ z&SwQi>XP~ihhHIr>H?hT?EFShLcsUONbzGHKrR7Q_{2m4I{|idnePxJ!D~XH^D~oY z2_6er%|h=dxD0^rK8QP37Wbc$RqFaY4_v~?J(BwDU4Ur>YXn?;0x+6jj({5U7=I@S z5wMFrr!Bz{0Y}-{8W409FpUjSm7s}$0e7I{N>B#?-&oPCd2xLHL-ORnCuU@%i=-~j zJbj)Epb6N^W#<{euVtzjRqX+;5xf>qne%-#L7af49Dch9Vg-EW+4d@eg966Ux0pq+ z5dc5I(IgwL?_U0<9?*-UZ8#&ROX`w5+3G{k#Mk9ir0Ql0%p%Z@M^Y8M+ zM(L2c93vY@>RfS1U4Wpffb4X+vJkim7{s+Gc@{tp0pICqBoL$%;L0-IB6tty2|o|; zarY*C{$HLrj{f^0MqWcCs>tgWz$Sud0iJB7MFhJ945GcM1gn(2YHx?&s@B=hO8pTX zg#L^SlhlRT?K=<*7f_TdgC9W;0VmmSYY;RSFrC}#k_7bytl_RBH$epfhv_xj6BH6K zg0=8*Cctk1_`bmm!GZYx2gy^`Dp0@4$aip_P{zyj7)}#B5U`cawwK_7fb2F%v6kS7 z01uwJ%q7?&perZF$plLPLXu}BI}gJ5Uwl#zNOni+-i(|eskd-j-HKqKfYF?gya_r9 z_)gck5P)fiH&HyPh0GtI>;EeKyAR_>dhE}aOiqAhto`$iC zE;I5aoF~*mE>60~32qDM!PR9u!5IOQ*!0T@_6fLB8z6#Uy?~3{J&q%oFJPN$e}XUp z30%}V5DXXafUc1rK@R~A_W^1UGzSPtPR!g8mqAB=RGB=-^(;Rlt4Qi|^olYQ6ccch z5BL@VkX=9~P8#t9wgR5q1Gq`>4h|DaUYLXOG{FM_YVO-ha6!O*dKzm9jsW1R>@wD_ zsTt3bl)5^V4rk;_NxheO8bL5qz#ew#-UJf_4CIp4ieR9CtaMbo2|5Yz;G3>W1dRbg zk{3?0?W`HY<%!>}A~F{v%crKcg}NO-@wtEA}wSp}S9Z+T4ceSymLT)G~Y30?}A z&OUjZ;I@Du`dixx&IlOARd_kUJ^*|HecJ-f#I0Z*f;IyF;u2n#z!v~Fva8{%vy6f7R0+EA0U9ISBy}Cm9KS38c?4`>Q@tk0 zAYdFP_Beu1@Rabe9{ z%HDx%LHMD<^KX^<(h5jDn2}Q@b#B&h7lM%j3bJbk5CjUi!md=CptXR-ob}5P_z1Yi zGoX9~l?A9*OqmFZ3Mj)B_UlvtCjk8TP29x1`24rzX~84dyUWOr@S0G@w`|zI2%ZRd z#EIen!4&}q>Gu3d5Cwpr2`rEwAJ|TKqtvIfuUZ+oR#I2I4lssbu7ES_>U{|&3&=rx z?Ffd7y#+V$0ft3luQ1q|mp9Ze7? zU^VB9T?DZLs&KHbA~+~uH;*u85o{FDjL!W;f`tN>a8VmX5H8?4*XGUyBLvK#m*Y>+ zTfkrH{F9)SfH<~pX##Hmd~i2-PhH%9f2E3%%=O|oMwXD&kGYcnFaUB1`13MSBof#O zILWrVLy!d52~}~M#W+jwSim7puKNit3vl9!vVq{Z0547h3kbFg*w2;CAXqM-5mkZ+ zA_Od8AL>akPC!?>ge?gA3%En)%9Egj0Ohw-B=8e3lCxuBf*Jyx*+$t2N(x9<4Jm$x z0pu32ob%Hw0($^_bGqH(k2wEGR3&d!38^nKG9LaDsv?T}qoV{j1?;Mf6k7>S3s}a2 zE+yD2!1D@JtORQXyyXG$7=pP1-f(-+mteAhLpPw(j$o*Od)xvwBy#z`e7K{)}Vxk{%eC?H@BE9*ljKo$U;V)UuD72kjUQWdl}C%x;8d;^~e zC4ax6v2G~NBG)m55ai=e68)PF}ZO58Lv`*=HBNIM(&W*^ZtVR z6oM53a-IhWCYT}MI{n>V1mgvCD+e1b2?hwL&pFzQpre5MrI5m%ppgLeX2pfTL%>ST zSsH?;AG-crq5?lqq7bJG`UXJho zc%f1sU@u$7$Vf?DF&1Dt!8!p)xq6Nzm?xkfr@Vdyp#pwqd$lJRCZGVw{SS%nfPa201SOD-N z626C9YR1mz>WN2qaMO~J10?lhKER8hqkwE2!0rT%1T<%-av|^#@RHjRjlfO7BF@Xd zCIaLU;LT~`H9-ae(|O<%NAL+A6G}c6uXW;M37!gg$C=%GRwGzk%uMq`Evks2sR7Y&6PWZV6lMlZg{{D0*inqT*|u= zj1o}b3_uftJ_4NRaMvMdBVZxhyexq)0A5a(p8pm8|5H_hoW+n@W2Bp;e!)KUYdk<6 z0WG7rI5Xbga_JpZsP4*UNn zD%UGHhvZ^pc}ZQ4GoKwnK>@Ys#3YRa$SU9mN8@9H@9>vU@*qCoGQmp$!F1)16WkUs zonvD=!5INVS-;B(_6bPO)hU8teX0u2$;J`P2f+7i?Oode-~aPiJ+U4A-mZ)sC8^hP zyfz`|BcLsNSsj8l0@l-BSpr`HSJ-Rw6I2lp#}t_fiV4WTb>rJufb0TVbE%0Zum!*g z>xBq>PPmlh=?8mUEF+)7k3zM0a%3JPxGG>BpSY3Wgn%*30&1_Izx%C3v}R0-CW}lEwgJ6|jmk#AAZ*@RCr_9`tZ76TB3l#>R1i+W;ZS<(_B3=XCj< z;YhuKMOwqi!;*S6XVN(Yn+4?Ij2=R;SU_vm?;AOyp+jAi-4uH(0KX1SbTjkGw7<*a;AloXt5g5#Rs$K-qf~gVbXg zIZsj-64G+du!TpDODhrpnSt`RwA4z?k4UvzavH%A*cP4_O0%ouW ze;onfB*2ve@dbg6fF*q2af9G3yeAa&DW7tR;J$$AoGtbcoCiSLjs6}D|36NpzIG9j ze=u@~q|QR0X$rv#0WVqa!2~k|sB0m;2*wNOLa(YN!2khEIO%y2bQExg1IL}9k$~}h ziR(h(0e~O8&Fi=U_a7urO*m1cXJi3My_3D=Loh%V0lm0!dPI;6KM94-LpSRZL4ts? zoJ5Zi+!C;n6V^6@7y(Y~V9N+11$5%7I-Ou00Ct&)1LouW@2+~lKziwe897x_FJ+Os z5R4R%orkCa1c3s&zk^C`g4P0>IU_|G0v`d@>6zyvs4O7r6F??{q5_6(IED|4;rqF2{7BKQt(|piu!9~k-bIfAWpScCt#+;l zVA{sw?VwwI-E@ncYrI|`$t^d+jt4h~hE1c0te)r1xAD0e{YXKTxnJP}QuF%v zbAlHlFDPnf{GXoB{mok60clYt-BRF&9>GZ41h@n#@rP>uNJ-KPCF_<`2_;+qKpO^@ zPkR{ZgHfJs(HFcYX0=Ic+#ju5>JeR?b;|=Zuyee_FZ33KaS0ZQ;=lb&6EjkLX^I~w zK)h>;k0_oq#S0XVnBpOd+f4CKiYrWUKE+w4IGJLIDGsJM%oICO>}iUA6kC~MHHyBb zSd3ydQ*@+Q(iDG=hv;mIFDYg+#hVn9f20-vB*jEi+(|Lc6qi#xZ;DomM@?}Q#qFlp zo8n4SY(a6hDb}Mn*%ZrC9BztvDfTkO3>4AOsZEwN4q^jSd`PjnDW0e3W{L+X<~79) z6f>LRJc{4Hr&$i6_{tOqQB=2~R9ERp@q!tvQ#@vhRVnT;#iA5fnW9EIO!2Abj|ifv7CAVu92 zJ5cm6#fB71n_?A;`AxA1#jK{7jpEO5X~q9O8sZyMjHmd(6t7dfWQr#!Mw#Mvin~m4 zDaAFWXrVaI6h}}rOtB}$5vJITVjokiL$RGHmZs=uig_s3G(|g#WlZt?D2N42@jk`h zOfirB=f~L5HVm4EpN-^b2TJeJ^zB9!h6d##l zQ;Jtiu{OnMQ!GVsk16J+xXu*QQ(Rz*??yljH^qAtN15VZ6#JUuK8hVoaV^EhrZ}5o zZBv{;v79OPr&!1o+fmd^(U+o)DORHR{&QMw6sGvt6thyiYKq^2A)YkF=M?vv;#G?4 zP4PIzKTL5e#i^#anBr(t45!%76oV*sG{x=|{Y|k6#X6=~i(+|GbfZ|<6mwB@G{tlj zZB6lQ5X29k(uyBP@rfy(rFhL0BPpIT#WfToO>q{*4W>Ar;zCpGN6})6Z7Gg1MIVa& zP0^iVCsQm$F~AhFP^@c;Ux!0fx1rQ(^^Bs68GD7IlPMmfn9dZpP)z!mR{TX2pPJ$n ziq}nXIK|VZ*p1>oQw*T^rzzH?xX2VsQk-UrIVp}cMO%skO!3Vyh@DOGF2yFMc!pv< zQ`}3jqA9MXSi}@(Qp|3O<0z&##l93jCZ!d>4MlYuO4Xz{#T#a9MT#+|Sdij=Q_M_p zqbYtF3URS1KBZ_i#mf}Onc`8315I%=#V)3}kYZC)G$__L#bFfPO|dJ*qNeCiF^4I7 zP_#3}5)?muNGpC0iqB2ahT=_Ad_4r>8B@GN@qj7DP~2pSdnhh3#Z?rio8k>*S1q`1Wt z%TrutiuozdFhvK76HW2cK!`(3@iE2jrg)KJ3y6N!POd`&tOHy}`FkYdXGXZejIj5^ ziL@VJy8vsDYd1Y6JwES>jVE@vq0x?h7O41p;G3VjW9u5@%S|bE)~D?JEYR@txTl5P z;$Az#J`>D986T!Zd^C2P-d~lnpT`^QZ}F)*D0BDwZ{{#ymy1({y|Lhl&ku~CHY3QJrO7yq9(=9LkZIiUZ z*uN)fgVX7u#~t<16ONiw{dc-Yba0|7zVSLJi(cvtckh2-M-^ZRLdMKmRy7lVDnv_s z!jC^;ORem&ahmyA-kSL@9FUg(bSnS;$cn$mYc1?A^*PVf{1-?5kyH1(st~UsdBxb( zLZ)#VF`$-RfRUojJd64ZFkWkhj%Yr=nd%9uPpHOZ7Q3-Ujq=D&U}}DlZQXK5KOoha zlF`4^2i>hlbKyp_g0@MBT^RDSTmIFBf8@;dYa-8hTa&WJ|ec#T74JtiIdhQH;F zuRAuQUJj^T|58b49DmCPf7|bA^_lta`qclf&j90dP!|7EpZzUg;v1Iyfv%j^VFN7V z*yQZltWS0~V>b5asreu0+6?y1{1^5wg|iRlAN7g+|3IDsJbvN##r~Q9PY_U_$e}8Q zHxhZq_~cUk*Dqo~E<4uq%oXU)tXd-jjo{(U{vKfesnNVDL-lPq#QuNla{x^Fd+=vs z)WArs&tPVb^;r?osL$0n=tF(7TcR?NOH}7S>k^F@#@1*5%>H+MHv4ydW}1z1s^0hUky?4LhzG9~qi@wEjxRrT3IxsdtCeI-u^MPjsVR}KUcKgprmwu^oj)r^?pScP< z1A4B1DHP^yd})*&qR&T%T@eK4$>3ReLU??U@&R&V%4Jx|B(eybSI7o+`bPbZW>Bm5&j{G~zkV&vkCZaJ?b z7buBtY31q=zlKUygd{(f82^Z}Zo2IWWT+c5lsXvMZ#a4l9v}HdbahOar=Ea$mgRke z9;ECyjPj4DVz5IYL-GJG^8uDq%oElye*l9XD_*;6T!=H2z ze?q+{@Q-L)QIBa@k+}-6TuW$!CQ$i_N~{xPAKyCvkCgZ!PH9K!G4Zb1Ir8mXb&IcC ze4jFD5z+D13Vgy6AuF@$k`$DCNb@oEBx_XjaQ())l~ z%B7Cc|2(0eW$K5%a{1SL7QC!zsKcroP4v~RE%El`N^mm->g%Cn9bu1|8|R8D!lV$? zMvw4EI09ka@|;g<>8!_iyWq(-mgDf!m-$ zcg)0`k9C8Jo;dqIO7`&s98pmXF*s-aqyMxD)ZQNVv|Ph$1#1Ij=sRj!+CQcte$gB+ zW}Gsz7&&yyr-N7!Y*H>^9SeYi)!5O;@-Qu*w1S-D$!Pyy0vW$&NYZ}K}81HW6B9i7d=b2ZCgL# zW`Tc|N2NE82j@VbKJp!$FWQ`c^w4-^1D$FTGpJ;|MBx+J91ii*U`)rV>VQgckt8Rb zO@G#G@6`TcAAbjHOj>a}N)ee~RbAG$x)$k^F6Hm%Ymp5rq6e9;cvO|JY#wc0w0Xz5 z9?v^b!U4tRznvp(k@-}-=A#O%qdQqe6@%P zASI}fZb{OP!Ua`}|GmPf49f|<)E!iSuKB*?FxD;c9XqoM@EqOa<}fF{)J@%TM)$ag zg%az{hv;UyfGS{!uRmfXJKCZB+s%IRs%9(h^_81+%vsb4GH^%HpdapXw;ihJI5*~)4VSR7$cdkuuh(1<&t|Nct<9KPUR$49`)Uu(cWjWQzlCuU& zV|3wy8PU!mVYHgI(GUEN;OLtFO-wv!E^}JyGKXdAI;|wGKwoII0IOkd4Sj+0y{vQU z1*)ud)_SV1quo7X^ayXqpgOw8yP$Tu1@C380hr8Mqpe!8TH2Z zlG)gt&WIwao|4u--v#AY%J78#scWf~7|U_taWAMbC!icUhER}Od}FTD>~>tupm5qQ z4<1}Aae1meOH3k0n2i>hVQR*-bcr|qo{ubF5{94}()I`H-F$E<-P#n{Jsa$pm^0Om zH525Z4E1XabqL02JCiz|{H;wLbnWPA_bYy1-sAPXF0b#I_6}ZiYmuWI>eu)cRKnki zozd~2;+`Zr-`_(k20DItgRl8pjw4ktG&0e&``N^0sq2GU8*z&OE19Z4Pk*bogZo*3 z%L%`TD*FRxSuxN~*y#~=lkmT%#p?&04Hrw4?r|gdDV~>Ij~J=O>#*D$m!1~8{itq7 ztXt;$bgUOXn09mEJto#IN80DAg%|xJZ4>|cAN7&rU-e<{f$B(No>S*@)`#WY|E4zX zqBg9f96Wvn6-}*+BA$>{Ram~JRs=R+$31=p-~YQF*8X#~XZxcM)zYo@b{DhRNZsJ9 z!Gda^=#1XyhE5pt8)hUo&PeeUoH-jlIEtUPx9ONr1k$X3c@MM~`U*=#25n!8yTSJM*yxBmXW%Uk?E<<0f~th{5p z{GXS12ez;O2j#V-CHrrA|FzuKx8eGMdn~+^1Me#Im78vD;p}Ja;`l*xLMQ*X%ZRnl zQvm*@1T;o&Yd0;#fe$BeSpolx*rq&JPW<)HqOTJQHAuLxb^dESb2ZjH@e4%;gNpU z4A_IFI5Ix*Pd#E7#`}k133|*4T1i}xI$mv)bdNj3Dx!ecO5O3ZbitJJPlr}Bim@1> zC*A&WiWoQx*5P^o{eWYs^^Lm7UW^rygH>Sp$(<9b;BBwEc={+|T23@DtqSD&eOJ6zn`aCl6%?+F_GuZH-yFvxADU z1Uq_L3d}{j(c40vFW{2pQG4|rwsmgucG@)T%Ko08=W+}G`Fvs zldnzCKz)DO5rMzQLv6ALH2f_u;}lZ7S?OMObk^ZG zg?_iwW_)J$EEjR^8eaz6W~k}5x8c@eZ;N7MXM;{I?SZ9ptIVGhhFC7~&es?0sebpj z7Py4dkpNyTv%r|2wQ_(Z&d1sW3(z}X%Nb9PGeNHYR@G7ie62VHvYd3k;)9(Z^x?y` z^S4|=n&3FU(AusxL4KYdXPG_&*K{{eb-T>Zl7xGCsp)h2TTUYl(n~!V_vC0HKX39n zV26{IU$tjT+wEK8S$b8Vw0O5zZT{(mfhf~IS145;HC0;& zV_pBQzc;09oXmga?_W14an)%e1P<4TG<&49gh@7Voh5Jhw$#8oARJ`jS=Rm-kFSHZ#2SB>&)@QlMfA7!R<2N19N@U7V7^$LRl*J2YDVU&Or&cvRKd_npBYL699PYOJWSjY=xi zq(x-}G=mB5!HHr$VMR;DrXH)p1hH}m%mmnuBeZIZ);_hZ&(nJ7(`pq31riPk;E96= z6cxm(dov>70Rkv_fB&`jOeVoT@Atmf_g!DE3uf=N*LmINb+3En#{SzwOr2|~ZX>O_ zLF-%0Z+LV3M_0-m1zvkMQ&T{1%mP}C#|n{xMdaQ_-n`rSFE{_WPyO{NVLk!x2B`x4 zfMx?((w_xnsi{?N%f9{X$)@=C^wMxnLHtZ+(KkfBga$9M*e9^wV$`HEKgt0*()#;A7rAcY;uRuvTty*9Yi~0sluo@S!T84b2Z#N|5yZ#i(w>Yo7odS(pRR0!s znM75#$5MTm(NbA0Z!C#mw~V6o?Aa4bU;8>+9k16SxyHgRgvnI{5SF9JVhDLO{5o#X zPW*LtjhHLM{b(50w3>X;*1|GDkE(LeB3|_o@cX?PbmGQ}P=4P6c$!`+Jw<)!XnaG^ zK4hIcPoYiG6uhdXI%OA$;t%vWgq7^er<&9#m zjYg6@gY1liYwCE&8;zB`P+v46vU(%T%lQMm@AHsvAM|Y?&Xl4)e-gKCj^X?%=_n#zAcK+kt>8eVXI`ljKSHrl6`Vc)PC6DsK3INEk@ zglUc+*QN28!;a-X*)6WYk5=>~*uzXPj!X;tCCfq+e$d4tF>)E~INJO#>>VGwZ)0GM zYKvusH-&i$~ zKY=vdS>-;y+mHtAOgC1=Qr~TuT2K%l=DWIYHY8$%wP0YW`v?Z>D;-y|NI)MpyA4Nc zgf~JT&MgiFW$RanK%d+OnOLNL=I8@B>g;xZ&j&QtE4`-;q4B><_xFAXCCu3$c|Ri5 z`Tfs_cDxHg(-(y5Pr+&nWULjw_sR70=S7PcFB&TTj@q7R4rSg&X)i@Qg&-98ynPo4 z1}?0ZcvA@u=m^5D+!2Hm3}0{Zk02NW#^K`YyEuZ77*bIGsOo$+SeLB*jv1ZtNl76f zluDM3=GTdpjZ3_bEqF>9ge_h+0Ma+Q+NmxZ8{<=zj1t%7X=ll@B2&2g(B?h`t;sSM z_O3r3=gT6_AK+drX|l;qC(Fk1U3J(f*sJ)*=25b&n4C%+qL(J~k}PXbQQmK5m%%zJ zR%TmAT~ap0D!;o7U8aDdhhJCIyTB^HuWYCPzScVGK2u70Mw6yr?cFNR!$A|1(~%H; zv$b`>ACGOpqjgku*<^-zD;4IkK?Q%%X@L&{Gu#wtac9A&O>IXZg2T{sZ)0PAu}On!(nV$MXJKx za`;#6d}0;Jzq!1{HPNqF@4qs_R^uz6)qhS?gv@zdEd7L;FM~!R33K-V{n;Fewt__r zxgf<<<;^4=T4p;*Gi!1H__UutOQrUnwTUeuCbd+nnO%n>Z}DLT1$#DSd@Y zyms0?suYZLrv8la6R2L;7e~*;?RoVDpQ>#_}v}rmT{$wIb=L>!v z&Zq7SC{HZqXO4wGj9DW;R9Q7wgM>Thi6hmc7s|#^N$vQLW8sgj#G|U1It02g=Og@C zHKTr>X!xs`b>7F7Aa2aLwv1iAM@+-giA3DhmU>#9zPa6GN_b>GMMX-`dis?3B&h zN^7y;o)mRn%sd@*sB32$CqmZMf$H#nEA98_XN=-*e;y$iB@qJ|$imUYif;D!FJtN3 z3S;SEPufA3?eQuS@z?}<5Y<@GcPo+% z?4`jBa!P(bQmAAgEpSzEPeAU5f>bn)Ei0}+eI1z2eZ9(^dLpRM2T4JKpvvo|-SSqt z%1eQFp5zmj!L*HFwnY6B2v@F;IO|{mc6#vKfbJmnC7M{1!e5`C?pNfD#xA|BRJp<} z^&g;#L*SBks=oAX*sGp4%}qQpHxrGYYbJuGf>xAOeYPDRVVwS4MjtVCBn`kr7c1CI z*8~^4<3CkreX5nCDdCOQ%rh)a52liSzh_X4-G_3GMRbZSvE`agQDwFmFg~<${hRwV zQa95nwu7V9tz-~sm;TwT`=IhB@H!C=h@;549d;)kVLLdzZFZmf%qMQ0VlvDkz2`RV@<%LC`ZufvG#H)b zEkI^GJ-Ebu^b>W^=NefSaWMBdD#tah2$~UJnI}Fr+RpM0m`WGcVR)0jx^5K>F%h>S zwkDr37Bhdq79l_9NW{H-N+gJV4JPS2p%7EFeV$7Em7Zk`wTwo<%=H@itjuP4w z-Z+(=VAhCFLZ~9T*J}8URP%3Zk#_RQH0IvF)2H>y6is~Pvm3gem2INd$WNO0ccXP6 z{0U#$NZuz9!KG;kY-Llxke~_2Jl6-N@=)2sbg2_<2s&d}Q&_?U5R_$2s^ecdfDvfX zH>>;+)6_w%>7yP0Gi$m@I0iy#I9b;8-|9{sYx*N00nvV4(;7_;K4}#WLSjoQ&Y#^_yFpEasp#fhip;rZ-QKDfMrcL+~o=q

TnNsI%_N>`2-4st{`H>*k=SODbUviF9{Ky}c zUwgohK**;}y5UC`1^h^*L|X!WRN-#;*btkz7N){o$(v@dG)v&}q*s#h>}ZNvHEs;Y zfTG>iW#hWV2MNw4N&0-jOmf~<- zb^5yY>he=1mVAu;KxtL6@o{}Uw*+P1n%N3fh=!RzzSKCMKy_N=OM7l{jX2$Znxznv zH67?%B=we@i6&AmE}Bz_{j5VexLK>Dxs5qS%MT)+aHnO%S} zOyI=h{g!Ue__IHnv}~;=Uxy?h!z^UVYP?bl0E@1Osgv+txwqE!psP5k%lWn4S?*3k z(9*2k$227N_q38fWX|AhT9T^T@!J#28BtZyh&lZS0K}`F0*D!mVb6iEWw<-JC+8$B zpYQulq3$zS?&?ZsLSs6p_mZ-*rN+27V?tOf9h^?At;wzAB{h`@fusR*w@>tG9uQ6Z-~o`sJi@hd;IoD>ZZRH*dZ_6Hnm@M zc;gfcYhU@h=EK1MwnN)wvYR=P&e`R7Z0rkJvwQNw)Y{EkOT){jJ)lJBM=4c~MxmxZ zbfH?3Y+`+Tx~3xH?1-eV3e`FvMdsj8fG__FG~)(z94x&HdCbS`iCG-{_w?1r?|~zn z>mab(OOZ(-uph9Q^NslZ+mHV@_&sp0+BYJ(%&6xvSL%b%s-q8<_O&|EmxJ54lD$+G zO(I8lQ9guy6Z^{oad^-Z(^SwxmeMFKnphEX2F{IzSsJVH4WK3Byz5;KI|}q3r@4HW zJ$`j0)qAdY8rI-yXLBTdZhIvCqxOa5E~qYl)3WyhLw7&UTTEc94$Y@P1JgcdGILFV z1GVGV*N)#*TmH5n-jI*^7pD8&n<)+2No)&+Tc_V3H8YZmH54ZHvF9~Zg~PF#h4C%& zH|Un|LS7+#J9yQBg}7HJYjxVU!DwLqsFL3^6m$wcLDM(2w`+VqVFR~vHRpno3wW{~ z%Hovw7hbcK8)yhb~JI32#1da9ZAe#Qw*W6Sd9 z8Y30fVtlK855*GiBtwG&&E(_{1#n4U$qh+=%GM%=Rw|;Cv#@>J*d1RmWGAX4P;inj z*$wlZ1!cc1@vY$qqcNaV>lra;B4W-fwdulzsk39wUQS8HoJ{P*P1qVm!-TzMWSx!rA}w$0?GT?VFvR95M|_CDaF17;*Z~ zpcX2KhpU|re6KNIE1&SR`seJ)tjWTPS(_d1`ycp~3wylBI99-{8S$pr{pdZ>e_x5{ zP~8lx!ti&colbV>J~;{LS3!Ly8^fu{sd1_}PZ`RZ07b(Ah0$0V>uJz?TnDhzS+k^3 zl{Vwu$ciGPZFZmBs7@IOc-wXkxVItG8PIEN0?LZ5KP(s9$8Rhez8(KofG`Vz#=liX zt1zg;y>2g_)4!XyRma^0il)-UfRKA3Er3~Lg~%hBSzjPa-l={mqtO{lumWK*Izk{a zoxY7NUlxAbx_bqCwjm@nFG6msaRQa^Ud}NBo!PI9?W?WyHiSbW7ukrbiw~pMStEUzItkgo84PkDLxFTV(>nCAzw3zC~>?=eW6riO*Hi!y{QAA(s3Z;Bq?X*^hsk7i#V=0OmvU51?eQ-3=S zH4Qi8Q1bw*$#&7Ft!x*CKh<hc0$0h%#%c;7?uX>N-f<0!GvaVGxCTq)09X%hcs;7Tr)?btLcX?TR zD(fZRl+|h+uOZ_YrA~Z>VVyadpiZ3h&DjV0+0V+$ey+0b2KBV_#VIcD2kaVTpS`^2 zfoypB{`S5HI6Fv*Ppa~^gph)DGUnQ{Qg`>;pfXYw@;=79*R|h;yDoc`#&IaI-?C=^ zQ^=Co&y5BT@MJBhkq2g}C?`ghl9s{}2qa$E?*2Df-85R(B8GydkULR?*vp^X;I#WN~{U@P`x+D&u%#;@>bGf0+oeK2k+cg&WB5J*LcG-<4h;);G_4iGFn5|JiCJSN)4TeB|UVfe@VXU+Pt9<5XKSjVHYZ1^8$g?PDD z>F12Fc)UfA(|9(wyIZra;L)D3uYL7{L#%M zLqIaXL)f-OgMz;Z+pf-z#J(acF^4jd-A$Y49>Gn_pjU)yqorC0W)$ zr}N*nXORE?aF=(Pk@LSdb$MUg<$X*3d*5W4$2$u#DVFumahf@ua{cNP8Z#H!&E84X zH#T2eUA`>hG&!rBU7_{W=~4L1U(&B)q_rT{yP|qdZ!3L4d*ah>bNX448Esm=+h0hJ zu1K`?ob;_w6Ka{sJ?C=$7FNtT+W6{#zI}XGTA;k7&Z#cz<9==^Fw-jG4y@Vi{?q`i z+}E)^ymvBF=`&_DJG`wurMg(OPtYbIIXovYRLD zv_m_L9%H(XcW>z+J3XcBL>*6L3}(O0yNb%p_w?o60wcM`*P|o(kU%I=@=hZ^Fd6B~ z3zvXdK(&(JBH3V&cO+!WRJ=q8<^7!x?mz^REH@~|(?ib@4(H95p*ohnU0bNDBbR<| z6?eY~nD#wlbVSM7?_9{4TAZ18^3qWFGBsTl`0M)>&v1 z<24NU3mz(0bA)xIGdRrI_ON0vOrKyUr~=bMtMWOuxIbMwI_3~^GF6M$P))HX$-(F` z?7mtv?^d?wNYWpNg@fb3h4+(Ad7llsO=xv7F+lu-bInCVO|&?TP2YVI_K_K1ji~^( zKzB37scZozr#M!QqJ#C*3{O@eIa0V@P%V^$SFe^XbhtEU8_&!z=XPlwxBiyQ^EtO8 zddsPJd={FwunFh))bp*x!*`5>KOTncl7;xSIPo0JAM@cM3k-DTYEF6jP+*RSvQ_d2 zW`n6lMa_IW>;I8Dw#GRn3O$H9Q!y)VichUhjW4PVx7PnFM(oU5=j)sg*a@}eKyDDa zfKU*M8EQfos9yFfSz|(jtkDbFMC04p)>fbAl$BqYo>Fe&7MyO}z@ApF)Uh$vRt;-S zX}msxz{9kYre&j|-evCPsI^+RBHWM5 zGV^^n;hfwL4w`kG0vhQFeQ0<8h!jI*7o-b^7}4F}OLQqzM}N~Zn@l~NzNWd%+=IZ4 zstmYg{)uFB`cGK7(HlEf?qrOUrhFDkrwe~M&tr~;zl=W_+E4i^HiWI2nmFiH)cJ%n zqETmewEQ)k8H;P=)bc?ZIe!H00V& z>mG{ z17*A23bV;!s#%wL)?b(B*vTvK;!KeLUOfj_hoPA#v-~eOS7!=6L0?l2S9qt?N_Zoi$LUd)`D$!xQdkD70sY{NmuP!fUxR79QCcIb_0IqqvK zCtf4}_3~JFS-gx>bw{0_9(HJy$+eQxC>nFH)BtPllV*>WCway7izeDa@!L3u=f@0j zmmB#Ro0FO5Qc3nDSLOokV!U02%4#M0;DV9K^AC_pf4}*AOzJgTEVonRjMZZg*oOVd7#}5lcU993^BykmSa( zo=(!VZA8)TbLO+(fr0^z#Ds6BZKk^W#lOYz3GceqB8t~(S3z$ZIkxelRSr)6@Ku3X z_rl-wf!gU=y8nu1lsrVqn0HF})t^*#b_t5@L#}Xb zs!>mEM~98o^k@;$G43O-Y3^P1%DSa@ncA_+lVw|!Inh)lM>@Y?&|W%ORxCE<`-hBE z-ks#tue`q8LyYfP_x``@qiIohNG(=vJP+Vme;P?kvaCX{+QitXUusr@-X(PC-J}E2 zbhXOeYi!EMnTv4G;PdGZ{GDaHcdG`F^gEfVa@hbWY*KOUd0zk&G~77^kAg5-sI_F` zxn?&@RP5N*l*8_k0KJSHNrn6VyO%$(lh|v1SCD-Ko@R+7Fy&ZVuYNe;w(A{k##ntRY_XKeey9_S^p* z!gZ(i-)i;SkEngcgrfbEf;zw6@;{8JI#=g0UF&QN>f8=8W~aSxQ0Jqnlm4z-3;$sf z2s1T>P(Eqn`chpsAcmV;vV|Ivy6plC(Pi|hAaH1}T%X}=Nfi^`mMAO>rTUfG>SFium-e?)SxG@;vDPwTR1}|{_!-`S(kC&G^h7XK zmoTa0>f8iqk(!jg>bpDtQ0~rF^5-U@WYGsHGF;8?Wf!6!~ey73su&Fm7I8;0ZrtzYkt43h79_;u=9ol z=wEE!&j!SH=pr(WR|Qp!8SO27+@i4ns*i?j6zp-U$?1>n+p0swTRD^OzJxNDpRd1a zG|rrvCwzV{#55J9Pv81Dh`H~*{p~s&1i6(wtqIM3Z_)R+`L4+gMHU-1?i$hRTs(`D<~izZShr0&7ty$aOZ4NDUm| zo@@jFY6N9}yg}_rqvBc+E4kcQK=T^wp~j9hoib|IpU9Bk|FIq8-T0V~X&=Me{K;J` zva8A6tmS!CJkM#(PS2xccb_LMvY1X5cs4b&@IBEB@@H|J$lrY?8$e&+ov03E5VvW5+a>5O`+#G8Vcco4iiaVhPtd57NiH@yX3w4*0}VvN>W zA-G3Yfs8p%7$;3Q$isY6KmbHN)=}LSGeVlsK4%+`V$t*T>ug5AiCO118JCdiWtHm* zz*oM?{lHktlR+lTJgP)3iRnyM-`PKzTnzSl%(4R8OqN;mR@SS1G=}FVd_Pf|X;LA& z`5eFcv(qp5j7)xu51DNAxJjSfuNP}4aJSDL55WRYcf}m#MQNBH3td&Y-u)0X(+=%F zR39h0`l@%T!dOFpYedp1*l%~cLqSmG)L>&6Voc75vpH`zIa!A+SvziqXNrQ~`OeN8sn@j(w-z5oGasYxL)53WYEvSW zb9bTt-2LVh<%6PCtb^MRn9*1y^5z-&KGY=6SRsiyPem0G`rJTbC*Ubb3wQ>Jz-ED` z)PHeT9-Mm{Lm(=c_NcPC7yB=+j}M*de!=9n^K%aka$kRN-S?Q>4~isY>rVSG?$CpC zk2AR+^W!!9K>vHaq@M6`Iq^07B@w1T3T6KsYNJ(h4HwDMNqiC}YXL+}WT&NYK!JB7 z&csE_Xi$e8=?VmDch~S>Tdl&PY&%J_-lx`PUO})r(p%begHj}GuvHc zi=}QZ#=t?`m4$F-{Sk>}rvxloDDkB%>>!^rW)srWXp&hw$g5Of>>vyHEFE^WJoIoB z9oRRPp3;|A)=xi2HV?QT{q_6647_L)6@p&G98?^7(m08BCHmoivEOPeG<1D%nfE(6 zX6wv5@(sOle<10dnlPU<`<@L-x9xJ`qQ&?=f+^B>TgXt7xeIU)O&FB3h!EGr*r70E ztfc2gf}ac5qc&p^Ifq_Em$vagf73Ht?Bm)gH^ZC%wWU73` z&<4y5-!1U|s{S*+Ipf415?>!@&00Yw7`*netU0go5{1PCjLz*wXJlyvEPnoi6qVp4 zOu$)U`1(C;%3~sGcQ1Lx$KQD*d6Oa8wa$*r2XxVzBLJX#$4$D9J+xZROPl5#l?}L_ z`y12=vsJjm-T%BEeKwZ`busED<%jt?TV3~MwdH5=j%IoyOOEI3(i8a48>aWgx%bTP zzJaPVs;=xfM=kSv-ih+m56<=Nd*Ar|7}WinF9bufL)fsAeYXRwxx1JD4r;Vs1%{ad zz98ZLNd;b3fmQl%xk_b?RULt!hP_T-3(S_o!F58ahYyXxpf01XgFheU-UCx}uUGZg zs`{?Cfz+vCBOG?O8)xal>DViehKinI|a_)&}N(AAzf&F{b6pE zN}+EgY5Ia@}9TnJ%{t2+w-2geb!O-AG!3E-d>)w z=hM-XUVD-lZ?dou8srl;YV&T88o&YWboYD7VB@Ld3@%f)RnUo?6B7)(SzCX_?%`(A zWOc@b)H#r%p-MT{SKkAJ)ette+{e~sJGj!DK&QUR9v!(1q8qt1mL61fv^HU)j;=%^ zx=yE#mQ*&u3=ECtx1Ruucrp^ZFGKy1{;4wo9Xd}Hs3@JMK?H+yv$51rU+4LWN$9M9 z4sk27%NxD&@#y&KzZJwnF4|;AZJ#ajYkRwEZNJLa2Hh5lkFcH{IK=$`o3iPg_3W4K z8`&543A76J=`zsVm;a%_xmn}tFbNEaPC;{w-k3s-!jjV{7Xg3FPXUDyr^VYRbtflZ zcJy~d(BE%$?e8vile@L@G`=D3V0s9#?0qAD^-RftOAh5xj& z%zX|F$pSQWdkPd_;y}Yo?IpbE&x)1r#WwFBsQ=7LenHhS_Q*!s**&r&w9s0=7kDti z$_WVAhiKY;kR4V}zt+Tmw)v*e&!ZIt+K>P2y}&4SPTrbnq}#4U+)np5M4YLy9W1kt zt`S-6%|=QK;ehkonD!96V02OjlnrkQ{!Q5E17fhBQ!3MFFExW<)2&vf`(?3m4&T0E zHy>c*j~L-6m_aqgf6SoHz|3#Wltf?zvegW&{z9x=eF;m~zps(}*fpA)B!l#o#>HB7 zX1La|YVoMkgnM^sWY1@X5brD+*Lh_m8EfVY<Cf z=dd407GrzJY#%8av(A)ehv)U@g|H5UiI50YG7(uUhw^+75U%&GxxFdEhRo>c3!^NA&?TW&lDH{VCpaT zlKN^By@ORc!qa|Jmj4MR;2P<%ZT@-#%fdeWOtoS>`TZ%gD_OMB#wJM@*U`te_kZ(`LHx^z z^(A;RdZwJ&t_4>zP)dM2N z++T~AI_af4xl&T=th_K)_Bo5}WX#xUQ#x1U>&#e`fkYE4i=v4G-Q$OfajP&CEnIF{6v!30U9^LLV`&$dz`%<)TeCHBV-kDqw-%^$2nhR|v zYK0=stC1PoXKNTUzBWrWI}VAZvqP#Kj~4eN_I}%%g(0D!P9YMKxACN89e1gyarWY( zA6@kO9>x3aZT;ELAw4LF(e%I-XzzLJWA8a77HTrV3* z-m?h|$zx5DE~mTG%#yR!ujlnY6a2L4@TgSvJCjGHE_vrx(TL=UN3c@XVi?-)a}+D* z4|I=8iGM}fqAVdwCYT$x-KQYxXaA4V-q8hhac9Bn_XCm44@Nb4-4~MxQN2 z6%Gh3L5vt^WSf94?w??If&{oS@m)Ib$$AzX0*(Z8R9IAZ2smRsyR(jP8cMH&m0T+< zt};fJ2;xUjx#V#<@a`#lHMd}euM&YGWL9j~gss(FqypAgi5->JCH9@oAx7DWpIrv+ zjXB8`>SMMc2*FleJ~ML)z>JSdj3A8)Sa>t90`las%mI7bXkY%|)IR=kseY}|LoQia zP-XqPCCTZey^J4YkOZ_}H%A@5XzqLBX|SSxtukz&3$>vyGAA;>=cfwa$NNDN&aao9 z?-aft>wcGijFPQO?i*!z3!=SGm#x@3|&|)o+PtaJRl8z;+4z(FdW<3kyL)@%qS)wfM z^ZL`V9DS>73NX}s7S0BkI;(~qVeE8%S4A^B$Rx>?+f57JR4O|^-Fq<3EkIoxR(_D) z4!>+A_6dlcHPQ4i4?+T5jke3VsDyw$9CE|&0-$owenw=TBmvXtjsX~u%Tf_caNa=3 z1{2pDF$eb}fJ~M^CcI+}5t+H2w7! zHP;~v$AWH{?x5>&pJyE6rG7;y? za)qxcjg-I6#Yi*(pz?|8L``u&fwathm{+S&;md2o+pL*a3jLXgirVn&6R!Y=OX%!+ z7X8BXz_RrH>M+NCdi#h!t;irfk_`4-??Dbqb%>&s9U5b$Ois0gWoOS4@zusXH^bGem$nh~>;~>pWad?T%XCF+1EPsAVSyV##>JE9xtRPF7G579d z`Hww*dE~h&+KiSr`8@1Orb}fiK$50;NMq5|uw@R>PxsjyAaKpm4PLD0nyAxnnW#uC zym7)Nd&3SLP;2}|Yn3=~jx~EZL>(4`$@T-yK$a$mDcvnnU@cw+Gl6#QI!Bzu-moQ7 zF4mIeBrK=TU9vo7_7i}Kbzk#|&77}gjlGBUPJCa{J7<@=!s0{ntj4!MVy_S^ij7~z zGT`fNH9lebvzK+yMK&>v;{H+`;g5NU;Wk=}@9T5NG8n}c|EwSS%kVwTjSS>tS%khX z`ZJ8AjoFsjcTang_#M`>2oHi1ZYvMH#VFSq7v!vbl>SvaxB|o51H2gAEpJZHvAJg$ z_O(TLjs3UX-r&a4F^(ivKw$%rSMbmr$eXf)d(T{my)Y{;<_O^PuuYMzh~veacO_2| z_<3c}4G9ri7&dZTS5>Grt{0>$k!H`xu*a&kaiLWY_W*d($vD9(LPwaz$BW^=C zZYr~@p|%5b;ARMS!9<;H=cfjK&bGAkZk+@lL7g@>e(2%wUFR(`U$J(ePP3ShMd3wJDxABZ;q(7z;JyMq+$bq8wb-2#bv9 zv*>eKd6BSDcn23g$RA#;0Qn+K5!J7rJb3mHq@GMDAsqyB5dxE`oBO$4aj~U8HgS^=2 zJ`$g-XMszR%OYp3cOJV}>BxtPHYW7~rZOE_W1dHt=f9ihGk8vTHwj)o*J6p#)+k`LzBR1-W`nh zo3{uA$g+%xDdV-Xw;oicdXk$)tcUoECjou{HJpcJB0c|#z-c~0t)*qE*WEba_i*0VAhE>dJ}365NnM#Fb7%T z-8)QDFsd=? zrtAe5^3X9npVxLC-XLX_L}o_BuOX^vShAK>Ni7=Vw0h-$v&f*=0zgt>v(Jxns*A>) z*nVup@UuyJlk#FCl?kD$vHeRV`v{Q?QZThV9sL@*#T* z6MTMpU>{@Xnmvw+iSVGCV-pIs4kV$Oz3q#<*KxCj6tZ!?W(HYuANh+foLwhXY+Rk= z>oy(4OA;>I8{0jMo$bb`@*XX)wg_+jV0J~hs%JHcP(PV_Kvu7(j&Em?GZ@0Cydij} zDiVZD9N131K6;t&Q}S})bPel@C&(uxN3bMHh%^`^8s)6IAl;j=k*!=-!`)bkCZx*c z@PTS)S9HUUSkL_gqG*fhMgU?O(xam22G_V@{Rg$xB@RG5CvqpW^=u2|)mR!pAJFMj zBOx&&ubzxG=?g;w4ni@kXdnZC@m6lkKH4ud(fzuh{Ub_b;9Ze@fX5v-hMpn6c+<#5 zXh!4h>YbC8K;x%;&?a1?ZyAMd;i+i-fqM{175Q? zL8VaGs&430Q0)-he%M;?gP`4*^M(<1p5omf2~f?j*3~$#dJmJB#oeewT-mk&dAYwt zVwv%>Wb@m?Ft$h<7j8jAdB!$9u>sq(g-?ll7(6j=%`2Ob)~6p1F%`&Ke|`zB!o4~` zaA;*7UH%RuP>fC^Dk1Vpc=R?1Ae5-4oJ&?r_C5l+I;Wh*yyczO$Uk3Uw!A0jnZT>d zt|O%T^$%%RaV?j4a-zgaZlm%VYeA_zmuj75+Ly10G<-Ek4_rC7T)$OwfN4F9_VZ&U zuG}rhZv-XQc<=%tFJWbPyiLk?@=GeUmK3G$SXl>u*4UEofV5PuHmxV$mh!@O9yiZTi*l@FbT|H+3^*>R;I0d&Et1&z)5OkS zRQGI(I6HaK(_c4p>-TG(F;-j(SI3W{y?2KHL~Q% zd?eDfVd5M&+^(=?FgX0G!WgCZA7Rb)@87LCN=&2FM4X0&4zy<7z~rDtM0ES#jISl( zS`Rfvikjkw!rj(qj#+99qU-rK7|LSZvy%KZ$)@^~h@ZhV1%tV9^&GqBXLipGhJtk2 z--lhKMy6YmbR&VU96lFVweZ^_OR}G8?cHlS^KL0CsnaHx_D&pXD@E&v;IYwUd#Vg9IThk zuq1PlFV|eZyWssVyJOX9h&H=LGOyduF^q!ZQz(+|ZAaM~JkjG@F;RtIjh^VntiLzK z2$Iw6mD(Yw^g5f3bviPwzx`Z8@Mov23(|#^u@I(^X1lRDK3}{Ot%Qc{@V@wIIs2rw zz)D{a(tOQnZ7~)u>sr8hgza(?V?VJL+t$8%nAgipoLJasMsAmXEj#0wXgSxUFNTIi zoi@Mi|hk*y{x@3&MPYft;NMoLwmC~?9 z>;S@b+mNcyuo^E@nziV&!86)@lj>AP5ul}an;DTxA7S0Y#X54OJS&89DGE4SC6~6h zkN?X*7i>8^(}VdB@0oBcMEzhBdH)(4!)Uy zP%C4h?RGj#LJaj7%LqEi1~`jBqEEy?wA_Z4!f8cDyxlzbc7vCr4i|(2S+(Ua16d03 z=tI_ccn^F7$N~nf3nw4~jF)KA9Z&m#{fb1(_4(MRm_~yEVP{g=s?M zVT-&VJ@9&i%%FWQu-z{>=}jH9-18Q)32`+&*3o;1z5;>;fFA3kOR^c_N!NO2h}SZh zN)0A`DJ~EDj83Q1^qO%5J8S(@pc-QNQ)kFl0?6Ie3QrHVks<20Mu}bSyxa-;3`7b9 zXHU(xCP-n14e()A!=@Wc4H|zHLR$JEgWFNeyS3v#ujcG)fZSLRxmv?uH& zHNL{LKBjjXnWk%<$L2nm{h-pUMY{&uY}7d|{*KAqRtDs4LPLbE`l#fM27ZhbP`+2< z-dM;8aoF5!B zYS(+;=7Av?=veJt1&jft-F%%3$TQITAk_n{gxT|9^Df@KYv?@JbrS@CFHqBqf)LI~ z;{8L+iQ-0i|B(>g@V@3D@&19@@ETxdo%g;_IMuzkaC*wJGBj);GKubgb~IJ%E8;-Y6p9=@zDYE5e~Zb`b5rfq@A zG^{Wl8FpCwNOwM-jYxk*Jf@l!)`*o&Obl447M!GIY>8_sXEKT8&)o z^{3rD_Y`wqn32PWfDpYQzJ=j4C;rk-9XAxXw-y{CBCO*Hc52Z3W0_j+V8T2zgcOn% zn{&JABhS$ckX)f;juZ0~OIMc-TzH1E@u65BjQ^$87YD#o{%HDK3J*;fr`eAF+UcL* zpugE&aToI}gY|7@nKrxs^b>F+;%IYG?@56&nT07GR;RC4)kDuKulw?64B+anr}5K-X|_z^UMK`r%X@I!%}bR z^PN7g2zX}pJPFq|>o7^~)i+5XT252KPMIVM(8>CTwLH#U zDXZ`0oW(h-@8B}m1!};TQtw%aSC(Hot?rh4K!Nv7npvCT|5iSo6Mcrnz%FT^O+dW$ zZXby6Qkz}DEdKLgX|h2TeGq$gaD}@D>@?7ep=P)H0&m`FdHqOD<)$v^FY}ted|Dy` zejIQg|AQ8AWym{=#Y6t2-vj7(W^Q(WVY531%=PksY@ zP@jJ1%fWdbeyN&y#$MZa9kuGdAl-ALOU~akn#27{j)vc`l0!fMwk7;+{S@*LLIirN zV!WJ2Rv${({5+=6DLh8;3Fh9Tz9bf_2E@ZB_2$&hBiPG)0=+zJray=GgyiypUShOq z)L!)XWBwm_I7Xe*U5nP=m)VOh_5VF0%}pU;@?hYg}z$(PiY`s&=T%hZe~g7$gr zRs+j|Ak*;|83qlT+Ee!n0kuk?Ht|EUtp?}E4o3E$sxZiYi%?en;eI^^$8o>3i+vp5 zrFNYF$4AqIyW{~1q;O~xX$uS5(2#n#OaY!stiGdM+ZoknhfU-4 zn`MrG|Jr_4cDk?%e{qf-o5dt_REZ%j@@*FMZbu%-W=%C}#-q+pikQQwb2J{?#oq+_ za(hkM2yEUE{>$O(X7^V183e%w*2O~_!yuA-Op2>LnQ=4aW1%YEtH{eiId}hEB-}?r z2fhqYJqFKj=}1rcaH0cqtVmj2jrmN*Z6kjyfZ~+-BDv2WF$9|222A`yj5=Fx=kHX` z|LB(sYVrEy=!;}fYvyGTw>-?tkN9LJO<4aOQ(N%Ljkit40PmMS!<5eheiJcDYty`i zz$dvn-h=7$Dsc9WS0A7!o88IKJ&11T5?_8uNTb4||EFfUhu=jg4ruIn_A(f(d*ysp zvDv+s{W8zj1WlX+S*Z|+*Kr_k@FeU%g?8vY-~@O&hJQZ=pqeWHstR7N-)Z&z@mj0z zHCwE{H|(^-uhip>0top`Em#QDA@KA^+5sTqs~!66uehDfqR&+DEiU1PRdOicqGE4? z#*sS@lLa8Twu{^{0?6uCWfqx?dB;!ZSQ+@<{*b|aO{3c z1K!zn^mfo82n+20CsNg6TaW5@3Z(WNgfY-ZyDYpdggqjwV1)WUhX~0vyYEP{x|W4 z(2D%y29?_{w$sOr=cZ#sfH4xw^TbQery^fUxRzD0cwQ}z1B6Li<6RPY~w@Aa;RJ_YHbisgt<-f`9%;1o_31sSE_b>D2`=NY|&Mylz z+gH8WL<~jnNlgBQW!1jL8GP{PLz2;a5RbtPM4fwPw6u@{wSO4Rfu&cHBGD)iiNMSg zXZza6XaNa=&lvqKEa$(REHq9@Mls=@;6NRbg|ot_Bdd@QjC^!C-3Z`Z5{JzzqNCM# z4iB=0+Icc!xu!L-VoWEKd=)pVX4m7XgufoX%skB(`US|QS0XU~KyC@nZ~@$GVxbzv zSVcQkSms3yjzV(wxRW1YN)scI%gQ7J`F7yc@CPpJQ{cYvsG(goJWKc4N(L4A&;L|4 z!(XX2wCgYU7K(QLLE2|(_&62Z0LXg(%+=>^V5z;IGSKWg>~RZn?GDRNH|A&q9)B?4 zAsaC;;wcIQ^z==4)t}W2@eL9q=<_O)-TR@MS){lPWdpS)sWmbBuZhVg%O^Jqn`^ay zoIP1{r1ubc{CyGR5(aoT@8MgyFWpX0<*>|E#qNVsL<^eYQ=}N;x<(Wq_c!Vo8Z&1) zogG(R<<%iE2IJEG+uU1w@crAT>;7$y+jQL1`CS5}ahgfTZOE?sx1qSfJ)L2=?;QdQ zS}_;L4{x{@LU1$E>OuPdrOs~W^{jT!&`@EgV_PrWsjg-K6VugC;VN|XdDf-te%WP< zbO4b3lE|eUXGKdpQ3cM5n$xVC-NXK**&hax1`<=JNecNnR1w5tAfLLM{zLeQu~AIy z>^Vr%XZrK2^P(n3PJA3xu2Za{0d9A;JWVK?3;DmBm26}ge3kS?7MtCiGdm7qE^II< ze^UdCjdGQ{!qwD|pwFS3@iS@qH`w!sl@W>nY5#E3VRiR81Ezpg9=Zu}n5I&$aORHK z$W_J)Ql0HY9nEm{ur0^7eyT5wkEoUWF$+G@l-R+tBgxg0@J*ure4)n*k=y&SdQqu&A;D?yuObW;>>P{7%730%C-^{KzQO zgs&xMYJnO}Vo;NKDS|D88KUBqjzFZs4|v- zG1DQv`+a&Zq?rSX`trF1v4Gx_zShvyL03e5S})tEW@aHY2dcjHJVWcBXLn3?u75&D zR9R*=m2c@(&j8h*$|0pcj>aKDb!%8B?^Hqd7DQYhvR8WFe!9b6X-JuW-|`^3PAgY> z@!xfP@3`x{qAMi0{h?074z-dphYagpk2Gu=&zn^{6{MKXj%*3UK zF~sW(#XHWi^FSj$39vYgly3kF0N|?WzRb`SHWr?z*0Lgkfer%{|LHT7QXs0+s@C7Z zidOh5YSvTz8DRP|=t&ktEbEuS#P&7QKK!haW}S{O+lHUIy(D~4=v=_g9Ffhg_YSuT zkn=*64#s(_lu4tvZDKv$$getA zve@aifr`F?vMz{6a1`_?uuEbz5xP7b)FOVJZ!M~sAHNCqGCx~co++|^zWX1l89QWr zNW;|mMfEoXmb>}~I?3Hujlp<{ogW7YHplb+%VSPL$lpB`cCc?kyAuWpP8eqHMwSf z{WDU-A7^1Rk29IR{MOO_vdKQ&$h{#4H_zlo0f;w&7iL36@VpSX)*lDs&qP&{WyyIv z7ZLka%^m0Alhr(+t9{Fyow;2vpj2a;2V-QzM%T%(wvzVDv0;V0i0Wkgg+;a4S-c@; zx~dGl7+|bS`F4~OC8Mrm0==Vo5+1qBdGomgJwH@E@9WFAn_X8XfKGOpV;D&0CBrYs zE&9sBKY6Z?|Lv5MOy1W_>+rKi`1sHMie&O$h+qc)Sy=Bivifk!ClkB~TTJa7jDqvr z3G~`OWY3sWwR5n+_%?2GG?0UY+Ij92lwH0y#8M;x#@-$uPPB74;jI5bw^sR9cd?`5 zdNvl8-%~iin+|inX{t4|!9Tyh+nhl9H^v)NY35P)HzIQRHuid{&K2E}D9(r7WW}f6 zXp4H58vP~85pWW@lpfha}T_k4-bx8GaOMmQAR7Mk>`wcrSXvs32NSh|X1E=$folmpi9AHoi`IaOv= zuTgpG^vin}0r{M_y`vlZfbJLUOJx?+%`>qAoL3^3aF!$oJ-uJCIFm21IXu@gPcc$T$=0en{n)L{{qnA6M`j>&HNokkG)Sumy{ng zLw@Xc3w7~#DR-ql4lp*(QsHR%r(Bq6B@`KFMUNC^8FV+HPMxIAHZ!;%ia-jJCmzriZFbPj&H=>#TOt_RYDpulOV20Xv&LZ7lB||6F+haQ6pQL1uh?MTeSJP}fNg)mJQ>h;9lssGiE!*@@2bh5 zdM+A7fh_Yj807Gw7mkS4toG9#KL&M9PDZDwft|rC7vDjR#jL(BQjr zxogq-ZBG9TF~`>fFG?ZBZ#4nVwk1E~SM2*^WaR8;84?tyWh-tf?eSY%3TjLh(0jc6 z;$_F1dr9hWIy&Cn0Sso3xaTy6DJYp~%Ot zKvL6JBSr>xEIb+pHX#qLR)v2t6<)elZVsyTt$0~qzjr@E z7|jypmr%nx5b$0Rjd!SrgKPou=^Lj;(UBD0m<0E7aKqO4_q2o=%p@eC$}!_y``XNCy)qu(}kZCa(F162QS+l!aW-VhDHTffn7E89lUX6Dzq z`JW=nei5K8`?%mv@;ot8?L=l(SfO~z4FUu|6S2gwOe9O~Dz7nFLypS;Ow{%~~ zXZcFA`NaK4!Aq%LmIf~sdRZ2{ROw}9@G@F2s$Uh1)60v&%dL8O#k?fT8fY;8eO{OM zhr7K0BmbR{_KLHhxF+Y$bJoB#u3zupceIWBj+SxX5gyg6oORA;p{8oq(^^nih{d3H zZ*Ds}I(?bB?WpkRNO0THl60gZvA5@>;?U}J#N?fGo_>1I>7hd-nwlJ|tuG=Dh^BJ6 z`!55MfqzaApAE}~;%-=(Gdu7>kxN7xQl|z^1rtkU!uk>$*pdO%B&y)@g5P015|iOl zSiE)wRH-tqgM;qfljaqCgK@^q|Yoj=GXfr9-fNc@I!s4n72idG0=j ze(IJ8$UB=OY(ipJE^qOEMi~P?d3nvd@Y!0>$G@VoVeg%BuFCjK9(vPGw-#I$YS?#n zd`iQaz+;|q6_qDnArP5q7cjw+0n)iR?-qrt$ z@%pqD9M!O|!b*My0pN_cWarf3KZojA3zl&zsbN?M=f~O9RoS#uL?=UJB;ixKut5i~ z;ri*q2$zAz&$bpEpFZEX(a(O9jENnEcf4)xva8#()oOT|Bns4pnys15JgX$;VQvv^ zHTBg+oJco6Dgi<&vSjnt9(5;8KhSe6U)Uksd8IFhHtf5zewUq|1QkHbIg?(q5wm1O zXxP;FlwpkHZ`7S0{b~b;9A`_3il#?(iz?{IUwL86=EvRA7q4yDhp+#iNRYRq^NQ$B z!`V}AQh`6uoK>xC zdfv?ZQR=5Z@0xQcVQqM0d?155B0WkIfBUhCOyM2xW+(mD=lltu@DFEIW^F9|Ui>c< z;LtK{W$trFVI^S@FaCl-{09=W`zWGtC-{h5&N(FcZE?{PmzE$)#GI9e8^VX|elL`h`p`k+m47QCXjV7)`J*mRw36uI^FOCg-!L(k2^W zu;LQP7WA_4DL|1`-$s9M+X3Y7n%_Ulh z8Tnzm0yvQ9QgUIsdUydXuxI^>l%x0++K)C}8JO)#=FbMc-4|~%aN^%gMamXGK0yZAT!V0$KqYWGi&zF-opyqQMa;Ox&3P+b+GRe1NsQl zUf&~o&&_ib(cg5u6&-0;$OO-t(CG>@(==hKomwhBZKo5G2?$G6A^GbkcFMf7WE0M{ zLwlkc-VYQgp82~FnCH7G<~**-6or}j0~F51{ljeSWXBhp(<8Hfo}GSP*$L4;0&y`ro;xb!uaF0{nIhwEg>q#+&i<+Q-|KeBM<8(cMKu;ny!_Z{a#n!UmV z5y9T)L+{>mdY@^^-M&82W=*=lS=Q_pCbsgau+Uo2uOFBH&FR6JU{%Odc*i$}MIverGN2w|4nHc+zB?sw2!Ts>g=kO>ic_Zm4 za#DVErPDnxntV1#3^=0s-@L%=tz>uD1l-B5ml+Yi5FC7&=g z9Fv~Nu_i7*ot@%cT>rH!1F{-clB8mFp%!cAbG$e^GfT~Uo8i6BnTDoNGZ)5h{T$iG z47C1q^PTNT=h6a{#6z4*u~x7xiL~ic0IP8tHGyL#f%Yf3_h%-)${%!nsVZ*h4Z{ep zi2u`Ca1j#O)c9i^OrAcx`tsb9 zx$kn=b3QhPq84{4>{_OY@Rsiv_Xk?8D@QfrW+#$FFz4 zLiG|PU$A9;C*ODlZpr|+ld#++akG37|$f0V)(%td1Y-g8bpEFXCB74v0(RAT!c4`Q^eEsX%9k87+ z+bV1l(5Y}iyzqRd_X@O4O4f6O%~YzZFN%fVjQ5ms?zSV!atr{I^Up-raSW2H3XHsp zo?l*p>0iMV@36 z*AsKoA&S6dhh2-MGK#pDNlZ3g{}*H4n~0ayO1o7(DZm}nPTyG?vHI2&8%9){o?0B? zmR;a@K(w`{RGDn#7WX?6-kmq_JvtRlgUc$-bkURZSly^o!?s6ZS9Te54hyHaum!U-4DIfL)?g8*) zJplfF`75Ac0puHquMitD5MOB^{$;b_1!UG5dM1dMvDk-rJ58AEpXcbZ?Zf@ehG=fd zgL{7pqM>YM_5T#y8-u|?aBt_}UIczgi9to~n=_-y=Y+ufp8?M-yuYpm`xYC$0lagL zZdG89(VppRsPw5xOoBuO4PpQhDp4NVdQ3aXUQ`kMW%?Ot1*hk!HzH`v!sCXty z)VL$Ody2RpLuyxyUBhGpZw+Tx#MxflWhE!@rjz13Yn_)XoA6Zr!%iBDF71fIur0bo zy7m8J?p?s6s?PoY3?vW~+@Yd|Rw2~1hg7RUQHh3{(I69?C|0f5+DfZZY^`!2L9Dmn zOd!)Z%4zNO*j8KH+SXIsqXk64fO7GUcNFDjmA#1yYUO4j|Ihbbd(TWlu-J!$Pw+xh38MP+Cy7q~>wO0noz*_%32(uRCW)?P;8O^dB>luL_QSkPE*yvN zmalt6GR7twrR&y581M5*lGZC9bkku|$ot(i*juoiz@0>9$jT|1do?w(e8rh3W~=iE z$sK(MVjO#%jKDJ2QcpcrrNfovY-9IU21c#WXD@v*q9BBlZ2Hc$-QT-a`~6++SS5FR zEZEAu>#yMIXNr$p`Mq#xt)F2H#WS6aI%xRCB<{p*q&-^OGb*z8g!AC#bd11(rk~eCyx<7?H>j(y>g3el%5*b)xwVwK?|c z@?4uMi;c99EXghVR8g!zBvBT8GWIOe@`^tIp(qO0voXc>zhw;ibr~pN_y(%IJ5K3( z_JS~lO$aR-+M9v!_NKcU+rK&nY-@;p0KnO}P|W0EwZ2*TIlTpj-g(N?jqJGDc-Lr7 zTEk@4^K?hFC`Wf*&C{L4;(vwiKm=a=7`k(E54!WY{m`9{p*Ccic`C6uqD%XsJ3ykj zrgMB`fBV)_77I8rrA!=@Ue@V1%Ma8sR^uN74950}Uo7**NLAFgcxsnIA)s@-_ck zHARmA_=g&em)@u%)F9nLYd@Bdtu`sshqsi8ganH-PbZtr@+KLnJ%!q|PHm z7q)AyDivmqFtDMrKTDbe0Gihc9HfKafx@pzC)UM?gZ3m%$;=h+3D)NKT}rel56+}C zgg4yLBnoY4Gx;L;mF*W44Ov`3LWan6;V6QazJ&&jDnJr)V9EpV#-W{uNBCv*JA&5@ zk$m$3@=XJc%yaV1Ixl?+clLc!FB5O5v4jNFP|gTluxeM~1DkjEUb?2*&SR45Yu>zm)VMT9Tgu(WqBm>?PQftRo#iIJ824br>b%eik*`1{}bzk?Ff|pUk@sVx(AbFwrDS9fXXa^ zovT6(OjFp`EUFTYoUUxq1^;xcWE;Oap+nG3FsQrv^#xg+Gb1G+UA@&oB z2kf0onmD2F@JXFktS&gPIauhcoX@e+OJ4wfB$&ok)bRg=78s191mtl1P~)q97$J>W z_lIlv6pYkpz8DVkd)O8P6I{9^eP7WBl3p5AKs%kiID5%dg?u%AOM7{|)>c5yz%Q*- zWQ*XJy{B@b1V(LzOLj+^f3F=8|b+ww3X4ji$Qlp2`hIDz3WA zphNw8D(|rR_g9Lv2tz*fsvfE=vbL|_M6vg&H1_=46;g9orOcLUrNVyG)&*6s% zS(6O_0tp3ImT~96z}?IW?i?JryP?_|)bP2RQfKd}hk9>fvL+y9BdxH}b!uaFPK!Q> zbN7gb_L;LRfu0by!oTsW^c743iMiDZ5nKM{2 z_gH0*#i`1T?N`oftl2Yz18q6s?HRx644n6rHK2;IyLKwi8olvb8#4WDGe7!Sd%Hj^ zOT-xyL!j`1X(l)BcrTIpfxwhFj058%tOPJ<;M&r-Mtt`bIjY zPUDe#*0!p(X=YXpiX z{`2Eh+>-#OFXV0iYH&;l9TI2f9&7fANB{Y`y}Z@Tsa1!3w)()LB~2oj*|EnSk7a$+ zg}qh%HC6YnIiP6CPc@G0*eg_Z0acxCf*@gKwp|LaRUkWL=0)3+n_B>%`wEC}hg(Ec zsaz#KulP44^-T>td%^*uX}Mi?#c1&J;Mn%mf2qEgzIm;EnKl1=m%+U!x@5(wop|6$ z>*@)&tUaJ;(SgDVR;w6?Xs_0iXs?Kgf9mD#YYBn+)8W?={#3qZ$9U|+*@8yih^#V| z(M3aak&G@5jxOr0NB*I-=nuB9^_;=hF8~OA|2VS(X{!CxaTct0BY%x+|7EOu`^g|3Cl#9{>Ns|BL*eIqA;-5BgX5|5I$$IRK|BI7<4FAW)kYj;a zBT&Zw$Evs|_XzpFNhH1Ue^jG=-g5kZWC8y_O8ozv-l`h^UtPfeRdoSX9f$i@_&*{@ z5B{$b$N!D5hy4F&@qbgLLg8m#Ts_j@U#jh;ZxR1TXziWtmb9@qe!UmnZi!{Ey@Rxa^(suYG@^LmPU2 zqOz-$Hq>CwxgWX6n|}=1D2NqN8X2yxZTfmrL6+E>cM_@gEFzLO|BP5IfojXCQA?cK z^@!GP>vC6dzkv%agNMz5#4uqen3JU@O zgM5aLZ0BW#4K^Z|hSA$|W^(P1Lyk4C1vVQ2vR9;p{NE@5HRfyxRPO#*80NZRi_}HD%iA zrriSVI8a;5+r4#!!T}_8(wnTFiyo+2J+OOPX2gh5N zfgesg;s%+wT3*x+2Qnwr4N%iyHyy@JW@qOT;ZJ-qH${Qs=L{bb*)L&V zd%x*`mK$P3Pkoni_Mj3~8c)617t1WU{WkVbz16p2>E<$=2OStn2Q&4{6dI%M77uphFw4^+VpGeftgp)+loPBg&tQ zy6OBnOZ)gA>ViVvh81){J2`S)&{-{P zEu{s8?V8zmITK@hTDr}{cWHrX*PN#|_r-?#vZg(;bn^f==bOsHId9BtZ5YtiFyQ6J z0Xu`g!Z@r^us66hg8PZ{nV9xK-m+v3dw%=z2H#0$9%J5uGZ?x5 zbMf=+*kNPAocF{$vtuXd`b{aA+b|Z0IccNDi_vE4J?FYu{~HMuA{9$!r)}Ef9Hp9d zGfwKPvrWveHpE_UsCv!65nN2fzDmt;;5(b<2+`{Cnofjeuf$ryw=&n4cfQDe=H>$- zv{9@U{x+KQPoSk_?6PnVfJJdRx~Trak!<_H#nn2*n@lQYiK>^H4+%F}&{DxBE4tyA z!UKDK$h_Ei&x?2*R)C(-+M_zKg|95GWQvPY8$7b}_p2apoq`^t(Cw+7AEqXg;T_N~tvy4Q`&2q~DFGQaI z-Wn`z*~Q9JBFC0pNiTgn7pdU1mR%=$bIZBLz%ulQ3IKkL0N`6VJIVrp>nI?+9N!Th zpQUeE{B_vTrb$L$!+7d5T{pVNQ=jN|xLr>Qf!vk_i>G$mQznM-)GxRISvUU#5Gkbl zV2kL6MfZs4{=T}Ja#24P_h*}!gL}b!_rBt&uO*I}cwL5VvD6Rp(4{S45W&sdDOrP} z%*jV8>JekUQyb?FSfxoP?6&FPg8qsCDfkwbNuYElA>Zo}uYD%1cK!@}v;K7cFh_5f z7(4QE{d4!zX(;UPtl0H5&0?m=*p@3#Wb5*A$l3SqwtQRki+JpjX0H?F;jVorL7A1B-L;ZOm{wI=emh48MAa zPWwH?5-3dN_0GMHUso`OM3$_J@gX?iM ztEPWI8%@VH*1YMZE~AE%BZP=hE`kvotKRm1cp~a*&70FXQ;XB(Po^$6RRXN(Qf^jiHF zb-|wl`5ybfD6<`Y{)CgE&H~N?O@sp@tiQ`Y=L9D6N>EYb3?ICu2V;1kH`0Gm zo60drAG-Vzs{acWEsTZ#V6e~Df`P|i!5 zeYSvJxpay*xnqj=b^f2$fiH+T(w_>29DgyPDQnEEh&wexa~GV-%Z-`0bNygo{*Oj8 z{h2p|Bh?#?P2t8i@#(f}Xa>grUNlLU|1A@KfaQmT5`1$^{wq-z6Lb z4>BJSYMR>6ujw*soZ<8cxbdgM1m{yQCbt(fr?@UnzW?ga<4r3j68 z_g%;eDe~%9HCAo&?-5j(o1X31_R{tK^*z2ZkM^%FF33CPEx5Li7Ss?jzzJySJgYG} zF3^(;}V(Y*?OQHq z6xw!T#0-n-!wdIm+O*h-$hj;uUKpOVaekwtqoq-<3aVU6}IdpXm-r=K_HJ-9<- zb`nzOipHvSL>!XBc6LHn%dUPi!QGX~Dh}=HqSY4wF%bpJqPQDgsvS_*c3r9MI7$-x z^G?EBvaBISqLpn8?AV;~8<~E#DT4m1&{Mv{8^LoHsiNF;ucV{1v%bpEMnIrqS^IV zAIvdQy!KvW)iUk-zI6ucpJR1I3of3aZZm%JQ?yONQyNa7e+S59o##?rkG!515*C%>|C!f=@ ztAFzWy1j6+H+a(535AVwD)7s*H_8AJPrb1%wb^UT79W(1J+^(BM{Yp+RiC}Fi^NYY zUHxVr!|8u(&u*_BdRFGT@))6*#5{dwr+alLdB78~rS(A@js2&Q^V6o1;ennUI*lgnOixmnBK5^3GY=+HwwBW#b9! zk0tM=2hc!6=9$K-^^Fh{$V9)HBhGFwE9Yx?H6E6$Bef&7|E|r*L%D%vxYFo;Paqgh6B1D zYs_rZ^Cuauy}pr(94en!xdQgjiiZTRT&Bz5&jemc^xFnll9}atOMe}!|vTV zEQRg&rTr(YA$!({3`<1y${9a^jT-L^bJZ(}-bZlJ=C9pd2lldTqjNdp4^;EMnW&oL zBaF%4szSj_iI_p6q3UJfGtUJVPHiQi#QbSTxFso{X0jw7QNQr z0azZ+qr1wwAZLv`D8#>>I=~;(!D2n}2k||Fdin$R&K4)yTT1u~%Z}t$)-cdcT`ly3#pqccY1oW=E>&H*_*n! zPE@@h=FaAk|YdHu+?cgIGxVbO(`WM?kig!PU|JGwRq*8jcX_ZzCLHHJ{vVDL0+ye^2^W;qq>N+ux3JP?9B*Yv*Ip#r+Abh;O6W zbv`Kh_*nv6Tza*W21t*o50g^N%Ot5iVrKAM*MrNLjr~WpJT+(B_ z^nX*-5nxa8j6InfVD6tlP%*eUPw|v`Wy$R4Z|qO3NA{3w`DyU#Uo^G6E{$3cP}$N* zBvB{Jm45Cpc*XG;XAX;RUs2|zb$)tcI-e>BH7lpHB}yrfjYr@=XZ-4cKvtm5s2Nu(2?Cpz19wB2;K!9ZV9XNPMG9;Z2=xO2Zq4aF!ex-b~ibLE+6b z-3+#ybY%;WD7+U_D!jj=$Niss+;{Z2UtM@l^0HUBCwZASXEKwYdD$##iOaiO3bU=B z`S!|7tCnT!KN0g5)E5t*0$9pZE14D02z{dRFzC+-MZsi%BEGTkC|YYf4FbF+W(SIg zawbSR(o3Jk9NFwPa{-{AEk4jqGO$0%CfdMmjq?Vc$rKe0OIyFpB4#RrJ^beNrG*uI zuk)7Nd@!qf7Y(Oui5_^1pGmzpyz1#Hj^~xRB())yc`m+im@Y}UQa|Ld%cWpQ=?&-^G_0%XBO{oTqW#u5YW49`~(!yy+|U z__>9j%0C_wzFo}Qwc*>J%s(zZEVFZ|U&6b?tzS#G_6s|e+Ew0sU}|#=I19vX%_c6{ zzHk(8J9wXLG?VqB6@DwlKyyyt{X;X*S#qpbjNKPe%}hxKW^X>6D_jM?%&!82e(O!V zl&tZaMqsdU>j!I8ZDm91(U|`$%r0?=2%_6RntdZ2!LyE3*Q+~Yck~Ir)A^(Pe8rwK zi!RZm-u&x^RFD>-SUD)lgFiYtp4nlh<>05>Dv&}HF=t$3t}nVI0|f&|-=XTL42y+GbeS0*Sx=EHEJV_j#p?1s92hq4aR@NDp8L1|kdKxW>n zMGugC=gs{ep4UQWf5Xyf*$tU3Dc7j7B}4d0dgD6G@Y2C+Nq|@>6h6{uEeQRcA_jJ3 zeEV`p?0Nf;*xi|x>~7;2jLcFjrKrE7OG$`yfNX49NA=J!^m<3=WD?7qNfRqh>-sz! z4a}snt1+`dNfaEJyZ=bY+>`VpvXf=r+*Eh9jK}saW&{9@bZ}!45Hzc}7uB`7sVvW$mzL z+9nn!IO;qwKr}`e8`~Sa9nyz{i-t~Ef+uh8GnmuGIfjRv17f_%agO_b>o|vIt$=g< zg%{u)n%n};k;ku=-H@5z$%G?|*f46tM2@UxI*zrN1MM#ir>f-KB8ILR3;xKU9DegY zlU&OaCiys3&?I|{F>_v3vXz`|WN<8wFAe&L&QFVTSYl%KE*#NCGr!>M+L>ptmu@Cm z)pfPgSiGZ;#LULIifouIO)P!4I0ffY`m3hVJZ-8yGJN}L_J{8BytxYRXH5*8X8jtM zd0HrBxYQWiYXkTQ)@eA^dXEvr-If9*NB?ZtvY!*MU?aDN+=w&mIZ9T3+Tj$bX_Q)Q zxOiu)79Y4(0d56K(vpWKrAKx8`Fq-LKAkANH1nB;)NsWWTx;~{hA%c%|hjWPnR%&P2n1=FPKo4{)Gm1A04?CzyEbcn<_u8r>|Ne}=;m#T_=GzuII-l+3+Ie^Y58|XcOLEV zVRqN4Y_Rs`T%u~TyKejuD&w3f?xt(Qhb7*e%dG(vke3rX-a@#Er&bgbQF9=*e>o>s zboE2=)ZRL8t~OT3vojGrt}6M_x53YcANg?PMYk^dkPSAVqKa>&SQ`Rbn3ux)NMeYd z-_hfFBr!zKJ9<2iB!=kuh91wi^|&tr{|dja_=duJDbl%nB#t9lwN zniaNN6Ls}(xUlIn|7>b$HIWiWIyx2GYfFsX3PBn}gW;#4Pce+aS{3Tpx(qHc7I#(2 z!QUdwv+=SV_{%6N1b=iNfj_#xBLr7;AAvu*@96P70)O;;LyzYX_@n0$_@ny>{Ly^` ze!I_sKTWHkXzVeK6Idn(PSdD^7optw_0Li{{G$U3Ry{xyyu2kRClL+tyKxNLT!K$g zYbv$3rL;|(ofR|Gyw)ORoTMO&mBCqLTCU|BnU1LQ!rl6esPiDJ>-smY^|9ug^X)Wd z_6AuV=ja7Ar6hR5grgRXhx>lPgWc}?2Y<}pGoBaDL}$G!(Z>!-QZm_mWydrd8~+HkJ5iU_3!;nfocEmOr4==Hco56H)M> zGE0yw5?%IV{jpj{b9Ih~WR|5oGgd$LQu0>9&L;B%JKJeI;wT83 z1VCh#rch?_<{u??Q)d#(Y+4DGLW}=N#@clXNHC9euUHq)1onMEC@uUIzfI^OAH8ixXr_Mi=JqHn1^ zXoK>9n0xs>6O$rsF#Acwr0a~#hxktWY4LA({EGVQ)EqK5{AedqS_09%2S4Ibs!RN6Jp8Duzc=?_c!q&`T;?6~B$=2aqfK_~-aQAH ztjM4Q{H9VoJFUy~LgxLTT)OKq(f3W?iS(;a<@uG#J(?&3*jro}z-ZB=hBsjz;cSn+ zXop+BM+OS}4C$^3t=I{L5kz8HPXk$*!sm#Gcya3hR45*9Lp)qgYU`%a5)YHz#lvN2 z-cFuE<}mqiYk_>YO7bB{*LcZ0PNRu^7?`CVIs&xeyM4qGQ+wgNFX?LbUdMO;0!X-V zeD^lpWZriHlfCfWU5@XbX$|aheD^GO%a{^Q@5Z~xc-lMPoij!xC5C^d zz83z1d~E#XGnD4>+tBwvqV=v-?r7B5-~TL?mq z3B3*pU7?~yGfxpc$?Qep%1hu{!n-)gmL-gQP8M3^b7i3w_e&zYyH~GfPk)zpHMvpi zYZ1-C-Eo=aqLp-zC2UJf`QMCmwl0U41aadrd=I#7?I}mpPV0QYtq-0@)TEN+X;en6 z?Whi(g{e8zcJ<8U!gpm4IFe5WADN)Sq8@we2QaCRLj8*S>$uNTc1TFbpUooZcM@r1 z!66Y}-qQSrqesw;qCnmr)gMQC=1248jhPRFuk&agB(fxU!^YM^eSkf+U+{dl`~JZr z`Fr6NHnS!0Q1uD+${>O-(0NVQ(~}XREJ8ddL_I-K;aZCBqqP*>-@(V#M06jmrRct+ z$Ma|{Mb9_%cpj~#=y|l3qWfqqMfcHKvioo?*%{68#So?c zv+_-3$A0r*}KVVPSexM@nh9) zKfF?VFG`)b(2#je*~Q_0ZHkVT^zaw@>CJtfx{@A5H<2C?8>-%u^zixN`tinLT3wSE zu+3|g={YnjUr~8pGJ9#|xmYni#i}@W`y-e`^HX*q* zc#B_H*g|s;+{m9q>ittw%j&9DS3T>cf5u}HJqIx&;6_hGv>APNqUverNS+kH&7A1ym^KPyl zzy-_Y>}2K@RM5PKMG{7nnv4R{hzJ3N;E$BO(7b`JhWuRychrMuLcN zZnY*&OY=PDI8N3}>#9+-Qd-hfww_?brA0l%d18*9NFJeG-W$k!U`ikTM39`o$AILc zTBP&8%K4R|!S&gR(B>`B=5*x-?&F+Jm#o?7rHbiJB73tdw5k{wfGe>*nMbgnIJ*h? z-o5!JB3T|zK-XIWc4^YP=iOptHCDn0sW-gFnvEQ2ejwpqR7?)-l#%7!=?_@iPoj4X zy2+uwchl)I1jRNIePIJ0mw8c`D_{_Sr{TB8z}#_)pr6Y~06c+g>yw!`+`M^9PEq14 z|8^XdZKpGa&gQqh`Bv$pyn153w9qc(R?Tf1G$#ib=UKAJ2=pOK0TIuS05>o70Ay^@C6uY4W|NiuH$Yn?S*)P!8lbaC zBAHe4z0@QMEXSM@*p(+UzMZSoR5>#Ku;i+E=Jm$Rx?~0icjwr74@*i*)BxCL5<|Co zshj!g!xGjC%6_6U$!u2kL_)p0i!u&ZTckX8Y|`K)dptgw<^DYfexwX7WGz;Unbq|; zZ;I^#7_?VzdtwAxh}FddI38Is2m)hUv}C(q?`3+^)=e;p}l=M%E)FW2Bl3 zF*ETXIH7-}S!g1U#^Ne7z+7}|gwJ|$052vp7gbgh`JwWNv&1OZeZ*O!`-rnd_Yr4_ z?yFgbYB##C>v2D^$Nl6U_tSdZxAeH5S9lL6`>EZB`Ab-41TnBRW8qMt2aByXF=9<( z#JWTbN2-swGKQ6|rX$-+p{(!;TH4h9;iAo&<%& z@($h&71-M+;oY??hCte|bZei+%-`ijDpO!?nV2LvxTP_(ry*P0m&AVF{2OB=??#Xs zcy1i!jeR7fWFC0#Lg6sGeU!Iu=xXn#K1}mM;X3439?+4(l`*QoaZA+=L!b3hzXVc^ zvA<2o7LOnit2e(cM(9^%C4}U>`ZoAsMD=S$Rzx|6AvzS;x-Hbl3=to{4!u>Cc74 zo7pt@HL}c{EV2>HSRPyPksW1x!i`C>Nve%guyT^Cge??zu2AU zis1(HcIt8Xz81k17f8ULSl^S01P=pR*Rfl8$C#zsji(;14z9}cuZUhQXZ-uHzj1!Z z{(=%(v+s7J7TGVC7{Lf0*Vub|-p@V%!~UL=#u$PVd@uJLkUqH?`Ta2)XkCs61`|wT zzNhkeO_YSIU;&IE&sr2NJreNJz%6Q^jRpjuYdL++3^ozXDkM!;^01I3MfXJ^35f2? zdfZp^xUcSUU)SS)VvqaDJ?^LVxNqrkKd| zeZ~tK7~ev%C}(_otlWg_14~0m#>><RvY^v= ziEqL(seSR51*n{sZyE83vsLUE=WjZJiL=@&Q~yhsc|`nr%!MVVLZN? z=1dFN!jhAW3eJ9h#2dl~J{UAnD*9^nNNGN8eS))Tv6~#382SO?AYCbtBdzQJ$&7h9 z(#re-IZ_CnT1i3N&^VdFOpSs?xM*gNPQB7mrR<54lvUPQr+%0miC>&#V2PpYyp;UB zCPx;OB~&IkvY_ld$`YBU3gt)+XMM!KH1<)KiK|GGc`=gKbqK-G_0w-9qB7Zztu(V$ z@_ASionh4_(Mv3r7|B0RGG80xXdz9?#PUBKaUD2dvqTOo6&s{%SBB^_hmiqD|*~l_qea?aX+!g{p23^ z(+cmQ+}Cig`C;8LgQM2Q9|+}0A2~8ej6g_4QV-?GrG;`N(@om!{mGHMgdB;a_A0W! z?3F#`NRWkW(kmKbs~aSeu0V*y!`iT8V={&nVT*QENN^Nd5t5JCNa}`q@c@$(CuEB` z4l@!IM;{;Om?|eIjy^sV6j!mq%LK&{%%Ta3jhR=8B*n_YgeGcM2`|bUhQ92jE{2jL zC!U!t{&ZvPg+e*eF#=n@TJJ#+$sIY%imMUqg1LooGfGR1tO zmyA8@%^!e}IXa?-Qp^KW%oW{Vvw`E02UDdjdHC^2uTaG45A{^arytiC+l1hV1qc!| zF7uR#K4b_EV3cSi{Wp8WKY&tjL@0ln>|3ml#9pv&#CUDA$)BC`q1PKE8!HY#RMx@> zDn|#m7&sk#&R&Q3wAMt#I>D=!`w*mbqwVm@hRl-ld+uDb6_UpzZWnyQ zDrmhLd6SY{TA%$caxX+K_*71A?eQGBSI=dXj_{+~`^dd|zLw|8RCyoZaeQRwb|^}e`c|5 zaRgs2*qE~h6X6k;b#2u;_%flrt~KM!nsVn4w)gL<$jP^nfB7FK(@vtBVn-i%gNeNB zCfz1@B$u(#GB zSjs6l=mXBt?%)i(OoL zvTeRX={H8QzkncQq*q}?Sx5RE_A|FKeebCvlzCYH8kj@HUKbr zdnTWmZ5m4#clc%KFWTKYmCW~E>n2SUcNL@+)jsg8{zSI)$Rxz3p z8UJp?62)1Z-c8fOmM81wvWD#8)rp$bWO`r-Dw&q3dDXkAnLGB-Hw|MKMK#;%(bfK} zF@oysq`j}N2FF54Ah1ncQCwcsdAjI2MHLD5T-~%@jjywiP+nM z$co}p9R4i;hz(s=05ASbHng0ll`xO;)JDcwUpY~AK=Da*8o1A?ZwD0li1#bA7r!@JXG02m1ND1CXS$TjV0K4 z>aQSG3X?L4me1AfBk@dD_Yr%-Bjl%9yqIkX5XTYp5h!cBEf$}+J-imQu z+Tc2{QaN0KpF8~_$eNY99)-YLP+!@{iCJG`htzT}m1HJ)g>a)PpIzz6%6{xoLg{3a z)R5GsI+!T`IOv(eD85wDGEKtG=<`pNR26(9raN z!jMjQf3n@xR$AAunk=Aq`Ra9*6a8VlVcTAF`k%Hxn+6p8OuUx;C8CcaJSU!Egy&PI zhlJ+i>_n9mWH-`3Y4cvAaF|d;W3w>igrsKC@}a(+@c4c7+ebY z9cO426IRzt%~1iaDuV^gtOn9fgh>k@T37_q8UagqXKWL7nb;>>;%PDz=+sR+4nU#d zqGJ;I*>Nh2p<(dF} z0(>ik??eY*@s44s4YO*?7EYtOH*OWPIZT7Um{GdHEaD0%IriKg;LZ{5pDd`c!oDQ~ z<-C3R)A>{5$GLLX#bKAZumJ0AFl;~l4DlcsDO3;RN277LA#~msmfP?hu0%ixRw6Ek z+$^1D7KzGcH&E3o_p0L8MkcDnZs0Vf4Y3`;AcJ`eBW6=**HMl(<)~HQ@6h^(l^JDO z_TKKU-~kqCC~qvd&e1LZa>zo!rZOJXLAJa6Su#*UcUII@#4MUo>xcvmhJ5~nKwOb- z@FDW)1izBRoQns`Et+5&@O7v&YnVfBhc&4^XL_y6HPjrEzRB$OMAFlFNz5ihQnqa# z!5Qgb=%P-ekeL@bi}9B*Ffck<^{#(#w~qvu@&ShtM!7_yDkA>m?|6H67g#(|fUIck zxZ%jlSKp=0kErdJKey|$FP(y$sG@51vwm##QhyK>2A7g8%s>H_ZWSf?<}Z&RE713B z-5O$yTC0^CoJl1S0O(Ccevo#aUyqgeH5#y$Nc9RRMbzVHHNNXs<49YLO>-PLt9Xf( zII>_R5+}enJHM~4RLGi;y{M#ULbi5{&K-(jKw9U|Kzuj3MY-vzwW9Aas>Pnf^D0Z1 zRD(hg-p1G-|GR(RE%r6AGN@n%HOIpp0;0x_41UdQJ4xXtkuO@B9Q+JCGci)c<;-_L zv$v?V2#6L1U*y??+TRp#-duR4^eL`PG#`(*JLY_Ha1NE}MIzJb->=pq#`UtlJ7VvD zp((>ded}S$_hsklR_gedU@+U~S+lRarM5}EUzf_l4$De7^i;%NgRO-~CT2qT=l(_2Ubik=a z=R|5zB`U(cYEfD(pf?rhMJGGGs9Y*V554Gp@qLbgyuVUPDI_h_i?lO2)Qd*2a9JkD zm|j#~s29EN^rB-wRxerxAai;Vp95_TO{aJhm)#xnTE7RY%4tV~5N<>5=o^$5Xh+|M zu)5CjchEZ|&zpjJ^w(4L`_J^FF;Zy!U3(F>q{f&I^H24o>YRRbOrd_1aQac5^rJEU zZ)j8c(HJ#c7wSieee@%A>w3PM*N?`qqygJM(~rs#jQ7!xW_8z(-U4J=S<`a*(Kd{H zqF=MR=||N${iu3fPCuHJ(~q72!RXW&zIafm#gymtqgg%lqq7bZ{ln$kT|au6Ev=%> zYPDDWXlB^*G+WL&{penXpxwPKAf2g5vnc4HBHgE9Iu&W&c8yQ65h~IwQ<3Tnz@{I) zsmAuvk8VFS9G=sU=m3b&LqD1&l0MCl)AXY|=uT>5g%;~%E+sNfr4Qi&Fz81=Q7Qje zw|D5*YyCWnXkYzE{<}i`$bt$&1?hOLZ)A5VV>t!s4sJ~G`3+OatW2fpFVnOXB)V>@ z;7X@UwM13FYqRbsO@WT|tkaPkZR(~YnLM!{Jt+lSisTK`lb~ve_E1r(hY|s${VPh( z(5L+=N`1GO7!b(J6Y8~Pc}3}b=(H52Nui?jXN?YOycpF-iqbLN6s4;T>;3;QLEFufDN0|5Z%I*7Z7E9UaqsjJk^0I0c9>7_V+!X*`cZlCU#1`B zNze2eM|w^^DIz_CHI#icq)mT`G^BsfV5A|X(fE4Pkk(K~a@@!1N7X&_qhs>=Q5_U+ zjDOgxPCptW3RhR49~}!2AwYTks2l*~^`kM}^&_M4qWF3J=-9k|RPI0#>PO-l64wj( z#d}C;k$&_>s2`R0(2r^%?mhLRX_0)O9*DwCYTv%n$`5fNDqkgq@j5|DF+|ZlOU#{KGLlm z_#L|+{U}$jKtDRBr+##d27ei&bR)^>NBaUi)Q>*rPKpmNs};PK*;GwaI^IHLjCC2Zu$}OF4hOJj`Dv& zKY9ysGp`^0>Td|Hi+buu&?`RyISAs;o*=R?31g=4s>~FmAMzkC(M5XFH2>3_M5xsw z`>ph(|B{|$`lcZg|N%Jbwf{nIv zOhvjquOe+DvvB@9!R36zA%zhwNu1RYi}KS5s|<0nU|IcdsYu`HrXpR(H=T-9Zj%_Q zNC~GRmCGcPAE&a&_p%trSic#kcrElI>U5+ftwIf8L5^`+Qp#ybeR+w+IHq7RdaX01 zCEY3*V3+PqOKOC0oAlzer0PN~sk~52I&X8NC4Dl~l8()3Nn?Va=d`4Ya6uW&gCB!! zIW6fk8$h-VIW6gIo;i(3`yJfXVJxCvw4`alSyT?Sq+8TFT9R?Czu?UZd3>ZLO_P@N zQ_2NZsSbID?zE(_D0}-nb6OG+ASbL`YFg5d39~>;n!KmC%F>ce4M5f0+gMZ6YRAVYpOQ;g%Jw=i$ z%~NzCdcnRbQGE}6=r>Lunn>lI`cU2kb-Ve7y6!iJTKHoc(R%+>AVz-9i#ZB8XKzBB za0GAIW#%*5?sOyhjQ-YCMO=3i{@>Sf_Sb^^7l1I#fAMCszxJNWdCa%67{2o6`VFtI z+5TuBuk{A#X--F~Lck4mq%ToUN)2*=n+NHe5ZADQS2nKweB$#57Of9nU*p~6()Rw1 zB*n}ysS!fw(fYje=rycN(qXzgkN!mUhN|_>d2}Z?&UtjHoJSjGoDn*YHes>oD-{dX z$hnXppCkPYP4@0PB7>v(jvjUDujJVR-Kfxaw7AfBRC^$6aj*2 zgsvkD_~tq)VGhjbaAtONt(MeF5>22+&U568&xu$|Gs42U**_FR^*)}XzZ@94R=n2f zq5iUe&(Ubi<<3?Sd5)~%#jBlWB!5(|n$gQ)%Mk8D&ynrLpu~BOjs2_+^_%WQu&WAk^{Gq{V`f6qF$+urXNk@@?ZBK zt@jp;%cal7`^CFXJ-We^p<*_CPgN>iul0N@aGs5vcBJo`b~KmigmTJ#be^%G{kV@V zwrStTeKbm%qRRn7=umA1ZaX(H8$`=~DRAKe=1MU23_N6Gdp@g6nwa z6iQO)Khm4OMbR<;5l56LiaqnHpyyQU;oiM z*o{S))>LU6Ee215PQuNPW5j1<&b4 zZ+G(?J#QkZ^rG6nIk(Y<>Dzj`jRF(%>LS097G2(N)b(U9expah9PQ&|U3jfOhjQjj z;7%Yw?7?sJ+pygnou?STkk}8|Q%7l>4(0)W3Ey6D~f{`g*7# z6?%}Au+?@I@6UsDkQq=}>QWN!gd&cU16@b>h@LqQ(spphB$xvA=(l9ESB=T^&yLbW zI~ocDzb4kbxBebb#rl|eUPn!T+S-y>Yj%6Ks`+2BrcBbrrIaAQuep;HShSCy4gKS9 z!PCrSUf%8oPdyhfLya`}lTEsC*G)>~mzwC{zJGtxpKYB)PNZ%e+!Uy8Y&>p3;Ql8V zDw8qk!k}IfVYL2`sB?Zo^-pQE>kInhx{QCxg5<6D!FD9`NN+5BKg5>+6Wcz|-H>|t zmkg&OpjalIf6Kq*+dvF{(6P|J6j8I_3FOdudFu0xms#6CiS#FL!SzPh`~x8x0b5A( zaaevi#!k^CQ=h(L3!}ilw1o-QYAVGP5(}si#w67o=bU^entQ4ubWgGT#)vo2A^ap>1=GWlHE%Tg-pC=9By(yml9#F!0tJ&Lr&bumca|ha20TWPP$*xP$EbIW zRsV3QP=5#ov##@JQ1u8|ir1Eu^Q-&>b^g<`)e*VV`W;tq&>*XFm7Yz9AL-ex=kQEI zaC)b>TBx*X#MM~5SomhqevN01ReLyS1p(k0-H@?cn_}yvp&c&`?L^)^Gh5qV1Z5H` zn!oK0r9J63Vw+p?s4d4=2f0MeN~Qawb50u-92UU%aK( zLnk|#?}|ZHAczk$os7EfNT7#Y5Lq*EUvk_lrjM1c`EoTMzOg?&?O4;(+;UJ8BXdry>+H+7nO0;@tkWovwl*Rk=hvcfJ8kWW z(7GcKBr>;KH_eqb&dC{?1@mXUrgroGtiVyoCrQ*{s*m)ws5`*QxwPuw1b11JQCOJ6 zW%j{itN$~fjHlkJ5C%`TFoU6 z?AUPS*FtkU(@I>ZTe4=Wb5^M_)7+j~XM}eaEn9wvcBkTL=0+;^uX~u_FR86jicIA# zVXe0a8)rZ2$XcOm3;ivwt?oAHhSb)Wv)_*4^`hW>_#x*@nf``2u2WA;fjdLOnNGy$ zp}-NM#cQcebxqgiR`l17a4Y%@enm|EJ@8^Mu6dHyd!0RnZu!4`){1Y8V@vMeT@8BV z$4(8JN#cYhCyJn7jxyJv!xmHBRG?1J>7Nz!!t!TFx}%*2bH6wh;SB#}B6FSLe!26f zO(XE|Ls?7kr%e^HWWjaNh`#lm7o6gFqWRO*#J$nG6$c0bv*kbLVb*6zs*EU!In{ZsZ4gRhKlCDWxq#7=V!`#+NQ;W? zd8kL6nAhJ<3jJCUhk@Kw*epj(Ms6<0XC}O2ym}1O6^;@)xc(TbZxsYipwKZPUluGl|?R@m#mYqySxK6B#bS*Fa z-UHXj+0r?m2aq^n>por!?dcJjaMZIYEBF$hN|Y4ao}kXby1d@d4PN`v-;CMjRN)iz zuB4NSfLZfRvXNXUL7S;Wi(4)b=2y2)(z%K`4eo#|LTRpx{aYgQOiwX`;bR@_&a}>161M zx`x+SITP_jbzeDN>k4>C=UlTpLjWH0J( zI#os99rd=q{K?(Q7vEeIToNi(Cpm;6Xm3)mn3-_w{we%UQ8$983U#6%kR>cQfD#wC zcN14m|M>OQ$yo{S^KfDMv7> z-1XGl_3~g8*HVh6`A5l9H%_-Ou3Nyt0^Eo0IsX)!g%%uXN=KolWNE*}k4r414*x1xew($RI0U%4)SqXPZ8PiU{8An?WX2H+ z%pq`-suP)4{7=~WIK3?7n*df{DiCv?Qi$v9N7bQjHtH4%kn`O4_w(t?Fz$fsb9!0l&Bh19c5sFCK8Pof!MyqBRSqTPxz{=f(Mxyb+m~JBwGN?&Ve6?) z6(U|E)i-bcSLxqW9Fq8LA(7RH9wIWWjf2n*L4rfpou>)DqOxK;cY|Kk9hu07cBI#m zCgAa8wyuQ3d$#+>zAqAhmBI`%w(o-DB6qvEY5y-zX&{ei3)hq-x?B_d7LLApJXLmf8+BmCa*O)r?F{L(*@ml|0!d_7(l2M+XAEo9lP3EJ=XjR9WwRT7p zZ9ly%I4*wT8K#^xFl;2Qj7X!WbNztwLn_(5I;$Bv}zB|ROu{42sTL)oMHQhGJubm3e8)np%)zEfHI9xe%I$hWT01{)#=)Ab3iHz{WT9_tlB)*7%6V+^RMfxyERiFg7ws+UjgA}_^-YmBEV{Io{y(Ej zPhrU;9Hh7QzOg#&8}8$OxxMRYuRDqBYA)@9mww76g8U|JRqo&eoeiR`<`^y^MAf?fYW|-;7$@E*;6qxp`{b zexfLAnV@UDrLlbqC(X_*ZK(OXmmY|~-|_{HA@0kCT!kd7+9Z4D@t7FtsZ`vw@*lU1 zq0%}o8nS1>jjYbG26EMDI+&DJwbQ)x9nig6j#&Or){#U=2zMF3pW^pmm{&t)COizF z=)`duvUE-`Bz}6exh@t~&vGPZ8q2{bHNB!+G%|%2rulnJqXeM`GE&i#MEe&cC-h)_ z&#~g+n*4t?+r3uuNv5PHE9}~UoF2{R$E~kYfnvYF|0LAd*4Q;jV)MeumuMCd`wa}y zi2ci4n5%WO-;7ole1R7V>Wh%;P>|L!3|hN?%0zt2*wat!lI0=shY>>S=9l-%g8q{I z+`gmKF4A7##IVs6$~sr%)>F2%1qg@~mVf-&|jK+5{$1Kx-#X%x2xm)DxsYB(?Jb?N}4W;zm72 zP>w9y5%+`NafWu3y0BGg3TQm|ywH%jw&_wX56u{J?569g)9_AALKx4>kerFq*PFAA z0g4-6%tztB9QiS};dbLir}88I8xG|D${#R&oJoK%Iy)3MXnzGSVL#Q0u42TkSAz(_ z6$q{P=de3$_74GNgEc5S2D3m}P~E&(I-a)i=$l((!8Nvsgdj!mzO)vR9Xs(Zi`Y(` zSj$Cp=)`incDb+b3}g%ntKiZ?bAG-Svm`kJCx)l!^6RGs}=bX# zV_e%I=OpvBfo2}p>C)@{btut9BoG!Pt+!kde$a5-O--ILcdifd9!@^eOaFms759Fe z-*6In-KxXpJAWq7f*4c=YOhjBVNb0m(6l}=$v%-57-*&Gwy;YH>|TOCRcPeZJJ36> z1gzFGw#YAJ4)x3;s1C8Fl-M%pL^I0Ix8)}a+JV1hkC%BRl(!~Yr%ICiXuj(?kL2MB z9xoiOI;m~L>#J7g(wjF8xe8%;$h1Y;Syf*}dh?gU@q-%dkMDN;&5CA4IChBs8hlbRxIuw@dy-lPOe_ec0=_T5_pM^Z9 z4SpnP{;83tGg&!6LBe;q$vB&2K*h}pB8FpzEPT>**UGO}M zl5d@^F7>5*`${zF3xSM(<0_=p?AT$dr?f5Z{FmVGU~G6mh|a2X2ZRLc?2m~DE>7VUtF!R)DJByokvF($aee4 zWAH&1;@JKRSazQ?U3;q`gumF_5L^8>|D;*l=RM^R5T^9Q9MQ{TnWboUnwounaj#WY zQN{1SqSt4jVVA!avOycK&8Ll9X(La%J;m*W_8w@~mpI2>`Oh0NFA$jgVPj_VxsBO@ zM-!i{ygG^Y6CV5SAQl5D!&x?2mW^CylZ{@U4JzMIhE-@t?xfATc?X+Gmd$HanUe6X zT$;$gt~|bm&sgtAzvnFNa>8K22GIU*@1o*Aw+V|K!!zHPQ7-J%LoFzU)$SwXz95;zfWp*@RGjDwX4kLQSWJr+6PNY$2 zSK2{I?vk%dk%#(_xVyg|2o8zNcYuBEHUW12Jw>%dC?9`t)XxITLDNEnfrta<~5sKKjWKDs6{`GXi?G zJX!UotKlbVI=!?q#bfX0GSy#j%g*4CBMy`K5*^eQl;JVX0LQt%g@?7*Cfn~Z@M54^ zA@6)yoi~4bWBc`G@X3a3@#sXRxYBD~PhHM;ti)IKkj>i^=xcxUx%3c3w%U`uwBiP8 z5u!!|^X$ZDEPc|G2FcpWl#l#^GBuLt#)tzPF9nx#n-&B2%WNM%8pH5%a{40UYinI z;oa28O=er?!?s?N+3%1a*-KamuBi9Vw`T6SOGG@xbo$@pSfFsX-(IP~!r0EF=rgw%p>LMvNp zPWEmiy8$V?9pn<>jC%7A;)FeN_><;~g?-cSsjmZ!e#&p6{UDvHLivm%5=%FfB>J8~ zo|daHm`*J7s$3|#!L9AK$~z1p+_?Y>Cqk7Q33Y-f+XL;O#Rj1wSJ$gbvi-iwZ9n!O zVV>kHGHMqAwdNU@cPrjGH4wrjL0R= z8fPH2%w-8B_dGv7!v{~>22M(w6|OHZd>d^xs)X&(z63Gt>DcD z5!XaSUU;C^`LAfZ{jE|*umdgUq8=R0Ai?SQ)p zT5nfv*j#z0!&{Jy?VXZI_SqXWQ`(dAUV(^~TNfaGgGf_2rY;GsE0^2&W+IwOHgH`1 z0PR32CzEb_(}6n)Wjp};%JkAi>aCrLs`rUvsCquNVP`|;6}sx(v=;@Q+fmP9z*<(? z*j_v!nJGS~X4&+u!5ilFd?I*@FFC)dG8&s_H0S_F8?@jTGfZ#(;9xi)4ttR4$j}AG z*Pe|1gR%W1_^GS}nq5sax)oS%Qyi4jjG*0J>`0#qR`@rX6}ZPULP)b?-^oZ#antFK zM3@ex@n8v^*{8YYzxwxs@%xtl+`qlo@>c(T8D974R_o;e+uzySJ9z8#>@}W6n!%C1 zG%%7%^ncGE5x>j+7vJ$iPH=2KEgDXuz2wvxlB~BTQXR-aPV)8dBb1?+_Ou^f8p8{Z z^El$67r?GN@AW$txW2^0^P1gZhqK?-(oM8qRo%^PyM{vLSszEpDLyn~E-R*2i?Pi7 zgzAqgvZ}O{qJgJAMgfC7U(!BXg>u7D%{B1T>80f=V~xwuJ)5@=w0I zRxYCbefM304)op5w#eVp%lDs@-`b)qAufqT_F5$LclYU#AW<(l=Mu#F8KrsuQ+H>F zIXNys{xc`XSrP;_g3y6+*2C(Lb8;M~N^){kagoTL896y7fHkg8&dG7hfe676_Xp`I zeIyp}+tmQQz|o-~%nZGfi{m}SG4vtHn+0ADb7~|q@<%7IP5qgtaSPL%0*33(A1o0~ zX8uXwbPiq-{0jygO?jOyiTzCZ>7pHS1s*_ac_lYDpS`rV?M~6!OEnaSIPw@8jAlGf481YfULp^}l>=e|^OD4qw~1Xy#w*U&nlN1{$n$ zt*W&P?hnU0Ol>*7_c3srMLU*>i-C4)=hnNzc3y(s_h@H->u#;tAv6hvZN2KB{_C)< z@2RbP{cP#NiKB+6f2Q+b!3!*(%%8c5U`@EyP~E z=)-&UqUYh&&7ZzrN(1MIr@uyX@~4~APzSE!Rj=B`4ETrt2I=P+B$r5@CFllg%szC} zlysJ`|0(0K->$B2zakHy?y(iJp8}wI3$9R(k+!D+nfy7o7_fFDISE)l=Qp(Wf8!#(xntZoxw0Kr-XHV4+_q8U@m!NTDpgU?@Ml4Bw-UJ*yMdpGtih)u$DC ztpiIj3ao*x-d7FCS!9zfROk=7V`1(SDpagpXlM^p#k(e3sPx8ssL-6>Yw2giy4L#^VFQBSGo`H$)OP{_e9w}OU0}`%lN25{xM_ZHT1>OXf<-Ndg3P`SVE0%v& zeq)f;Jjh``fQ)+|7OxPaa!KnM?1)?aQcyY=B%z!5_HGX0FAJuq5^@M*m9pmR+rR+- ze$pNXH{|_;=3hRF>hdoK68qeD#r_IeUr=Q4D4)FfiEH0IAm=A`*{<@g;xiN{oAVRj zKl%=)udeO>fo7TM)mwb?K-Foxd9+nAulCi8ozM6YP*6UK$Y*@p5UYAyNPp7BcI()% z{Ks;c+A{(oM=a}xUKoM zj{7U)JQHkQ4c9D&{4d@hs^Gq6{y3u)MX%%=vvBAGWn_Ryxu6;kNFWLi@GmhJx}NH zQz3o7gpJ<~HgZ)Df>fKUdNdsgzLmotCr9{~JphW1G+oNgRB(<7Jw@I8)k9J0LOL#g zwPw`Zj`PI_c5zzs(_BPu#|3un+>YPl8Wa9vet2#U>zvzhh1GLz$3AxL9M+v8x}n?g z1+GK4qdeAb#xjrBJFoRf@jZH>1uNcpkT`Hn`jLnT`B;6nbdfq3LX zG;a>ij5Ytv8Z%e+lze;6k3EA)5oeRe5OTJ*YYiXL{0JZR>&LE@@AUp5_wr^Un;s$w zx4@eXFw&G5{`Bh44wqzsOZz1{XD;o}0qUGf+XGWkzp$~q6kPcCaEU)k!x31+$c}DH zF#=TZFzeSa>bF|j!l>_a5n`BmWb2r)2%~<@b%7&0 zk5T5!e(An_eA!27T5_1zZ9>O>p@j*34(ZxPWxh`6s`Js=!tdRkU9+Dl37y(4`=1Z< zYr8%R>z!-+Fua&T;%`8SBWU+T;!Cc{BXLm2dIueo1!d07EkYtPa;u30Ny4Ey@LRDP zt%G<)Ztl;L;nU=L=%YEh?I?v?VRUkID{W{ap6*SO)QW;n^AfIrO1Zk>bzb^?N+lD> z*Dap@<6pv$+s9737+?2;w~IIT;_LojhNa2}z}4mJo=YR9ZLv-of*NR36-PaTC z5;?cXHdDY6ZoZms{9TK1A6r8DaDe8oLVBX!H&yRR>V^5DP|~=hLQz14$Zfq%EY!KE ze_$1C3frs#>#8VtMiuO+mf%slv=$!V(jokXRCQN(QnqiOS`{bd-+zxLV;|ecL_J%B ziW}LihJ+VPq|K>+AVCY7)#Lv^>fQxBs_NY1&Om^m=ne`>TU(=znkZ;cS~G&0KmvPY zqVZ0vR8CP!>!k=Yf;WgvqS+lsX;1C3=hW)y)!y}-ifGFvToTc?g4R~0Dr(ie4Jv9C zM1}A7fA`*#NucL^x99nuFOM>N?{#16y{~t@YuP?4aHv3_dtPJ{8(>@6&ZJ}R+Wl`J z>=A;x!l_@z#ls(M5V%)&IA5bIw=2s#-`{70-zSTI2y+?o6LlB6R&E>C%_VhZ&K+wS zDzN< z-Lk&=x$vc;^qn(`>tgyH<*zDDm%XiI^ZZ+g6YlfePL;>^O>s5z zlKflq3(cI24wu((O0)MrC3ohRRQZQfL0D`Jp4ZRnPag*Jd;ri+?1Ateb2+aE5k+R-11)W5MZ9}>+_r%zar;I;k z^&7qQ?ETq!ar#QgCFJ?suYq{0YV^-{?J2bGXxnwf!cTMJ;roZ%;gi0bYKr`G(iffE zTai{K)hwQv^J^!KU&sYsqu;muI)t(mQ(|}sCFHjf0Y4ks9=sPI44)n9fAua+7u{-w zqXZW*FE(F%xErvUbV7z2Gu724g{sT^32~uMsSpZE1dskj;5KD`Z8h#jQnH8h4gIdK zn{;gU_1-P2pDK?ksq&~{{)?i->c=CLvMbBuemodgv-@66%O=hUw(T0e@Mz_pQW*6k zXVsdf!lkX7{M+J;PlXxDbd2C&jvV4&qo(*g!Or=CzfIny)f4 zlcWD`x>zB1g;-u#WZr zi_~=TNTvZ#K4llw3Tq5ev=gNy&xvDd&eh3r++n zoc1jcv!>3=`Y>ZVl9amVpG-ZJR?#IJ`1gb*f6^dp<0)YHwS)Z4cQU}*_mpyCJp4J{ z71byD50YYMD@=I)neut>+2zkxy$?SJT_=sp)&!%Wje@)8&Xctjj}p_YJkGb*><6GW zIn7)BFT~xt2lFq7swN%ZSeW{hoMtNUfVt&Dl2!LAF=_YgV-&}kF!7P zLpLJBaoH7uD>rsK?Q_Yj&4BiQ0Q_!YR0-S{@p6~DFQ~5czW`~S+Bt!6r@-wlq0ntT zszu1yb7tX&`UE$D`8iQk-4)6Wp@yYn{CkWhBR+G%sIatBkSdotE$Rm*95MM{yFXfm z`(aYy8ulJtUi$h6+S25$o{zxTU&_yQ@bOTGc0)fKsJ!wTS6cl93B| zjw=DHDUVY{5aDjWtv8&kWj4rk9`q}B!muEADN`+ zKyV!mhuLql?4q@{OGSDa3z$rpTidO?vQlRGP(N!*x==INf8vfJ_}7(!f1SUAls@qP zx!w%v-}7&S+}T#M;@32*(xXc%J-Xb#k<6)DoG~-i#}_MY!in*C|I2ER&8g7FaUO4h z!qzJ5F(s88v!7p2TJJ*ue7bf!dM5%-A0!|RIqipNWF7Bk7L-7EVZ`U%rBB9BjQM3#lqUu$)QbVspE~s7sf-=inF~`lkoq|%(4Ae{I@d8vZv8+#lHi!3MYQF z)!C0BQB|$hDSHfS)cctD_K^g!8kgqMncyQzf>ptOXC#m&I`*{guQ3QZ{f6MevYzxeU8qX zpO?-b5jrd6k9YH@yZIBxKj9zweSyeCGoZfd|Ji8$U{!~M{<o{XL|4HjeK3nhhG}niXH=9Cx2HRQwe;J9M z>AD?Th;4-QbN|2X+Ow+F`uu|bZA(?P6h{ZHG8MCScPQ@!S&}2U#%jo}QhJ!UZcg8H zg!&<)TN#h#Tz4>6*nP;Rwvgl_)!EiZI&_jR=wXt zitE|pvvz&GWnHy??uxjxq5t|n`Y%p?CKLT31~p>V)~C8Y9-MZ5i2P%xnur`-eZdJoKk-Pjl%hK>8S`nQqFJIBTVS{-(gSLtkgc~ zcD+1UJ-+BB%ynxrJt^wNO%6E`NbZBt&Lv!~lo73?|Hd)d@BzMz=r%ijhyur;)sZ2!G zW$%}zV)0Tq=}$xWIZ03g@AE%cqSZyFdx79>oIddH#TcN9#c{otA|Ng8f9&7ndhf~D zvf7X!w{31e8^#Q57`w4qo*5*IPg#iFU8~FW(?>6nSAl?G{az_k`(_z@u=;L)w{aqUvHTXdlLXf-V20`u0rYF?IlfTujGX)k z@9xvi$TObiq1AUrp2Li|jOC1-piXwPyE>ZV15#*8j}W|7X#(`e%r{t8saG!9dhX#}8(w0ADUpN-Nty*|jHx%?%;RG|~rhF+GGRIZMBzTo1=!z}>X2Gi`0UFv4h6s-pDR(bq}L9n&_^Nuvm<+Rf@@ zZ~>Y8lQGQop9qt@Htmm;)Y~2k2yFKUBbQ?Z-J71Cj|J{WG<$A%Y$vx3JwIO_9qqwG zTqIz~6e$wk%dR(}TG<|9Gr(*iB2S#y>C&<3O8+hpUOlNqIm{gJungSF=)JIKlRnoJ zS1LP<6{^Qn>t6=~7*!|o_rE`Y-FGi~AKNcsNKpExB6};WZyHyaErh}%lCP&F%#e@B zj@o%U@KYE|hAB|cMUVKm;7A6-%s-Y>3*0pP22i~o=;35B!KB_Q0h80b*zQc1n~Avc zvB|W66D+pEcW#85pb*6MUIHak0Lu8?q2W~FJj}eblb(2aeP*uk9t3u2C+)rMzp+T5 zO(zP?^?+|kNP;U_#0c-w6BpuRGDj$!Ur5PmuCP{H9sjk@q9d#*_T&8ZHHx}Xq;)N| zP%5y{#EouuRUaIozQ08M==V;0hZ-u3V3EKy3$r*;UwX=`wXSw=+7GQS<<&M4?`;A+ z(byE%Ka&1f9oJe0Zo%?)%HI5co^EV_ZamyaH<}?E$VWyt))qA@$i}9Al7yrPg+d*> zNt1{ko%w`N4nivfV5LH3EyR=^LScRcCqgnh6Ey|9)}LH&I<#a#eb64$k<}8s{O(&- zAY3WUw{edR{^<)DB6{9IVFSbxe&7ETb;I}7HuindASmdR`rt~d5j#kXzv>O`LfGU{ zDeC55LNlTfI9O^o%qy=BeqhBKL~9fC*Y;Z`(7oF&ObF$tS{}>avqg#O?fr@PYC1o* zI(U~#N-0GbYG_yQIuxZp4ub^v@ShOFdV(u32F1@yqUZC+uj$*vSW@REudm4*#)0~J z|1_HyNq$Isyk7;=auYu2gDhE;kI!}U!z3~i_mPc)3oBqgS;wS9WH^cLO@LDFb%eq4 zP@3_`Qwu@3P{JUJGQ!}W^VBSXQbh*H>+VA_1E&am+2kHKEtW#NLMe1w#eyLS`g4}i zm&4t{b&vQtRhV3Nk@K%z-XrVS`)SwYnfz#jMY8qpzMedT)yJZLisl9)^Gf4|1WahW z02(0ai4yN}Fmj9_-CJ1!&e_@a5;EER2;#?*Z%|);e+-z}J6ZXjhEUDwY2YrON=iP~ z(=aAn!VaPll6A;)&C*d;&Z0&jpt8GT5l?&><`(SH6%*+J|9}ck?T)&)!`OhTAds_*a`)bC>E$=kL&03H%JaLq{y#y#2Izue8)Y zB?)}|8Z6?e#PiO#)})i~;=!09x z-kUCTsI7C--V?3<$5~-iho$AMF2yTv!3DbZPc7bism&i_y3^J29miR7Hu9*qbX41y zEy+J;4xt(AG(K^)oOs*m+&W3k=MuM;>UgAXNMBl4uKBQTxcR#@v8WZD1og$e z`92bCBDtf!eSZLe_i%m-RjShKsI#9tYWN9GpjRP&tl(9Dr$@1Ym)>KO9?nlml`qqY zsLC{!*rgXq2E<_Vc~I#Kgg@rwQYYP;UN~=@MZUa4Cx%&m4b}e=42;p+r@VbSqfmbJ z_$_Jg0WISkZ%l9_`JivPom{u0a2^B3S^IR`jSm5K&G$L&-=T-;{FV4X+L+S$Y$wCh zD5n=L9*3#$Z>h~6asKc?=avKLWh(a(>u?gCQ! zxW-VZ)}Gc17O;XZ;YL~Eb6YROF9Drqf}t|O=^A`DvCedgXL2t+kbAVE?RPHs>dtNDwa(2ypkcKAseu|b2j1BP?5JLlO8zY~xsSf2^F}_L2Tw}%G!3g{GOz&e z@jr)^AO#i8tsA5!DU^N6%@@=&H_??pdkk&6J&l!QXGN?EuD7bEv$;nH(UNuFUxN5T zs=-;fCQ%IG5aw(eFOpp*-~32X5_39!t-X@MWlvueZ{VbfouvwN z;U?BZs3XZMCo^kbF3Au%+fwM?#u*g!Z@;E!PjXiPXZm9wkBgb=RBsUlP$_T{7Vs6W zALQ3cM-SnODQTdLan&D(c=W9Ks1(Zh>@PvBWyNj$dHWQ6&o;8)lU^^S+}d@0t;j0| z*B~9F`zGta#D#eKfz$pBZKv};7T&fbw>e9DG{*cL!XY<-v+tylfHj!*ckAP*PsvzX z5P3|8#Ls{4TJbMt4l zsZpF3!}m#amBa&_TN*{tdW=FH2w1FEER|*chiE!b#BiE0IB&@u8}{`FWKSc!7Dj!_ z=C4Ckz)wTO$sQ63&XXDbrIKqhNAj%kqna@`OE>uW6#4`svkx(Ov_zz*sgu43L+N=e zFQY==2}q~%l29A!+=)ZFPC1~==@@297GhAIoonH-5Gk&>*(zp69?+^1779%v5j#DX zHGnuydp*G8CiVnB?Q1WhbpVU_t|UbRw{-q4pLb}{L4ydHp62M??urGcjbGF7es_6h zzkH(6D_bFC&%Mg=z}+|vIS-CV00$$=g6+H&@eR^gHpfc@^Qo=Tdnck!<2N?uUfS8n z)n{E5XXQr>K9h1y$<6b*1E3rV7IAJPWCZ2J!qD3>0LLF?^?hdnYxgiU>u(7==g!g_ z_}-HEdrR__1)ok6DW6dB{b+-t*ZY5+uU&v`Qtc7Yx;TM+TK2DCL786=#_=VDgc$B* zi9r9GfG0CZqKz^EoqX1o(A=lPMIh(7EbJ>11WUiopG?Rs`;aNG1J~&h!r!_lbyd2s7b*p#5q%h8lWy z4=?jSw^t3?Yx$fi|0GF%Gg#ig1-8*oy;VhbWd1{tse*icMa!tjHk?nS<9cgwQD!Y5fW&+0z*9QMVyb6Wm0UNuyNQS=fv^er zt-)FKUa|Mb%vJA$Q-RphUN3_k7gxpV=nm&7c!f$rz0GcQ3g_TI4P6-|P5`=t4(Tf% z;!uW|W|!5LgM|QXE(-f06GG=58iJ$-8HSPsOjtUPFBmn5WjM&`Oeq-yL^!2>(%Ru> zAKKA=<|S%J#tGeqpcWw{n%8eyKB@fHGL<)2$0L1nQZ*sbo}w4452ruj5S};nha%#Y z+Fn%~pgmOTKlDX`3~(2Mq+#Uq>x_x>WINvBd;lk-Ds?Dl+%akIm8`q!7*!sF$*MVq zU`jv!7~?s)8-`StWzH5z9Utv7<9NwT`A=XxVo~lj0mWc$Tz{Cm-|XZYdVekc$C>QL z&SAmZHmgl#W!A2oBdo5ev`bwVi(fHCeUO&5pmBBn=qu@1$C^b1^jnk&zD+IuAXVQ# zv$kv9UBjcvx_@3D8F&c`n$4@|LKGu9vKh=O(Sm7O#zHL4{*zZ&;Oy42Oq!@9mEBVa zz=7vNJqmv8If&ZgbbL~a->(}46AQ6p7Uz;;;~d6@HfB1igNho$T|CxOpLO{}x)!IL zzw4#*IfJOT{5K(ZvR1C)PPQ8M129y=n=?QL`H29+x`#n5F$HSNz&}7@f8ks}%8W(_ z$6Y0_bIoDQHxQd}I@eRb|4mU-MuQmX5ey~ys?(lUyM-2X`45IVH=83#$TR=q)^;;9 zaGr%TZ5|1NFrvJ3#2_a*2eEzi4-P4Pf{t5ar)*)S3gOvK`jG>HjD10T*+c zJft}-cFr5D=?xVBiI!n*atPO1+}w-XV|zYl^GB3BBdtY{uq*opp;TZh6ZUhHfzy7w zm3YgoeLP*528-M|^qNl+DqsYm0`}99Uc?VwkC6CF?zLf=%bewvoy56lg&O`Pb0P5@ z5}g-d-f11A_i2iU(s=c|kevL-c+q??XB-;2cWp zP`wXxmNyLToQi&Sa5y8!mIXl!_v6DIZ*fe5edzHU?HVZNxS8eX zTg}E!Ry}fC4W?_h`d2f=f8(n#S0A%b%>NF&r|)^c_!-4<7KZ;go|Y8JS(X3O`;hle z!p>vI{f7k`Vc=wLXU0Q&6n3DeNDuKzApwT@KNkP@UNFh!qTr{PTH|%p{%3y311I*? zSBsHuV10LxURvJ}8S;wtUD&@q%P3#!!j$@mcky7-{y1{7ol-#(j=(*-RhkD;--9h> zqBQCKnE>vHYpB?>by=w`O?1oV5ycj95RHBzgF^}H4xWNx+WeK6-iq@%us@J}^=Cpy zITPmpyYbq6b*ar#tV@-BT?*GFwnM5vp?xo;V%FA8+wL?fbSOQnC?RJu>bZrQ##8}poYa~Q0|0;#hqn$ zh*_~z|6S?TlJ?#t7M4Gn0rpNn&I>;$Fc9}onLe4ug8>bUog_= zJJbngcpg9M119gAW3zu`!S89l(^3W)@|m7lVZ~YqblpYak5pbNlo?6Ix=m-s6@XpQ z_cbTp1NV_J+CMZqFS+mGlXA;spT9#H%yPd>4TIFt`wpu}VAMpEAzx7QF2;N&dQj6=YRLA&H)n@Vkp86G;*P`~ljy6(L z$-ia}5lpe&m|tmwl*OOhSgCxaaxf)fZ9CoMUord-r6&Aw#y}!9wCG?YhzzPr4shAh-2^fGXOMQgQrx?v%9;%e^;koK0*Yy- zZCs)GI5M7Fhs5ryZRXAT-l}eq4qKM>Jz~p)EkkU8pAqGO5BC}1w|-r#7otn40Y2P% ziIA0wW%{pFKjXT8Y6Tw%=OZ$9g;RzL`fcAcOW*V=3=%_oPmbiIXhcNu?*za(e^hYc zYSXLSoQ;%k_G@l5Q&qvl={4C$OL#>7`Z4L+4{)WGMZ5hNA(GB$U#q;aMRp0s)ZvlW zx0`&_-P_;&j(eC0|0`FC(X8p~6TGHQF4ec4MRn5)={oogSG%!S{0=Z7(DQSq-7csB z(DW{&Vl7!fgARk(DBG=6joHmUg*jI^QEK{0P!G@TDQddRZ?dFy6~vBDf-#db}yFzZniWwUNSrBLSm1*{LLABh8=9Q+%p zp|J4@3Pco~^?*f}09IpX2u^lF;Th)N$(8?3mAiD>*O=yW+{e-L_*q?of?qLu>gV;df_Zl&+HQH2rMuvjl+A)De<^J8K zWQN<@LRJ%F0FZkb557eH9y9+~dT_G}g}d%C8IEBm+@LDjf>oMh1_8^8ae4XBPJ?ml zimlj{1_ZVOPNzcu_=kr52x&R}SXsx2!hgcRdg2BL#*p>XDPz5AmgriEEUe}wMxLDctv4QDzVB}@<$J-lKtbOgW^fyJC> zlNe5Yxe#f<^xB-G&BeHA>=~XwvoSA@nDE=dbvr3viip{3FpMqzJ7)5`W-{)AQ4BwE zu079UT>j{bG#~#fBYPf0EXB9dS%2+0_Pj>VH-AyZOOdZVuZ8{+m;iLzt)@u2caqmx zL6EjG=jK@&aQF#>*GINm;d&(2a5x$9Z^6huT_{$A%;bszOBPvw6L=XSq>wt^yn(Qf zlT(e;-fflMVTrbX140W}{X;J`gbo3>D}tiE5!%v)(66bXe5kvITQuN~Ve-F&Z~X_} zF--G$*$kCfsZ|aB1Hy`qCK&HzcihNv@E0p+gf$qncO{A8(5IQj!2X-wkvAw<>C# z)o1IvfbZ|h)`Z*W{>p<-L@Oqr_}k=?^uav$w`bwL#L<%ErVO5LI%Cp}hRq^DXys@6xg+ z?G1Y^oh`E=vm7(Iu@h2)PyS|(8GMX8_6w=RbLQ9dmb27suOJa#iOu(AKzEcUD+vs!)EqA61YRIZF={6Ct+x(ho&<^AFhY^R$h$ zh1{jd*u2yArnWLQHg6JderWPgC~M`JTJJz|RFY$^OT0@6DZQ!4uAxQ=(3Z5`Tt-`y#nYGoxcZezAwnwY|@XAIp1szgXsD{5?S zvo8C z^;oYZ*4d_B!1cM&KBdWUE%yYE8!c+kjRD+(P|!kmHdY3ci{tZV-fL>E0Q3BNgSW+8 zuv3@7FTJdN9XCMaB}kaF^f3e4KCJkgCMSQ{eK=`3OY3<-4MO~t&Y_FtLILR?=Nrvt zc4^N7PDc&4S%UyRGWQy?vreVHSnu)4|H|1#IvG*!Ba8hH!Iiz}o`zPVc`;DA%rAEO z$qB`$u2+0&c~t6*_H<*Q+50fdDLC~cUcnM!xx!Oth7z7Slh_?p^Bwfbg6HG$JF#?p z-ETMvx^Tnzoo?Y;u;Vo%On-ojN$q1L5vE_4Hb;c%jozPdP+{8$_lxqAlU+oZHkY0L zLp(@BY;R?L1UuEd;edjl>4GDq26^8TA@5&eE1&#xR6=Kl{${$!-~5pO8f7wfLg>rf4Yms)-v3DRzjI8%CUI{F)c=fMZ_w1>*%}A^|raqbGGR zr~c$V{Pe=5jlUPG=NN;O-+VDKa%02n0Jp zf&RIFNbY&c{k&w(eibnfr#?T9Hr5SH;y{xyy>RNksS6W~821C!Gs5IURdENUW6|Ic zeMek40*g?Izes!rEpnsI58P~NuU1@*{u?f0FX4vE2%h2%7dvg)C)={!A}E0VNT%>@qSAuueRUvBo#&bElq{5ZXyg9J15VR8g96-nG@}~G&z&mK#g`z@M+PKl(a9?Gwve&6>Sg@}YvQ}AR*DK}0I2te7$LLt& z@IR`<9a5R;P+E>Tib1Ob;Bzbx1_^j*h8rn6*+_x4`z_978KV4ef?rLY9J2w(*f*IT z9jGaAqFv~>)|6D8b+hAmBdYzaCa8|6PI-UmJvQn`XwsN!RjH;>@g_8t&a(eK+eO|p z3S*Pn9k>0Fbahpl7#U=}qPosbPs|DVP{}^Y_dv^VpX6JHpndx!OO;~#B&PS;oX5uD$PfmL~Je&C~oSjG~wzBKtEGI1H zDGiyDdn-?Rk6j>>p(^L3?!@AKXH8MF|d74Q~G1 z)xuplKG{u&uH3<70$=MK(jH!AlH9=^4927hDX*2{$Q?_>)--+%CQe2pWeCeu7rjuO z`ZKv9N=`m5n|4&G1f~ zzc~PqPVUJ#n$~&YHhZ__rOyJq2FV7u+1(y_?6-w0hLrWz#QGInrWpfBsYzR*0xcko z*ofJ&pY4-oI2TrG$Nq|@Lw0P_QdS7P`2)lM7d!T-YX1jlq1YO&14aAwBQ!bCevKoS zzrn0fvR+#Vi=yq?jzTHJpQ$Z63dO67$!(y)nt;8AhkyX6uF1k5ZbRq;)+&)$lU$%0 zNe%7W#a{QOrC)=B%AE!S>MzL=Qk$nQ=o^WSx{(Ke!V<%&&f`ID%y8PwGcKQ)1TD1R z9KdT{a4q~kRaiX8FHn^r4vaw9#k)kw=0ozIId&_CU{!j*IdCQ zaPLGAj*v(g)w_DHdCE?O&HrFCe0=2@g7`_*{-rY6K(J={&uWM~HTabc;Zv3Wmubp2 zfcs=-`M(B^VGY49(cOXR*{!rPNv&LHtqdrh?IL-cM3H;XED967x5rY&wOSLTipS_! z{OugR#n0kl&|$qcUMNYS=%sekwvcWeQery@$q@HpjGTs0I28**82SRDR%!cd-P7u9 zqith1aU$$|>qwkfp2&RBSq|^{u%Z2p?7_V)bCx;F=O%c`Om4frt}Ht#^ep`f5XIBQ z8I*Rmo+eJI32z~7=&V7a0C~@?;LKo^n3`=%vAw@J`+z3QXT3^9fky3O-?U!+@5jy? zSbMx~sHV^ev&9u;ZDx(L{A#-Le&#{08Jpp>3-q1aCs|i^qx#DKpOkZ*4pChShCU>0 z9PVUevhCVI@V+;BA_Why!r<*C8B;0Sm2Mz-Wq&hpDE-LJm!Y3g$m@417= zjXCguvLEw&}`&NjHeKjGncW#C1VCKvXOy?&C%!AYZTY!%qo12YH zkZm6vlfnP6E)nR!by5CdFOWSyr~Oz2p6rpbFC+XYrs|T?d9L?v2N+uu{!n;+S(|&Te6el_zm)R`8;6H`N7f1>%t*2MI zY+TRtlIpcIw%Sg+f-kmRJD5dF@>Do;b=wCO&Mo73?wnp3*fl=#PvfvL^dDVzeIHM- zRp}+CB+$iuavm}1s?*6`h|L1gVa_878S8CSZ7hkIVDDNdgRaKdo zw*{l2XeG%wDT*$OaJ@$%^H=t!k4Y!Exqvm}?5&A$=T-zm7)&U)Me-lng&eW`N9{)- z|Gkk}9g^WUb=b9y>0y4Z9*hWIvxdSHYN>F=Rtstm1a5oe#w@7M| zdBhC#hlF;ge)a7>J@BXJN5V&Y-V{H}x7xoMEmNY&T=C*rvdr8jrA26AXr6eZ_sDQP z&E-<4gizAi2*oCcg5_y@F_rv7_Juw$lxWgY`;kH84NR@^@fKBEluHDW(f&FR={^j$ z=x+(}wKiFlMC6kF&N6PUh7n7uRLgCjr541Js^Yf#OY-Qh@{h-aWx$G9QdP30PGo{G z!>LpzvBU%y##U`N4#%QNOM+l9vuiY`#_U^O?-ifHjw&CjANZOT&WH(_!CVi850_AofGpwjBiP$(!M zcZ3M`N=tE)`b#`jpc!KFL5wCuwcWw%B7m{HDVAG*Ds?qdm&RLMgOIWirWPG?v(tVm z)XgMI>t=BUfjvAV>_9qx#?iWAS@X}OM;OKlR<>T+iLYTw!-ajIZx& zXnH}XJ#6A&f~5fe3F@EPN02YE@TQNSDUu0c_RlaaJ0i$Z)CJiU{%lIQfIXL81JokR z(BxF&4+7|5ZgI|jKV3?_C~*uYRxv=5!4_yDaqlns13^peHoJZO1CY*eI4?jg&e%Q& zqIo)-rochT0}x&C=Twh&b zzdI9FiOsZb9t^wwYVYsxPnQ}Wb(CQBKjNdSEAB|+@`C|<92R80g`>)qi`$ovy-hD&VJ@s}a|D5Dd$q0jL$In?NIePAG zi$Cfj5XirO6i8@xsdt>p3o7~NOQ6)wIZh>!NGq=z^N#a{XXZGgHuAfP-!*fbFZ_}J z*T3V;c#{7wXqe;7=pyHtb?-PMFXU*!j4lGx5f@__d!@v{vN&FcBV|{L(YVP4V-}!8 zBOAW3hu`q4v%CeaBTZvLr5!Y}m>vI5%g3>J;&@_cPtz*gi3C48ictvT0AN4r1K}>gV`cu1{_P2o<>}8onZlU}j+kN?kpa_FV$M1MB z%dgrwt8l}Fig%_sBg-dX7h56}b2=p75OpHjqeZs4^j)2_F{?Rtd?M!d!Tg?SQ@PizRZ&lK7rSAt*q zThjZ4?JI>X^nTBc87Ea*xGA?Vb^{$Q>-{;9cGOxRP4GL%so4Zn01=}$^9zK`c!U8D zslIu?vUi-bdH)iCVGy%c#%`a)boF-r<(c>=lz$pXi>i1gu7b~NdFKDHx~K5s?yIhb zCcdy%00|I2#`;YoUX^3U;~m#-N@DzUsVkf8N7^oW3G$tSbh(zWlpg^NF30pw-&Cnk{25|lTKy^MuJUCe1! zjI#p2DBxn$;Wip$XvFzBr?1xr3{y9yyr)vYmjLmUCV|%Z99HF=THLD?5#qcJXLzIP zHJXku0bp)nMn!Nf57y6AAKX1W0D2WPY^(*|>Af3Jdw4aV_Eddz9|DU&49`L{3;1qG zR!(>Gob!NgB=OpqQkgkb=S*g}UY40^A=~+^)w%j5#@C+A*IjQS(nRqrn(V1I@Hp-d zg^4#nVGLxYWxa{Lk4c{7r0#SXRt`4HSB?L>(=~jW&)-Oy^EnVFL)XOK?}zwHHND!; z&}JKUtuSBjUrOZF9f7v{V)%eg8L=d91AzL=VcWF`u>3RIZmg$)4>O;3R zwQl|_re|ZeviIPq-+7KSY|IQvUR^<)QX&#X`fNIXR)x2n0~tHs#_I&$4=6mLoLk&{ z0)K?$?#z+tJaQG@l8y3D@VdCjcPH6X$tSW065=blJNvv#?bJDbWABd!#CO}PKco8f zXJ|t`9m47Ok!ZctAJWRAL&@FOhDG~SU zE+~`i5iTbNES|gtr8H*dMYm^6MKle=!Jb zQ8axV?SVZ5+QiA>qw>YXG*T`8Emp-oIyYw-!8DF>%pW6vh&M7gou1jea`z68jrnYu zcXBY)zP8aVd=r#^jHR7l<{cUwU}EX>@45os+km!IICbj7(Ae0v;l1NcZt!|JcZo1}TntE60;Id>*Qy$di(oBNCyC1X zBtc}cpw6sI{>+Fc9q&p!jE3j#E6(>nDOT=C(QYcN}S_{mE zYbjG+7I~(b59g0T`1|WN=voGGHYJIJYlgH?x zj|ay16#uH_Ixg;{y*eY<5q+@pn7M5Xe2MXwMq&+CXuET5sxV>2oMm}VOt0nWaCsa5 zH+qvl;^0^n%4+g2*}v1}gWSSGlZWRYBDuHGD_=n$DlekhNM68ANxGvy`*@-0^*DWj ziqaibviH%w=;i;%^!uOVHJlv_x-L1| z_Nxo3iBQnG3CRPT`-|l8SG%!H79amxQsYcoHi7ED;lI7>i}>2tKk!u&&7^ZuU9TZ9 zL53xemy>~LJEu6x?iR@@tVR?0@B&nH5Er;8V%{nuHCU^Q3FVAzD+0kpMx5cjk;747d;B~_;*JY^sc0vgAQV= z>_%vc(SQG><0w%$)muU5cL3WFJ~f`7E_}T*4oIE$PSCvt^AY-7ZwDju$BtD)>tK$~ z!jt6um-#enoSmdTaTHm`&qr{D`;&i5GVX128Qu#>vC)X%{G80GSC;kS z7kTR0BkAxTPDID)+g|y9N)HRPT%?C>>c&5(hyOzI|L^Fbs6R5zkn`ReQF@>s@;CcP5;f~zIt4~(B~H<#J=s09Vrd>n`rY*F|Zz}ojufzA?9 zQaw|RmcucIsuLArKcAsW6}bT2@A@(3kA>mP8F}s)iq%l8hGNDcC^i))5|w-Pew!*3(H+jn4inp5x)qwH5JgG(m>e;dJc?@oLZMkZp(~KdoRcMfkdT{7mRm;SvYd* zs%*@8sz!;(J}>*}F-T7rK}=?{;U5OG3oa*Ja=h}B?Lo3-pNXv!>ts)PC5rI*ArU^G zrg{8bTcI8tL!H47vDS~~G{2mQo!Ww_7PaTMIkhvFIklJFEBlO|B<)|4rMs9DHHlX6hboM~b@B50*qDdx(^K#%K zqz6TQWqPIQlteN9N=16&S1L2-V1Y-cElfqkkUs-qH?KipVGH^w4B#n`%^pDASTPE4;^vx(q1~T_6zxfa;cM!CEy|2eEW^q07+NOBDFUfmTo~-NOn#TMbcbeM zS9_jE@$@J02=x&-e&1SLuJ~d$X}iIYV#wiH<`?nf7mM z_K$AitVE7Y-P{T?yx)aGZ!?`hHC*W|uW#r)?fou7bf(lV3ijR`(PQij&QiOeCYHpp ztUUsQdjv~1HijVvC+ER3H=8Y$C&fU*zEE(h%yGl`NlWcNu*Dz4cG~+o$&h6*xXo(& zp!R+L&kCpMG!*AB{j-FpJh=1O@skKC=b41S?3#BE-=m5TUVVo{TqN#dY40=G&I zb>?rVV-4_j7Iut@-JKsz)ovsJ4(-lAgx`UF&YR~Gy@w`T+oE5b$nB|EaC*c0J#_F{ zra=2^e;^4LiRqP1oo*#bgPit<_~h~N!SpG+=QMli`rW}#tdBNt>HKv1^<>&}5n?|$ zGk@NGJJ0gYtJs+?w2n#9hnCt+O^KeC+I37L?Kw-orp6`N@}YVBnr61ru~|*em+wEF z5I&8`o%6Sum>V>bF<!-0gPShO>^Ox@Y&Ja|I|lXk;_Od20`IVuz6 zJ<+K7$!99@Wgba>273{DaTA?n2=uWjpFZUy4dSEVMePQx2q$?Du*VkGG_EapaR~4i zEKx5Dr+)rdNGWF@4Sx!iAN(LYHEet!y^q1Y#omV5Q^%$zg_h+41@%}nPnsc5uo zo5ycytlggWo;|BD;$QQFJT5l`n%0(k>z?fO-hOgxVkc@r3XhtXk-d&i73QN5WXCMv z#?ZI?E02^waz0Z3%nD2KvXxW3!~Qi?RMxqL(SI7UU)ic5^1CUV`qv61mTw>l_6aN@ zeT(n-i0RuB=-ZM?Tv_O~E}`jRJ6oi>$4z#|vYS*-wf1;I8Vq`Y`>+6mECgUkBYJ*x;C(g4 zI*Wys*H*-k8CA~6S>%|)^Aw(^aAN}PuBK9C0}yd-M)h zkga;k&gi|t|NImPB+>YD8{Aa#1*hWz(7`R-yNnDHQydg^23CJp=wzBKQ!D5bqrD?y$HW zRwe(bRT{a!RsF)mfn}qk)%ey*mmh^)xfo+WbT^3q5be2nOG30+L=M2EW3CGHbj;#M ze>|#bd-M*g?y+<{qE07aUX&0W2EaMuW|hD~f#9STIYb(^Z?)4t=Zg3Y9IIZns6V@d z)9rc*!3bN0f24JbI%GJJuaDuY9x5$&(eCnrR4ObA+@f(@x!t0XC0wwsqGW#tC=G4| z8vGn&CAy#2&8^-^+e0%)YHRD6UiNr~q_5Hj4Q|Za|Hk&tbDxauCT{)~InLcwe@Fq4Zshxb$7|w2JSH>J}Yc)BdH}H*GZkYmHf|2a2`C()>>}Fa_FM zc!omrWe*E=O<7AXM{;_)yZnSur#5`RgwLKimV;OQ&SNy;Y(osp)nQdJkj4N zV{m?=f8U|uul!|rzbN?4C;KV8W>1LkGCEiH36#^pe0#MnI7YUbm3tAFI$hTTx2-`6 zZfyecF4o;M4T8bBC5YBuU15cXT>kQiGJLmu=1zY+-WkI$w%RaOOrgD63#2++?xfKr zN1I$eRtgvRh=*8v^%{F=uWq9jz0ZTHI)|jIUFVSVs_UKFTdNzWgQ5rA`4xNuYQJ5r z^-@*NA>X!A%G1g>{gzRi^4t?Ou?R<1`sNy`wr=i>9-Tv)suwZDd2}SBqW4)*Wv8TN6xb zl~yxehl*e&yI4D(=6jvDb_H`-mROVAw0IX)3Py(Tf#@r82h>t3oves9KV=m(P`B~- zReUsOcsDK!Q#n)@B{BB> zDD;pcL8`A)`&(-o0{{V+3cokEMSS@E`^QLj3p1yaui&Qoipr|FW<@snS5iluCzbpt?M!=Z{2JXsaH*7;A6dg3`fLAp%Bd~&w5f0< z0k6oE|E+bfdHj}^!gS>_~v{CC&J&>N$%VeOhi|CD(4gU^3m+e zQ@rx;rwY>(0N_g7X+_RYbgWs-HvYG5vfMj+ zLA?g%LErIo(}d=$mo_5?^~x9iP7xp^H2p&`nlZX?HCix#^&x$$73J6oyyLC)dmH=a z9~s>fNC{Xmlg)e{6(72%Pm(#@Lg?ZuyU}Q&(!KU^LI*!({#i$Xpx|o9#nqMB&us?N zLlKjG;;6z9Bn1hAsxT5ly!R1IlT^ntSlj63tJE)n@Obp4&3IuTBHtd-oxJpZ)};Jf z__S7dt?XO8UZq^g?(EB$m8HdAZ&Kpb$lAZP=7`J_&%^_xH4{-&Q7d>iC)8(`Ls;s9 zci8PtN2ArzZU7Hmti!0I39j`2^&NFKq*_IqqI3G6$0j90R~U7dCZz~6v?4l%Jh)D? zDf$v_y7r7@>i&+2i0KsD!6kSe8ARIg!fEe1K$Y}O;9L<7h@;3krw11tY{vm#@Lw7g z5;sdvVtyF)tAXv$P!VS;t`86=J=>=51#17&zV?k=LSV@xp5p)PZAL0LjNo*2g?FIxPAldKIpL5fovrKU)U#GQAqHA&QET>K@ki=4HoHn zfBV7Vhy_ajgtdSMtub!_GBbqaWv3n1!5MlH}^QC$ThsE8S#~6;$yAY^+VnP zQyIWIj5md=>(8ShCSo4ic>4pU0f(y=Pq6<&70#i?%yQiczft|tJPS2p%7EECG3N7- zhZQNT%xVAQfszok@1NL`eELQr*Rn<=385X}+oYVS+qym+Bu49czYL{~_HPSBU^exzl`RoNf+nP%9RXAMUiCe6sUK~KI%BLU zDd7SLidmED_LhiYRVtVtb=SyP|L+VcMjf2tkGpGtewaaF{hMCXl1eVZ;e75ek2 z*8hn|sqcL}Dy-+p#dUl0sb%@`|F`(leL})k;B-t0f3j8w@TcYKdcGX~w5EhVVIiPs zDSr~E`iEEcEm@RfAb%3T3a+$zz~aik{$Jrwzxhm&Kh4XIgVxtM?Z2UeBCo12Mx$V; z%xY3e=~Y>vqi|vt)+T%j$L-%6{OWM8F{M8EXvzyG%BL3&YjYD%dNbfly;a_`n0wey z-;&9T$%r2bDnou`BR|T~$fG8r+9Q4hLjKm8Hh!cSG-ARkCE614qdI@^HX}9}Eli#N zUaz{0tQr%z66uxCTq(CE?KJy3^<43OQ}wJt#Ha$(vBXFjr;1AdCA2R{W>w;8h|p~d zILW4r*kHfOBXwLX+H^C+(6bbWxlM!zX{tR=V##Y2n$?S|8`85gO63|>#YL1IkH8U@ z(#!=Y*hcUaWOuAtobJcA6k@X0fkx?;sw20CFXvWtmLFSW*{s5qebPZuGyq@1`9G^r z-gZXeu*oG0fLy==oE$H}3?^{FXTp|#dO$e)t$d4XwS0Y&fX?4Qrksw83>Y{;t4lR1 zbrzO0UEist0;#|{AK0%HV5Lsh7fT9Ik-Nf@SA`{~MI|Mh#m!11P)RhCNHo+87fVjClI^Bt z7wtGshrmkl6;Nd2Jw%*Q|5q8~F`VZGs`dWgnCam6_R7@C@058Jf#_tUbf*gX1S174 zzGt6Ovp1x zmPYTn;6m6@r1yATwQqB7xG_KC_TU7}&rRM7jfE+kF*#??L*y=Ns{O0uexPV&a`aCN zY}KJVDbU8WcP?VCDX_a`_7g3$x3ttgD~LDpapzfuQUBUo6}7|lqRE~mUz3{Im`}Hr z6Rn*qhArq9-zjzunuy9oE#~KB_0mJ$w&){Oo z_%30KYy3v-TQBFy`Cg1u!B2UOD>rBoVH0Mz%ziHdDFR$$mKTV14rT2+Zvb@~b3Nmm zJ5N)zp)2XKD0PE7drK-m4VmNV1#A}#Lw|r&@2L#Gt&Fc0p#O zo@!=;%l@%vkJ++<+us%WVLzX^NZ|>QF~LzrgCfo3f?)!<_E5=9yirn%7+RHxPSL{l zNf~hf1u>tL_q>JQd=F2L(Ai%0%Q1L{*@pU-G*GJbY&0+ZwD+f$Lit1a)3ndzv4hu} zK4J^DhR59~Z9i?v7VloL_FM@(xUaF|PBYwb<*nR^hRm^8Sz> z`FhHGF6I34Z&gZ7CDx}#KIP`Rv9oN?exEBq#3;w4hx^&a-bH4AFcy8)&~TjUd)zk{ z4<>6!DxnRE3LCw{ZlV?{$RwM*mqV|@P%EGRTlLS|(feo&E4DUo`6Hvsg+0N~LtVj<&-RUU#F{3G%m zaBdv&GE!3+KC(9FRnf*&e^scR7VV(HTF$wFbKb3>DSf&v&u=&bRK}d(UyEdgAawiJ zgx4LH^Kb4I8vQa4!3D~_&z0&ybqh|Qa+{OXY_9H{h6`ZjDJCXvrCS;oej&RH(|5bI zkMthWJrpL6r@d}PPHb*VAY*UJ%&|{}2_xH1J0xeLJ25`Tb%=|3kHJp# z`Hz2AqhP$8s#%F1|958Em(^sK`WWSZ)>M;$RpT)^`u*Gb zdVZ<0{$`(9zeU!^O0p)EwS8Y%osQY2-i-e4E7bfEhIQuT2R_-)-*@&2VfL?;WM81{ zN0U7~LbxtCNj`S$GU1gOyk7D=4)?`5%VPh7_t-=;7pvU18hpw#t#1BI&OID$j(p9? z`H!V*U)BW&GVv{h$LL&yPC?X$H=d3KS=jOzywD5- zTAR5sm2bv}Jd0R(BmbWdFIeZ+5{fjeYmrso0=ntQg)UUhHOrim+cgM9j3<9NiY%vx zs#LyMSC~7&)mYoZ;~C_hsd608=um;dGqDEGBm&a;kfG)}a}>J-z-!58>r?reXf&6B zMa>Od2$HIOAzi!G0$ZOG4z}Lx%F)MMLGX&3NY@AW?XFpJd~hCcExur0%Ch#i$l(lc zH^Nuv)?u7qU*#e$IPC|Mk>G@xAeGlHI<9GH++WOQ^fWEWalVq9G#4yaO`Ts*{}WFT zjn!FtEy?nlvZ$EniLZ0ekzG9o#eS53j>xUf{er#z13Nzm@mN|dQ%r`Gr%+(j?&ePl zgR5)%#Oi=Sq$#v)KhB)dE8FW2CIVY?mZg)IR##*u6!nEv9>4qo24K`2E*`ZW^Je3d z%V=7?P?_vg>A^SF;m}p@=GNDgC^w<~j>QC4{$xFP)qnLcttSAbg9rH*LOx!`^a{A} z(jVm_^0BzN4=C|_N{B4|RwV$f;2x6=nfE>1en6Lz1+*%?$A#_KNe|hNbcU{CN_YA3 z1J>hHDx>vi$xjGJh8ro7p}6g21~6?W8X$&R4OUw`68o4uSWc&WidG14EW&_%ssB&)mm8HP#d;HIa&6tla=ajNF^6x#(n!&&3 zGGSg#a3jq`>%SuQn=>T)oXy@Izn~_7VCH8-D*1eNe6R&flb@X~`?g!IWZnIuaH_?- ztb)TNRUp|hEXecNvdEh%+z3X^rhg1sN0>ne3Om=Vq@dF|${J#KR@d$w%C!5Rq)D7) z1Xa`sb}%>`KmDc1usR6S`>!VNN#=M#SYNm<5p?v8L*IMi@4ErUaD0T7C;m`na4u7+ z@(;^XH_-jdVY)?K4}Mt85A@@|d|6#gi(+cSW#MTw0Qm8{*}7mi4Ta@3ADQ|8!(1$; zseQ}^n95uz@(y!hP#4X`!Bp)ZC<@SjE-Ez_*C2{Ua}kcK_ZyL(B*Zs-cRF5Vrz03f zvl=hwDN#rS!@<&U(CthBOS$}zPDH=*>R=0^7W5^5S-lJG)wSleth4+sBERe=%x3Iz zMSj`uf)cvM{CVY;N00-MH30i=?eqR$Osy2yB%o!@B0CL18~s^k#Ft_}?d=KS8~Al@ zdyJmIqx`G1eG6L%{*Lxy>HfrBAMjM>pA`Kb7yddOKOhUcUW*ooIg8MpFE_l z4}-h)vEvMyl~4PqYG>r3;h|du+TbKUQ*ZVVoR2=^jD#lJ37euH0p*_pwX^T5>a(x5Bwh=C%FM;|z`uO(u07eCtP{h6Yk;;8K2!@AqmB#-Sc*f`!4CC+ z&T@#UIyjp}LAdz&%}5JlK889G|5eW;!sl=4xs2yfa_9+`kB_B@o?tW2ar@!^!G?5d5d{wG;8+wxB zf8>5ft-$Hxv)vW3PhqO-qrqwCH(UGW16|3yad6bjZE*c@h^VRDwnX+du@Mde@c;4f zc2*k>XDz7t1b!IM1!*T$?3_96PgpmmRIp34(LHW(s)s0T{Bd%?aoT0lavv(vU5@U{ z={v6?5WZ)nrg>fRjOlU{gk88|P0Hhl3;`D4v@XoVt$hy%B$(GRR^)Nad;UMP0gC{U z2x#&Na#gvHQq;*lfJX`Q&!De{;YkrTtmy~`FXa!Rjaiv zkXJprGW&IZQEA&-$W>3`F+=?FQAe=#<19mPM69%VD7m_`!t8*QDy+ zZxde+x=eq1y{I381Bis%;(euF4z>b^j<-wbGSzoBh5Kc%&l4Nh@rey}) z6qq2_on&wJtw13``rv>38(dD>W-^fVgSTyA=R=j#D*gqrJh2JR*i)d$d23e#%AfXnz6qSR=F$=+;6$U%Q__i46XQr1|IQpK*Gv zQ6cExO`?AY&N0pV68@#J=Jc(S=O30l-(Gy~34Reh$MGVK92zY&ziw_(&X=42rZB?A zuQj4FMk!A7&o-ZoiIawKx&+Yn-)0JXKNZ6l{(xJ>t@y1Wzt#|xsN&E|KFC=d`%C7$BIpnf#V@-YK+bxf;L3%+#gX{aInC)r`cE%(;*XS)F~BF zQ5BO+*Y1M~y{k&_vDil~DjcxKucbs1m`4^d4BqmW zB8Pj#iO};Lb2*t9?39%9@E`vW{ppx^_{YhRO-_3!h?5q8 zn1fznEPBBPXX*7?_t=hY8sR(oVx*rw%Qs^Ut9~h~PRwmBym~oCXBT=JZ1GJkb4Id; z4M52#mF}BZwwIRLP2Ct8{vcW+9iEvE$xmU#p{||qa#^bZfR$JK7rgVq9#yq`lBz;+!&~Tq ze*MSqWAO0W}2G%6|-(9{d1ikd31R%?xBMwpIMV=Go$u~enCDvIrc0u>B* zP*l9*6|{nY!DVZP0qT>HjF^PQr6!+Xj% zF3dOI=Q}!@PgksE5AG@75n;aTeZHNd`Q9W;*4=H^4WGM)`A+ir))`3|9mEoURKA_N z)aUWJdWFZ!o<85h(R@EtzP}Vzx2>N9|#bi2^1@sl{>a)poj9=~Xwo6AR$)sk_bVDjTY`_Y044O}L z4Dzo-8aX*h>=SN*y+-E|;`6M=Kw#p4$qtRn?V7XnAdKFluz9c`?jpAwXm-rh(RyKZ z$iDGH<`3j?)_B=mof;qi3dwJRH&t)vi`8vVw!eRKaHi$o zH9ImdXJl_rzLz9+iR$&eEHQSW+^)^M1b2N5QaFdJK|b0A_1t&TsHG=c)l}K?cM)jB zcuO2hYHNsAp36|uG{ZYSw=fe`kOXuJS7+ULNkeW&Hj>45&Ky-ZG9?`UAiW?!_o}OKC3ilmvK2QmY%j$v4j1CbP(wQ zkR{<~74GZ8zqyofZ^90&R;qC3#**w}+q-7_?M|QDcb5Zq(m@w~^O;foweQbX-=&X< zm>t8GGs?~QixcTSyL2F+KV|1-1d{?Q z8s~QFt#R*Ib=qSBwW zdDWg+9z@Vbc3Y-`!B2eN5#}2hG#DH72S994tJX38``xsjLoFd2D-6$R%3a9F;T&nJ zkBITAr+v#V(2)?XD<%z($1rSYNKJ3%GoH$ya-fji1d1FZ>3@;bf6T|@=-34?wu>kI z;XTEFHJ11;@yuV&w53b?iqF!motgxzMj~YU5FtGbNg&fV+w8?OW^;A?ML!a-LD}&G zR4P}+cco0n@)O!^k$#RlTm>DkNBh}u&4y-=WV!O##q8gLJ$#<`cM$Ixo(rLy9G?Hq zGy?I#V3nCNB-_bL=g-8wFk6_KI6^nt`M0melE(sEJahHT`RvIMN476Oc4QzLlzVbt zeN6w-me#tfup5z~*sOoqM6JQ*^`PWa^lFFb&Ygpq>03n!jsQhJ!4NB}H3f^P&p8uh zCUZN$@_DbA6DjF=N*G!VTRQ=uj|V`s7SH&bUe^Szh?EawquN(dJKLb`neDGy(w@ME zzNUuzyF2lG88KyFvu-o{WS%e^f|^ua)7H7h&Zn{RfG^pu2Jecs{8n_Be;E05myk~oj47YLpbpItU4Z8sF4w0^v~hqkZr_EV7d zgfaA0YrkcZ=g)4(%}%srk@iax(%I8>=<768j5_;866M;z+GAMH?ECuS8p%nv5#@%*LE4Rpj%D8|rZzg1dy4U;hJIb1{fI7D_MI|! zl7PPxXc>0_@n@utnXvV^NoW! zH6c5n43M)VGqIdguRa-q0{EWX8!WWZ0`WmZOIq)ar+3#B zR3%#r_h6pnadYS84nW$U!~F2Na)|bIG%lXzfF+%Pv|f;hNBHfhFCu|j0{C5V{K#pA zSFsdJv=sO2v)5b{Zy#KazkU~`HAnBRGBi0>zeKG`9u8ec?Je*iQ?*3aX|1L|DmR$C z=;}_1C53VndUp@EP5C@6TdX*^5qmwJ<`NniNouMll(~f!Ya_MP%r$Fr@GHcT*=){( zc?J;W#`9gz@9xPvA8`}PJS6FQe{Nt=Irh6E;+0FYmx#H) z$X#l=rgm+AYadLvyR>umU`t)%|-*xO}8-dlqdoTvW-xKvlqw=)OkqA{k@MWp`$D*H* zs^5uHwVO|Xs&%i@7f|*0JyjQd0aXt+8mgs+p6K}?Gwcu`5l@kZNRFO^=!{L2o*%Pi zL`Qa|XRUT)N6}y|yfXr0yb>(M0F4mzXalB=Hc~^E^XR{jo{MrNIC|C%Z01MEyS=;7 zGqjwBroR+1PwRo0FFhAx&Y*>Z+3-?Gz)vv~5QbO!F!FiYp_$%x^q>vAb@s)rY8)qx zGglmu(QdVTk7By%KNHgfgCC00kR-4Pd;jF0WeMSySfW)Ohum+mwd#t;wXGpu#^%dpm1%;S)q9$_JL82(ixJcTf}P(mfz`84ob;no)x{@>=eLet*= zhy1n=B2)ZUjz_Qyzx{Q!$mM^^Z&N^K7k(>}X#W2@zuov2jo6MrzkuJ)QR4qOzkP&N z?k7rn;VeTH5;#5C-)%m z-!ymAb^^bbxqhU2dyx3Jqn8y~k+G!ax7Pn5=U>rY;}m*AEjB5e`h5M~9d#+D+ZlVA z4&!9^>i*@i#3KM~ikGIRX`z5CmQ^YftRdJUcX&h={H3ezt>;`&Y23URuV3&_bnlDY z9V&GxwL6O%hG&Y7wq4^I@0r%!M1V68b6U4QqpUhN$~q?0xVqK|udx7Th{Z4q)ghph znpKy-7^K_9rG8wF`jq|?cgez!%g)I)}aqS31-Mn5q~bt%HuJvqkeu)->vCE->pyQvE&z#H2BTf>mS@s z`k1miWE9Ld>{*zvWo@4M4&Noud{vR~Hwj0kbi(n`SNpABuM2;}#jMx9e~<7g`x0{O z!hfCk_@%jnQiv_Z94@@jX|zEakl@s6mR_ z$bS#?+u&Z@tJBUQN-WSTX~kEnQdlW%Luss2TYPt)*_rNOl8Bk~56?CI;2JfxyPaf} zoNY!ceuft@BdC82dw4K?6Xk8>@a~Lwka|Y6;rLSfvfW3d0mR%|lRXC-&)ZMqVi(g6 zel^X~zL@`|yq&XP+>qFdb>&+cQq3%VXSXPRTJjA^A8ml_N%u`PRE~i^;egjOAWywJL_hRknCY2axur)s59#IWJm_7ar%_rWYool3M@j z0F+p)vZZCbpU1}X*g1>G#a^V*%T*``a^ZI_j$J>N9F3_r8!JDp&-{=jI2(3k6KP?+ zP9wGpl-cJAtvs_azTjPV-j}Tu-#J#g2REE@%vANV)(>hoFD;zN_;TGpStrklb47n^ ztlWB1=DY(~;kB)mxfZV1084md;qGC~bO}AlH*J81f7u~iyN42*yq8SvpnJTp`Tke% zyuL)dmwS}kySRaSaooL*Rq@n|;_%|2orF0KFJ7Mt<)l`2os(nA+~s2n*4kE!f%1hc zN4QHau&zp-3%?U!%_uv)SfJl&xCDXR5cFaZQ(aqQ$yos3kojJ5c5j4&v&-}AQ~^iD zN>t-NPtk=><>^P~LAQ6ZG|pVBj!PMEy0+(}N+@?L>eI*1?FDYq{Zen}Ag16A^g5Bj zI?Nb-l(&&jb>)46MfT|!RW&fU1^nb${_gTN(y0=Nb8YLu>?Lr8rynB;*av>^gN_o< zJARM7IE7)n4&bH*OyjydZCNdc5cMMe*tvTBkRpX;@&FQ!^(k zHqZ4v3U)`EVjB%A?Ec`NP<~FqYCg>r?0$T95at+uGw_vym$L7w3?kIwXPBUfT) zS|SXOFi5OWv0WG*|1$eB*t-{H`1i%|vBW~*%$UCJW3mT^6B1{JpbGA!1uoh;xO?mY)D<9A$4smseMb1Xu=_N zi|ns!lo&}a6&KMJN2y)#cMrOP`=llmB2QS`%AFn92gs9PpcTVQ_E_nBH_nxvaAl;2 zszW=0V+B45l2}!~Bg|URIsUwlfoLR&bJD}EP985l&-|d+hS)hd)xC{-Yn;7TC|~O5 zZz0IvHS0N2PjV%YT){r-B2Toc^8M_kPM(~jdO{~{DETl)mVlmutXvw~A*CcwqV6B)X-WH2K4qktSn9X>vKm=cGwi>>(#vStv~eUwOIAhs`1R=Bf);vhw6xX14v$ivqh&SRsn}>0yn+Z1tZSv9BXZHK}&#&b_|4uGbeV#WPx(UwlDdy%= zJSa}I6m3dT>r>pCPx1QvFonjx!G1o)<@pq^E<}oC=2aMbYzW@(kQ8S8ql4jltv`&@ z{dLDmL;4%?FrYmyE0boM{`9B$d!BCP1%282oQMLGVsQC@%}igSyuu^oFJBB8#5!}8|1{r)ubb+r|6uvFkKiKnK z;LCyb>Y^_R+Mg)JgZ2pW4$yA(pv}H9g0p{pU*JU)lDi+PS$3K3$BN)B2iMRq3)kK% z1;j^=xBm+BV71{0bWw26DlKJ;`lG!bOu6-z+#Iky0do+Rww$s@MJLLbJE~vs&t=q= z85*};qZU^Z%#|A{)83{I)n-zQE)I6Lq;^+M7>%ZQ5|VGo+$CbP9ewWxgC14PeUARL z$1kYwRLq}U#}o5Oa3*}zkok+lH!<6SqcDkBXxeLPpIsxpxtNp&X(kyFl;-N@_I

01e<+uS^Ibk=^}&nmi%{Bpg+GB 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%0D%6yWI;K_heqOlv{yj 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�VFS|6}N^v>vc0=HjLQC1Y|7^L7NgIAW7wdneE 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 sZ*ye;GDMl;8^J( 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∈&iZ6eC6k)AiXJ2N%?q}qLea(Y!?k}5kS7_l?~ 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�CKII*B?g0JTPh2(g$qU@yI2Nw`fkzUG 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

4ozTI#8}&pt7Vqa4FTeDZ1)NfLB3?NKjFr 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☀Rco?5BI0%u0w) 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 literal 0 HcmV?d00001 diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Native/web-ifc.dll b/Importers/Ifc/Speckle.Importers.Ifc/Native/web-ifc.dll new file mode 100644 index 0000000000000000000000000000000000000000..35808817c0315e1101707247c8f1a0bece78864d GIT binary patch literal 911872 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

3*TGJt2#oG$yIO~ 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 z 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

IV-9jQ;5%P+ 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 q+}HfvwTva^lCq_drEN>CrGD;0R;!BiQ9c(); + } + + public static IServiceCollection AddMatchingInterfacesAsTransient( + this IServiceCollection serviceCollection, + Assembly assembly + ) + { + foreach (var type in assembly.ExportedTypes.Where(t => t.IsNonAbstractClass())) + { + foreach (var matchingInterface in type.FindMatchingInterface()) + { + serviceCollection.TryAddTransient(matchingInterface, type); + } + } + + return serviceCollection; + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj b/Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj new file mode 100644 index 000000000..b2b80aa0f --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Speckle.Importers.Ifc.csproj @@ -0,0 +1,43 @@ + + + + net8.0 + true + Debug;Release;Local + WINDOWS + LINUX + + + + true + true + + + + + IDE1006;IDE0130;IDE0011;CA1051;CA1720;CA1002;CA1054;CA1028;CA1721;CA1502;CA1065;NU5104; + $(NoWarn) + + + + + + + + + + + + + + + + PreserveNewest + true + + + PreserveNewest + true + + + diff --git a/Importers/Ifc/Speckle.Importers.Ifc/SpeckleIfcException.cs b/Importers/Ifc/Speckle.Importers.Ifc/SpeckleIfcException.cs new file mode 100644 index 000000000..4ab39d11c --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/SpeckleIfcException.cs @@ -0,0 +1,14 @@ +using Speckle.Sdk; + +namespace Speckle.Importers.Ifc; + +public class SpeckleIfcException : SpeckleException +{ + public SpeckleIfcException() { } + + public SpeckleIfcException(string? message) + : base(message) { } + + public SpeckleIfcException(string? message, Exception? inner = null) + : base(message, inner) { } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcColor.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcColor.cs new file mode 100644 index 000000000..508a57d48 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcColor.cs @@ -0,0 +1,12 @@ +using System.Runtime.InteropServices; + +namespace Speckle.Importers.Ifc.Types; + +[StructLayout(LayoutKind.Sequential, Pack = 1)] +public struct IfcColor +{ + public double R, + G, + B, + A; +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcFactory.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcFactory.cs new file mode 100644 index 000000000..567453924 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcFactory.cs @@ -0,0 +1,21 @@ +using Speckle.InterfaceGenerator; + +namespace Speckle.Importers.Ifc.Types; + +[GenerateAutoInterface] +public class IfcFactory : IIfcFactory +{ + //probably never disposing this + private static readonly IntPtr _ptr = Importers.Ifc.Native.WebIfc.InitializeApi(); + + public IfcModel Open(string fullPath) + { + if (!File.Exists(fullPath)) + { + throw new ArgumentException($"File does not exist: {fullPath}"); + } + return new(Importers.Ifc.Native.WebIfc.LoadModel(_ptr, fullPath)); + } + + public string Version => Importers.Ifc.Native.WebIfc.GetVersion(); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcGeometry.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcGeometry.cs new file mode 100644 index 000000000..099d94618 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcGeometry.cs @@ -0,0 +1,18 @@ +namespace Speckle.Importers.Ifc.Types; + +public class IfcGeometry(IntPtr geometry) +{ + public IfcMesh GetMesh(int i) => new(Importers.Ifc.Native.WebIfc.GetMesh(geometry, i)); + + public int MeshCount => Importers.Ifc.Native.WebIfc.GetNumMeshes(geometry); + + public IfcSchemaType Type => (IfcSchemaType)Importers.Ifc.Native.WebIfc.GetGeometryType(geometry); + + public IEnumerable GetMeshes() + { + for (int i = 0; i < MeshCount; ++i) + { + yield return GetMesh(i); + } + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcLine.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcLine.cs new file mode 100644 index 000000000..a3c2306f1 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcLine.cs @@ -0,0 +1,9 @@ +namespace Speckle.Importers.Ifc.Types; + +public class IfcLine(IntPtr line) +{ + public uint Id => Importers.Ifc.Native.WebIfc.GetLineId(line); + public IfcSchemaType Type => (IfcSchemaType)Importers.Ifc.Native.WebIfc.GetLineType(line); + + public string Arguments() => Importers.Ifc.Native.WebIfc.GetLineArguments(line); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcMesh.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcMesh.cs new file mode 100644 index 000000000..e0b34e73c --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcMesh.cs @@ -0,0 +1,15 @@ +namespace Speckle.Importers.Ifc.Types; + +public class IfcMesh(IntPtr mesh) +{ + public int VertexCount => Importers.Ifc.Native.WebIfc.GetNumVertices(mesh); + + public unsafe IfcVertex* GetVertices() => (IfcVertex*)Importers.Ifc.Native.WebIfc.GetVertices(mesh); + + public IntPtr Transform => Importers.Ifc.Native.WebIfc.GetTransform(mesh); + public int IndexCount => Importers.Ifc.Native.WebIfc.GetNumIndices(mesh); + + public unsafe int* GetIndexes() => (int*)Importers.Ifc.Native.WebIfc.GetIndices(mesh); + + public unsafe IfcColor* GetColor() => (IfcColor*)Importers.Ifc.Native.WebIfc.GetColor(mesh); +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcModel.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcModel.cs new file mode 100644 index 000000000..6da106e9b --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcModel.cs @@ -0,0 +1,33 @@ +namespace Speckle.Importers.Ifc.Types; + +public class IfcModel(IntPtr model) +{ + public int GetNumGeometries() => Importers.Ifc.Native.WebIfc.GetNumGeometries(model); + + public IfcGeometry? GetGeometry(uint id) + { + var geometry = Importers.Ifc.Native.WebIfc.GetGeometryFromId(model, id); + return geometry == IntPtr.Zero ? null : new IfcGeometry(geometry); + } + + public IEnumerable GetGeometries() + { + var numGeometries = Importers.Ifc.Native.WebIfc.GetNumGeometries(model); + for (int i = 0; i < numGeometries; ++i) + { + var gPtr = Importers.Ifc.Native.WebIfc.GetGeometryFromIndex(model, i); + if (gPtr != IntPtr.Zero) + { + yield return new IfcGeometry(gPtr); + } + } + } + + public uint GetMaxId() => Importers.Ifc.Native.WebIfc.GetMaxId(model); + + public IfcLine? GetLine(uint id) + { + var line = Importers.Ifc.Native.WebIfc.GetLineFromModel(model, id); + return line == IntPtr.Zero ? null : new IfcLine(line); + } +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcSchemaType.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcSchemaType.cs new file mode 100644 index 000000000..6c25971d8 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcSchemaType.cs @@ -0,0 +1,1149 @@ +namespace Speckle.Importers.Ifc.Types; + +#pragma warning disable CA1028 +#pragma warning disable CA1008 +public enum IfcSchemaType : uint +{ +#pragma warning restore CA1008 +#pragma warning restore CA1028 + FILE_SCHEMA = 1109904537, + FILE_NAME = 1390159747, + FILE_DESCRIPTION = 599546466, + IFCACTORROLE = 3630933823, + IFCADDRESS = 618182010, + IFCAPPLICATION = 639542469, + IFCAPPLIEDVALUE = 411424972, + IFCAPPLIEDVALUERELATIONSHIP = 1110488051, + IFCAPPROVAL = 130549933, + IFCAPPROVALACTORRELATIONSHIP = 2080292479, + IFCAPPROVALPROPERTYRELATIONSHIP = 390851274, + IFCAPPROVALRELATIONSHIP = 3869604511, + IFCBOUNDARYCONDITION = 4037036970, + IFCBOUNDARYEDGECONDITION = 1560379544, + IFCBOUNDARYFACECONDITION = 3367102660, + IFCBOUNDARYNODECONDITION = 1387855156, + IFCBOUNDARYNODECONDITIONWARPING = 2069777674, + IFCCALENDARDATE = 622194075, + IFCCLASSIFICATION = 747523909, + IFCCLASSIFICATIONITEM = 1767535486, + IFCCLASSIFICATIONITEMRELATIONSHIP = 1098599126, + IFCCLASSIFICATIONNOTATION = 938368621, + IFCCLASSIFICATIONNOTATIONFACET = 3639012971, + IFCCOLOURSPECIFICATION = 3264961684, + IFCCONNECTIONGEOMETRY = 2859738748, + IFCCONNECTIONPOINTGEOMETRY = 2614616156, + IFCCONNECTIONPORTGEOMETRY = 4257277454, + IFCCONNECTIONSURFACEGEOMETRY = 2732653382, + IFCCONSTRAINT = 1959218052, + IFCCONSTRAINTAGGREGATIONRELATIONSHIP = 1658513725, + IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP = 613356794, + IFCCONSTRAINTRELATIONSHIP = 347226245, + IFCCOORDINATEDUNIVERSALTIMEOFFSET = 1065062679, + IFCCOSTVALUE = 602808272, + IFCCURRENCYRELATIONSHIP = 539742890, + IFCCURVESTYLEFONT = 1105321065, + IFCCURVESTYLEFONTANDSCALING = 2367409068, + IFCCURVESTYLEFONTPATTERN = 3510044353, + IFCDATEANDTIME = 1072939445, + IFCDERIVEDUNIT = 1765591967, + IFCDERIVEDUNITELEMENT = 1045800335, + IFCDIMENSIONALEXPONENTS = 2949456006, + IFCDOCUMENTELECTRONICFORMAT = 1376555844, + IFCDOCUMENTINFORMATION = 1154170062, + IFCDOCUMENTINFORMATIONRELATIONSHIP = 770865208, + IFCDRAUGHTINGCALLOUTRELATIONSHIP = 3796139169, + IFCENVIRONMENTALIMPACTVALUE = 1648886627, + IFCEXTERNALREFERENCE = 3200245327, + IFCEXTERNALLYDEFINEDHATCHSTYLE = 2242383968, + IFCEXTERNALLYDEFINEDSURFACESTYLE = 1040185647, + IFCEXTERNALLYDEFINEDSYMBOL = 3207319532, + IFCEXTERNALLYDEFINEDTEXTFONT = 3548104201, + IFCGRIDAXIS = 852622518, + IFCIRREGULARTIMESERIESVALUE = 3020489413, + IFCLIBRARYINFORMATION = 2655187982, + IFCLIBRARYREFERENCE = 3452421091, + IFCLIGHTDISTRIBUTIONDATA = 4162380809, + IFCLIGHTINTENSITYDISTRIBUTION = 1566485204, + IFCLOCALTIME = 30780891, + IFCMATERIAL = 1838606355, + IFCMATERIALCLASSIFICATIONRELATIONSHIP = 1847130766, + IFCMATERIALLAYER = 248100487, + IFCMATERIALLAYERSET = 3303938423, + IFCMATERIALLAYERSETUSAGE = 1303795690, + IFCMATERIALLIST = 2199411900, + IFCMATERIALPROPERTIES = 3265635763, + IFCMEASUREWITHUNIT = 2597039031, + IFCMECHANICALMATERIALPROPERTIES = 4256014907, + IFCMECHANICALSTEELMATERIALPROPERTIES = 677618848, + IFCMETRIC = 3368373690, + IFCMONETARYUNIT = 2706619895, + IFCNAMEDUNIT = 1918398963, + IFCOBJECTPLACEMENT = 3701648758, + IFCOBJECTIVE = 2251480897, + IFCOPTICALMATERIALPROPERTIES = 1227763645, + IFCORGANIZATION = 4251960020, + IFCORGANIZATIONRELATIONSHIP = 1411181986, + IFCOWNERHISTORY = 1207048766, + IFCPERSON = 2077209135, + IFCPERSONANDORGANIZATION = 101040310, + IFCPHYSICALQUANTITY = 2483315170, + IFCPHYSICALSIMPLEQUANTITY = 2226359599, + IFCPOSTALADDRESS = 3355820592, + IFCPREDEFINEDITEM = 3727388367, + IFCPREDEFINEDSYMBOL = 990879717, + IFCPREDEFINEDTERMINATORSYMBOL = 3213052703, + IFCPREDEFINEDTEXTFONT = 1775413392, + IFCPRESENTATIONLAYERASSIGNMENT = 2022622350, + IFCPRESENTATIONLAYERWITHSTYLE = 1304840413, + IFCPRESENTATIONSTYLE = 3119450353, + IFCPRESENTATIONSTYLEASSIGNMENT = 2417041796, + IFCPRODUCTREPRESENTATION = 2095639259, + IFCPRODUCTSOFCOMBUSTIONPROPERTIES = 2267347899, + IFCPROFILEDEF = 3958567839, + IFCPROFILEPROPERTIES = 2802850158, + IFCPROPERTY = 2598011224, + IFCPROPERTYCONSTRAINTRELATIONSHIP = 3896028662, + IFCPROPERTYDEPENDENCYRELATIONSHIP = 148025276, + IFCPROPERTYENUMERATION = 3710013099, + IFCQUANTITYAREA = 2044713172, + IFCQUANTITYCOUNT = 2093928680, + IFCQUANTITYLENGTH = 931644368, + IFCQUANTITYTIME = 3252649465, + IFCQUANTITYVOLUME = 2405470396, + IFCQUANTITYWEIGHT = 825690147, + IFCREFERENCESVALUEDOCUMENT = 2692823254, + IFCREINFORCEMENTBARPROPERTIES = 1580146022, + IFCRELAXATION = 1222501353, + IFCREPRESENTATION = 1076942058, + IFCREPRESENTATIONCONTEXT = 3377609919, + IFCREPRESENTATIONITEM = 3008791417, + IFCREPRESENTATIONMAP = 1660063152, + IFCRIBPLATEPROFILEPROPERTIES = 3679540991, + IFCROOT = 2341007311, + IFCSIUNIT = 448429030, + IFCSECTIONPROPERTIES = 2042790032, + IFCSECTIONREINFORCEMENTPROPERTIES = 4165799628, + IFCSHAPEASPECT = 867548509, + IFCSHAPEMODEL = 3982875396, + IFCSHAPEREPRESENTATION = 4240577450, + IFCSIMPLEPROPERTY = 3692461612, + IFCSTRUCTURALCONNECTIONCONDITION = 2273995522, + IFCSTRUCTURALLOAD = 2162789131, + IFCSTRUCTURALLOADSTATIC = 2525727697, + IFCSTRUCTURALLOADTEMPERATURE = 3408363356, + IFCSTYLEMODEL = 2830218821, + IFCSTYLEDITEM = 3958052878, + IFCSTYLEDREPRESENTATION = 3049322572, + IFCSURFACESTYLE = 1300840506, + IFCSURFACESTYLELIGHTING = 3303107099, + IFCSURFACESTYLEREFRACTION = 1607154358, + IFCSURFACESTYLESHADING = 846575682, + IFCSURFACESTYLEWITHTEXTURES = 1351298697, + IFCSURFACETEXTURE = 626085974, + IFCSYMBOLSTYLE = 1290481447, + IFCTABLE = 985171141, + IFCTABLEROW = 531007025, + IFCTELECOMADDRESS = 912023232, + IFCTEXTSTYLE = 1447204868, + IFCTEXTSTYLEFONTMODEL = 1983826977, + IFCTEXTSTYLEFORDEFINEDFONT = 2636378356, + IFCTEXTSTYLETEXTMODEL = 1640371178, + IFCTEXTSTYLEWITHBOXCHARACTERISTICS = 1484833681, + IFCTEXTURECOORDINATE = 280115917, + IFCTEXTURECOORDINATEGENERATOR = 1742049831, + IFCTEXTUREMAP = 2552916305, + IFCTEXTUREVERTEX = 1210645708, + IFCTHERMALMATERIALPROPERTIES = 3317419933, + IFCTIMESERIES = 3101149627, + IFCTIMESERIESREFERENCERELATIONSHIP = 1718945513, + IFCTIMESERIESVALUE = 581633288, + IFCTOPOLOGICALREPRESENTATIONITEM = 1377556343, + IFCTOPOLOGYREPRESENTATION = 1735638870, + IFCUNITASSIGNMENT = 180925521, + IFCVERTEX = 2799835756, + IFCVERTEXBASEDTEXTUREMAP = 3304826586, + IFCVERTEXPOINT = 1907098498, + IFCVIRTUALGRIDINTERSECTION = 891718957, + IFCWATERPROPERTIES = 1065908215, + IFCANNOTATIONOCCURRENCE = 2442683028, + IFCANNOTATIONSURFACEOCCURRENCE = 962685235, + IFCANNOTATIONSYMBOLOCCURRENCE = 3612888222, + IFCANNOTATIONTEXTOCCURRENCE = 2297822566, + IFCARBITRARYCLOSEDPROFILEDEF = 3798115385, + IFCARBITRARYOPENPROFILEDEF = 1310608509, + IFCARBITRARYPROFILEDEFWITHVOIDS = 2705031697, + IFCBLOBTEXTURE = 616511568, + IFCCENTERLINEPROFILEDEF = 3150382593, + IFCCLASSIFICATIONREFERENCE = 647927063, + IFCCOLOURRGB = 776857604, + IFCCOMPLEXPROPERTY = 2542286263, + IFCCOMPOSITEPROFILEDEF = 1485152156, + IFCCONNECTEDFACESET = 370225590, + IFCCONNECTIONCURVEGEOMETRY = 1981873012, + IFCCONNECTIONPOINTECCENTRICITY = 45288368, + IFCCONTEXTDEPENDENTUNIT = 3050246964, + IFCCONVERSIONBASEDUNIT = 2889183280, + IFCCURVESTYLE = 3800577675, + IFCDERIVEDPROFILEDEF = 3632507154, + IFCDIMENSIONCALLOUTRELATIONSHIP = 2273265877, + IFCDIMENSIONPAIR = 1694125774, + IFCDOCUMENTREFERENCE = 3732053477, + IFCDRAUGHTINGPREDEFINEDTEXTFONT = 4170525392, + IFCEDGE = 3900360178, + IFCEDGECURVE = 476780140, + IFCEXTENDEDMATERIALPROPERTIES = 1860660968, + IFCFACE = 2556980723, + IFCFACEBOUND = 1809719519, + IFCFACEOUTERBOUND = 803316827, + IFCFACESURFACE = 3008276851, + IFCFAILURECONNECTIONCONDITION = 4219587988, + IFCFILLAREASTYLE = 738692330, + IFCFUELPROPERTIES = 3857492461, + IFCGENERALMATERIALPROPERTIES = 803998398, + IFCGENERALPROFILEPROPERTIES = 1446786286, + IFCGEOMETRICREPRESENTATIONCONTEXT = 3448662350, + IFCGEOMETRICREPRESENTATIONITEM = 2453401579, + IFCGEOMETRICREPRESENTATIONSUBCONTEXT = 4142052618, + IFCGEOMETRICSET = 3590301190, + IFCGRIDPLACEMENT = 178086475, + IFCHALFSPACESOLID = 812098782, + IFCHYGROSCOPICMATERIALPROPERTIES = 2445078500, + IFCIMAGETEXTURE = 3905492369, + IFCIRREGULARTIMESERIES = 3741457305, + IFCLIGHTSOURCE = 1402838566, + IFCLIGHTSOURCEAMBIENT = 125510826, + IFCLIGHTSOURCEDIRECTIONAL = 2604431987, + IFCLIGHTSOURCEGONIOMETRIC = 4266656042, + IFCLIGHTSOURCEPOSITIONAL = 1520743889, + IFCLIGHTSOURCESPOT = 3422422726, + IFCLOCALPLACEMENT = 2624227202, + IFCLOOP = 1008929658, + IFCMAPPEDITEM = 2347385850, + IFCMATERIALDEFINITIONREPRESENTATION = 2022407955, + IFCMECHANICALCONCRETEMATERIALPROPERTIES = 1430189142, + IFCOBJECTDEFINITION = 219451334, + IFCONEDIRECTIONREPEATFACTOR = 2833995503, + IFCOPENSHELL = 2665983363, + IFCORIENTEDEDGE = 1029017970, + IFCPARAMETERIZEDPROFILEDEF = 2529465313, + IFCPATH = 2519244187, + IFCPHYSICALCOMPLEXQUANTITY = 3021840470, + IFCPIXELTEXTURE = 597895409, + IFCPLACEMENT = 2004835150, + IFCPLANAREXTENT = 1663979128, + IFCPOINT = 2067069095, + IFCPOINTONCURVE = 4022376103, + IFCPOINTONSURFACE = 1423911732, + IFCPOLYLOOP = 2924175390, + IFCPOLYGONALBOUNDEDHALFSPACE = 2775532180, + IFCPREDEFINEDCOLOUR = 759155922, + IFCPREDEFINEDCURVEFONT = 2559016684, + IFCPREDEFINEDDIMENSIONSYMBOL = 433424934, + IFCPREDEFINEDPOINTMARKERSYMBOL = 179317114, + IFCPRODUCTDEFINITIONSHAPE = 673634403, + IFCPROPERTYBOUNDEDVALUE = 871118103, + IFCPROPERTYDEFINITION = 1680319473, + IFCPROPERTYENUMERATEDVALUE = 4166981789, + IFCPROPERTYLISTVALUE = 2752243245, + IFCPROPERTYREFERENCEVALUE = 941946838, + IFCPROPERTYSETDEFINITION = 3357820518, + IFCPROPERTYSINGLEVALUE = 3650150729, + IFCPROPERTYTABLEVALUE = 110355661, + IFCRECTANGLEPROFILEDEF = 3615266464, + IFCREGULARTIMESERIES = 3413951693, + IFCREINFORCEMENTDEFINITIONPROPERTIES = 3765753017, + IFCRELATIONSHIP = 478536968, + IFCROUNDEDRECTANGLEPROFILEDEF = 2778083089, + IFCSECTIONEDSPINE = 1509187699, + IFCSERVICELIFEFACTOR = 2411513650, + IFCSHELLBASEDSURFACEMODEL = 4124623270, + IFCSLIPPAGECONNECTIONCONDITION = 2609359061, + IFCSOLIDMODEL = 723233188, + IFCSOUNDPROPERTIES = 2485662743, + IFCSOUNDVALUE = 1202362311, + IFCSPACETHERMALLOADPROPERTIES = 390701378, + IFCSTRUCTURALLOADLINEARFORCE = 1595516126, + IFCSTRUCTURALLOADPLANARFORCE = 2668620305, + IFCSTRUCTURALLOADSINGLEDISPLACEMENT = 2473145415, + IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION = 1973038258, + IFCSTRUCTURALLOADSINGLEFORCE = 1597423693, + IFCSTRUCTURALLOADSINGLEFORCEWARPING = 1190533807, + IFCSTRUCTURALPROFILEPROPERTIES = 3843319758, + IFCSTRUCTURALSTEELPROFILEPROPERTIES = 3653947884, + IFCSUBEDGE = 2233826070, + IFCSURFACE = 2513912981, + IFCSURFACESTYLERENDERING = 1878645084, + IFCSWEPTAREASOLID = 2247615214, + IFCSWEPTDISKSOLID = 1260650574, + IFCSWEPTSURFACE = 230924584, + IFCTSHAPEPROFILEDEF = 3071757647, + IFCTERMINATORSYMBOL = 3028897424, + IFCTEXTLITERAL = 4282788508, + IFCTEXTLITERALWITHEXTENT = 3124975700, + IFCTRAPEZIUMPROFILEDEF = 2715220739, + IFCTWODIRECTIONREPEATFACTOR = 1345879162, + IFCTYPEOBJECT = 1628702193, + IFCTYPEPRODUCT = 2347495698, + IFCUSHAPEPROFILEDEF = 427810014, + IFCVECTOR = 1417489154, + IFCVERTEXLOOP = 2759199220, + IFCWINDOWLININGPROPERTIES = 336235671, + IFCWINDOWPANELPROPERTIES = 512836454, + IFCWINDOWSTYLE = 1299126871, + IFCZSHAPEPROFILEDEF = 2543172580, + IFCANNOTATIONCURVEOCCURRENCE = 3288037868, + IFCANNOTATIONFILLAREA = 669184980, + IFCANNOTATIONFILLAREAOCCURRENCE = 2265737646, + IFCANNOTATIONSURFACE = 1302238472, + IFCAXIS1PLACEMENT = 4261334040, + IFCAXIS2PLACEMENT2D = 3125803723, + IFCAXIS2PLACEMENT3D = 2740243338, + IFCBOOLEANRESULT = 2736907675, + IFCBOUNDEDSURFACE = 4182860854, + IFCBOUNDINGBOX = 2581212453, + IFCBOXEDHALFSPACE = 2713105998, + IFCCSHAPEPROFILEDEF = 2898889636, + IFCCARTESIANPOINT = 1123145078, + IFCCARTESIANTRANSFORMATIONOPERATOR = 59481748, + IFCCARTESIANTRANSFORMATIONOPERATOR2D = 3749851601, + IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM = 3486308946, + IFCCARTESIANTRANSFORMATIONOPERATOR3D = 3331915920, + IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM = 1416205885, + IFCCIRCLEPROFILEDEF = 1383045692, + IFCCLOSEDSHELL = 2205249479, + IFCCOMPOSITECURVESEGMENT = 2485617015, + IFCCRANERAILASHAPEPROFILEDEF = 4133800736, + IFCCRANERAILFSHAPEPROFILEDEF = 194851669, + IFCCSGPRIMITIVE3D = 2506170314, + IFCCSGSOLID = 2147822146, + IFCCURVE = 2601014836, + IFCCURVEBOUNDEDPLANE = 2827736869, + IFCDEFINEDSYMBOL = 693772133, + IFCDIMENSIONCURVE = 606661476, + IFCDIMENSIONCURVETERMINATOR = 4054601972, + IFCDIRECTION = 32440307, + IFCDOORLININGPROPERTIES = 2963535650, + IFCDOORPANELPROPERTIES = 1714330368, + IFCDOORSTYLE = 526551008, + IFCDRAUGHTINGCALLOUT = 3073041342, + IFCDRAUGHTINGPREDEFINEDCOLOUR = 445594917, + IFCDRAUGHTINGPREDEFINEDCURVEFONT = 4006246654, + IFCEDGELOOP = 1472233963, + IFCELEMENTQUANTITY = 1883228015, + IFCELEMENTTYPE = 339256511, + IFCELEMENTARYSURFACE = 2777663545, + IFCELLIPSEPROFILEDEF = 2835456948, + IFCENERGYPROPERTIES = 80994333, + IFCEXTRUDEDAREASOLID = 477187591, + IFCFACEBASEDSURFACEMODEL = 2047409740, + IFCFILLAREASTYLEHATCHING = 374418227, + IFCFILLAREASTYLETILESYMBOLWITHSTYLE = 4203026998, + IFCFILLAREASTYLETILES = 315944413, + IFCFLUIDFLOWPROPERTIES = 3455213021, + IFCFURNISHINGELEMENTTYPE = 4238390223, + IFCFURNITURETYPE = 1268542332, + IFCGEOMETRICCURVESET = 987898635, + IFCISHAPEPROFILEDEF = 1484403080, + IFCLSHAPEPROFILEDEF = 572779678, + IFCLINE = 1281925730, + IFCMANIFOLDSOLIDBREP = 1425443689, + IFCOBJECT = 3888040117, + IFCOFFSETCURVE2D = 3388369263, + IFCOFFSETCURVE3D = 3505215534, + IFCPERMEABLECOVERINGPROPERTIES = 3566463478, + IFCPLANARBOX = 603570806, + IFCPLANE = 220341763, + IFCPROCESS = 2945172077, + IFCPRODUCT = 4208778838, + IFCPROJECT = 103090709, + IFCPROJECTIONCURVE = 4194566429, + IFCPROPERTYSET = 1451395588, + IFCPROXY = 3219374653, + IFCRECTANGLEHOLLOWPROFILEDEF = 2770003689, + IFCRECTANGULARPYRAMID = 2798486643, + IFCRECTANGULARTRIMMEDSURFACE = 3454111270, + IFCRELASSIGNS = 3939117080, + IFCRELASSIGNSTOACTOR = 1683148259, + IFCRELASSIGNSTOCONTROL = 2495723537, + IFCRELASSIGNSTOGROUP = 1307041759, + IFCRELASSIGNSTOPROCESS = 4278684876, + IFCRELASSIGNSTOPRODUCT = 2857406711, + IFCRELASSIGNSTOPROJECTORDER = 3372526763, + IFCRELASSIGNSTORESOURCE = 205026976, + IFCRELASSOCIATES = 1865459582, + IFCRELASSOCIATESAPPLIEDVALUE = 1327628568, + IFCRELASSOCIATESAPPROVAL = 4095574036, + IFCRELASSOCIATESCLASSIFICATION = 919958153, + IFCRELASSOCIATESCONSTRAINT = 2728634034, + IFCRELASSOCIATESDOCUMENT = 982818633, + IFCRELASSOCIATESLIBRARY = 3840914261, + IFCRELASSOCIATESMATERIAL = 2655215786, + IFCRELASSOCIATESPROFILEPROPERTIES = 2851387026, + IFCRELCONNECTS = 826625072, + IFCRELCONNECTSELEMENTS = 1204542856, + IFCRELCONNECTSPATHELEMENTS = 3945020480, + IFCRELCONNECTSPORTTOELEMENT = 4201705270, + IFCRELCONNECTSPORTS = 3190031847, + IFCRELCONNECTSSTRUCTURALACTIVITY = 2127690289, + IFCRELCONNECTSSTRUCTURALELEMENT = 3912681535, + IFCRELCONNECTSSTRUCTURALMEMBER = 1638771189, + IFCRELCONNECTSWITHECCENTRICITY = 504942748, + IFCRELCONNECTSWITHREALIZINGELEMENTS = 3678494232, + IFCRELCONTAINEDINSPATIALSTRUCTURE = 3242617779, + IFCRELCOVERSBLDGELEMENTS = 886880790, + IFCRELCOVERSSPACES = 2802773753, + IFCRELDECOMPOSES = 2551354335, + IFCRELDEFINES = 693640335, + IFCRELDEFINESBYPROPERTIES = 4186316022, + IFCRELDEFINESBYTYPE = 781010003, + IFCRELFILLSELEMENT = 3940055652, + IFCRELFLOWCONTROLELEMENTS = 279856033, + IFCRELINTERACTIONREQUIREMENTS = 4189434867, + IFCRELNESTS = 3268803585, + IFCRELOCCUPIESSPACES = 2051452291, + IFCRELOVERRIDESPROPERTIES = 202636808, + IFCRELPROJECTSELEMENT = 750771296, + IFCRELREFERENCEDINSPATIALSTRUCTURE = 1245217292, + IFCRELSCHEDULESCOSTITEMS = 1058617721, + IFCRELSEQUENCE = 4122056220, + IFCRELSERVICESBUILDINGS = 366585022, + IFCRELSPACEBOUNDARY = 3451746338, + IFCRELVOIDSELEMENT = 1401173127, + IFCRESOURCE = 2914609552, + IFCREVOLVEDAREASOLID = 1856042241, + IFCRIGHTCIRCULARCONE = 4158566097, + IFCRIGHTCIRCULARCYLINDER = 3626867408, + IFCSPATIALSTRUCTUREELEMENT = 2706606064, + IFCSPATIALSTRUCTUREELEMENTTYPE = 3893378262, + IFCSPHERE = 451544542, + IFCSTRUCTURALACTIVITY = 3544373492, + IFCSTRUCTURALITEM = 3136571912, + IFCSTRUCTURALMEMBER = 530289379, + IFCSTRUCTURALREACTION = 3689010777, + IFCSTRUCTURALSURFACEMEMBER = 3979015343, + IFCSTRUCTURALSURFACEMEMBERVARYING = 2218152070, + IFCSTRUCTUREDDIMENSIONCALLOUT = 4070609034, + IFCSURFACECURVESWEPTAREASOLID = 2028607225, + IFCSURFACEOFLINEAREXTRUSION = 2809605785, + IFCSURFACEOFREVOLUTION = 4124788165, + IFCSYSTEMFURNITUREELEMENTTYPE = 1580310250, + IFCTASK = 3473067441, + IFCTRANSPORTELEMENTTYPE = 2097647324, + IFCACTOR = 2296667514, + IFCANNOTATION = 1674181508, + IFCASYMMETRICISHAPEPROFILEDEF = 3207858831, + IFCBLOCK = 1334484129, + IFCBOOLEANCLIPPINGRESULT = 3649129432, + IFCBOUNDEDCURVE = 1260505505, + IFCBUILDING = 4031249490, + IFCBUILDINGELEMENTTYPE = 1950629157, + IFCBUILDINGSTOREY = 3124254112, + IFCCIRCLEHOLLOWPROFILEDEF = 2937912522, + IFCCOLUMNTYPE = 300633059, + IFCCOMPOSITECURVE = 3732776249, + IFCCONIC = 2510884976, + IFCCONSTRUCTIONRESOURCE = 2559216714, + IFCCONTROL = 3293443760, + IFCCOSTITEM = 3895139033, + IFCCOSTSCHEDULE = 1419761937, + IFCCOVERINGTYPE = 1916426348, + IFCCREWRESOURCE = 3295246426, + IFCCURTAINWALLTYPE = 1457835157, + IFCDIMENSIONCURVEDIRECTEDCALLOUT = 681481545, + IFCDISTRIBUTIONELEMENTTYPE = 3256556792, + IFCDISTRIBUTIONFLOWELEMENTTYPE = 3849074793, + IFCELECTRICALBASEPROPERTIES = 360485395, + IFCELEMENT = 1758889154, + IFCELEMENTASSEMBLY = 4123344466, + IFCELEMENTCOMPONENT = 1623761950, + IFCELEMENTCOMPONENTTYPE = 2590856083, + IFCELLIPSE = 1704287377, + IFCENERGYCONVERSIONDEVICETYPE = 2107101300, + IFCEQUIPMENTELEMENT = 1962604670, + IFCEQUIPMENTSTANDARD = 3272907226, + IFCEVAPORATIVECOOLERTYPE = 3174744832, + IFCEVAPORATORTYPE = 3390157468, + IFCFACETEDBREP = 807026263, + IFCFACETEDBREPWITHVOIDS = 3737207727, + IFCFASTENER = 647756555, + IFCFASTENERTYPE = 2489546625, + IFCFEATUREELEMENT = 2827207264, + IFCFEATUREELEMENTADDITION = 2143335405, + IFCFEATUREELEMENTSUBTRACTION = 1287392070, + IFCFLOWCONTROLLERTYPE = 3907093117, + IFCFLOWFITTINGTYPE = 3198132628, + IFCFLOWMETERTYPE = 3815607619, + IFCFLOWMOVINGDEVICETYPE = 1482959167, + IFCFLOWSEGMENTTYPE = 1834744321, + IFCFLOWSTORAGEDEVICETYPE = 1339347760, + IFCFLOWTERMINALTYPE = 2297155007, + IFCFLOWTREATMENTDEVICETYPE = 3009222698, + IFCFURNISHINGELEMENT = 263784265, + IFCFURNITURESTANDARD = 814719939, + IFCGASTERMINALTYPE = 200128114, + IFCGRID = 3009204131, + IFCGROUP = 2706460486, + IFCHEATEXCHANGERTYPE = 1251058090, + IFCHUMIDIFIERTYPE = 1806887404, + IFCINVENTORY = 2391368822, + IFCJUNCTIONBOXTYPE = 4288270099, + IFCLABORRESOURCE = 3827777499, + IFCLAMPTYPE = 1051575348, + IFCLIGHTFIXTURETYPE = 1161773419, + IFCLINEARDIMENSION = 2506943328, + IFCMECHANICALFASTENER = 377706215, + IFCMECHANICALFASTENERTYPE = 2108223431, + IFCMEMBERTYPE = 3181161470, + IFCMOTORCONNECTIONTYPE = 977012517, + IFCMOVE = 1916936684, + IFCOCCUPANT = 4143007308, + IFCOPENINGELEMENT = 3588315303, + IFCORDERACTION = 3425660407, + IFCOUTLETTYPE = 2837617999, + IFCPERFORMANCEHISTORY = 2382730787, + IFCPERMIT = 3327091369, + IFCPIPEFITTINGTYPE = 804291784, + IFCPIPESEGMENTTYPE = 4231323485, + IFCPLATETYPE = 4017108033, + IFCPOLYLINE = 3724593414, + IFCPORT = 3740093272, + IFCPROCEDURE = 2744685151, + IFCPROJECTORDER = 2904328755, + IFCPROJECTORDERRECORD = 3642467123, + IFCPROJECTIONELEMENT = 3651124850, + IFCPROTECTIVEDEVICETYPE = 1842657554, + IFCPUMPTYPE = 2250791053, + IFCRADIUSDIMENSION = 3248260540, + IFCRAILINGTYPE = 2893384427, + IFCRAMPFLIGHTTYPE = 2324767716, + IFCRELAGGREGATES = 160246688, + IFCRELASSIGNSTASKS = 2863920197, + IFCSANITARYTERMINALTYPE = 1768891740, + IFCSCHEDULETIMECONTROL = 3517283431, + IFCSERVICELIFE = 4105383287, + IFCSITE = 4097777520, + IFCSLABTYPE = 2533589738, + IFCSPACE = 3856911033, + IFCSPACEHEATERTYPE = 1305183839, + IFCSPACEPROGRAM = 652456506, + IFCSPACETYPE = 3812236995, + IFCSTACKTERMINALTYPE = 3112655638, + IFCSTAIRFLIGHTTYPE = 1039846685, + IFCSTRUCTURALACTION = 682877961, + IFCSTRUCTURALCONNECTION = 1179482911, + IFCSTRUCTURALCURVECONNECTION = 4243806635, + IFCSTRUCTURALCURVEMEMBER = 214636428, + IFCSTRUCTURALCURVEMEMBERVARYING = 2445595289, + IFCSTRUCTURALLINEARACTION = 1807405624, + IFCSTRUCTURALLINEARACTIONVARYING = 1721250024, + IFCSTRUCTURALLOADGROUP = 1252848954, + IFCSTRUCTURALPLANARACTION = 1621171031, + IFCSTRUCTURALPLANARACTIONVARYING = 3987759626, + IFCSTRUCTURALPOINTACTION = 2082059205, + IFCSTRUCTURALPOINTCONNECTION = 734778138, + IFCSTRUCTURALPOINTREACTION = 1235345126, + IFCSTRUCTURALRESULTGROUP = 2986769608, + IFCSTRUCTURALSURFACECONNECTION = 1975003073, + IFCSUBCONTRACTRESOURCE = 148013059, + IFCSWITCHINGDEVICETYPE = 2315554128, + IFCSYSTEM = 2254336722, + IFCTANKTYPE = 5716631, + IFCTIMESERIESSCHEDULE = 1637806684, + IFCTRANSFORMERTYPE = 1692211062, + IFCTRANSPORTELEMENT = 1620046519, + IFCTRIMMEDCURVE = 3593883385, + IFCTUBEBUNDLETYPE = 1600972822, + IFCUNITARYEQUIPMENTTYPE = 1911125066, + IFCVALVETYPE = 728799441, + IFCVIRTUALELEMENT = 2769231204, + IFCWALLTYPE = 1898987631, + IFCWASTETERMINALTYPE = 1133259667, + IFCWORKCONTROL = 1028945134, + IFCWORKPLAN = 4218914973, + IFCWORKSCHEDULE = 3342526732, + IFCZONE = 1033361043, + IFC2DCOMPOSITECURVE = 1213861670, + IFCACTIONREQUEST = 3821786052, + IFCAIRTERMINALBOXTYPE = 1411407467, + IFCAIRTERMINALTYPE = 3352864051, + IFCAIRTOAIRHEATRECOVERYTYPE = 1871374353, + IFCANGULARDIMENSION = 2470393545, + IFCASSET = 3460190687, + IFCBSPLINECURVE = 1967976161, + IFCBEAMTYPE = 819618141, + IFCBEZIERCURVE = 1916977116, + IFCBOILERTYPE = 231477066, + IFCBUILDINGELEMENT = 3299480353, + IFCBUILDINGELEMENTCOMPONENT = 52481810, + IFCBUILDINGELEMENTPART = 2979338954, + IFCBUILDINGELEMENTPROXY = 1095909175, + IFCBUILDINGELEMENTPROXYTYPE = 1909888760, + IFCCABLECARRIERFITTINGTYPE = 395041908, + IFCCABLECARRIERSEGMENTTYPE = 3293546465, + IFCCABLESEGMENTTYPE = 1285652485, + IFCCHILLERTYPE = 2951183804, + IFCCIRCLE = 2611217952, + IFCCOILTYPE = 2301859152, + IFCCOLUMN = 843113511, + IFCCOMPRESSORTYPE = 3850581409, + IFCCONDENSERTYPE = 2816379211, + IFCCONDITION = 2188551683, + IFCCONDITIONCRITERION = 1163958913, + IFCCONSTRUCTIONEQUIPMENTRESOURCE = 3898045240, + IFCCONSTRUCTIONMATERIALRESOURCE = 1060000209, + IFCCONSTRUCTIONPRODUCTRESOURCE = 488727124, + IFCCOOLEDBEAMTYPE = 335055490, + IFCCOOLINGTOWERTYPE = 2954562838, + IFCCOVERING = 1973544240, + IFCCURTAINWALL = 3495092785, + IFCDAMPERTYPE = 3961806047, + IFCDIAMETERDIMENSION = 4147604152, + IFCDISCRETEACCESSORY = 1335981549, + IFCDISCRETEACCESSORYTYPE = 2635815018, + IFCDISTRIBUTIONCHAMBERELEMENTTYPE = 1599208980, + IFCDISTRIBUTIONCONTROLELEMENTTYPE = 2063403501, + IFCDISTRIBUTIONELEMENT = 1945004755, + IFCDISTRIBUTIONFLOWELEMENT = 3040386961, + IFCDISTRIBUTIONPORT = 3041715199, + IFCDOOR = 395920057, + IFCDUCTFITTINGTYPE = 869906466, + IFCDUCTSEGMENTTYPE = 3760055223, + IFCDUCTSILENCERTYPE = 2030761528, + IFCEDGEFEATURE = 855621170, + IFCELECTRICAPPLIANCETYPE = 663422040, + IFCELECTRICFLOWSTORAGEDEVICETYPE = 3277789161, + IFCELECTRICGENERATORTYPE = 1534661035, + IFCELECTRICHEATERTYPE = 1365060375, + IFCELECTRICMOTORTYPE = 1217240411, + IFCELECTRICTIMECONTROLTYPE = 712377611, + IFCELECTRICALCIRCUIT = 1634875225, + IFCELECTRICALELEMENT = 857184966, + IFCENERGYCONVERSIONDEVICE = 1658829314, + IFCFANTYPE = 346874300, + IFCFILTERTYPE = 1810631287, + IFCFIRESUPPRESSIONTERMINALTYPE = 4222183408, + IFCFLOWCONTROLLER = 2058353004, + IFCFLOWFITTING = 4278956645, + IFCFLOWINSTRUMENTTYPE = 4037862832, + IFCFLOWMOVINGDEVICE = 3132237377, + IFCFLOWSEGMENT = 987401354, + IFCFLOWSTORAGEDEVICE = 707683696, + IFCFLOWTERMINAL = 2223149337, + IFCFLOWTREATMENTDEVICE = 3508470533, + IFCFOOTING = 900683007, + IFCMEMBER = 1073191201, + IFCPILE = 1687234759, + IFCPLATE = 3171933400, + IFCRAILING = 2262370178, + IFCRAMP = 3024970846, + IFCRAMPFLIGHT = 3283111854, + IFCRATIONALBEZIERCURVE = 3055160366, + IFCREINFORCINGELEMENT = 3027567501, + IFCREINFORCINGMESH = 2320036040, + IFCROOF = 2016517767, + IFCROUNDEDEDGEFEATURE = 1376911519, + IFCSENSORTYPE = 1783015770, + IFCSLAB = 1529196076, + IFCSTAIR = 331165859, + IFCSTAIRFLIGHT = 4252922144, + IFCSTRUCTURALANALYSISMODEL = 2515109513, + IFCTENDON = 3824725483, + IFCTENDONANCHOR = 2347447852, + IFCVIBRATIONISOLATORTYPE = 3313531582, + IFCWALL = 2391406946, + IFCWALLSTANDARDCASE = 3512223829, + IFCWINDOW = 3304561284, + IFCACTUATORTYPE = 2874132201, + IFCALARMTYPE = 3001207471, + IFCBEAM = 753842376, + IFCCHAMFEREDGEFEATURE = 2454782716, + IFCCONTROLLERTYPE = 578613899, + IFCDISTRIBUTIONCHAMBERELEMENT = 1052013943, + IFCDISTRIBUTIONCONTROLELEMENT = 1062813311, + IFCELECTRICDISTRIBUTIONPOINT = 3700593921, + IFCREINFORCINGBAR = 979691226, + IFCCONNECTIONVOLUMEGEOMETRY = 775493141, + IFCCOORDINATEOPERATION = 1785450214, + IFCCOORDINATEREFERENCESYSTEM = 1466758467, + IFCEXTERNALINFORMATION = 4294318154, + IFCMAPCONVERSION = 3057273783, + IFCMATERIALDEFINITION = 760658860, + IFCMATERIALLAYERWITHOFFSETS = 1847252529, + IFCMATERIALPROFILE = 2235152071, + IFCMATERIALPROFILESET = 164193824, + IFCMATERIALPROFILEWITHOFFSETS = 552965576, + IFCMATERIALUSAGEDEFINITION = 1507914824, + IFCPRESENTATIONITEM = 677532197, + IFCPROJECTEDCRS = 3843373140, + IFCPROPERTYABSTRACTION = 986844984, + IFCRECURRENCEPATTERN = 3915482550, + IFCREFERENCE = 2433181523, + IFCRESOURCELEVELRELATIONSHIP = 2439245199, + IFCSCHEDULINGTIME = 1054537805, + IFCSTRUCTURALLOADCONFIGURATION = 3478079324, + IFCSTRUCTURALLOADORRESULT = 609421318, + IFCSURFACEREINFORCEMENTAREA = 2934153892, + IFCTABLECOLUMN = 2043862942, + IFCTASKTIME = 1549132990, + IFCTASKTIMERECURRING = 2771591690, + IFCTEXTUREVERTEXLIST = 3611470254, + IFCTIMEPERIOD = 1199560280, + IFCWORKTIME = 1236880293, + IFCCOLOURRGBLIST = 3285139300, + IFCCONVERSIONBASEDUNITWITHOFFSET = 2713554722, + IFCEVENTTIME = 211053100, + IFCEXTENDEDPROPERTIES = 297599258, + IFCEXTERNALREFERENCERELATIONSHIP = 1437805879, + IFCINDEXEDCOLOURMAP = 3570813810, + IFCINDEXEDTEXTUREMAP = 1437953363, + IFCINDEXEDTRIANGLETEXTUREMAP = 2133299955, + IFCLAGTIME = 1585845231, + IFCMATERIALCONSTITUENT = 3708119000, + IFCMATERIALCONSTITUENTSET = 2852063980, + IFCMATERIALPROFILESETUSAGE = 3079605661, + IFCMATERIALPROFILESETUSAGETAPERING = 3404854881, + IFCMATERIALRELATIONSHIP = 853536259, + IFCMIRROREDPROFILEDEF = 2998442950, + IFCPREDEFINEDPROPERTIES = 3778827333, + IFCPROPERTYTEMPLATEDEFINITION = 1482703590, + IFCQUANTITYSET = 2090586900, + IFCRESOURCEAPPROVALRELATIONSHIP = 2943643501, + IFCRESOURCECONSTRAINTRELATIONSHIP = 1608871552, + IFCRESOURCETIME = 1042787934, + IFCSWEPTDISKSOLIDPOLYGONAL = 1096409881, + IFCTESSELLATEDITEM = 901063453, + IFCTYPEPROCESS = 3736923433, + IFCTYPERESOURCE = 3698973494, + IFCADVANCEDFACE = 3406155212, + IFCCARTESIANPOINTLIST = 574549367, + IFCCARTESIANPOINTLIST2D = 1675464909, + IFCCARTESIANPOINTLIST3D = 2059837836, + IFCCONSTRUCTIONRESOURCETYPE = 2574617495, + IFCCONTEXT = 3419103109, + IFCCREWRESOURCETYPE = 1815067380, + IFCCURVEBOUNDEDSURFACE = 2629017746, + IFCEVENTTYPE = 4024345920, + IFCEXTRUDEDAREASOLIDTAPERED = 2804161546, + IFCFIXEDREFERENCESWEPTAREASOLID = 2652556860, + IFCGEOGRAPHICELEMENTTYPE = 4095422895, + IFCINDEXEDPOLYGONALFACE = 178912537, + IFCINDEXEDPOLYGONALFACEWITHVOIDS = 2294589976, + IFCLABORRESOURCETYPE = 428585644, + IFCPCURVE = 1682466193, + IFCPREDEFINEDPROPERTYSET = 3967405729, + IFCPROCEDURETYPE = 569719735, + IFCPROJECTLIBRARY = 653396225, + IFCPROPERTYSETTEMPLATE = 492091185, + IFCPROPERTYTEMPLATE = 3521284610, + IFCRELASSIGNSTOGROUPBYFACTOR = 1027710054, + IFCRELDECLARES = 2565941209, + IFCRELDEFINESBYOBJECT = 1462361463, + IFCRELDEFINESBYTEMPLATE = 307848117, + IFCRELINTERFERESELEMENTS = 427948657, + IFCRELSPACEBOUNDARY1STLEVEL = 3523091289, + IFCRELSPACEBOUNDARY2NDLEVEL = 1521410863, + IFCREPARAMETRISEDCOMPOSITECURVESEGMENT = 816062949, + IFCREVOLVEDAREASOLIDTAPERED = 3243963512, + IFCSIMPLEPROPERTYTEMPLATE = 3663146110, + IFCSPATIALELEMENT = 1412071761, + IFCSPATIALELEMENTTYPE = 710998568, + IFCSPATIALZONE = 463610769, + IFCSPATIALZONETYPE = 2481509218, + IFCSPHERICALSURFACE = 4015995234, + IFCSTRUCTURALSURFACEREACTION = 603775116, + IFCSUBCONTRACTRESOURCETYPE = 4095615324, + IFCSURFACECURVE = 699246055, + IFCTASKTYPE = 3206491090, + IFCTESSELLATEDFACESET = 2387106220, + IFCTOROIDALSURFACE = 1935646853, + IFCTRIANGULATEDFACESET = 2916149573, + IFCADVANCEDBREP = 1635779807, + IFCADVANCEDBREPWITHVOIDS = 2603310189, + IFCBSPLINESURFACE = 2887950389, + IFCBSPLINESURFACEWITHKNOTS = 167062518, + IFCCHIMNEYTYPE = 2197970202, + IFCCIVILELEMENTTYPE = 3893394355, + IFCCOMPLEXPROPERTYTEMPLATE = 3875453745, + IFCCOMPOSITECURVEONSURFACE = 15328376, + IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE = 2185764099, + IFCCONSTRUCTIONMATERIALRESOURCETYPE = 4105962743, + IFCCONSTRUCTIONPRODUCTRESOURCETYPE = 1525564444, + IFCCYLINDRICALSURFACE = 1213902940, + IFCDOORTYPE = 2323601079, + IFCELEMENTASSEMBLYTYPE = 2397081782, + IFCENGINETYPE = 132023988, + IFCEVENT = 4148101412, + IFCEXTERNALSPATIALSTRUCTUREELEMENT = 2853485674, + IFCFOOTINGTYPE = 1893162501, + IFCFURNITURE = 1509553395, + IFCGEOGRAPHICELEMENT = 3493046030, + IFCINDEXEDPOLYCURVE = 2571569899, + IFCINTERCEPTORTYPE = 3946677679, + IFCINTERSECTIONCURVE = 3113134337, + IFCMEDICALDEVICETYPE = 1114901282, + IFCOPENINGSTANDARDCASE = 3079942009, + IFCPILETYPE = 1158309216, + IFCPOLYGONALFACESET = 2839578677, + IFCRAMPTYPE = 1469900589, + IFCRATIONALBSPLINESURFACEWITHKNOTS = 683857671, + IFCREINFORCINGELEMENTTYPE = 964333572, + IFCREINFORCINGMESHTYPE = 2310774935, + IFCROOFTYPE = 2781568857, + IFCSEAMCURVE = 2157484638, + IFCSHADINGDEVICETYPE = 4074543187, + IFCSOLARDEVICETYPE = 1072016465, + IFCSTAIRTYPE = 338393293, + IFCSTRUCTURALCURVEACTION = 1004757350, + IFCSTRUCTURALCURVEREACTION = 2757150158, + IFCSTRUCTURALSURFACEACTION = 3657597509, + IFCSURFACEFEATURE = 3101698114, + IFCSYSTEMFURNITUREELEMENT = 413509423, + IFCTENDONANCHORTYPE = 3081323446, + IFCTENDONTYPE = 2415094496, + IFCVIBRATIONISOLATOR = 2391383451, + IFCVOIDINGFEATURE = 926996030, + IFCWINDOWTYPE = 4009809668, + IFCWORKCALENDAR = 4088093105, + IFCAUDIOVISUALAPPLIANCETYPE = 1532957894, + IFCBSPLINECURVEWITHKNOTS = 2461110595, + IFCBOUNDARYCURVE = 1136057603, + IFCBUILDINGELEMENTPARTTYPE = 39481116, + IFCBUILDINGSYSTEM = 1177604601, + IFCBURNERTYPE = 2188180465, + IFCCABLEFITTINGTYPE = 2674252688, + IFCCHIMNEY = 3296154744, + IFCCIVILELEMENT = 1677625105, + IFCCOLUMNSTANDARDCASE = 905975707, + IFCCOMMUNICATIONSAPPLIANCETYPE = 400855858, + IFCDISTRIBUTIONSYSTEM = 3205830791, + IFCDOORSTANDARDCASE = 3242481149, + IFCELECTRICDISTRIBUTIONBOARDTYPE = 2417008758, + IFCENGINE = 2814081492, + IFCEVAPORATIVECOOLER = 3747195512, + IFCEVAPORATOR = 484807127, + IFCEXTERNALSPATIALELEMENT = 1209101575, + IFCFLOWMETER = 2188021234, + IFCHEATEXCHANGER = 3319311131, + IFCHUMIDIFIER = 2068733104, + IFCINTERCEPTOR = 4175244083, + IFCJUNCTIONBOX = 2176052936, + IFCLAMP = 76236018, + IFCLIGHTFIXTURE = 629592764, + IFCMEDICALDEVICE = 1437502449, + IFCMEMBERSTANDARDCASE = 1911478936, + IFCMOTORCONNECTION = 2474470126, + IFCOUTERBOUNDARYCURVE = 144952367, + IFCOUTLET = 3694346114, + IFCPIPEFITTING = 310824031, + IFCPIPESEGMENT = 3612865200, + IFCPLATESTANDARDCASE = 1156407060, + IFCPROTECTIVEDEVICE = 738039164, + IFCPROTECTIVEDEVICETRIPPINGUNITTYPE = 655969474, + IFCPUMP = 90941305, + IFCRATIONALBSPLINECURVEWITHKNOTS = 1232101972, + IFCREINFORCINGBARTYPE = 2572171363, + IFCSANITARYTERMINAL = 3053780830, + IFCSHADINGDEVICE = 1329646415, + IFCSLABELEMENTEDCASE = 3127900445, + IFCSLABSTANDARDCASE = 3027962421, + IFCSOLARDEVICE = 3420628829, + IFCSPACEHEATER = 1999602285, + IFCSTACKTERMINAL = 1404847402, + IFCSTRUCTURALLOADCASE = 385403989, + IFCSWITCHINGDEVICE = 1162798199, + IFCTANK = 812556717, + IFCTRANSFORMER = 3825984169, + IFCTUBEBUNDLE = 3026737570, + IFCUNITARYCONTROLELEMENTTYPE = 3179687236, + IFCUNITARYEQUIPMENT = 4292641817, + IFCVALVE = 4207607924, + IFCWALLELEMENTEDCASE = 4156078855, + IFCWASTETERMINAL = 4237592921, + IFCWINDOWSTANDARDCASE = 486154966, + IFCAIRTERMINAL = 1634111441, + IFCAIRTERMINALBOX = 177149247, + IFCAIRTOAIRHEATRECOVERY = 2056796094, + IFCAUDIOVISUALAPPLIANCE = 277319702, + IFCBEAMSTANDARDCASE = 2906023776, + IFCBOILER = 32344328, + IFCBURNER = 2938176219, + IFCCABLECARRIERFITTING = 635142910, + IFCCABLECARRIERSEGMENT = 3758799889, + IFCCABLEFITTING = 1051757585, + IFCCABLESEGMENT = 4217484030, + IFCCHILLER = 3902619387, + IFCCOIL = 639361253, + IFCCOMMUNICATIONSAPPLIANCE = 3221913625, + IFCCOMPRESSOR = 3571504051, + IFCCONDENSER = 2272882330, + IFCCOOLEDBEAM = 4136498852, + IFCCOOLINGTOWER = 3640358203, + IFCDAMPER = 4074379575, + IFCDISTRIBUTIONCIRCUIT = 562808652, + IFCDUCTFITTING = 342316401, + IFCDUCTSEGMENT = 3518393246, + IFCDUCTSILENCER = 1360408905, + IFCELECTRICAPPLIANCE = 1904799276, + IFCELECTRICDISTRIBUTIONBOARD = 862014818, + IFCELECTRICFLOWSTORAGEDEVICE = 3310460725, + IFCELECTRICGENERATOR = 264262732, + IFCELECTRICMOTOR = 402227799, + IFCELECTRICTIMECONTROL = 1003880860, + IFCFAN = 3415622556, + IFCFILTER = 819412036, + IFCFIRESUPPRESSIONTERMINAL = 1426591983, + IFCFLOWINSTRUMENT = 182646315, + IFCPROTECTIVEDEVICETRIPPINGUNIT = 2295281155, + IFCSENSOR = 4086658281, + IFCUNITARYCONTROLELEMENT = 630975310, + IFCACTUATOR = 4288193352, + IFCALARM = 3087945054, + IFCCONTROLLER = 25142252, + IFCALIGNMENTPARAMETERSEGMENT = 2879124712, + IFCALIGNMENTVERTICALSEGMENT = 3633395639, + IFCQUANTITYNUMBER = 2691318326, + IFCTEXTURECOORDINATEINDICES = 222769930, + IFCTEXTURECOORDINATEINDICESWITHVOIDS = 1010789467, + IFCALIGNMENTCANTSEGMENT = 3752311538, + IFCALIGNMENTHORIZONTALSEGMENT = 536804194, + IFCLINEARPLACEMENT = 388784114, + IFCOPENCROSSPROFILEDEF = 182550632, + IFCPOINTBYDISTANCEEXPRESSION = 2165702409, + IFCSEGMENT = 823603102, + IFCAXIS2PLACEMENTLINEAR = 3425423356, + IFCCURVESEGMENT = 4212018352, + IFCDIRECTRIXCURVESWEPTAREASOLID = 593015953, + IFCINDEXEDPOLYGONALTEXTUREMAP = 3465909080, + IFCOFFSETCURVE = 590820931, + IFCOFFSETCURVEBYDISTANCES = 2485787929, + IFCPOLYNOMIALCURVE = 3381221214, + IFCRELASSOCIATESPROFILEDEF = 1033248425, + IFCRELPOSITIONS = 1441486842, + IFCSECTIONEDSOLID = 1862484736, + IFCSECTIONEDSOLIDHORIZONTAL = 1290935644, + IFCSECTIONEDSURFACE = 1356537516, + IFCSPIRAL = 2735484536, + IFCTHIRDORDERPOLYNOMIALSPIRAL = 782932809, + IFCTRANSPORTATIONDEVICETYPE = 3665877780, + IFCTRIANGULATEDIRREGULARNETWORK = 1229763772, + IFCVEHICLETYPE = 3651464721, + IFCBUILTELEMENTTYPE = 1626504194, + IFCCLOTHOID = 3497074424, + IFCCOSINESPIRAL = 2000195564, + IFCCOURSETYPE = 4189326743, + IFCDEEPFOUNDATIONTYPE = 1306400036, + IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID = 4234616927, + IFCFACILITY = 24185140, + IFCFACILITYPART = 1310830890, + IFCFACILITYPARTCOMMON = 4228831410, + IFCGEOTECHNICALELEMENT = 4230923436, + IFCGEOTECHNICALSTRATUM = 1594536857, + IFCGRADIENTCURVE = 2898700619, + IFCIMPACTPROTECTIONDEVICE = 2568555532, + IFCIMPACTPROTECTIONDEVICETYPE = 3948183225, + IFCKERBTYPE = 679976338, + IFCLINEARELEMENT = 2176059722, + IFCLIQUIDTERMINALTYPE = 1770583370, + IFCMARINEFACILITY = 525669439, + IFCMARINEPART = 976884017, + IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE = 1950438474, + IFCMOORINGDEVICETYPE = 710110818, + IFCNAVIGATIONELEMENTTYPE = 506776471, + IFCPAVEMENTTYPE = 514975943, + IFCPOSITIONINGELEMENT = 1946335990, + IFCRAILTYPE = 1763565496, + IFCRAILWAY = 3992365140, + IFCRAILWAYPART = 1891881377, + IFCREFERENT = 4021432810, + IFCRELADHERESTOELEMENT = 3818125796, + IFCROAD = 146592293, + IFCROADPART = 550521510, + IFCSECONDORDERPOLYNOMIALSPIRAL = 3649235739, + IFCSEGMENTEDREFERENCECURVE = 544395925, + IFCSEVENTHORDERPOLYNOMIALSPIRAL = 1027922057, + IFCSIGN = 33720170, + IFCSIGNTYPE = 3599934289, + IFCSIGNALTYPE = 1894708472, + IFCSINESPIRAL = 42703149, + IFCTENDONCONDUIT = 3663046924, + IFCTENDONCONDUITTYPE = 2281632017, + IFCTRACKELEMENTTYPE = 618700268, + IFCTRANSPORTATIONDEVICE = 1953115116, + IFCVEHICLE = 840318589, + IFCVIBRATIONDAMPER = 1530820697, + IFCVIBRATIONDAMPERTYPE = 3956297820, + IFCALIGNMENTCANT = 4266260250, + IFCALIGNMENTHORIZONTAL = 1545765605, + IFCALIGNMENTSEGMENT = 317615605, + IFCALIGNMENTVERTICAL = 1662888072, + IFCBEARINGTYPE = 3649138523, + IFCBRIDGE = 644574406, + IFCBRIDGEPART = 963979645, + IFCBUILTELEMENT = 1876633798, + IFCBUILTSYSTEM = 3862327254, + IFCCAISSONFOUNDATIONTYPE = 3203706013, + IFCCONVEYORSEGMENTTYPE = 2940368186, + IFCCOURSE = 1502416096, + IFCDEEPFOUNDATION = 3426335179, + IFCDISTRIBUTIONBOARDTYPE = 479945903, + IFCEARTHWORKSCUT = 3071239417, + IFCEARTHWORKSELEMENT = 1077100507, + IFCEARTHWORKSFILL = 3376911765, + IFCELECTRICFLOWTREATMENTDEVICETYPE = 2142170206, + IFCGEOTECHNICALASSEMBLY = 2713699986, + IFCKERB = 2696325953, + IFCLINEARPOSITIONINGELEMENT = 1154579445, + IFCLIQUIDTERMINAL = 1638804497, + IFCMOBILETELECOMMUNICATIONSAPPLIANCE = 2078563270, + IFCMOORINGDEVICE = 234836483, + IFCNAVIGATIONELEMENT = 2182337498, + IFCPAVEMENT = 1383356374, + IFCRAIL = 3290496277, + IFCREINFORCEDSOIL = 3798194928, + IFCSIGNAL = 991950508, + IFCTRACKELEMENT = 3425753595, + IFCALIGNMENT = 325726236, + IFCBEARING = 4196446775, + IFCBOREHOLE = 3314249567, + IFCCAISSONFOUNDATION = 3999819293, + IFCCONVEYORSEGMENT = 3460952963, + IFCDISTRIBUTIONBOARD = 3693000487, + IFCELECTRICFLOWTREATMENTDEVICE = 24726584, + IFCGEOMODEL = 2680139844, + IFCGEOSLICE = 1971632696, + IFCABSORBEDDOSEMEASURE = 3699917729, + IFCACCELERATIONMEASURE = 4182062534, + IFCAMOUNTOFSUBSTANCEMEASURE = 360377573, + IFCANGULARVELOCITYMEASURE = 632304761, + IFCAREAMEASURE = 2650437152, + IFCBOOLEAN = 2735952531, + IFCBOXALIGNMENT = 1867003952, + IFCCOMPLEXNUMBER = 2991860651, + IFCCOMPOUNDPLANEANGLEMEASURE = 3812528620, + IFCCONTEXTDEPENDENTMEASURE = 3238673880, + IFCCOUNTMEASURE = 1778710042, + IFCCURVATUREMEASURE = 94842927, + IFCDAYINMONTHNUMBER = 86635668, + IFCDAYLIGHTSAVINGHOUR = 300323983, + IFCDESCRIPTIVEMEASURE = 1514641115, + IFCDIMENSIONCOUNT = 4134073009, + IFCDOSEEQUIVALENTMEASURE = 524656162, + IFCDYNAMICVISCOSITYMEASURE = 69416015, + IFCELECTRICCAPACITANCEMEASURE = 1827137117, + IFCELECTRICCHARGEMEASURE = 3818826038, + IFCELECTRICCONDUCTANCEMEASURE = 2093906313, + IFCELECTRICCURRENTMEASURE = 3790457270, + IFCELECTRICRESISTANCEMEASURE = 2951915441, + IFCELECTRICVOLTAGEMEASURE = 2506197118, + IFCENERGYMEASURE = 2078135608, + IFCFONTSTYLE = 1102727119, + IFCFONTVARIANT = 2715512545, + IFCFONTWEIGHT = 2590844177, + IFCFORCEMEASURE = 1361398929, + IFCFREQUENCYMEASURE = 3044325142, + IFCGLOBALLYUNIQUEID = 3064340077, + IFCHEATFLUXDENSITYMEASURE = 3113092358, + IFCHEATINGVALUEMEASURE = 1158859006, + IFCHOURINDAY = 2589826445, + IFCIDENTIFIER = 983778844, + IFCILLUMINANCEMEASURE = 3358199106, + IFCINDUCTANCEMEASURE = 2679005408, + IFCINTEGER = 1939436016, + IFCINTEGERCOUNTRATEMEASURE = 3809634241, + IFCIONCONCENTRATIONMEASURE = 3686016028, + IFCISOTHERMALMOISTURECAPACITYMEASURE = 3192672207, + IFCKINEMATICVISCOSITYMEASURE = 2054016361, + IFCLABEL = 3258342251, + IFCLENGTHMEASURE = 1243674935, + IFCLINEARFORCEMEASURE = 191860431, + IFCLINEARMOMENTMEASURE = 2128979029, + IFCLINEARSTIFFNESSMEASURE = 1307019551, + IFCLINEARVELOCITYMEASURE = 3086160713, + IFCLOGICAL = 503418787, + IFCLUMINOUSFLUXMEASURE = 2095003142, + IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE = 2755797622, + IFCLUMINOUSINTENSITYMEASURE = 151039812, + IFCMAGNETICFLUXDENSITYMEASURE = 286949696, + IFCMAGNETICFLUXMEASURE = 2486716878, + IFCMASSDENSITYMEASURE = 1477762836, + IFCMASSFLOWRATEMEASURE = 4017473158, + IFCMASSMEASURE = 3124614049, + IFCMASSPERLENGTHMEASURE = 3531705166, + IFCMINUTEINHOUR = 102610177, + IFCMODULUSOFELASTICITYMEASURE = 3341486342, + IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE = 2173214787, + IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE = 1052454078, + IFCMODULUSOFSUBGRADEREACTIONMEASURE = 1753493141, + IFCMOISTUREDIFFUSIVITYMEASURE = 3177669450, + IFCMOLECULARWEIGHTMEASURE = 1648970520, + IFCMOMENTOFINERTIAMEASURE = 3114022597, + IFCMONETARYMEASURE = 2615040989, + IFCMONTHINYEARNUMBER = 765770214, + IFCNORMALISEDRATIOMEASURE = 2095195183, + IFCNUMERICMEASURE = 2395907400, + IFCPHMEASURE = 929793134, + IFCPARAMETERVALUE = 2260317790, + IFCPLANARFORCEMEASURE = 2642773653, + IFCPLANEANGLEMEASURE = 4042175685, + IFCPOSITIVELENGTHMEASURE = 2815919920, + IFCPOSITIVEPLANEANGLEMEASURE = 3054510233, + IFCPOSITIVERATIOMEASURE = 1245737093, + IFCPOWERMEASURE = 1364037233, + IFCPRESENTABLETEXT = 2169031380, + IFCPRESSUREMEASURE = 3665567075, + IFCRADIOACTIVITYMEASURE = 3972513137, + IFCRATIOMEASURE = 96294661, + IFCREAL = 200335297, + IFCROTATIONALFREQUENCYMEASURE = 2133746277, + IFCROTATIONALMASSMEASURE = 1755127002, + IFCROTATIONALSTIFFNESSMEASURE = 3211557302, + IFCSECONDINMINUTE = 2766185779, + IFCSECTIONMODULUSMEASURE = 3467162246, + IFCSECTIONALAREAINTEGRALMEASURE = 2190458107, + IFCSHEARMODULUSMEASURE = 408310005, + IFCSOLIDANGLEMEASURE = 3471399674, + IFCSOUNDPOWERMEASURE = 846465480, + IFCSOUNDPRESSUREMEASURE = 993287707, + IFCSPECIFICHEATCAPACITYMEASURE = 3477203348, + IFCSPECULAREXPONENT = 2757832317, + IFCSPECULARROUGHNESS = 361837227, + IFCTEMPERATUREGRADIENTMEASURE = 58845555, + IFCTEXT = 2801250643, + IFCTEXTALIGNMENT = 1460886941, + IFCTEXTDECORATION = 3490877962, + IFCTEXTFONTNAME = 603696268, + IFCTEXTTRANSFORMATION = 296282323, + IFCTHERMALADMITTANCEMEASURE = 232962298, + IFCTHERMALCONDUCTIVITYMEASURE = 2645777649, + IFCTHERMALEXPANSIONCOEFFICIENTMEASURE = 2281867870, + IFCTHERMALRESISTANCEMEASURE = 857959152, + IFCTHERMALTRANSMITTANCEMEASURE = 2016195849, + IFCTHERMODYNAMICTEMPERATUREMEASURE = 743184107, + IFCTIMEMEASURE = 2726807636, + IFCTIMESTAMP = 2591213694, + IFCTORQUEMEASURE = 1278329552, + IFCVAPORPERMEABILITYMEASURE = 3345633955, + IFCVOLUMEMEASURE = 3458127941, + IFCVOLUMETRICFLOWRATEMEASURE = 2593997549, + IFCWARPINGCONSTANTMEASURE = 51269191, + IFCWARPINGMOMENTMEASURE = 1718600412, + IFCYEARNUMBER = 4065007721, + IFCARCINDEX = 3683503648, + IFCAREADENSITYMEASURE = 1500781891, + IFCBINARY = 2314439260, + IFCCARDINALPOINTREFERENCE = 1683019596, + IFCDATE = 937566702, + IFCDATETIME = 2195413836, + IFCDAYINWEEKNUMBER = 3701338814, + IFCDURATION = 2541165894, + IFCLANGUAGEID = 1275358634, + IFCLINEINDEX = 1774176899, + IFCNONNEGATIVELENGTHMEASURE = 525895558, + IFCPOSITIVEINTEGER = 1790229001, + IFCPROPERTYSETDEFINITIONSET = 2798247006, + IFCSOUNDPOWERLEVELMEASURE = 4157543285, + IFCSOUNDPRESSURELEVELMEASURE = 3457685358, + IFCTEMPERATURERATEOFCHANGEMEASURE = 1209108979, + IFCTIME = 4075327185, + IFCURIREFERENCE = 950732822, +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcVertex.cs b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcVertex.cs new file mode 100644 index 000000000..c4b28722e --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/Types/IfcVertex.cs @@ -0,0 +1,14 @@ +using System.Runtime.InteropServices; + +namespace Speckle.Importers.Ifc.Types; + +[StructLayout(LayoutKind.Sequential, Pack = 1)] +public struct IfcVertex +{ + public double PX, + PY, + PZ; + public double NX, + NY, + NZ; +} diff --git a/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json new file mode 100644 index 000000000..5c6d2f6a8 --- /dev/null +++ b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json @@ -0,0 +1,296 @@ +{ + "version": 2, + "dependencies": { + "net8.0": { + "Ara3D.Buffers": { + "type": "Direct", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "SKcQqgtXukyHTlTKFPCaUW4spSkue3XfBU/GmoA7KhH6H995v6TbJxtqjs0EfSgnXEkajL8U7X1NqktScRozXw==", + "dependencies": { + "System.Memory": "4.5.5" + } + }, + "Ara3D.Logging": { + "type": "Direct", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "7HPCe5Dq21JoOBF1iclk9H37XFCoB2ZzCPqTMNgdg4PWFvuRsofNbiuMdiE/HKgMHCVhy1C5opB2KwDKcO7Axw==", + "dependencies": { + "Ara3D.Utils": "1.4.5" + } + }, + "Ara3D.Utils": { + "type": "Direct", + "requested": "[1.4.5, )", + "resolved": "1.4.5", + "contentHash": "yba/E7PpbWP0+RDp+KbKw/vBXnXBSIheScdpVKuDnr8ytRg8pZ2Jd6nwKES+G0FcVEB9PeOVmEW7SGrFvAwRCg==" + }, + "Microsoft.Extensions.DependencyInjection": { + "type": "Direct", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies": { + "type": "Direct", + "requested": "[1.0.3, )", + "resolved": "1.0.3", + "contentHash": "vUc9Npcs14QsyOD01tnv/m8sQUnGTGOw1BCmKcv77LBJY7OxhJ+zJF7UD/sCL3lYNFuqmQEVlkfS4Quif6FyYg==", + "dependencies": { + "Microsoft.NETFramework.ReferenceAssemblies.net461": "1.0.3" + } + }, + "Microsoft.SourceLink.GitHub": { + "type": "Direct", + "requested": "[8.0.0, )", + "resolved": "8.0.0", + "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==", + "dependencies": { + "Microsoft.Build.Tasks.Git": "8.0.0", + "Microsoft.SourceLink.Common": "8.0.0" + } + }, + "PolySharp": { + "type": "Direct", + "requested": "[1.14.1, )", + "resolved": "1.14.1", + "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" + }, + "Speckle.InterfaceGenerator": { + "type": "Direct", + "requested": "[0.9.6, )", + "resolved": "0.9.6", + "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w==" + }, + "Speckle.Objects": { + "type": "Direct", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "BxtORgyOorKHmvBUldyL7t747g3wgXPhkjIKi6qVWxhPxZqzswGf9jQD1GZL57dcWkZPgdQ/vmDsowq6K89T/w==", + "dependencies": { + "Speckle.Sdk": "3.1.0-dev.228" + } + }, + "Speckle.Sdk": { + "type": "Direct", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "2jb3t9KoYEeqGsGLuzR/O3GefG5cs+Zxcpq6dGmHuYLa3cw3nanGJ1X0UkiKFv1CcvZ+aNHPT36QoDVtNvWfow==", + "dependencies": { + "GraphQL.Client": "6.0.0", + "Microsoft.CSharp": "4.7.0", + "Microsoft.Data.Sqlite": "7.0.5", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging": "2.2.0", + "Speckle.DoubleNumerics": "4.0.1", + "Speckle.Newtonsoft.Json": "13.0.2", + "Speckle.Sdk.Dependencies": "3.1.0-dev.228" + } + }, + "GraphQL.Client": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0", + "GraphQL.Client.Abstractions.Websocket": "6.0.0", + "System.Reactive": "5.0.0" + } + }, + "GraphQL.Client.Abstractions": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==", + "dependencies": { + "GraphQL.Primitives": "6.0.0" + } + }, + "GraphQL.Client.Abstractions.Websocket": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==", + "dependencies": { + "GraphQL.Client.Abstractions": "6.0.0" + } + }, + "GraphQL.Primitives": { + "type": "Transitive", + "resolved": "6.0.0", + "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA==" + }, + "Microsoft.Build.Tasks.Git": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ==" + }, + "Microsoft.CSharp": { + "type": "Transitive", + "resolved": "4.7.0", + "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA==" + }, + "Microsoft.Data.Sqlite": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==", + "dependencies": { + "Microsoft.Data.Sqlite.Core": "7.0.5", + "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4" + } + }, + "Microsoft.Data.Sqlite.Core": { + "type": "Transitive", + "resolved": "7.0.5", + "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "Microsoft.Extensions.Configuration": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==", + "dependencies": { + "Microsoft.Extensions.Primitives": "2.2.0" + } + }, + "Microsoft.Extensions.Configuration.Binder": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==", + "dependencies": { + "Microsoft.Extensions.Configuration": "2.2.0" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw==" + }, + "Microsoft.Extensions.Options": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Primitives": "2.2.0", + "System.ComponentModel.Annotations": "4.5.0" + } + }, + "Microsoft.Extensions.Primitives": { + "type": "Transitive", + "resolved": "2.2.0", + "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==", + "dependencies": { + "System.Memory": "4.5.1", + "System.Runtime.CompilerServices.Unsafe": "4.5.1" + } + }, + "Microsoft.NETFramework.ReferenceAssemblies.net461": { + "type": "Transitive", + "resolved": "1.0.3", + "contentHash": "AmOJZwCqnOCNp6PPcf9joyogScWLtwy0M1WkqfEQ0M9nYwyDD7EX9ZjscKS5iYnyvteX7kzSKFCKt9I9dXA6mA==" + }, + "Microsoft.SourceLink.Common": { + "type": "Transitive", + "resolved": "8.0.0", + "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" + }, + "Speckle.DoubleNumerics": { + "type": "Transitive", + "resolved": "4.0.1", + "contentHash": "MzEQ1Im0zTja+tEsdRIk/WlPiKqb22NmTOJcR1ZKm/mz46pezyyID3/wRz6vJUELMpSLnG7LhsxBL+nxbr7V0w==" + }, + "Speckle.Newtonsoft.Json": { + "type": "Transitive", + "resolved": "13.0.2", + "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA==" + }, + "SQLitePCLRaw.bundle_e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==", + "dependencies": { + "SQLitePCLRaw.lib.e_sqlite3": "2.1.4", + "SQLitePCLRaw.provider.e_sqlite3": "2.1.4" + } + }, + "SQLitePCLRaw.core": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==", + "dependencies": { + "System.Memory": "4.5.3" + } + }, + "SQLitePCLRaw.lib.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg==" + }, + "SQLitePCLRaw.provider.e_sqlite3": { + "type": "Transitive", + "resolved": "2.1.4", + "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==", + "dependencies": { + "SQLitePCLRaw.core": "2.1.4" + } + }, + "System.ComponentModel.Annotations": { + "type": "Transitive", + "resolved": "4.5.0", + "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg==" + }, + "System.Memory": { + "type": "Transitive", + "resolved": "4.5.5", + "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" + }, + "System.Reactive": { + "type": "Transitive", + "resolved": "5.0.0", + "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==" + }, + "System.Runtime.CompilerServices.Unsafe": { + "type": "Transitive", + "resolved": "4.5.1", + "contentHash": "Zh8t8oqolRaFa9vmOZfdQm/qKejdqz0J9kr7o2Fu0vPeoH3BL1EOXipKWwkWtLT1JPzjByrF19fGuFlNbmPpiw==" + }, + "Microsoft.Extensions.Logging": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==", + "dependencies": { + "Microsoft.Extensions.Configuration.Binder": "2.2.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0", + "Microsoft.Extensions.Logging.Abstractions": "2.2.0", + "Microsoft.Extensions.Options": "2.2.0" + } + }, + "Microsoft.Extensions.Logging.Abstractions": { + "type": "CentralTransitive", + "requested": "[2.2.0, )", + "resolved": "2.2.0", + "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A==" + }, + "Speckle.Sdk.Dependencies": { + "type": "CentralTransitive", + "requested": "[3.1.0-dev.228, )", + "resolved": "3.1.0-dev.228", + "contentHash": "Ul2flG1qAnpXYESNB2W4o3x7jxW3BFT2L/jdyO7lgsSVGiNhhVskaXVZXHvqGYwlu0y1J/fhFGANsc+1xnCoQA==" + } + } + } +} \ No newline at end of file diff --git a/Local.sln b/Local.sln index f8d9e93d0..bb623c542 100644 --- a/Local.sln +++ b/Local.sln @@ -262,6 +262,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Naviswor EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Converters.Navisworks2024", "Converters\Navisworks\Speckle.Converters.Navisworks2024\Speckle.Converters.Navisworks2024.csproj", "{52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Importers", "Importers", "{24750B06-C90D-43B1-B2E4-088D531D6748}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ifc", "Ifc", "{0EF6C4D6-AC76-408F-8D32-2F9DA8006077}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Ifc", "Importers\Ifc\Speckle.Importers.Ifc\Speckle.Importers.Ifc.csproj", "{9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Ifc.Tester", "Importers\Ifc\Speckle.Importers.Ifc.Tester\Speckle.Importers.Ifc.Tester.csproj", "{B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -671,6 +679,18 @@ Global {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Local|Any CPU.Build.0 = Local|Any CPU {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5}.Release|Any CPU.Build.0 = Release|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Local|Any CPU.Build.0 = Debug|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B}.Release|Any CPU.Build.0 = Release|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Local|Any CPU.Build.0 = Debug|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -791,6 +811,9 @@ Global {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} {52D789C2-5B3C-4225-9F84-C54B3AB4F1B5} = {AE58C92C-DBF3-4248-8614-8F283B8CB5F8} + {0EF6C4D6-AC76-408F-8D32-2F9DA8006077} = {24750B06-C90D-43B1-B2E4-088D531D6748} + {9FD99F9B-8D50-4C7A-B3A6-22E28AB5F26B} = {0EF6C4D6-AC76-408F-8D32-2F9DA8006077} + {B3B126CA-A419-48D1-B117-6DEE1DE1AFAD} = {0EF6C4D6-AC76-408F-8D32-2F9DA8006077} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} diff --git a/Speckle.Connectors.sln b/Speckle.Connectors.sln index 0eaa82b03..a767365d0 100644 --- a/Speckle.Connectors.sln +++ b/Speckle.Connectors.sln @@ -69,7 +69,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Speckle.Connectors.DUI.WebV EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "Build\Build.csproj", "{C50AA3E3-8C31-4131-9DEC-1D8B377D5A89}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HostApps", "HostApps", "{42826721-9A18-4762-8BA9-F1429DD5C5B1}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Connectors", "Connectors", "{42826721-9A18-4762-8BA9-F1429DD5C5B1}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{59E8E8F3-4E42-4E92-83B3-B1C2AB901D18}" ProjectSection(SolutionItems) = preProject @@ -271,6 +271,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Naviswor EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Connectors.Navisworks2025", "Connectors\Navisworks\Speckle.Connectors.Navisworks2025\Speckle.Connectors.Navisworks2025.csproj", "{7791806E-7531-41D8-9C9D-4A1249D9F99C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Ifc", "Importers\Ifc\Speckle.Importers.Ifc\Speckle.Importers.Ifc.csproj", "{E6B7A640-F85C-41C9-8226-B5310A98822D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ifc", "Ifc", "{F93052A6-6937-443F-8F1F-4A967A8A2BEF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Importers", "Importers", "{336F0341-5C39-40F7-9377-122FED4E4549}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Speckle.Importers.Ifc.Tester", "Importers\Ifc\Speckle.Importers.Ifc.Tester\Speckle.Importers.Ifc.Tester.csproj", "{FCD6CB79-6B41-4448-99E1-787408AD24B0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -662,6 +670,18 @@ Global {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Local|Any CPU.Build.0 = Debug|Any CPU {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.ActiveCfg = Release|Any CPU {7791806E-7531-41D8-9C9D-4A1249D9F99C}.Release|Any CPU.Build.0 = Release|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Local|Any CPU.Build.0 = Debug|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6B7A640-F85C-41C9-8226-B5310A98822D}.Release|Any CPU.Build.0 = Release|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.ActiveCfg = Debug|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Local|Any CPU.Build.0 = Debug|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FCD6CB79-6B41-4448-99E1-787408AD24B0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -782,6 +802,9 @@ Global {04FC86A3-2E25-41A1-98C5-10898616CD78} = {19F15419-F493-4D53-83EA-F90869D97D6E} {FD44E1F0-D20A-49B6-ADC9-482D911A74FB} = {91DCAFB0-283B-4B07-9F6F-7335DECEEB08} {7791806E-7531-41D8-9C9D-4A1249D9F99C} = {A88CFA1F-B2D5-4DBE-8496-68D0AFA46F2D} + {E6B7A640-F85C-41C9-8226-B5310A98822D} = {F93052A6-6937-443F-8F1F-4A967A8A2BEF} + {F93052A6-6937-443F-8F1F-4A967A8A2BEF} = {336F0341-5C39-40F7-9377-122FED4E4549} + {FCD6CB79-6B41-4448-99E1-787408AD24B0} = {F93052A6-6937-443F-8F1F-4A967A8A2BEF} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {EE253116-7070-4E9A-BCE8-2911C251B8C8} From 49baeae78090a6cb0d802aec7cf32083313360a3 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 15 Jan 2025 12:18:38 +0000 Subject: [PATCH 38/40] add gitversion to linux build to version nuget correctly. rename builds (#495) * add gitversion to linux build to version nuget correctly. rename builds * fix naming --- .github/workflows/main.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index af72f5344..27130a2c3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,7 +6,7 @@ on: tags: ["v3.*"] # Manual delivery on every 3.x tag jobs: - build: + build-windows: runs-on: windows-latest outputs: version: ${{ steps.set-version.outputs.version }} @@ -27,10 +27,10 @@ jobs: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - - name: ⚒️ Run GitVersion + - name: ⚒️ Run GitVersion on Windows run: ./build.ps1 build-server-version - - name: ⚒️ Run build + - name: ⚒️ Run build on Windows run: ./build.ps1 - name: ⬆️ Upload artifacts @@ -70,7 +70,7 @@ jobs: with: name: output-* - test: + build-linux: runs-on: ubuntu-latest steps: - name: Checkout @@ -87,12 +87,15 @@ jobs: path: ~/.nuget/packages key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }} - - name: ⚒️ Run Build and Pack on Linux - run: ./build.sh build-linux + - name: ⚒️ Run GitVersion on Linux + run: ./build.sh build-server-version - - name: ⚒️ Run tests + - name: ⚒️ Run tests on Linux run: ./build.sh test-only + - name: ⚒️ Run Build and Pack on Linux + run: ./build.sh build-linux + - name: Upload coverage reports to Codecov with GitHub Action uses: codecov/codecov-action@v5 with: From b9d2f376d6399cf54d2be1fc29947147472fcf70 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 15 Jan 2025 12:31:07 +0000 Subject: [PATCH 39/40] Fix build (#497) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 27130a2c3..47439db33 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,7 +46,7 @@ jobs: deploy-installers: runs-on: ubuntu-latest - needs: build + needs: build-windows env: IS_TAG_BUILD: ${{ github.ref_type == 'tag' }} IS_RELEASE_BRANCH: ${{ startsWith(github.ref_name, 'release/') || github.ref_name == 'main'}} @@ -58,7 +58,7 @@ jobs: workflow: Build Installers repo: specklesystems/connector-installers token: ${{ secrets.CONNECTORS_GH_TOKEN }} - inputs: '{ "run_id": "${{ github.run_id }}", "version": "${{ needs.build.outputs.version }}", "public_release": ${{ env.IS_TAG_BUILD }}, "store_artifacts": ${{ env.IS_RELEASE_BRANCH }} }' + inputs: '{ "run_id": "${{ github.run_id }}", "version": "${{ needs.build-windows.outputs.version }}", "public_release": ${{ env.IS_TAG_BUILD }}, "store_artifacts": ${{ env.IS_RELEASE_BRANCH }} }' ref: main wait-for-completion: true wait-for-completion-interval: 10s From db4d2f7eb06214de8d5bf886d92c4995faf86eb4 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 15 Jan 2025 13:18:36 +0000 Subject: [PATCH 40/40] Fix dev build (#498) * Fix build * gitversion doesn't want a shallow clone --- .github/workflows/main.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 47439db33..3a51c8cd5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -75,6 +75,8 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Setup .NET uses: actions/setup-dotnet@v4