{"action":"created","comment":{"url":"https://api.github.com/repos/mozilla/web-ext/pulls/comments/75392423","id":75392423,"diff_hunk":"@@ -57,113 +57,115 @@ export default function sign(\n   }: SignOptions = {}\n ): Promise<SignResult> {\n   return withTempDir(\n-    (tmpDir) => {\n-      return prepareArtifactsDir(artifactsDir)\n-        .then(() => {\n-          if (preValidatedManifest) {\n-            return preValidatedManifest;\n-          } else {\n-            return getValidatedManifest(sourceDir);\n-          }\n-        })\n-        .then((manifestData) => {\n-          return Promise.all([\n-            build({sourceDir, artifactsDir: tmpDir.path()}, {manifestData}),\n-            getIdFromSourceDir(sourceDir),\n-          ])\n-          .then(([buildResult, idFromSourceDir]) => {\n-            return {buildResult, manifestData, idFromSourceDir};\n-          });\n-        })\n-        .then(({buildResult, manifestData, idFromSourceDir}) => {\n-          const manifestId = getManifestId(manifestData);\n-          if (id && manifestId) {\n-            throw new WebExtError(\n-              `Cannot set custom ID ${id} because manifest.json ` +\n-              `declares ID ${manifestId}`);\n-          }\n-          if (manifestId) {\n-            id = manifestId;\n-          }\n-          if (!id && idFromSourceDir) {\n-            log.info(\n-              'Using previously auto-generated extension ID: ' +\n-              `${idFromSourceDir}`);\n-            id = idFromSourceDir;\n-          }\n-          if (!id) {\n-            log.warn('No extension ID specified (it will be auto-generated)');\n-          }\n-          return signAddon({\n-            apiKey,\n-            apiSecret,\n-            apiUrlPrefix,\n-            timeout,\n-            verbose,\n-            id,\n-            xpiPath: buildResult.extensionPath,\n-            version: manifestData.version,\n-            downloadDir: artifactsDir,\n-          });\n-        })\n-        .then((signingResult) => {\n-          if (signingResult.id) {\n-            return saveIdToSourceDir(sourceDir, signingResult.id)\n-              .then(() => signingResult);\n-          } else {\n-            return signingResult;\n-          }\n-        })\n-        .then((signingResult) => {\n-          // All information about the downloaded files would have\n-          // already been logged by signAddon().\n-          if (signingResult.success) {\n-            log.info(`Extension ID: ${signingResult.id}`);\n-            log.info('SUCCESS');\n-          } else {\n-            log.info('FAIL');\n-          }\n-          return signingResult;\n-        });\n+    async function (tmpDir) {\n+      await prepareArtifactsDir(artifactsDir);\n+\n+      let manifestData;\n+\n+      if (preValidatedManifest) {\n+        manifestData = preValidatedManifest;\n+      } else {\n+        manifestData = await getValidatedManifest(sourceDir);\n+      }\n+\n+      let [buildResult, idFromSourceDir] = await Promise.all([\n+        build({sourceDir, artifactsDir: tmpDir.path()}, {manifestData}),\n+        getIdFromSourceDir(sourceDir),\n+      ]);\n+\n+      const manifestId = getManifestId(manifestData);\n+\n+      if (id && manifestId) {\n+        throw new WebExtError(\n+          `Cannot set custom ID ${id} because manifest.json ` +\n+          `declares ID ${manifestId}`);\n+      }\n+\n+      if (manifestId) {\n+        id = manifestId;\n+      }\n+\n+      if (!id && idFromSourceDir) {\n+        log.info(\n+          'Using previously auto-generated extension ID: ' +\n+          `${idFromSourceDir}`);\n+        id = idFromSourceDir;\n+      }\n+\n+      if (!id) {\n+        log.warn('No extension ID specified (it will be auto-generated)');\n+      }\n+\n+      let signingResult = await signAddon({\n+        apiKey,\n+        apiSecret,\n+        apiUrlPrefix,\n+        timeout,\n+        verbose,\n+        id,\n+        xpiPath: buildResult.extensionPath,\n+        version: manifestData.version,\n+        downloadDir: artifactsDir,\n+      });\n+\n+      if (signingResult.id) {\n+        await saveIdToSourceDir(sourceDir, signingResult.id);\n+      }\n+\n+      // All information about the downloaded files would have\n+      // already been logged by signAddon().\n+      if (signingResult.success) {\n+        log.info(`Extension ID: ${signingResult.id}`);\n+        log.info('SUCCESS');\n+      } else {\n+        log.info('FAIL');\n+      }\n+\n+      return signingResult;\n     }\n   );\n }\n \n \n-export function getIdFromSourceDir(sourceDir: string): Promise<string> {\n+export async function getIdFromSourceDir(\n+  sourceDir: string\n+): Promise<string|void> {\n   const filePath = path.join(sourceDir, extensionIdFile);\n-  return fs.readFile(filePath)\n-    .then((content) => {\n-      let lines = content.toString().split('\\n');\n-      lines = lines.filter((line) => {\n-        line = line.trim();\n-        if (line && !line.startsWith('#')) {\n-          return line;\n-        }\n-      });\n-      let id = lines[0];\n-      log.debug(`Found extension ID ${id} in ${filePath}`);\n-      if (!id) {\n-        throw new WebExtError(`No ID found in extension ID file ${filePath}`);\n+\n+  try {\n+    const content = await fs.readFile(filePath);","path":"src/cmd/sign.js","position":180,"original_position":180,"commit_id":"406aadc95608ff01af3469968da9f06e127af21c","original_commit_id":"406aadc95608ff01af3469968da9f06e127af21c","user":{"login":"kumar303","id":55398,"avatar_url":"https://avatars.githubusercontent.com/u/55398?v=3","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false},"body":"I feel like only this block should be wrapped in the try/catch to check for missing files:\r\n````javascript\r\ntry {\r\n  const content = await fs.readFile(filePath);\r\n} catch(error) {\r\n  if (isErrorWithCode('ENOENT', error)) {\r\n    log.debug(`No ID file found at: ${filePath}`);\r\n    return;\r\n  } else {\r\n    throw error;\r\n  }\r\n}\r\n````\r\nWhat do you think? I suspect that the old code was just wrong.","created_at":"2016-08-18T21:27:04Z","updated_at":"2016-08-18T21:27:04Z","html_url":"https://github.com/mozilla/web-ext/pull/411#discussion_r75392423","pull_request_url":"https://api.github.com/repos/mozilla/web-ext/pulls/411","_links":{"self":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/comments/75392423"},"html":{"href":"https://github.com/mozilla/web-ext/pull/411#discussion_r75392423"},"pull_request":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/411"}}},"pull_request":{"url":"https://api.github.com/repos/mozilla/web-ext/pulls/411","id":80088700,"html_url":"https://github.com/mozilla/web-ext/pull/411","diff_url":"https://github.com/mozilla/web-ext/pull/411.diff","patch_url":"https://github.com/mozilla/web-ext/pull/411.patch","issue_url":"https://api.github.com/repos/mozilla/web-ext/issues/411","number":411,"state":"open","locked":false,"title":"refactor: use async/await and add more explicit flow types declarations ","user":{"login":"rpl","id":11484,"avatar_url":"https://avatars.githubusercontent.com/u/11484?v=3","gravatar_id":"","url":"https://api.github.com/users/rpl","html_url":"https://github.com/rpl","followers_url":"https://api.github.com/users/rpl/followers","following_url":"https://api.github.com/users/rpl/following{/other_user}","gists_url":"https://api.github.com/users/rpl/gists{/gist_id}","starred_url":"https://api.github.com/users/rpl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rpl/subscriptions","organizations_url":"https://api.github.com/users/rpl/orgs","repos_url":"https://api.github.com/users/rpl/repos","events_url":"https://api.github.com/users/rpl/events{/privacy}","received_events_url":"https://api.github.com/users/rpl/received_events","type":"User","site_admin":false},"body":"The goal of this PR is discussing the following proposals:\r\n\r\n- introducing `async / await` syntax to make some of the asynchronous functions nicer to read\r\n- introducing more explicit flow types declarations to extend the kind of statical analysis that flow is able to\r\n  make on the sources \r\n\r\nThe first patch contains a set of experimental changes related to the usage of the `async / await` syntax to make long chains of promises more readable, by configuring babel to transpile them into code that can run across the various supported nodejs versions.\r\nThis patch ports to the `async / await` syntax only functions where it makes the code nicer and easier to read, and it doesn't port to the new syntax any of the test cases (mostly because it is better to keep the tests unmodified during such a change).   \r\n\r\nThe second patch introduces more explicit flow types to be able to give to flow the knowledge needed to check the code in much more detail, e.g. by declaring the types of the objects passed as params, signature of the callbacks etc.\r\nThe second patch can be augmented with much more explicit flow types definitions, but I wanted to give an initial taste of what it means in terms of the introduced changes before going further in this path. \r\n\r\nAs a side note, [`async/await` has been recently moved into Stage 4](https://github.com/tc39/proposals/commit/e8c03544751b071b973064ef7d437a34ac6752cd), and so it seems that it will be officially part of the 2017 version of the standard. ","created_at":"2016-08-04T14:31:38Z","updated_at":"2016-08-18T21:27:04Z","closed_at":null,"merged_at":null,"merge_commit_sha":"92f0ea06663708a9bc264adb9dd5272e6ee0b4a1","assignee":{"login":"kumar303","id":55398,"avatar_url":"https://avatars.githubusercontent.com/u/55398?v=3","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false},"assignees":[{"login":"kumar303","id":55398,"avatar_url":"https://avatars.githubusercontent.com/u/55398?v=3","gravatar_id":"","url":"https://api.github.com/users/kumar303","html_url":"https://github.com/kumar303","followers_url":"https://api.github.com/users/kumar303/followers","following_url":"https://api.github.com/users/kumar303/following{/other_user}","gists_url":"https://api.github.com/users/kumar303/gists{/gist_id}","starred_url":"https://api.github.com/users/kumar303/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kumar303/subscriptions","organizations_url":"https://api.github.com/users/kumar303/orgs","repos_url":"https://api.github.com/users/kumar303/repos","events_url":"https://api.github.com/users/kumar303/events{/privacy}","received_events_url":"https://api.github.com/users/kumar303/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/mozilla/web-ext/pulls/411/commits","review_comments_url":"https://api.github.com/repos/mozilla/web-ext/pulls/411/comments","review_comment_url":"https://api.github.com/repos/mozilla/web-ext/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mozilla/web-ext/issues/411/comments","statuses_url":"https://api.github.com/repos/mozilla/web-ext/statuses/406aadc95608ff01af3469968da9f06e127af21c","head":{"label":"rpl:refactor/async-await","ref":"refactor/async-await","sha":"406aadc95608ff01af3469968da9f06e127af21c","user":{"login":"rpl","id":11484,"avatar_url":"https://avatars.githubusercontent.com/u/11484?v=3","gravatar_id":"","url":"https://api.github.com/users/rpl","html_url":"https://github.com/rpl","followers_url":"https://api.github.com/users/rpl/followers","following_url":"https://api.github.com/users/rpl/following{/other_user}","gists_url":"https://api.github.com/users/rpl/gists{/gist_id}","starred_url":"https://api.github.com/users/rpl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rpl/subscriptions","organizations_url":"https://api.github.com/users/rpl/orgs","repos_url":"https://api.github.com/users/rpl/repos","events_url":"https://api.github.com/users/rpl/events{/privacy}","received_events_url":"https://api.github.com/users/rpl/received_events","type":"User","site_admin":false},"repo":{"id":52906404,"name":"web-ext","full_name":"rpl/web-ext","owner":{"login":"rpl","id":11484,"avatar_url":"https://avatars.githubusercontent.com/u/11484?v=3","gravatar_id":"","url":"https://api.github.com/users/rpl","html_url":"https://github.com/rpl","followers_url":"https://api.github.com/users/rpl/followers","following_url":"https://api.github.com/users/rpl/following{/other_user}","gists_url":"https://api.github.com/users/rpl/gists{/gist_id}","starred_url":"https://api.github.com/users/rpl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rpl/subscriptions","organizations_url":"https://api.github.com/users/rpl/orgs","repos_url":"https://api.github.com/users/rpl/repos","events_url":"https://api.github.com/users/rpl/events{/privacy}","received_events_url":"https://api.github.com/users/rpl/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rpl/web-ext","description":"A command line tool to help build, run, and test web extensions","fork":true,"url":"https://api.github.com/repos/rpl/web-ext","forks_url":"https://api.github.com/repos/rpl/web-ext/forks","keys_url":"https://api.github.com/repos/rpl/web-ext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rpl/web-ext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rpl/web-ext/teams","hooks_url":"https://api.github.com/repos/rpl/web-ext/hooks","issue_events_url":"https://api.github.com/repos/rpl/web-ext/issues/events{/number}","events_url":"https://api.github.com/repos/rpl/web-ext/events","assignees_url":"https://api.github.com/repos/rpl/web-ext/assignees{/user}","branches_url":"https://api.github.com/repos/rpl/web-ext/branches{/branch}","tags_url":"https://api.github.com/repos/rpl/web-ext/tags","blobs_url":"https://api.github.com/repos/rpl/web-ext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rpl/web-ext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rpl/web-ext/git/refs{/sha}","trees_url":"https://api.github.com/repos/rpl/web-ext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rpl/web-ext/statuses/{sha}","languages_url":"https://api.github.com/repos/rpl/web-ext/languages","stargazers_url":"https://api.github.com/repos/rpl/web-ext/stargazers","contributors_url":"https://api.github.com/repos/rpl/web-ext/contributors","subscribers_url":"https://api.github.com/repos/rpl/web-ext/subscribers","subscription_url":"https://api.github.com/repos/rpl/web-ext/subscription","commits_url":"https://api.github.com/repos/rpl/web-ext/commits{/sha}","git_commits_url":"https://api.github.com/repos/rpl/web-ext/git/commits{/sha}","comments_url":"https://api.github.com/repos/rpl/web-ext/comments{/number}","issue_comment_url":"https://api.github.com/repos/rpl/web-ext/issues/comments{/number}","contents_url":"https://api.github.com/repos/rpl/web-ext/contents/{+path}","compare_url":"https://api.github.com/repos/rpl/web-ext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rpl/web-ext/merges","archive_url":"https://api.github.com/repos/rpl/web-ext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rpl/web-ext/downloads","issues_url":"https://api.github.com/repos/rpl/web-ext/issues{/number}","pulls_url":"https://api.github.com/repos/rpl/web-ext/pulls{/number}","milestones_url":"https://api.github.com/repos/rpl/web-ext/milestones{/number}","notifications_url":"https://api.github.com/repos/rpl/web-ext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rpl/web-ext/labels{/name}","releases_url":"https://api.github.com/repos/rpl/web-ext/releases{/id}","deployments_url":"https://api.github.com/repos/rpl/web-ext/deployments","created_at":"2016-03-01T20:10:06Z","updated_at":"2016-03-01T20:10:07Z","pushed_at":"2016-08-18T18:59:12Z","git_url":"git://github.com/rpl/web-ext.git","ssh_url":"git@github.com:rpl/web-ext.git","clone_url":"https://github.com/rpl/web-ext.git","svn_url":"https://github.com/rpl/web-ext","homepage":null,"size":465,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","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":"mozilla:master","ref":"master","sha":"6654239e9e8ae9c3f6b085f878892b2d729e4b25","user":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"repo":{"id":50859563,"name":"web-ext","full_name":"mozilla/web-ext","owner":{"login":"mozilla","id":131524,"avatar_url":"https://avatars.githubusercontent.com/u/131524?v=3","gravatar_id":"","url":"https://api.github.com/users/mozilla","html_url":"https://github.com/mozilla","followers_url":"https://api.github.com/users/mozilla/followers","following_url":"https://api.github.com/users/mozilla/following{/other_user}","gists_url":"https://api.github.com/users/mozilla/gists{/gist_id}","starred_url":"https://api.github.com/users/mozilla/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mozilla/subscriptions","organizations_url":"https://api.github.com/users/mozilla/orgs","repos_url":"https://api.github.com/users/mozilla/repos","events_url":"https://api.github.com/users/mozilla/events{/privacy}","received_events_url":"https://api.github.com/users/mozilla/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mozilla/web-ext","description":"A command line tool to help build, run, and test web extensions","fork":false,"url":"https://api.github.com/repos/mozilla/web-ext","forks_url":"https://api.github.com/repos/mozilla/web-ext/forks","keys_url":"https://api.github.com/repos/mozilla/web-ext/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mozilla/web-ext/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mozilla/web-ext/teams","hooks_url":"https://api.github.com/repos/mozilla/web-ext/hooks","issue_events_url":"https://api.github.com/repos/mozilla/web-ext/issues/events{/number}","events_url":"https://api.github.com/repos/mozilla/web-ext/events","assignees_url":"https://api.github.com/repos/mozilla/web-ext/assignees{/user}","branches_url":"https://api.github.com/repos/mozilla/web-ext/branches{/branch}","tags_url":"https://api.github.com/repos/mozilla/web-ext/tags","blobs_url":"https://api.github.com/repos/mozilla/web-ext/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mozilla/web-ext/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mozilla/web-ext/git/refs{/sha}","trees_url":"https://api.github.com/repos/mozilla/web-ext/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mozilla/web-ext/statuses/{sha}","languages_url":"https://api.github.com/repos/mozilla/web-ext/languages","stargazers_url":"https://api.github.com/repos/mozilla/web-ext/stargazers","contributors_url":"https://api.github.com/repos/mozilla/web-ext/contributors","subscribers_url":"https://api.github.com/repos/mozilla/web-ext/subscribers","subscription_url":"https://api.github.com/repos/mozilla/web-ext/subscription","commits_url":"https://api.github.com/repos/mozilla/web-ext/commits{/sha}","git_commits_url":"https://api.github.com/repos/mozilla/web-ext/git/commits{/sha}","comments_url":"https://api.github.com/repos/mozilla/web-ext/comments{/number}","issue_comment_url":"https://api.github.com/repos/mozilla/web-ext/issues/comments{/number}","contents_url":"https://api.github.com/repos/mozilla/web-ext/contents/{+path}","compare_url":"https://api.github.com/repos/mozilla/web-ext/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mozilla/web-ext/merges","archive_url":"https://api.github.com/repos/mozilla/web-ext/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mozilla/web-ext/downloads","issues_url":"https://api.github.com/repos/mozilla/web-ext/issues{/number}","pulls_url":"https://api.github.com/repos/mozilla/web-ext/pulls{/number}","milestones_url":"https://api.github.com/repos/mozilla/web-ext/milestones{/number}","notifications_url":"https://api.github.com/repos/mozilla/web-ext/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mozilla/web-ext/labels{/name}","releases_url":"https://api.github.com/repos/mozilla/web-ext/releases{/id}","deployments_url":"https://api.github.com/repos/mozilla/web-ext/deployments","created_at":"2016-02-01T18:08:32Z","updated_at":"2016-08-15T01:13:29Z","pushed_at":"2016-08-18T20:40:57Z","git_url":"git://github.com/mozilla/web-ext.git","ssh_url":"git@github.com:mozilla/web-ext.git","clone_url":"https://github.com/mozilla/web-ext.git","svn_url":"https://github.com/mozilla/web-ext","homepage":null,"size":499,"stargazers_count":48,"watchers_count":48,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":23,"mirror_url":null,"open_issues_count":50,"forks":23,"open_issues":50,"watchers":48,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/411"},"html":{"href":"https://github.com/mozilla/web-ext/pull/411"},"issue":{"href":"https://api.github.com/repos/mozilla/web-ext/issues/411"},"comments":{"href":"https://api.github.com/repos/mozilla/web-ext/issues/411/comments"},"review_comments":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/411/comments"},"review_comment":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mozilla/web-ext/pulls/411/commits"},"statuses":{"href":"https://api.github.com/repos/mozilla/web-ext/statuses/406aadc95608ff01af3469968da9f06e127af21c"}}}}
{"actor":{"display_login":"kumar303"}}