{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/comments/47315190","id":47315190,"diff_hunk":"@@ -0,0 +1,970 @@\n+// Copyright (c) Microsoft. All rights reserved.\n+// Licensed under the MIT license. See LICENSE file in the project root for full license information.\n+\n+using System.Collections.Generic;\n+using System.Collections.ObjectModel;\n+using System.Diagnostics.Contracts;\n+using System.Globalization;\n+using System.IO;\n+using System.Runtime.InteropServices;\n+using System.Security.Principal;\n+\n+namespace System.Security.Claims\n+{\n+    /// <summary>\n+    /// An Identity that is represented by a set of claims.\n+    /// </summary>\n+    [ComVisible(true)]\n+    public class ClaimsIdentity : IIdentity\n+    {\n+        private enum SerializationMask\n+        {\n+            None = 0,\n+            AuthenticationType = 1,\n+            BootstrapConext = 2,\n+            NameClaimType = 4,\n+            RoleClaimType = 8,\n+            HasClaims = 16,\n+            HasLabel = 32,\n+            Actor = 64,\n+            UserData = 128,\n+        }\n+        private byte[] _userSerializationData;\n+\n+        private ClaimsIdentity _actor;\n+        private string _authenticationType;\n+        private object _bootstrapContext;\n+        private Collection<IEnumerable<Claim>> _externalClaims = new Collection<IEnumerable<Claim>>();\n+        private string _label;\n+        private List<Claim> _instanceClaims = new List<Claim>();\n+        private string _nameClaimType = DefaultNameClaimType;\n+        private string _roleClaimType = DefaultRoleClaimType;\n+\n+        public const string DefaultIssuer = @\"LOCAL AUTHORITY\";\n+        public const string DefaultNameClaimType = ClaimTypes.Name;\n+        public const string DefaultRoleClaimType = ClaimTypes.Role;\n+\n+        // NOTE about _externalClaims.\n+        // GenericPrincpal and RolePrincipal set role claims here so that .IsInRole will be consistent with a 'role' claim found by querying the identity or principal. \n+        // _externalClaims are external to the identity and assumed to be dynamic, they not serialized or copied through Clone(). \n+        // Access through public method: ClaimProviders.\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        public ClaimsIdentity()\n+            : this((IIdentity)null, (IEnumerable<Claim>)null, (string)null, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"identity\"><see cref=\"IIdentity\"/> supplies the <see cref=\"Name\"/> and <see cref=\"AuthenticationType\"/>.</param>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        public ClaimsIdentity(IIdentity identity)\n+            : this(identity, (IEnumerable<Claim>)null, (string)null, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"claims\"><see cref=\"IEnumerable{Claim}\"/> associated with this instance.</param>\n+        /// <remarks>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        /// </remarks>\n+        public ClaimsIdentity(IEnumerable<Claim> claims)\n+            : this((IIdentity)null, claims, (string)null, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"authenticationType\">The authentication method used to establish this identity.</param>\n+        public ClaimsIdentity(string authenticationType)\n+            : this((IIdentity)null, (IEnumerable<Claim>)null, authenticationType, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"claims\"><see cref=\"IEnumerable{Claim}\"/> associated with this instance.</param>\n+        /// <param name=\"authenticationType\">The authentication method used to establish this identity.</param>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        public ClaimsIdentity(IEnumerable<Claim> claims, string authenticationType)\n+            : this((IIdentity)null, claims, authenticationType, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"identity\"><see cref=\"IIdentity\"/> supplies the <see cref=\"Name\"/> and <see cref=\"AuthenticationType\"/>.</param>\n+        /// <param name=\"claims\"><see cref=\"IEnumerable{Claim}\"/> associated with this instance.</param>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        public ClaimsIdentity(IIdentity identity, IEnumerable<Claim> claims)\n+            : this(identity, claims, (string)null, (string)null, (string)null)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"authenticationType\">The type of authentication used.</param>\n+        /// <param name=\"nameType\">The <see cref=\"Claim.Type\"/> used when obtaining the value of <see cref=\"ClaimsIdentity.Name\"/>.</param>\n+        /// <param name=\"roleType\">The <see cref=\"Claim.Type\"/> used when performing logic for <see cref=\"ClaimsPrincipal.IsInRole\"/>.</param>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        public ClaimsIdentity(string authenticationType, string nameType, string roleType)\n+            : this((IIdentity)null, (IEnumerable<Claim>)null, authenticationType, nameType, roleType)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"claims\"><see cref=\"IEnumerable{Claim}\"/> associated with this instance.</param>\n+        /// <param name=\"authenticationType\">The type of authentication used.</param>\n+        /// <param name=\"nameType\">The <see cref=\"Claim.Type\"/> used when obtaining the value of <see cref=\"ClaimsIdentity.Name\"/>.</param>\n+        /// <param name=\"roleType\">The <see cref=\"Claim.Type\"/> used when performing logic for <see cref=\"ClaimsPrincipal.IsInRole\"/>.</param>\n+        /// <remarks><seealso cref=\"ClaimsIdentity(IIdentity, IEnumerable{Claim}, string, string, string)\"/> for details on how internal values are set.</remarks>\n+        public ClaimsIdentity(IEnumerable<Claim> claims, string authenticationType, string nameType, string roleType)\n+            : this((IIdentity)null, claims, authenticationType, nameType, roleType)\n+        {\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        /// <param name=\"identity\"><see cref=\"IIdentity\"/> supplies the <see cref=\"Name\"/> and <see cref=\"AuthenticationType\"/>.</param>\n+        /// <param name=\"claims\"><see cref=\"IEnumerable{Claim}\"/> associated with this instance.</param>\n+        /// <param name=\"authenticationType\">The type of authentication used.</param>\n+        /// <param name=\"nameType\">The <see cref=\"Claim.Type\"/> used when obtaining the value of <see cref=\"ClaimsIdentity.Name\"/>.</param>\n+        /// <param name=\"roleType\">The <see cref=\"Claim.Type\"/> used when performing logic for <see cref=\"ClaimsPrincipal.IsInRole\"/>.</param>\n+        /// <remarks>If 'identity' is a <see cref=\"ClaimsIdentity\"/>, then there are potentially multiple sources for AuthenticationType, NameClaimType, RoleClaimType.\n+        /// <para>Priority is given to the parameters: authenticationType, nameClaimType, roleClaimType.</para>\n+        /// <para>All <see cref=\"Claim\"/>s are copied into this instance in a <see cref=\"List{Claim}\"/>. Each Claim is examined and if Claim.Subject != this, then Claim.Clone(this) is called before the claim is added.</para>\n+        /// <para>Any 'External' claims are ignored.</para>\n+        /// </remarks>\n+        /// <exception cref=\"InvalidOperationException\">if 'identity' is a <see cref=\"ClaimsIdentity\"/> and <see cref=\"ClaimsIdentity.Actor\"/> results in a circular refrence back to 'this'.</exception>\n+        public ClaimsIdentity(IIdentity identity, IEnumerable<Claim> claims, string authenticationType, string nameType, string roleType)\n+        {\n+            // TODO - brentsch, should we have another constructor that takes ClaimsIdentity thereby bypassing the cast below?\n+            ClaimsIdentity claimsIdentity = identity as ClaimsIdentity;\n+\n+            _authenticationType = !string.IsNullOrWhiteSpace(authenticationType) ? authenticationType : (identity != null ? identity.AuthenticationType : null);\n+            _nameClaimType = !string.IsNullOrEmpty(nameType) ? nameType : (claimsIdentity != null ? claimsIdentity._nameClaimType : DefaultNameClaimType);\n+            _roleClaimType = !string.IsNullOrEmpty(roleType) ? roleType : (claimsIdentity != null ? claimsIdentity._roleClaimType : DefaultRoleClaimType);\n+\n+            if (claimsIdentity != null)\n+            {\n+                _label = claimsIdentity._label;\n+                _bootstrapContext = claimsIdentity._bootstrapContext;\n+\n+                if (claimsIdentity.Actor != null)\n+                {\n+                    //\n+                    // Check if the Actor is circular before copying. That check is done while setting\n+                    // the Actor property and so not really needed here. But checking just for sanity sake\n+                    //\n+                    if (!IsCircular(claimsIdentity.Actor))\n+                    {\n+                        _actor = claimsIdentity.Actor;\n+                    }\n+                    else\n+                    {\n+                        throw new InvalidOperationException(SR.GetResourceString(\"InvalidOperationException_ActorGraphCircular\", \"Actor cannot be set so that circular directed graph will exist chaining the subjects together.\"));\n+                    }\n+                }\n+                SafeAddClaims(claimsIdentity._instanceClaims);\n+            }\n+            else\n+            {\n+                if (identity != null && !string.IsNullOrEmpty(identity.Name))\n+                {\n+                    SafeAddClaim(new Claim(_nameClaimType, identity.Name, ClaimValueTypes.String, DefaultIssuer, DefaultIssuer, this));\n+                }\n+            }\n+\n+            if (claims != null)\n+            {\n+                SafeAddClaims(claims);\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Initializes an instance of <see cref=\"ClaimsIdentity\"/> using a <see cref=\"BinaryReader\"/>.\n+        /// Normally the <see cref=\"BinaryReader\"/> is constructed using the bytes from <see cref=\"WriteTo(BinaryWriter)\"/> and initialized in the same way as the <see cref=\"BinaryWriter\"/>.\n+        /// </summary>\n+        /// <param name=\"reader\">a <see cref=\"BinaryReader\"/> pointing to a <see cref=\"ClaimsIdentity\"/>.</param>\n+        /// <exception cref=\"ArgumentNullException\">if 'reader' is null.</exception>\n+        public ClaimsIdentity(BinaryReader reader)\n+        {\n+            if (reader == null)\n+                throw new ArgumentNullException(\"reader\");\n+\n+            Initialize(reader);\n+        }\n+\n+        /// <summary>\n+        /// Copy constructor.\n+        /// </summary>\n+        /// <param name=\"other\"><see cref=\"ClaimsIdentity\"/> to copy.</param>\n+        /// <exception cref=\"ArgumentNullException\">if 'other' is null.</exception>\n+        protected ClaimsIdentity(ClaimsIdentity other)\n+        {\n+            if (other == null)\n+            {\n+                throw new ArgumentNullException(\"other\");\n+            }\n+\n+            if (other._actor != null)\n+            {\n+                _actor = other._actor.Clone();\n+            }\n+\n+            _authenticationType = other._authenticationType;\n+            _bootstrapContext = other._bootstrapContext;\n+            _label = other._label;\n+            _nameClaimType = other._nameClaimType;\n+            _roleClaimType = other._roleClaimType;\n+            if (other._userSerializationData != null)\n+            {\n+                _userSerializationData = other._userSerializationData.Clone() as byte[];\n+            }\n+\n+            SafeAddClaims(other._instanceClaims);\n+        }\n+\n+        /// <summary>\n+        /// Gets the authentication type that can be used to determine how this <see cref=\"ClaimsIdentity\"/> authenticated to an authority.\n+        /// </summary>\n+        public virtual string AuthenticationType\n+        {\n+            get { return _authenticationType; }\n+        }\n+\n+        /// <summary>\n+        /// Gets a value that indicates if the user has been authenticated.\n+        /// </summary>\n+        public virtual bool IsAuthenticated\n+        {\n+            get { return !string.IsNullOrEmpty(_authenticationType); }\n+        }\n+\n+        /// <summary>\n+        /// Gets or sets a <see cref=\"ClaimsIdentity\"/> that was granted delegation rights.\n+        /// </summary>\n+        /// <exception cref=\"InvalidOperationException\">if 'value' results in a circular refrence back to 'this'.</exception>\n+        public ClaimsIdentity Actor\n+        {\n+            get { return _actor; }\n+            set\n+            {\n+                if (value != null)\n+                {\n+                    if (IsCircular(value))\n+                    {\n+                        throw new InvalidOperationException(SR.GetResourceString(\"InvalidOperationException_ActorGraphCircular\", \"Actor cannot be set so that circular directed graph will exist chaining the subjects together.\"));\n+                    }\n+                }\n+                _actor = value;\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Gets or sets a context that was used to create this <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>\n+        public object BootstrapContext\n+        {\n+            get { return _bootstrapContext; }\n+\n+            [SecurityCritical]\n+            set\n+            { _bootstrapContext = value; }\n+        }\n+\n+        /// <summary>\n+        /// Gets the claims as <see cref=\"IEnumerable{Claim}\"/>, associated with this <see cref=\"ClaimsIdentity\"/>.\n+        /// </summary>       \n+        /// <remarks>May contain nulls.\n+        public virtual IEnumerable<Claim> Claims\n+        {\n+            get\n+            {\n+                for (int i = 0; i < _instanceClaims.Count; i++)\n+                {\n+                    yield return _instanceClaims[i];\n+                }\n+\n+                if (_externalClaims != null)","path":"src/System.Security.Claims/src/System/Security/Claims/ClaimsIdentity.cs","position":302,"original_position":302,"commit_id":"a19c3310f9d20b7c9ee2f5f554d99e5fa2d29cdd","original_commit_id":"f497210da9b480998e9dab7ca5d69974c3b7a0ba","user":{"login":"brentschmaltz","id":3172421,"avatar_url":"https://avatars.githubusercontent.com/u/3172421?v=3","gravatar_id":"","url":"https://api.github.com/users/brentschmaltz","html_url":"https://github.com/brentschmaltz","followers_url":"https://api.github.com/users/brentschmaltz/followers","following_url":"https://api.github.com/users/brentschmaltz/following{/other_user}","gists_url":"https://api.github.com/users/brentschmaltz/gists{/gist_id}","starred_url":"https://api.github.com/users/brentschmaltz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/brentschmaltz/subscriptions","organizations_url":"https://api.github.com/users/brentschmaltz/orgs","repos_url":"https://api.github.com/users/brentschmaltz/repos","events_url":"https://api.github.com/users/brentschmaltz/events{/privacy}","received_events_url":"https://api.github.com/users/brentschmaltz/received_events","type":"User","site_admin":false},"body":"It's used so rarely and was only put in to ensure that \"IsInRole(x) iff a matching 'role' claim can be found\". This is tied to RolePrincipal.\r\nWe should think about it this still matters and perhaps remove the _externalClaims logic.","created_at":"2015-12-11T02:17:34Z","updated_at":"2015-12-11T02:17:34Z","html_url":"https://github.com/dotnet/corefx/pull/4933#discussion_r47315190","pull_request_url":"https://api.github.com/repos/dotnet/corefx/pulls/4933","_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments/47315190"},"html":{"href":"https://github.com/dotnet/corefx/pull/4933#discussion_r47315190"},"pull_request":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4933"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/4933","id":53335282,"html_url":"https://github.com/dotnet/corefx/pull/4933","diff_url":"https://github.com/dotnet/corefx/pull/4933.diff","patch_url":"https://github.com/dotnet/corefx/pull/4933.patch","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/4933","number":4933,"state":"open","locked":false,"title":"Porting System.Security.Claims","user":{"login":"venkat-raman251","id":11411798,"avatar_url":"https://avatars.githubusercontent.com/u/11411798?v=3","gravatar_id":"","url":"https://api.github.com/users/venkat-raman251","html_url":"https://github.com/venkat-raman251","followers_url":"https://api.github.com/users/venkat-raman251/followers","following_url":"https://api.github.com/users/venkat-raman251/following{/other_user}","gists_url":"https://api.github.com/users/venkat-raman251/gists{/gist_id}","starred_url":"https://api.github.com/users/venkat-raman251/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venkat-raman251/subscriptions","organizations_url":"https://api.github.com/users/venkat-raman251/orgs","repos_url":"https://api.github.com/users/venkat-raman251/repos","events_url":"https://api.github.com/users/venkat-raman251/events{/privacy}","received_events_url":"https://api.github.com/users/venkat-raman251/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-12-10T23:50:45Z","updated_at":"2015-12-11T02:17:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b75b8e9505cec53de8f843d0fedf3de1d0be4f2c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/corefx/pulls/4933/commits","review_comments_url":"https://api.github.com/repos/dotnet/corefx/pulls/4933/comments","review_comment_url":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/4933/comments","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/a19c3310f9d20b7c9ee2f5f554d99e5fa2d29cdd","head":{"label":"venkat-raman251:master","ref":"master","sha":"a19c3310f9d20b7c9ee2f5f554d99e5fa2d29cdd","user":{"login":"venkat-raman251","id":11411798,"avatar_url":"https://avatars.githubusercontent.com/u/11411798?v=3","gravatar_id":"","url":"https://api.github.com/users/venkat-raman251","html_url":"https://github.com/venkat-raman251","followers_url":"https://api.github.com/users/venkat-raman251/followers","following_url":"https://api.github.com/users/venkat-raman251/following{/other_user}","gists_url":"https://api.github.com/users/venkat-raman251/gists{/gist_id}","starred_url":"https://api.github.com/users/venkat-raman251/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venkat-raman251/subscriptions","organizations_url":"https://api.github.com/users/venkat-raman251/orgs","repos_url":"https://api.github.com/users/venkat-raman251/repos","events_url":"https://api.github.com/users/venkat-raman251/events{/privacy}","received_events_url":"https://api.github.com/users/venkat-raman251/received_events","type":"User","site_admin":false},"repo":{"id":31972043,"name":"corefx","full_name":"venkat-raman251/corefx","owner":{"login":"venkat-raman251","id":11411798,"avatar_url":"https://avatars.githubusercontent.com/u/11411798?v=3","gravatar_id":"","url":"https://api.github.com/users/venkat-raman251","html_url":"https://github.com/venkat-raman251","followers_url":"https://api.github.com/users/venkat-raman251/followers","following_url":"https://api.github.com/users/venkat-raman251/following{/other_user}","gists_url":"https://api.github.com/users/venkat-raman251/gists{/gist_id}","starred_url":"https://api.github.com/users/venkat-raman251/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/venkat-raman251/subscriptions","organizations_url":"https://api.github.com/users/venkat-raman251/orgs","repos_url":"https://api.github.com/users/venkat-raman251/repos","events_url":"https://api.github.com/users/venkat-raman251/events{/privacy}","received_events_url":"https://api.github.com/users/venkat-raman251/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/venkat-raman251/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":true,"url":"https://api.github.com/repos/venkat-raman251/corefx","forks_url":"https://api.github.com/repos/venkat-raman251/corefx/forks","keys_url":"https://api.github.com/repos/venkat-raman251/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/venkat-raman251/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/venkat-raman251/corefx/teams","hooks_url":"https://api.github.com/repos/venkat-raman251/corefx/hooks","issue_events_url":"https://api.github.com/repos/venkat-raman251/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/venkat-raman251/corefx/events","assignees_url":"https://api.github.com/repos/venkat-raman251/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/venkat-raman251/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/venkat-raman251/corefx/tags","blobs_url":"https://api.github.com/repos/venkat-raman251/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/venkat-raman251/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/venkat-raman251/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/venkat-raman251/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/venkat-raman251/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/venkat-raman251/corefx/languages","stargazers_url":"https://api.github.com/repos/venkat-raman251/corefx/stargazers","contributors_url":"https://api.github.com/repos/venkat-raman251/corefx/contributors","subscribers_url":"https://api.github.com/repos/venkat-raman251/corefx/subscribers","subscription_url":"https://api.github.com/repos/venkat-raman251/corefx/subscription","commits_url":"https://api.github.com/repos/venkat-raman251/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/venkat-raman251/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/venkat-raman251/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/venkat-raman251/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/venkat-raman251/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/venkat-raman251/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/venkat-raman251/corefx/merges","archive_url":"https://api.github.com/repos/venkat-raman251/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/venkat-raman251/corefx/downloads","issues_url":"https://api.github.com/repos/venkat-raman251/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/venkat-raman251/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/venkat-raman251/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/venkat-raman251/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/venkat-raman251/corefx/labels{/name}","releases_url":"https://api.github.com/repos/venkat-raman251/corefx/releases{/id}","created_at":"2015-03-10T17:39:24Z","updated_at":"2015-03-23T20:37:18Z","pushed_at":"2015-12-11T02:02:39Z","git_url":"git://github.com/venkat-raman251/corefx.git","ssh_url":"git@github.com:venkat-raman251/corefx.git","clone_url":"https://github.com/venkat-raman251/corefx.git","svn_url":"https://github.com/venkat-raman251/corefx","homepage":"","size":42126,"stargazers_count":0,"watchers_count":0,"language":"C#","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":"dotnet:master","ref":"master","sha":"2a92e4affaec363c2b3edf239fd5265a84470389","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":26295345,"name":"corefx","full_name":"dotnet/corefx","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":false,"url":"https://api.github.com/repos/dotnet/corefx","forks_url":"https://api.github.com/repos/dotnet/corefx/forks","keys_url":"https://api.github.com/repos/dotnet/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/corefx/teams","hooks_url":"https://api.github.com/repos/dotnet/corefx/hooks","issue_events_url":"https://api.github.com/repos/dotnet/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/corefx/events","assignees_url":"https://api.github.com/repos/dotnet/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/corefx/tags","blobs_url":"https://api.github.com/repos/dotnet/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/corefx/languages","stargazers_url":"https://api.github.com/repos/dotnet/corefx/stargazers","contributors_url":"https://api.github.com/repos/dotnet/corefx/contributors","subscribers_url":"https://api.github.com/repos/dotnet/corefx/subscribers","subscription_url":"https://api.github.com/repos/dotnet/corefx/subscription","commits_url":"https://api.github.com/repos/dotnet/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/corefx/merges","archive_url":"https://api.github.com/repos/dotnet/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/corefx/downloads","issues_url":"https://api.github.com/repos/dotnet/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/corefx/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/corefx/releases{/id}","created_at":"2014-11-06T23:42:48Z","updated_at":"2015-12-10T22:21:56Z","pushed_at":"2015-12-11T02:02:39Z","git_url":"git://github.com/dotnet/corefx.git","ssh_url":"git@github.com:dotnet/corefx.git","clone_url":"https://github.com/dotnet/corefx.git","svn_url":"https://github.com/dotnet/corefx","homepage":"http://dotnet.github.io/","size":52000,"stargazers_count":8761,"watchers_count":8761,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1983,"mirror_url":null,"open_issues_count":768,"forks":1983,"open_issues":768,"watchers":8761,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4933"},"html":{"href":"https://github.com/dotnet/corefx/pull/4933"},"issue":{"href":"https://api.github.com/repos/dotnet/corefx/issues/4933"},"comments":{"href":"https://api.github.com/repos/dotnet/corefx/issues/4933/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4933/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/4933/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/corefx/statuses/a19c3310f9d20b7c9ee2f5f554d99e5fa2d29cdd"}}}}