From 1f5a18d7d75d89de3add89b4e13a1ffe5d825d8c Mon Sep 17 00:00:00 2001 From: Saumya Jain Date: Wed, 8 May 2024 14:31:33 +0200 Subject: [PATCH 01/16] added resolve function to take the values from material profiles --- resources/definitions/fdmprinter.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 6f9b4de7fd..35fd6df843 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6180,6 +6180,7 @@ "type": "bool", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false, "children": From 22c17c68acef57c9ad3753c9f319904ae5c56dbb Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Wed, 8 May 2024 16:26:07 +0200 Subject: [PATCH 02/16] Create um_f4_global_Fast_Quality.inst.cfg --- .../um_f4_global_Fast_Quality.inst.cfg | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg diff --git a/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg new file mode 100644 index 0000000000..44783fa788 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_global_Fast_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +definition = ultimaker_factor4 +name = Normal +version = 4 + +[metadata] +global_quality = True +quality_type = fast +setting_version = 23 +type = quality +weight = -1 + +[values] +layer_height = =round(0.15 * material_shrinkage_percentage_z / 100, 5) + From 674d28a37198e5512357357843a8f38f100d820b Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 10:03:12 +0200 Subject: [PATCH 03/16] Add resolve functions for raft_*_remove_inside_corners settings --- resources/definitions/fdmprinter.def.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 35fd6df843..5a91188eee 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6193,6 +6193,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_base_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6204,6 +6205,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_interface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6215,6 +6217,7 @@ "value": "raft_remove_inside_corners", "default_value": false, "enabled": "resolveOrValue('adhesion_type') == 'raft'", + "resolve": "any(extruderValues('raft_surface_remove_inside_corners'))", "settable_per_mesh": false, "settable_per_extruder": false } From b75f168c555f9e963bf195b48fbad812b25ac743 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 14:54:00 +0200 Subject: [PATCH 04/16] Fix wrong placement of objects children when saving to 3MF We now ignore the auto-centering of meshes for children objects, because it messes up with their relative position with their parent. Only the top-level objects needs to be centered, the children will follow. CURA-11902 --- plugins/3MFWriter/ThreeMFWriter.py | 33 ++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index d33f0e374a..1459806045 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -96,7 +96,8 @@ class ThreeMFWriter(MeshWriter): @staticmethod def _convertUMNodeToSavitarNode(um_node, transformation = Matrix(), - exported_settings: Optional[Dict[str, Set[str]]] = None): + exported_settings: Optional[Dict[str, Set[str]]] = None, + center_mesh = False): """Convenience function that converts an Uranium SceneNode object to a SavitarSceneNode :returns: Uranium Scene node. @@ -111,16 +112,21 @@ class ThreeMFWriter(MeshWriter): savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = Matrix() + node_matrix = um_node.getLocalTransformation() mesh_data = um_node.getMeshData() - # compensate for original center position, if object(s) is/are not around its zero position - if mesh_data is not None: - extents = mesh_data.getExtents() - if extents is not None: - # We use a different coordinate space while writing, so flip Z and Y - center_vector = Vector(extents.center.x, extents.center.z, extents.center.y) - node_matrix.setByTranslation(center_vector) - node_matrix.multiply(um_node.getLocalTransformation()) + + if center_mesh: + node_matrix = Matrix() + # compensate for original center position, if object(s) is/are not around its zero position + if mesh_data is not None: + extents = mesh_data.getExtents() + if extents is not None: + # We use a different coordinate space while writing, so flip Z and Y + center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) + node_matrix.setByTranslation(center_vector) + node_matrix.multiply(um_node.getLocalTransformation()) + else: + node_matrix = um_node.getLocalTransformation() matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation)) @@ -147,7 +153,7 @@ class ThreeMFWriter(MeshWriter): for key in changed_setting_keys: savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value"))) else: - # We want to export only the specified settings + # We want to export only the specified settings if um_node.getName() in exported_settings: model_exported_settings = exported_settings[um_node.getName()] @@ -283,7 +289,8 @@ class ThreeMFWriter(MeshWriter): for root_child in node.getChildren(): savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(root_child, transformation_matrix, - exported_model_settings) + exported_model_settings, + center_mesh = True) if savitar_node: savitar_scene.addSceneNode(savitar_node) else: @@ -442,7 +449,7 @@ class ThreeMFWriter(MeshWriter): def sceneNodesToString(scene_nodes: [SceneNode]) -> str: savitar_scene = Savitar.Scene() for scene_node in scene_nodes: - savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node) + savitar_node = ThreeMFWriter._convertUMNodeToSavitarNode(scene_node, center_mesh = True) savitar_scene.addSceneNode(savitar_node) parser = Savitar.ThreeMFParser() scene_string = parser.sceneToString(savitar_scene) From 2e5e43291ee08efe136c7e4463cd009eeaa5f80e Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 14 May 2024 16:27:16 +0200 Subject: [PATCH 05/16] Fix missing error message when slicing with disabled extruder Following the removal of the get/setMessage methods in the Job class, the StartSliceJob has not been updated and still used them. We now use a specific variable for storing the disabled extruders and properly display them. CURA-11904 --- plugins/CuraEngineBackend/CuraEngineBackend.py | 2 +- plugins/CuraEngineBackend/StartSliceJob.py | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index c73dee2fb0..dd7987bc42 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -544,7 +544,7 @@ class CuraEngineBackend(QObject, Backend): if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder: self._error_message = Message(catalog.i18nc("@info:status", - "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(), + "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getAssociatedDisabledExtruders(), title = catalog.i18nc("@info:title", "Unable to slice"), message_type = Message.MessageType.WARNING) self._error_message.show() diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 3a1d7ce431..9caadbdff6 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -146,6 +146,7 @@ class StartSliceJob(Job): self._slice_message: Arcus.PythonMessage = slice_message self._is_cancelled: bool = False self._build_plate_number: Optional[int] = None + self._associated_disabled_extruders: Optional[str] = None # cache for all setting values from all stacks (global & extruder) for the current machine self._all_extruders_settings: Optional[Dict[str, Any]] = None @@ -153,6 +154,9 @@ class StartSliceJob(Job): def getSliceMessage(self) -> Arcus.PythonMessage: return self._slice_message + def getAssociatedDisabledExtruders(self) -> Optional[str]: + return self._associated_disabled_extruders + def setBuildPlate(self, build_plate_number: int) -> None: self._build_plate_number = build_plate_number @@ -334,7 +338,7 @@ class StartSliceJob(Job): if has_model_with_disabled_extruders: self.setResult(StartJobResult.ObjectsWithDisabledExtruder) associated_disabled_extruders = {p + 1 for p in associated_disabled_extruders} - self.setMessage(", ".join(map(str, sorted(associated_disabled_extruders)))) + self._associated_disabled_extruders = ", ".join(map(str, sorted(associated_disabled_extruders))) return # There are cases when there is nothing to slice. This can happen due to one at a time slicing not being From 3fbc91112376d51498d93440c3a0df4d12fb4817 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 15 May 2024 09:09:29 +0200 Subject: [PATCH 06/16] Remove useless variable declaration The node_matrix is defined in the following if whatever the condition, so there is no need to define it first. CURA-11902 --- plugins/3MFWriter/ThreeMFWriter.py | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py index 1459806045..5a9fa487fc 100644 --- a/plugins/3MFWriter/ThreeMFWriter.py +++ b/plugins/3MFWriter/ThreeMFWriter.py @@ -112,7 +112,6 @@ class ThreeMFWriter(MeshWriter): savitar_node = Savitar.SceneNode() savitar_node.setName(um_node.getName()) - node_matrix = um_node.getLocalTransformation() mesh_data = um_node.getMeshData() if center_mesh: From 86ccddbb1d00eb121506095e21c46148aa688c33 Mon Sep 17 00:00:00 2001 From: "c.lamboo" Date: Fri, 17 May 2024 09:56:49 +0200 Subject: [PATCH 07/16] Change `value` to `resolve` CURA-11912 --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 5a91188eee..f10ad98e4b 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6821,7 +6821,7 @@ "label": "Prime Tower Type", "description": "How to generate the prime tower:
  • Normal: create a bucket in which secondary materials are primed
  • Interleaved: create a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other
", "type": "enum", - "value": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", + "resolve": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", "options": { "normal": "Normal", From 5af225ec2197b9a86608a1ae5df6d26b1c5647cc Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 23 May 2024 14:45:56 +0200 Subject: [PATCH 08/16] Set version 5.7.2 --- conandata.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/conandata.yml b/conandata.yml index 0edeed3306..84251d7208 100644 --- a/conandata.yml +++ b/conandata.yml @@ -1,9 +1,9 @@ -version: "5.7.1" +version: "5.7.2" requirements: - - "uranium/5.7.0" - - "curaengine/5.7.1" - - "cura_binary_data/5.7.1" - - "fdm_materials/5.7.1" + - "uranium/5.7.2" + - "curaengine/5.7.2" + - "cura_binary_data/5.7.2" + - "fdm_materials/5.7.2" - "curaengine_plugin_gradual_flow/0.1.0-beta.3" - "dulcificum/0.2.0-alpha.0" - "pysavitar/5.3.0" From a3d70e9429877700ad0d09b2593ad24b59292a29 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 27 May 2024 16:26:26 +0200 Subject: [PATCH 09/16] Allow setting interleaved prime tower base on material CURA-11931 --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index f10ad98e4b..adfe2b05dd 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -6821,7 +6821,7 @@ "label": "Prime Tower Type", "description": "How to generate the prime tower:
  • Normal: create a bucket in which secondary materials are primed
  • Interleaved: create a prime tower as sparse as possible. This will save time and filament, but is only possible if the used materials adhere to each other
", "type": "enum", - "resolve": "'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", + "resolve": "'interleaved' if all(mode == 'interleaved' for mode in extruderValues('prime_tower_mode')) else 'interleaved' if (all(material_type_var == extruderValues('material_type')[0] for material_type_var in extruderValues('material_type')) and all(material_brand_var == extruderValues('material_brand')[0] for material_brand_var in extruderValues('material_brand'))) else 'normal'", "options": { "normal": "Normal", From e863eee1561ac8e8169d7a1c13455be2f06b5478 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 May 2024 09:18:08 +0200 Subject: [PATCH 10/16] Disable wait for temperature for UltiMaker printers Previously the material_print_temp_prepend and material_print_temp_wait were ignored for Griffin-flavored printers. Now we do handle them because we want the prepend, but we don't want the wait so disable it. --- resources/definitions/ultimaker.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 3821fdefd6..614f88242d 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -80,6 +80,7 @@ "maximum_value_warning": "120", "minimum_value": "0" }, + "material_print_temp_wait": { "value": false }, "material_print_temperature": { "minimum_value": "0" }, "material_standby_temperature": { From 219543dd4324ffd1ec012b1e58b3ac858814efb3 Mon Sep 17 00:00:00 2001 From: wawanbreton Date: Thu, 30 May 2024 07:19:37 +0000 Subject: [PATCH 11/16] Applied printer-linter format --- resources/definitions/ultimaker.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 614f88242d..97bb099ea4 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -80,7 +80,7 @@ "maximum_value_warning": "120", "minimum_value": "0" }, - "material_print_temp_wait": { "value": false }, + "material_print_temp_wait": { "value": false }, "material_print_temperature": { "minimum_value": "0" }, "material_standby_temperature": { From 11f2be15f420d1aa67668291956bcbf06fe6e168 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 30 May 2024 09:54:47 +0200 Subject: [PATCH 12/16] Updated Changelog for Cura 5.7.2 --- resources/texts/change_log.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index 1883303896..4d3fce3a66 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,3 +1,13 @@ +[5.7.2] + +* Bugfixes +- Fixed a bug where modifier meshes and support meshes were not loaded in the correct position, should resolve https://github.com/Ultimaker/Cura/issues/18761 (and https://github.com/5axes/SpoonAntiWarping/issues/8) +- Primeblobs were not printed for a second extruder +- Interleaved prime tower can now be printed with a raft +- Improved behaviors for start temperature for multiple extruders +- Improved preheating logic when using a raft with multiple extruders +- Enabled Raft Remove Inside Corners and Prime Tower Mode to be shipped with a material profile + [5.7.1] * Introducing the UltiMaker Factor 4 From 7f7dbd6b1a15db9e81717380553d31623e3b8292 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 10 Jun 2024 13:26:22 +0200 Subject: [PATCH 13/16] Only request permissions when token changed Since the permissions can only change with a token, we only need to check what the permissions at that moment (instead of every 60 seconds) Fixes CURA-11870 --- cura/API/Account.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index c6027acdb5..d126a52d60 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -115,15 +115,15 @@ class Account(QObject): self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self.sync) - self._sync_services: Dict[str, int] = {} """contains entries "service_name" : SyncState""" - self.syncRequested.connect(self._updatePermissions) + self._sync_services: Dict[str, int] = {} def initialize(self) -> None: self._authorization_service.initialize(self._application.getPreferences()) self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged) self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged) self._authorization_service.accessTokenChanged.connect(self._onAccessTokenChanged) + self._authorization_service.accessTokenChanged.connect(self._updatePermissions) self._authorization_service.loadAuthDataFromPreferences() @pyqtProperty(int, notify=syncStateChanged) From 4a8fb601c43bf5bb187f090bb26301c7b9f3e8fc Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 12 Jun 2024 13:07:27 +0200 Subject: [PATCH 14/16] Revert "Bump twisted from 21.2.0 to 23.8.0" This reverts commit 9ae3c6d4a2f56d38ee7d0267975cdac593f22314. --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3024096234..76339c884f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -213,9 +213,9 @@ requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 # twisted -Twisted==23.8.0 \ - --hash=sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24 \ - --hash=sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd +Twisted==21.2.0 \ + --hash=sha256:77544a8945cf69b98d2946689bbe0c75de7d145cdf11f391dd487eae8fc95a12 \ + --hash=sha256:aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e constantly==15.1.0 \ --hash=sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35 \ --hash=sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d From 044cc00c5c99895bb59eb3e99aa5c8407059903a Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 12 Jun 2024 13:29:23 +0200 Subject: [PATCH 15/16] Dependencies: Update attrs, as twisted depends on newer. --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index 3024096234..ba2b2927e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -206,9 +206,9 @@ chardet==3.0.4 \ idna==2.8 \ --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c -attrs==21.2.0 \ - --hash=sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1 \ - --hash=sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb +attrs==21.3.0 \ + --hash=sha256:8f7335278dedd26b58c38e006338242cc0977f06d51579b2b8b87b9b33bff66c \ + --hash=sha256:50f3c9b216dc9021042f71b392859a773b904ce1a029077f58f6598272432045 requests==2.22.0 \ --hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \ --hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31 From af267af13608870024d6c8b5e15e6a92c9cfa68a Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 12 Jun 2024 14:06:35 +0200 Subject: [PATCH 16/16] Dependencies: Update incremental, as twisted depends on newer. --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index ba2b2927e0..c55e282fa5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -222,9 +222,9 @@ constantly==15.1.0 \ hyperlink==21.0.0 \ --hash=sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b \ --hash=sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 -incremental==21.3.0 \ - --hash=sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57 \ - --hash=sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321 +incremental==22.10.0 \ + --hash=sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51 \ + --hash=sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0 zope.interface==5.4.0 \ --hash=sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3 \ --hash=sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54 \