)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":22,"context_line":"save only to new table and provide a post-upgrade DB migration to drop"},{"line_number":23,"context_line":"the volume_type_id column in consistencygroup table (or do it in early"},{"line_number":24,"context_line":"P)."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"UpgradeImpact"},{"line_number":27,"context_line":"Change-Id: Ib37d449ac6bb661ec47938f05ec1ee4256778b4e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a7e1126_ab7010dd","line":25,"updated":"2015-12-18 21:30:56.000000000","message":"Implements: blueprint cg-volumetype-mapping-table\n\nPlease also reference the related blueprint online-schema-upgrades.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}],"cinder/cmd/manage.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    @args(\u0027--force\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":236,"context_line":"          help\u003d\u0027Force consistency groups to migrate (even if they may be\u0027"},{"line_number":237,"context_line":"               \u0027performing another operation). This may be dangerous.\u0027)"},{"line_number":238,"context_line":"    def migrate_consistencygroup_data(self, max_number\u003dNone, force\u003dFalse):"},{"line_number":239,"context_line":"        if max_number is not None:"},{"line_number":240,"context_line":"            max_number \u003d int(max_number)"},{"line_number":241,"context_line":"            if max_number \u003c 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_436dd62f","line":238,"updated":"2015-12-18 21:30:56.000000000","message":"Why do we want to provide a \"force\" option that is unsafe?","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    @args(\u0027--force\u0027, action\u003d\u0027store_true\u0027, dest\u003d\u0027force\u0027,"},{"line_number":236,"context_line":"          help\u003d\u0027Force consistency groups to migrate (even if they may be\u0027"},{"line_number":237,"context_line":"               \u0027performing another operation). This may be dangerous.\u0027)"},{"line_number":238,"context_line":"    def migrate_consistencygroup_data(self, max_number\u003dNone, force\u003dFalse):"},{"line_number":239,"context_line":"        if max_number is not None:"},{"line_number":240,"context_line":"            max_number \u003d int(max_number)"},{"line_number":241,"context_line":"            if max_number \u003c 0:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_664ad285","line":238,"in_reply_to":"3a7e1126_436dd62f","updated":"2015-12-30 16:13:37.000000000","message":"If someone doesn\u0027t really care about doing upgrades live, he can simply do:\n\n  cinder-manage migrate_consistencygroup_data --force\n\noffline to get all of his data migrated at once.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}],"cinder/db/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":977,"context_line":"    return IMPL.consistencygroup_destroy(context, consistencygroup_id)"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"def migrate_consistencygroup_data(context, max_count, force\u003dFalse):"},{"line_number":981,"context_line":"    \"\"\"Migrate CGs volume_type from volume_type_id to a mapping table."},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    :param max_count: The maximum number of consistencygroups to consider in"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_63cfb229","line":980,"updated":"2015-12-18 21:30:56.000000000","message":"I\u0027m not getting why we need to force this migration and also how to determine the max_count.  If user sets max_count to 5, but there are 8 CGs.  What happens to the remaining CGs that are not migrated?","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":977,"context_line":"    return IMPL.consistencygroup_destroy(context, consistencygroup_id)"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"def migrate_consistencygroup_data(context, max_count, force\u003dFalse):"},{"line_number":981,"context_line":"    \"\"\"Migrate CGs volume_type from volume_type_id to a mapping table."},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    :param max_count: The maximum number of consistencygroups to consider in"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_6974e59b","line":980,"in_reply_to":"3a7e1126_63cfb229","updated":"2015-12-30 16:13:37.000000000","message":"This is to limit potential impact on the DB performance. Admin can migrate everything at once or do the work in smaller batches. He should run that until the command tells him that no more migrations are left.\n\nThis is explained quite well by Dan Smith in his post on Juno-\u003eKilo upgrade [1] (Step 7: Perform online schema migrations).\n\n[1] http://www.danplanet.com/blog/2015/06/26/upgrading-nova-to-kilo-with-minimal-downtime/","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1b6cb9ff69d6dafe662aa45ef256a8db5266f6c3","unresolved":false,"context_lines":[{"line_number":977,"context_line":"    return IMPL.consistencygroup_destroy(context, consistencygroup_id)"},{"line_number":978,"context_line":""},{"line_number":979,"context_line":""},{"line_number":980,"context_line":"def migrate_consistencygroup_data(context, max_count, force\u003dFalse):"},{"line_number":981,"context_line":"    \"\"\"Migrate CGs volume_type from volume_type_id to a mapping table."},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"    :param max_count: The maximum number of consistencygroups to consider in"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_eda0da92","line":980,"in_reply_to":"fa69d971_6974e59b","updated":"2015-12-30 19:32:30.000000000","message":"If so, please add some comments to explain this.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":3850,"context_line":"            update({\u0027status\u0027: \u0027deleted\u0027,"},{"line_number":3851,"context_line":"                    \u0027deleted\u0027: True,"},{"line_number":3852,"context_line":"                    \u0027deleted_at\u0027: timeutils.utcnow(),"},{"line_number":3853,"context_line":"                    \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)})"},{"line_number":3854,"context_line":""},{"line_number":3855,"context_line":""},{"line_number":3856,"context_line":"@require_admin_context"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_6b6d4830","line":3853,"updated":"2015-12-18 21:30:56.000000000","message":"Shouldn\u0027t the entries created in the mapping table gets deleted when the CG gets deleted as well?","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":3850,"context_line":"            update({\u0027status\u0027: \u0027deleted\u0027,"},{"line_number":3851,"context_line":"                    \u0027deleted\u0027: True,"},{"line_number":3852,"context_line":"                    \u0027deleted_at\u0027: timeutils.utcnow(),"},{"line_number":3853,"context_line":"                    \u0027updated_at\u0027: literal_column(\u0027updated_at\u0027)})"},{"line_number":3854,"context_line":""},{"line_number":3855,"context_line":""},{"line_number":3856,"context_line":"@require_admin_context"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_6982a554","line":3853,"in_reply_to":"3a7e1126_6b6d4830","updated":"2015-12-30 16:13:37.000000000","message":"Good catch!","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":3854,"context_line":""},{"line_number":3855,"context_line":""},{"line_number":3856,"context_line":"@require_admin_context"},{"line_number":3857,"context_line":"def migrate_consistencygroup_data(context, max_count, force\u003dFalse):"},{"line_number":3858,"context_line":"    # NOTE(dulek): One important property of volume_types column is that right"},{"line_number":3859,"context_line":"    # now it cannot change after CG creation. This means that we can simply"},{"line_number":3860,"context_line":"    # query for these CGs which have mapping table empty. In other case we"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_03ed8eee","line":3857,"updated":"2015-12-18 21:30:56.000000000","message":"Why do we need a \"max_count\"?  What about those beyond the max_count?  Who decides what is the magic number?","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":3854,"context_line":""},{"line_number":3855,"context_line":""},{"line_number":3856,"context_line":"@require_admin_context"},{"line_number":3857,"context_line":"def migrate_consistencygroup_data(context, max_count, force\u003dFalse):"},{"line_number":3858,"context_line":"    # NOTE(dulek): One important property of volume_types column is that right"},{"line_number":3859,"context_line":"    # now it cannot change after CG creation. This means that we can simply"},{"line_number":3860,"context_line":"    # query for these CGs which have mapping table empty. In other case we"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_89a039f6","line":3857,"in_reply_to":"3a7e1126_03ed8eee","updated":"2015-12-30 16:13:37.000000000","message":"I\u0027ve answered that on cinder.db.api.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":3892,"context_line":""},{"line_number":3893,"context_line":"            # NOTE(dulek): We should avoid modifying consistency groups that"},{"line_number":3894,"context_line":"            # are in the middle of some operation."},{"line_number":3895,"context_line":"            if not force:"},{"line_number":3896,"context_line":"                if cg.status not in (\u0027available\u0027, \u0027error\u0027, \u0027deleted\u0027):"},{"line_number":3897,"context_line":"                    continue"},{"line_number":3898,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_4302b63e","line":3895,"updated":"2015-12-18 21:30:56.000000000","message":"I don\u0027t think we should provide a \"force\" option.\n\nAlso why do we need to migrate if it is already \"deleted\"?  I\u0027m not sure migrating a CG in \"error\" state is a good idea either.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":3892,"context_line":""},{"line_number":3893,"context_line":"            # NOTE(dulek): We should avoid modifying consistency groups that"},{"line_number":3894,"context_line":"            # are in the middle of some operation."},{"line_number":3895,"context_line":"            if not force:"},{"line_number":3896,"context_line":"                if cg.status not in (\u0027available\u0027, \u0027error\u0027, \u0027deleted\u0027):"},{"line_number":3897,"context_line":"                    continue"},{"line_number":3898,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa69d971_ef72157c","line":3895,"in_reply_to":"3a7e1126_4302b63e","updated":"2015-12-30 16:13:37.000000000","message":"On the \"force\" option I\u0027ve elaborated in other inline comments.\n\nI understand that there\u0027s no point in changing \u0027deleted\u0027 CGs, I\u0027ll remove it.\n\nI\u0027m not sure on errored out ones. I can still query for them and see their details, so it seems natural to me that we should migrate this data. I know it\u0027s very improbable that someone will keep his errored out resource for 3 releases, but if so - we\u0027ll lose the information when all the services will be running in N version.\n\nI\u0027ll also add in-use here. This is a stable state and I think we shouldn\u0027t expect any consequences when modifying it.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}],"cinder/db/sqlalchemy/migrate_repo/versions/061_add_consistencygroup_volume_type_mapping_table.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cg_vt_mapping.create()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def downgrade(migrate_engine):"},{"line_number":48,"context_line":"    meta \u003d MetaData()"},{"line_number":49,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_e3c64267","line":47,"updated":"2015-12-18 21:30:56.000000000","message":"downgrade is not needed any more.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3fda2cfc854b06c4858e48bb1d0152814a06d779","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    __table_args__ \u003d (schema.UniqueConstraint("},{"line_number":125,"context_line":"        \"volume_type_id\", \"consistencygroup_id\", \"deleted\","},{"line_number":126,"context_line":"        name\u003d\"uniq_consistencygroup_volume_type_mapping0volume_type_id0\""},{"line_number":127,"context_line":"             \"consistencygroup_id0deleted\"),"},{"line_number":128,"context_line":"    )"},{"line_number":129,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":130,"context_line":"    volume_type_id \u003d Column(String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_88e35d33","line":127,"updated":"2015-11-20 15:38:55.000000000","message":"I don\u0027t think there\u0027s a reason to do it that way. We cannot delete or add mappings during CGs lifetime, can we? If we would be able to, this solution will suffer from similar problems like in [1]. Why don\u0027t we simply set both volume_type_id and consistencygroup_id as primary keys (+ cascade delete)?\n\nI\u0027m not a hardcore DB geek, so feedback from someone else would be appreciated.\n\n[1] https://bugs.launchpad.net/cinder/+bug/1518363","commit_id":"20cbe06d33f5de9cfb05452a75c91f36f843e756"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1eeba5a848cd48549133062430e2e92eba757e9f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    __table_args__ \u003d (schema.UniqueConstraint("},{"line_number":125,"context_line":"        \"volume_type_id\", \"consistencygroup_id\", \"deleted\","},{"line_number":126,"context_line":"        name\u003d\"uniq_consistencygroup_volume_type_mapping0volume_type_id0\""},{"line_number":127,"context_line":"             \"consistencygroup_id0deleted\"),"},{"line_number":128,"context_line":"    )"},{"line_number":129,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":130,"context_line":"    volume_type_id \u003d Column(String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_a801813b","line":127,"in_reply_to":"ba8a016a_88e35d33","updated":"2015-11-20 15:49:59.000000000","message":"I used this only because this was used in VolumeTypeProjects already.  I see that has given you problems in your bug report.  I\u0027m certainly open not to use this.","commit_id":"20cbe06d33f5de9cfb05452a75c91f36f843e756"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"268ccff25d3e9852f338284eda90300ae7fe9f81","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    __table_args__ \u003d (schema.UniqueConstraint("},{"line_number":125,"context_line":"        \"volume_type_id\", \"consistencygroup_id\", \"deleted\","},{"line_number":126,"context_line":"        name\u003d\"uniq_consistencygroup_volume_type_mapping0volume_type_id0\""},{"line_number":127,"context_line":"             \"consistencygroup_id0deleted\"),"},{"line_number":128,"context_line":"    )"},{"line_number":129,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":130,"context_line":"    volume_type_id \u003d Column(String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_cbd71fbe","line":127,"in_reply_to":"ba8a016a_a801813b","updated":"2015-11-20 16:02:36.000000000","message":"So in case of VolumeTypeProjects we can add and remove associations after volume_type is created and that\u0027s why it was done like that. I\u0027m not sure if this is true for CGs. Is it? Or maybe it will be in the future?","commit_id":"20cbe06d33f5de9cfb05452a75c91f36f843e756"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"83fa76633579f609083333e911c8e0ae85ccbd92","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    __table_args__ \u003d (schema.UniqueConstraint("},{"line_number":125,"context_line":"        \"volume_type_id\", \"consistencygroup_id\", \"deleted\","},{"line_number":126,"context_line":"        name\u003d\"uniq_consistencygroup_volume_type_mapping0volume_type_id0\""},{"line_number":127,"context_line":"             \"consistencygroup_id0deleted\"),"},{"line_number":128,"context_line":"    )"},{"line_number":129,"context_line":"    id \u003d Column(String(36), primary_key\u003dTrue)"},{"line_number":130,"context_line":"    volume_type_id \u003d Column(String(36),"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba8a016a_dc24c361","line":127,"in_reply_to":"ba8a016a_cbd71fbe","updated":"2015-11-20 16:45:40.000000000","message":"That is not true for CGs. It won\u0027t happen in the near future either, as any change in volume types in a CG has to go through the scheduler.  It is not as easy as add/remove association in the volume type project case.","commit_id":"20cbe06d33f5de9cfb05452a75c91f36f843e756"}],"releasenotes/notes/8ec6db08544c1bb3-migrate-cgs-volume-types-relationship.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  This is the first release Cinder is trying to achieve rolling upgrades. Therefore we have some additional steps to follow when upgrading. Some of these are related to possibility of applying DB schema migrations to live Cinder deployment."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Mitaka DB migrations can be applied to a live Cinder deployment."},{"line_number":6,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3a7e1126_c3bd46b8","line":3,"updated":"2015-12-18 21:30:56.000000000","message":"This line is too long.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"3d285fc36ef206dc4d0e40c825b0ebed57bd8153","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"  This is the first release Cinder is trying to achieve rolling upgrades. Therefore we have some additional steps to follow when upgrading. Some of these are related to possibility of applying DB schema migrations to live Cinder deployment."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Mitaka DB migrations can be applied to a live Cinder deployment."},{"line_number":6,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"fa69d971_e9d1b5fc","line":3,"in_reply_to":"3a7e1126_c3bd46b8","updated":"2015-12-30 16:13:37.000000000","message":"I wasn\u0027t sure how to wrap lines in YAML. Now I see Nova is simply wrapping them, so I\u0027ll do the same.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"7784718c33f4c2f65335a177ded3a3cf11f2656e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Mitaka DB migrations can be applied to a live Cinder deployment."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - Before upgrading from Mitaka to N operator needs to make sure that all the consistency group data is migrated to the new DB model. To achieve that he needs to perform `cinder-manage db migrate_consistencygroup_data` until there are no records to be updated. To limit DB performance impact migration can be performed in chunks limited by `--max_number` option. If your cloud deployment doesn\u0027t support consistency groups feature you can safely skip this step."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"3a7e1126_63aed282","line":7,"updated":"2015-12-18 21:30:56.000000000","message":"Same here.","commit_id":"ab8499979d5c80a151c39f4728110ca2f623897f"}]}
