<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_template(self, template_dict, original_template_path, built_artifacts):
 """ Given the path to built artifacts, update the template to point appropriate resource CodeUris to the artifacts folder Parameters template_dict original_template_path : str Path where the template file will be written to built_artifacts : dict Map of LogicalId of a resource to the path where the the built artifacts for this resource lives Returns ------- dict Updated template """


        original_dir = os.path.dirname(original_template_path)

        for logical_id, resource in template_dict.get("Resources", {}).items():

            if logical_id not in built_artifacts:
                # this resource was not built. So skip it
                continue

            # Artifacts are written relative to the template because it makes the template portable
            #   Ex: A CI/CD pipeline build stage could zip the output folder and pass to a
            #   package stage running on a different machine
            artifact_relative_path = os.path.relpath(built_artifacts[logical_id], original_dir)

            resource_type = resource.get("Type")
            properties = resource.setdefault("Properties", {})
            if resource_type == "AWS::Serverless::Function":
                properties["CodeUri"] = artifact_relative_path

            if resource_type == "AWS::Lambda::Function":
                properties["Code"] = artifact_relative_path

        return template_dict