{"action":"created","comment":{"url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/comments/90125655","pull_request_review_id":8960995,"id":90125655,"diff_hunk":"@@ -0,0 +1,151 @@\n+#!/usr/bin/env python\n+\n+#Script to check whether the output files generated by HCP pipeline scripts are the same or not. It will check for the match between two files with respect the filename, size, content, modification time, distance etc.\n+#Maintainters : Big Data Lab Team, Concordia University.\n+#email : tristan.glatard@concordia.ca, laletscaria@yahoo.co.in\n+\n+import os\n+import sys\n+import subprocess\n+import argparse\n+import hashlib\n+from collections import defaultdict,OrderedDict\n+#study_folder_details_dict_list is a list for storing ordered dictionaries containing the details regarding the files of  individual subjects.\n+study_folder_details_dict_list=[]\n+#Method list_files_and_dirs is used for listing files and directories present in the input directory.\n+#Input Argument : Directory Path\n+def list_files_and_dirs(dirPath):\n+        listFileAndDirs=[]\n+\trootDir=dirPath\n+        for dir_, _, files in os.walk(rootDir):\n+           listFileAndDirs.append(os.path.relpath(dir_, rootDir))\n+           for fileName in files:\n+              relDir=os.path.relpath(dir_, rootDir)\n+              relFile=os.path.join(relDir, fileName)\n+              listFileAndDirs.append(relFile)\n+\t#Sort the files and subdirectories according to the modification time.\n+        listFileAndDirs.sort(key=lambda x: os.path.getmtime(os.path.join(rootDir,x)))\n+\treturn listFileAndDirs\n+\n+#Method populate_file_dir_dict is an ordered  python dictionary to save the status details of\n+#each file and directory present in the listFileAndDirs list\n+#Input parameter : List contianing the details of the path of each file and directory.\n+def populate_file_dir_dict(listFileAndDirs,dirPath):\n+        temp_dict=OrderedDict(defaultdict(list))\n+        for relPath in listFileAndDirs:\n+\t   md5_digest=generate_checksum(dirPath,relPath)\n+           dirDetails=os.stat(os.path.join(dirPath,relPath))\n+\t   temp_dict.setdefault(relPath, []).append(md5_digest)\n+\t   temp_dict.setdefault(relPath, []).append(dirDetails)\n+        return temp_dict\n+\n+#Method populate_study_folder_dict will store the details regarding each subject folder in an ordered python dictionary. Key : Folder or file name , Value : dictionary with details of the key value\n+def populate_study_folder_dict(file_path):\n+\tlist_of_dictionaries_based_on_conditions=[]\n+\t#study_folders_list : List contains path to the folders contianing the study folders based on each condition and os\n+\tstudy_folders_list=read_contents_from_file(file_path)\n+\tfor folder in study_folders_list:\n+           temp_study_folder_dict=OrderedDict()\n+\t   #fileNamesAndDirArray is used to store the relative path of the directories and files present in the directory given as input.\n+           fileNamesAndDirArray=[]\n+           #file_dir_dict is an ordered  python dictionary used to store the details of individual files.Key : Relative file path, Value : Status info\n+           file_dir_dict=OrderedDict()\n+\t   fileNamesAndDirArray=list_files_and_dirs(folder)\n+\t   file_dir_dict=populate_file_dir_dict(fileNamesAndDirArray,folder)\n+\t   temp_study_folder_dict[folder]=file_dir_dict\n+\t   list_of_dictionaries_based_on_conditions.append(temp_study_folder_dict)\n+\treturn list_of_dictionaries_based_on_conditions\n+\n+#read_contents_from_file method is used to read the directory path containing the subject folders.\n+def read_contents_from_file(fileDir): \n+# Open the file for reading.\n+\twith open(fileDir, 'r') as infile:\n+\t   data=infile.read()  # Read the contents of the file into memory.\n+\t   #Return a list of the lines, breaking at line boundaries.\n+\t   directory_list=data.splitlines()\n+\treturn directory_list\n+\n+#Method generate_checksum is used for generating checksum of individual files.\n+def generate_checksum(rootdir, filename):\n+        hasher=hashlib.md5()\n+        if os.path.isfile(os.path.join(rootdir, filename)):\n+            md5_sum=file_hash(os.path.join(rootdir, filename),hasher)\n+\telif os.path.isdir(os.path.join(rootdir, filename)):\n+            md5_sum=directory_hash(hasher,os.path.join(rootdir, filename))\n+\treturn md5_sum\n+\n+#Method file_hash is used for generating md5 checksum of a file Input: file name and hasher\n+def file_hash(fileName,hasher):\n+    fileContent=open(fileName)\n+    while True:\n+        readBuffer=fileContent.read(2**20)\n+        if len(readBuffer)==0: \n+\t   break\n+        hasher.update(readBuffer)\n+    fileContent.close()\n+    return hasher.hexdigest()\n+\n+#Method directory_hash recursively traverses in case a directory is found, sorts the contents and creates checksum on the entire read content.\n+def directory_hash(hasher, dirPath):\n+    if os.path.isdir(dirPath):\n+        for entry in sorted(os.listdir(dirPath)):\n+            directory_hash(hasher, os.path.join(dirPath, entry))\n+    elif os.path.isfile(dirPath):\n+        hasher.update(file_hash(dirPath,hasher))\n+    else: pass\n+    return hasher.hexdigest()\n+\n+#Method generate_common_files_list will create a list containing the common elements from the different dictionaries corresponding to the conditions in which it was created\n+def generate_common_files_list(study_folder_details_dict_list,fileWithDirectoryDetails):\n+\tcommon_files_list=[]\n+\tkeys_list=read_contents_from_file(fileWithDirectoryDetails)\n+\tindex=0\n+\tcommon_set=set()\n+\treference_dict=study_folder_details_dict_list[index]\n+\treference_set=set(reference_dict[keys_list[0]].keys())\n+\tfor item in study_folder_details_dict_list:\n+              dictionary=item[keys_list[index]]\n+\t      keys_from_each_dictionary=set(dictionary.keys())\n+\t      if not common_set:\n+\t         common_set=reference_set & keys_from_each_dictionary\n+\t      else:\n+\t\t common_set=common_set & keys_from_each_dictionary\n+\t      index+=1\n+\t#dict(set.intersection(*(set(d.iteritems()) for d in dicts)))\n+\tcommon_files_list=list(common_set)\n+    \treturn common_files_list\n+\n+#Method generate_missing_files will create a list containing the files that are not common to all the subject folders. It takes study_folder_details_dict_list,fileWithDirectoryDetails and common_files_list as the input parameters.\n+def generate_missing_files_list(study_folder_details_dict_list,fileWithDirectoryDetails,common_files_list):\n+\tmissing_files_list=[]\n+\tkeys_list=read_contents_from_file(fileWithDirectoryDetails)\n+\tindex=0;\n+\tkeys_from_all_files=set()\n+\tfor item in study_folder_details_dict_list:\n+\t     dictionary=item[keys_list[index]]\n+\t     keys_from_individual_files=set(dictionary.keys())\n+\t     keys_from_all_files=keys_from_all_files | keys_from_individual_files\n+\t     index+=1\n+\tmissing_files_list=list(keys_from_all_files - set(common_files_list))\n+\treturn missing_files_list\n+\t     \n+\n+def main():\n+        parser=argparse.ArgumentParser()\n+        parser.add_argument('file_in', help='Input the text file containing the path to the subject folders')","path":"verifyFiles.py","position":135,"original_position":135,"commit_id":"926082aa9d4d9e8314184a9a8a220686e8d114e1","original_commit_id":"926082aa9d4d9e8314184a9a8a220686e8d114e1","user":{"login":"glatard","id":5174953,"avatar_url":"https://avatars.githubusercontent.com/u/5174953?v=3","gravatar_id":"","url":"https://api.github.com/users/glatard","html_url":"https://github.com/glatard","followers_url":"https://api.github.com/users/glatard/followers","following_url":"https://api.github.com/users/glatard/following{/other_user}","gists_url":"https://api.github.com/users/glatard/gists{/gist_id}","starred_url":"https://api.github.com/users/glatard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glatard/subscriptions","organizations_url":"https://api.github.com/users/glatard/orgs","repos_url":"https://api.github.com/users/glatard/repos","events_url":"https://api.github.com/users/glatard/events{/privacy}","received_events_url":"https://api.github.com/users/glatard/received_events","type":"User","site_admin":false},"body":"Explain what the content of this file should be. Explain what is a subject folder. I guess you should also refer to different conditions here.","created_at":"2016-11-29T22:07:46Z","updated_at":"2016-11-29T22:10:51Z","html_url":"https://github.com/big-data-lab-team/repro-tools/pull/1#discussion_r90125655","pull_request_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/comments/90125655"},"html":{"href":"https://github.com/big-data-lab-team/repro-tools/pull/1#discussion_r90125655"},"pull_request":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1","id":94032457,"html_url":"https://github.com/big-data-lab-team/repro-tools/pull/1","diff_url":"https://github.com/big-data-lab-team/repro-tools/pull/1.diff","patch_url":"https://github.com/big-data-lab-team/repro-tools/pull/1.patch","issue_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/1","number":1,"state":"open","locked":false,"title":"Initial pull request ","user":{"login":"lalet","id":4597920,"avatar_url":"https://avatars.githubusercontent.com/u/4597920?v=3","gravatar_id":"","url":"https://api.github.com/users/lalet","html_url":"https://github.com/lalet","followers_url":"https://api.github.com/users/lalet/followers","following_url":"https://api.github.com/users/lalet/following{/other_user}","gists_url":"https://api.github.com/users/lalet/gists{/gist_id}","starred_url":"https://api.github.com/users/lalet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lalet/subscriptions","organizations_url":"https://api.github.com/users/lalet/orgs","repos_url":"https://api.github.com/users/lalet/repos","events_url":"https://api.github.com/users/lalet/events{/privacy}","received_events_url":"https://api.github.com/users/lalet/received_events","type":"User","site_admin":false},"body":"Initial logic of directory traversal, sorting based on modification time and storing of file details in each condition is handled. ","created_at":"2016-11-16T19:24:56Z","updated_at":"2016-11-29T22:10:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5a6e143e94e6f9adcf9686deb13302dfb37a162f","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1/commits","review_comments_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1/comments","review_comment_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/comments{/number}","comments_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/1/comments","statuses_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/statuses/926082aa9d4d9e8314184a9a8a220686e8d114e1","head":{"label":"lalet:master","ref":"master","sha":"926082aa9d4d9e8314184a9a8a220686e8d114e1","user":{"login":"lalet","id":4597920,"avatar_url":"https://avatars.githubusercontent.com/u/4597920?v=3","gravatar_id":"","url":"https://api.github.com/users/lalet","html_url":"https://github.com/lalet","followers_url":"https://api.github.com/users/lalet/followers","following_url":"https://api.github.com/users/lalet/following{/other_user}","gists_url":"https://api.github.com/users/lalet/gists{/gist_id}","starred_url":"https://api.github.com/users/lalet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lalet/subscriptions","organizations_url":"https://api.github.com/users/lalet/orgs","repos_url":"https://api.github.com/users/lalet/repos","events_url":"https://api.github.com/users/lalet/events{/privacy}","received_events_url":"https://api.github.com/users/lalet/received_events","type":"User","site_admin":false},"repo":{"id":69029382,"name":"repro-tools","full_name":"lalet/repro-tools","owner":{"login":"lalet","id":4597920,"avatar_url":"https://avatars.githubusercontent.com/u/4597920?v=3","gravatar_id":"","url":"https://api.github.com/users/lalet","html_url":"https://github.com/lalet","followers_url":"https://api.github.com/users/lalet/followers","following_url":"https://api.github.com/users/lalet/following{/other_user}","gists_url":"https://api.github.com/users/lalet/gists{/gist_id}","starred_url":"https://api.github.com/users/lalet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lalet/subscriptions","organizations_url":"https://api.github.com/users/lalet/orgs","repos_url":"https://api.github.com/users/lalet/repos","events_url":"https://api.github.com/users/lalet/events{/privacy}","received_events_url":"https://api.github.com/users/lalet/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lalet/repro-tools","description":"A set of tools to evaluate the reproducibility of computations","fork":true,"url":"https://api.github.com/repos/lalet/repro-tools","forks_url":"https://api.github.com/repos/lalet/repro-tools/forks","keys_url":"https://api.github.com/repos/lalet/repro-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lalet/repro-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lalet/repro-tools/teams","hooks_url":"https://api.github.com/repos/lalet/repro-tools/hooks","issue_events_url":"https://api.github.com/repos/lalet/repro-tools/issues/events{/number}","events_url":"https://api.github.com/repos/lalet/repro-tools/events","assignees_url":"https://api.github.com/repos/lalet/repro-tools/assignees{/user}","branches_url":"https://api.github.com/repos/lalet/repro-tools/branches{/branch}","tags_url":"https://api.github.com/repos/lalet/repro-tools/tags","blobs_url":"https://api.github.com/repos/lalet/repro-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lalet/repro-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lalet/repro-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/lalet/repro-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lalet/repro-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/lalet/repro-tools/languages","stargazers_url":"https://api.github.com/repos/lalet/repro-tools/stargazers","contributors_url":"https://api.github.com/repos/lalet/repro-tools/contributors","subscribers_url":"https://api.github.com/repos/lalet/repro-tools/subscribers","subscription_url":"https://api.github.com/repos/lalet/repro-tools/subscription","commits_url":"https://api.github.com/repos/lalet/repro-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/lalet/repro-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/lalet/repro-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/lalet/repro-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/lalet/repro-tools/contents/{+path}","compare_url":"https://api.github.com/repos/lalet/repro-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lalet/repro-tools/merges","archive_url":"https://api.github.com/repos/lalet/repro-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lalet/repro-tools/downloads","issues_url":"https://api.github.com/repos/lalet/repro-tools/issues{/number}","pulls_url":"https://api.github.com/repos/lalet/repro-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/lalet/repro-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/lalet/repro-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lalet/repro-tools/labels{/name}","releases_url":"https://api.github.com/repos/lalet/repro-tools/releases{/id}","deployments_url":"https://api.github.com/repos/lalet/repro-tools/deployments","created_at":"2016-09-23T13:53:11Z","updated_at":"2016-11-07T20:28:24Z","pushed_at":"2016-11-24T21:05:34Z","git_url":"git://github.com/lalet/repro-tools.git","ssh_url":"git@github.com:lalet/repro-tools.git","clone_url":"https://github.com/lalet/repro-tools.git","svn_url":"https://github.com/lalet/repro-tools","homepage":null,"size":41,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"big-data-lab-team:master","ref":"master","sha":"1d189b7e16b98c0fc09bc8b00e99ca4716c80f06","user":{"login":"big-data-lab-team","id":22078250,"avatar_url":"https://avatars.githubusercontent.com/u/22078250?v=3","gravatar_id":"","url":"https://api.github.com/users/big-data-lab-team","html_url":"https://github.com/big-data-lab-team","followers_url":"https://api.github.com/users/big-data-lab-team/followers","following_url":"https://api.github.com/users/big-data-lab-team/following{/other_user}","gists_url":"https://api.github.com/users/big-data-lab-team/gists{/gist_id}","starred_url":"https://api.github.com/users/big-data-lab-team/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/big-data-lab-team/subscriptions","organizations_url":"https://api.github.com/users/big-data-lab-team/orgs","repos_url":"https://api.github.com/users/big-data-lab-team/repos","events_url":"https://api.github.com/users/big-data-lab-team/events{/privacy}","received_events_url":"https://api.github.com/users/big-data-lab-team/received_events","type":"Organization","site_admin":false},"repo":{"id":67708633,"name":"repro-tools","full_name":"big-data-lab-team/repro-tools","owner":{"login":"big-data-lab-team","id":22078250,"avatar_url":"https://avatars.githubusercontent.com/u/22078250?v=3","gravatar_id":"","url":"https://api.github.com/users/big-data-lab-team","html_url":"https://github.com/big-data-lab-team","followers_url":"https://api.github.com/users/big-data-lab-team/followers","following_url":"https://api.github.com/users/big-data-lab-team/following{/other_user}","gists_url":"https://api.github.com/users/big-data-lab-team/gists{/gist_id}","starred_url":"https://api.github.com/users/big-data-lab-team/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/big-data-lab-team/subscriptions","organizations_url":"https://api.github.com/users/big-data-lab-team/orgs","repos_url":"https://api.github.com/users/big-data-lab-team/repos","events_url":"https://api.github.com/users/big-data-lab-team/events{/privacy}","received_events_url":"https://api.github.com/users/big-data-lab-team/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/big-data-lab-team/repro-tools","description":"A set of tools to evaluate the reproducibility of computations","fork":false,"url":"https://api.github.com/repos/big-data-lab-team/repro-tools","forks_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/forks","keys_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/keys{/key_id}","collaborators_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/teams","hooks_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/hooks","issue_events_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/events{/number}","events_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/events","assignees_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/assignees{/user}","branches_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/branches{/branch}","tags_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/tags","blobs_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/git/refs{/sha}","trees_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/git/trees{/sha}","statuses_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/statuses/{sha}","languages_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/languages","stargazers_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/stargazers","contributors_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/contributors","subscribers_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/subscribers","subscription_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/subscription","commits_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/commits{/sha}","git_commits_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/git/commits{/sha}","comments_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/comments{/number}","issue_comment_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/comments{/number}","contents_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/contents/{+path}","compare_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/compare/{base}...{head}","merges_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/merges","archive_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/downloads","issues_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues{/number}","pulls_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls{/number}","milestones_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/milestones{/number}","notifications_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/labels{/name}","releases_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/releases{/id}","deployments_url":"https://api.github.com/repos/big-data-lab-team/repro-tools/deployments","created_at":"2016-09-08T14:08:42Z","updated_at":"2016-09-23T13:27:22Z","pushed_at":"2016-11-24T21:05:34Z","git_url":"git://github.com/big-data-lab-team/repro-tools.git","ssh_url":"git@github.com:big-data-lab-team/repro-tools.git","clone_url":"https://github.com/big-data-lab-team/repro-tools.git","svn_url":"https://github.com/big-data-lab-team/repro-tools","homepage":null,"size":13,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1"},"html":{"href":"https://github.com/big-data-lab-team/repro-tools/pull/1"},"issue":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/1"},"comments":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/big-data-lab-team/repro-tools/statuses/926082aa9d4d9e8314184a9a8a220686e8d114e1"}}}}
{"actor":{"display_login":"glatard"}}