{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments/225672109","pull_request_review_id":165321470,"id":225672109,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNTY3MjEwOQ==","diff_hunk":"@@ -0,0 +1,493 @@\n+﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n+// Licensed under the MIT License. See LICENSE in the project root for license information.\n+\n+using Microsoft.MixedReality.Toolkit.Core.Definitions.SpatialAwarenessSystem;\n+using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;\n+using Microsoft.MixedReality.Toolkit.Core.Managers;\n+using UnityEngine;\n+using System.Collections.Generic;\n+\n+#if UNITY_WSA\n+using UnityEngine.XR.WSA;\n+#endif // UNITY_WSA\n+\n+using UnityEngine.UI;\n+\n+namespace Microsoft.MixedReality.Toolkit.Core.Devices.SpatialAwareness\n+{\n+    public class WindowsMixedRealitySpatialObserver : BaseSpatialObserver\n+    {\n+        /// <summary>\n+        /// Constructor\n+        /// </summary>\n+        /// <param name=\"name\"></param>\n+        /// <param name=\"priority\"></param>\n+        public WindowsMixedRealitySpatialObserver(string name, uint priority) : base(name, priority)\n+        { }\n+\n+        #region IMixedRealityManager implementation\n+\n+        /// <inheritdoc />\n+        public override void Initialize()\n+        {\n+            // Only initialize if the Spatial Awareness system has been enabled in the configuration profile.\n+            if (!MixedRealityManager.Instance.ActiveProfile.IsSpatialAwarenessSystemEnabled) { return; }\n+\n+#if UNITY_WSA\n+            CreateObserver();\n+\n+            // Apply the initial oberserver volume settings.\n+            ConfigureObserverVolume();\n+#endif // UNITY_WSA\n+        }\n+\n+        /// <inheritdoc />\n+        public override void Reset()\n+        {\n+#if UNITY_WSA\n+            CleanupObserver();\n+#endif // UNITY_WSA\n+            Initialize();\n+        }\n+\n+        /// <inheritdoc />\n+        public override void Enable()\n+        {\n+            // todo\n+        }\n+\n+        /// <inheritdoc />\n+        public override void Update()\n+        {\n+#if UNITY_WSA\n+            UpdateObserver();\n+#endif // UNITY_WSA\n+        }\n+\n+        /// <inheritdoc />\n+        public override void Disable()\n+        {\n+            // todo\n+        }\n+\n+        /// <inheritdoc />\n+        public override void Destroy()\n+        {\n+#if UNITY_WSA\n+            CleanupObserver();\n+#endif // UNITY_WSA\n+        }\n+\n+        #endregion IMixedRealityManager implementation\n+\n+        #region IMixedRealitySpatialAwarenessObserver implementation\n+\n+#if UNITY_WSA\n+        /// <summary>\n+        /// The surface observer providing the spatial data.\n+        /// </summary>\n+        private SurfaceObserver observer = null;\n+#endif // UNITY_WSA\n+\n+        /// <summary>\n+        /// The observation extents that are currently in use by the surface observer.\n+        /// </summary>\n+        private Vector3 currentObserverExtents = Vector3.zero;\n+\n+        /// <summary>\n+        /// A queue of <see cref=\"SurfaceId\"/> that need their meshes created (or updated).\n+        /// </summary>\n+        private readonly Queue<SurfaceId> meshWorkQueue = new Queue<SurfaceId>();\n+\n+        /// <summary>\n+        /// Identifies the meshes, by id, that are being baked by Unity and if it has been added (true) \n+        /// or is being updated (false). \n+        /// </summary>\n+        private Dictionary<int, bool> meshAddStatus = new Dictionary<int, bool>();\n+\n+        /// <summary>\n+        /// To prevent too many meshes from being generated at the same time, we will\n+        /// only request one mesh to be created at a time.  This variable will track\n+        /// if a mesh creation request is in flight.\n+        /// </summary>\n+        private SpatialMeshObject? outstandingMeshObject = null;\n+\n+        /// <summary>\n+        /// When surfaces are replaced or removed, rather than destroying them, we'll keep\n+        /// one as a spare for use in outstanding mesh requests. That way, we'll have fewer\n+        /// game object create/destroy cycles, which should help performance.\n+        /// </summary>\n+        private SpatialMeshObject? spareMeshObject = null;\n+\n+        /// <summary>\n+        /// The time at which the surface observer was last asked for updated data.\n+        /// </summary>\n+        private float lastUpdated = 0;\n+\n+        private Dictionary<int, SpatialMeshObject> meshObjects = new Dictionary<int, SpatialMeshObject>();\n+\n+        /// <inheritdoc />\n+        public override IDictionary<int, GameObject> Meshes\n+        {\n+            get\n+            {\n+                Dictionary<int, GameObject> meshes = new Dictionary<int, GameObject>();\n+                // NOTE: We use foreach here since Dictionary<key, value>.Values is an IEnumerable.\n+                foreach (int id in meshObjects.Keys)\n+                {\n+                    meshes.Add(id, meshObjects[id].GameObject);\n+                }\n+                return meshes;\n+            }\n+        }\n+\n+        /// <inheritdoc/>\n+        public override void StartObserving()\n+        {\n+#if UNITY_WSA\n+            if (IsRunning)\n+            {\n+                Debug.LogWarning(\"The Windows Mixed Reality spatial observer is currently running.\");\n+                return;\n+            }\n+\n+            // We want the first update immediately.\n+            lastUpdated = 0;\n+\n+            // UpdateObserver keys off of this value to start observing.\n+            IsRunning = true;\n+\n+#endif // UNITY_WSA\n+        }\n+\n+        /// <inheritdoc/>\n+        public override void StopObserving()\n+        {\n+#if UNITY_WSA\n+            if (!IsRunning)\n+            {\n+                Debug.LogWarning(\"The Windows Mixed Reality spatial observer is currently stopped.\");\n+                return;\n+            }\n+\n+            // UpdateObserver keys off of this value to stop observing.\n+            IsRunning = false;\n+\n+            // Clear any pending work.\n+            meshWorkQueue.Clear();\n+#endif // UNITY_WSA\n+        }\n+\n+#if UNITY_WSA\n+        /// <summary>\n+        /// Creates the surface observer and handles the desired startup behavior.\n+        /// </summary>\n+        private void CreateObserver()\n+        {\n+            if (observer == null)\n+            {\n+                observer = new SurfaceObserver();\n+                ConfigureObserverVolume();\n+\n+                if (MixedRealityManager.Instance.ActiveProfile.SpatialAwarenessProfile.StartupBehavior == AutoStartBehavior.AutoStart)\n+                {\n+                    StartObserving();\n+                }\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Ensures that the surface observer has been stopped and destroyed.\n+        /// </summary>\n+        private void CleanupObserver()\n+        {\n+            if (observer != null)\n+            {\n+                if (IsRunning)\n+                {\n+                    StopObserving();\n+                }\n+                observer.Dispose();\n+                observer = null;\n+            }\n+\n+            if (Application.isPlaying)\n+            {\n+                // Clean up mesh objects.\n+                // NOTE: We use foreach here since Dictionary<key, value>.Values is an IEnumerable.\n+                foreach (SpatialMeshObject meshObject in meshObjects.Values)\n+                {\n+                    // Cleanup mesh object.\n+                    // Destroy the game object, destroy the meshes.\n+                    CleanupMeshObject(meshObject);\n+                }\n+                meshObjects.Clear();\n+\n+                // Cleanup the oustanding mesh object.\n+                if (outstandingMeshObject.HasValue)\n+                {\n+                    // Destroy the game object, destroy the meshes.\n+                    CleanupMeshObject(outstandingMeshObject.Value);\n+                }\n+\n+                // Cleanup the spare mesh object\n+                if (spareMeshObject.HasValue)\n+                {\n+                    // Destroy the game object, destroy the meshes.\n+                    CleanupMeshObject(spareMeshObject.Value);\n+                }\n+\n+                // Clean up planar surface objects\n+                // todo\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Requests updates from the surface observer.\n+        /// </summary>\n+        private void UpdateObserver()\n+        {\n+            // Only update the observer if it is running.\n+            if (IsRunning && !outstandingMeshObject.HasValue)\n+            {\n+                // If we have a mesh to work on...\n+                if (meshWorkQueue.Count > 0)\n+                {\n+                    // We're using a simple first-in-first-out rule for requesting meshes, but a more sophisticated algorithm could prioritize\n+                    // the queue based on distance to the user or some other metric.\n+                    RequestMesh(meshWorkQueue.Dequeue());\n+                }\n+                // If enough time has passed since the previous observer update...\n+                else if (Time.time - lastUpdated >= MixedRealityManager.Instance.ActiveProfile.SpatialAwarenessProfile.UpdateInterval)\n+                {\n+                    // The application can update the observer volume at any time, make sure we are using the latest.\n+                    ConfigureObserverVolume();\n+\n+                    observer.Update(SurfaceObserver_OnSurfaceChanged);\n+                    lastUpdated = Time.time;\n+                }\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Issue a request to the Surface Observer to begin baking the mesh.\n+        /// </summary>\n+        /// <param name=\"surfaceId\">ID of the mesh to bake.</param>\n+        private void RequestMesh(SurfaceId surfaceId)\n+        {\n+            string meshName = (\"SpatialMesh - \" + surfaceId.handle);\n+\n+            // todo:\n+            SpatialMeshObject newMesh;\n+            WorldAnchor worldAnchor;\n+\n+            if (!spareMeshObject.HasValue)\n+            {\n+                newMesh = CreateSpatialMeshObject(null, meshName, surfaceId.handle);\n+\n+                worldAnchor = newMesh.GameObject.AddComponent<WorldAnchor>();\n+            }\n+            else\n+            {\n+                newMesh = spareMeshObject.Value;\n+                spareMeshObject = null;\n+\n+                newMesh.GameObject.name = meshName;\n+                newMesh.Id = surfaceId.handle;\n+\n+                worldAnchor = newMesh.GameObject.GetComponent<WorldAnchor>();\n+            }\n+\n+            Debug.Assert(worldAnchor != null);\n+\n+            SurfaceData surfaceData = new SurfaceData(\n+                surfaceId,\n+                newMesh.Filter,\n+                worldAnchor,\n+                newMesh.Collider,\n+                MixedRealityManager.SpatialAwarenessSystem.MeshTrianglesPerCubicMeter,\n+                true);\n+\n+            if (observer.RequestMeshAsync(surfaceData, SurfaceObserver_OnDataReady))\n+            {\n+                outstandingMeshObject = newMesh;\n+            }\n+            else\n+            {\n+                Debug.LogError($\"Mesh request failed for Id == surfaceId.handle\");\n+                Debug.Assert(outstandingMeshObject == null);\n+                ReclaimMeshObject(newMesh);\n+            }\n+        }\n+\n+        /// <summary>\n+        /// Applys the configured observation extents.","path":"Assets/MixedRealityToolkit/_Core/Devices/MixedReality/WindowsMixedRealitySpatialObserver.cs","position":324,"original_position":324,"commit_id":"2cacebf6edfe78a2a8dd48fe65e100bc42934a8b","original_commit_id":"2cacebf6edfe78a2a8dd48fe65e100bc42934a8b","user":{"login":"keveleigh","id":3580640,"node_id":"MDQ6VXNlcjM1ODA2NDA=","avatar_url":"https://avatars2.githubusercontent.com/u/3580640?v=4","gravatar_id":"","url":"https://api.github.com/users/keveleigh","html_url":"https://github.com/keveleigh","followers_url":"https://api.github.com/users/keveleigh/followers","following_url":"https://api.github.com/users/keveleigh/following{/other_user}","gists_url":"https://api.github.com/users/keveleigh/gists{/gist_id}","starred_url":"https://api.github.com/users/keveleigh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keveleigh/subscriptions","organizations_url":"https://api.github.com/users/keveleigh/orgs","repos_url":"https://api.github.com/users/keveleigh/repos","events_url":"https://api.github.com/users/keveleigh/events{/privacy}","received_events_url":"https://api.github.com/users/keveleigh/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n        /// Applies the configured observation extents.\r\n```","created_at":"2018-10-16T19:09:47Z","updated_at":"2018-10-16T19:15:53Z","html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917#discussion_r225672109","pull_request_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments/225672109"},"html":{"href":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917#discussion_r225672109"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917","id":222614704,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIyNjE0NzA0","html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917","diff_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917.diff","patch_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917.patch","issue_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/2917","number":2917,"state":"open","locked":false,"title":"Spatial awareness implementation","user":{"login":"davidkline-ms","id":13281406,"node_id":"MDQ6VXNlcjEzMjgxNDA2","avatar_url":"https://avatars2.githubusercontent.com/u/13281406?v=4","gravatar_id":"","url":"https://api.github.com/users/davidkline-ms","html_url":"https://github.com/davidkline-ms","followers_url":"https://api.github.com/users/davidkline-ms/followers","following_url":"https://api.github.com/users/davidkline-ms/following{/other_user}","gists_url":"https://api.github.com/users/davidkline-ms/gists{/gist_id}","starred_url":"https://api.github.com/users/davidkline-ms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidkline-ms/subscriptions","organizations_url":"https://api.github.com/users/davidkline-ms/orgs","repos_url":"https://api.github.com/users/davidkline-ms/repos","events_url":"https://api.github.com/users/davidkline-ms/events{/privacy}","received_events_url":"https://api.github.com/users/davidkline-ms/received_events","type":"User","site_admin":false},"body":"Overview\r\n---\r\nThis PR introduces a functioning spatial awareness system (minus the ability to move the observer origin #2916).\r\n\r\nThis change provides an implementation for spatial meshes ONLY. Planar surface finding will come in a future PR.\r\n\r\nChanges\r\n---\r\n- Fixes: #1998.\r\n- Fixes: #2386.\r\n- Fixes: #2508.\r\n","created_at":"2018-10-13T00:20:03Z","updated_at":"2018-10-16T19:15:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"086671fc05c05e1dcac0d8484aeb53444e691716","assignee":{"login":"davidkline-ms","id":13281406,"node_id":"MDQ6VXNlcjEzMjgxNDA2","avatar_url":"https://avatars2.githubusercontent.com/u/13281406?v=4","gravatar_id":"","url":"https://api.github.com/users/davidkline-ms","html_url":"https://github.com/davidkline-ms","followers_url":"https://api.github.com/users/davidkline-ms/followers","following_url":"https://api.github.com/users/davidkline-ms/following{/other_user}","gists_url":"https://api.github.com/users/davidkline-ms/gists{/gist_id}","starred_url":"https://api.github.com/users/davidkline-ms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidkline-ms/subscriptions","organizations_url":"https://api.github.com/users/davidkline-ms/orgs","repos_url":"https://api.github.com/users/davidkline-ms/repos","events_url":"https://api.github.com/users/davidkline-ms/events{/privacy}","received_events_url":"https://api.github.com/users/davidkline-ms/received_events","type":"User","site_admin":false},"assignees":[{"login":"davidkline-ms","id":13281406,"node_id":"MDQ6VXNlcjEzMjgxNDA2","avatar_url":"https://avatars2.githubusercontent.com/u/13281406?v=4","gravatar_id":"","url":"https://api.github.com/users/davidkline-ms","html_url":"https://github.com/davidkline-ms","followers_url":"https://api.github.com/users/davidkline-ms/followers","following_url":"https://api.github.com/users/davidkline-ms/following{/other_user}","gists_url":"https://api.github.com/users/davidkline-ms/gists{/gist_id}","starred_url":"https://api.github.com/users/davidkline-ms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidkline-ms/subscriptions","organizations_url":"https://api.github.com/users/davidkline-ms/orgs","repos_url":"https://api.github.com/users/davidkline-ms/repos","events_url":"https://api.github.com/users/davidkline-ms/events{/privacy}","received_events_url":"https://api.github.com/users/davidkline-ms/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"ryzngard","id":475144,"node_id":"MDQ6VXNlcjQ3NTE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/475144?v=4","gravatar_id":"","url":"https://api.github.com/users/ryzngard","html_url":"https://github.com/ryzngard","followers_url":"https://api.github.com/users/ryzngard/followers","following_url":"https://api.github.com/users/ryzngard/following{/other_user}","gists_url":"https://api.github.com/users/ryzngard/gists{/gist_id}","starred_url":"https://api.github.com/users/ryzngard/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ryzngard/subscriptions","organizations_url":"https://api.github.com/users/ryzngard/orgs","repos_url":"https://api.github.com/users/ryzngard/repos","events_url":"https://api.github.com/users/ryzngard/events{/privacy}","received_events_url":"https://api.github.com/users/ryzngard/received_events","type":"User","site_admin":false},{"login":"Railboy","id":9789716,"node_id":"MDQ6VXNlcjk3ODk3MTY=","avatar_url":"https://avatars3.githubusercontent.com/u/9789716?v=4","gravatar_id":"","url":"https://api.github.com/users/Railboy","html_url":"https://github.com/Railboy","followers_url":"https://api.github.com/users/Railboy/followers","following_url":"https://api.github.com/users/Railboy/following{/other_user}","gists_url":"https://api.github.com/users/Railboy/gists{/gist_id}","starred_url":"https://api.github.com/users/Railboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Railboy/subscriptions","organizations_url":"https://api.github.com/users/Railboy/orgs","repos_url":"https://api.github.com/users/Railboy/repos","events_url":"https://api.github.com/users/Railboy/events{/privacy}","received_events_url":"https://api.github.com/users/Railboy/received_events","type":"User","site_admin":false},{"login":"StephenHodgson","id":13334553,"node_id":"MDQ6VXNlcjEzMzM0NTUz","avatar_url":"https://avatars2.githubusercontent.com/u/13334553?v=4","gravatar_id":"","url":"https://api.github.com/users/StephenHodgson","html_url":"https://github.com/StephenHodgson","followers_url":"https://api.github.com/users/StephenHodgson/followers","following_url":"https://api.github.com/users/StephenHodgson/following{/other_user}","gists_url":"https://api.github.com/users/StephenHodgson/gists{/gist_id}","starred_url":"https://api.github.com/users/StephenHodgson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StephenHodgson/subscriptions","organizations_url":"https://api.github.com/users/StephenHodgson/orgs","repos_url":"https://api.github.com/users/StephenHodgson/repos","events_url":"https://api.github.com/users/StephenHodgson/events{/privacy}","received_events_url":"https://api.github.com/users/StephenHodgson/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":771667944,"node_id":"MDU6TGFiZWw3NzE2Njc5NDQ=","url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels/Feature%20Branch","name":"Feature Branch","color":"f7e67b","default":false},{"id":850652486,"node_id":"MDU6TGFiZWw4NTA2NTI0ODY=","url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels/MRTK%20vNEXT","name":"MRTK vNEXT","color":"0b4ce5","default":false},{"id":769313068,"node_id":"MDU6TGFiZWw3NjkzMTMwNjg=","url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels/Ready%20for%20Review","name":"Ready for Review","color":"88f91d","default":false},{"id":831366238,"node_id":"MDU6TGFiZWw4MzEzNjYyMzg=","url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels/Spatial%20Mapping%20/%20Awareness","name":"Spatial Mapping / Awareness","color":"5ecae5","default":false}],"milestone":{"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/milestones/1","html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/milestone/1","labels_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/milestones/1/labels","id":3141032,"node_id":"MDk6TWlsZXN0b25lMzE0MTAzMg==","number":1,"title":"MRTK 2018","description":"Mixed Reality Toolkit 2018","creator":{"login":"StephenHodgson","id":13334553,"node_id":"MDQ6VXNlcjEzMzM0NTUz","avatar_url":"https://avatars2.githubusercontent.com/u/13334553?v=4","gravatar_id":"","url":"https://api.github.com/users/StephenHodgson","html_url":"https://github.com/StephenHodgson","followers_url":"https://api.github.com/users/StephenHodgson/followers","following_url":"https://api.github.com/users/StephenHodgson/following{/other_user}","gists_url":"https://api.github.com/users/StephenHodgson/gists{/gist_id}","starred_url":"https://api.github.com/users/StephenHodgson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StephenHodgson/subscriptions","organizations_url":"https://api.github.com/users/StephenHodgson/orgs","repos_url":"https://api.github.com/users/StephenHodgson/repos","events_url":"https://api.github.com/users/StephenHodgson/events{/privacy}","received_events_url":"https://api.github.com/users/StephenHodgson/received_events","type":"User","site_admin":false},"open_issues":45,"closed_issues":299,"state":"open","created_at":"2018-02-24T21:08:44Z","updated_at":"2018-10-16T06:36:17Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917/commits","review_comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917/comments","review_comment_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/2917/comments","statuses_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/2cacebf6edfe78a2a8dd48fe65e100bc42934a8b","head":{"label":"davidkline-ms:spatialAwareness","ref":"spatialAwareness","sha":"2cacebf6edfe78a2a8dd48fe65e100bc42934a8b","user":{"login":"davidkline-ms","id":13281406,"node_id":"MDQ6VXNlcjEzMjgxNDA2","avatar_url":"https://avatars2.githubusercontent.com/u/13281406?v=4","gravatar_id":"","url":"https://api.github.com/users/davidkline-ms","html_url":"https://github.com/davidkline-ms","followers_url":"https://api.github.com/users/davidkline-ms/followers","following_url":"https://api.github.com/users/davidkline-ms/following{/other_user}","gists_url":"https://api.github.com/users/davidkline-ms/gists{/gist_id}","starred_url":"https://api.github.com/users/davidkline-ms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidkline-ms/subscriptions","organizations_url":"https://api.github.com/users/davidkline-ms/orgs","repos_url":"https://api.github.com/users/davidkline-ms/repos","events_url":"https://api.github.com/users/davidkline-ms/events{/privacy}","received_events_url":"https://api.github.com/users/davidkline-ms/received_events","type":"User","site_admin":false},"repo":{"id":142630010,"node_id":"MDEwOlJlcG9zaXRvcnkxNDI2MzAwMTA=","name":"MixedRealityToolkit-Unity","full_name":"davidkline-ms/MixedRealityToolkit-Unity","private":false,"owner":{"login":"davidkline-ms","id":13281406,"node_id":"MDQ6VXNlcjEzMjgxNDA2","avatar_url":"https://avatars2.githubusercontent.com/u/13281406?v=4","gravatar_id":"","url":"https://api.github.com/users/davidkline-ms","html_url":"https://github.com/davidkline-ms","followers_url":"https://api.github.com/users/davidkline-ms/followers","following_url":"https://api.github.com/users/davidkline-ms/following{/other_user}","gists_url":"https://api.github.com/users/davidkline-ms/gists{/gist_id}","starred_url":"https://api.github.com/users/davidkline-ms/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidkline-ms/subscriptions","organizations_url":"https://api.github.com/users/davidkline-ms/orgs","repos_url":"https://api.github.com/users/davidkline-ms/repos","events_url":"https://api.github.com/users/davidkline-ms/events{/privacy}","received_events_url":"https://api.github.com/users/davidkline-ms/received_events","type":"User","site_admin":false},"html_url":"https://github.com/davidkline-ms/MixedRealityToolkit-Unity","description":"MixedRealityToolkit-Unity uses code from the base MixedRealityToolkit repository and makes it easier to consume in Unity.","fork":true,"url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity","forks_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/forks","keys_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/teams","hooks_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/hooks","issue_events_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/issues/events{/number}","events_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/events","assignees_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/assignees{/user}","branches_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/branches{/branch}","tags_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/tags","blobs_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/git/refs{/sha}","trees_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/statuses/{sha}","languages_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/languages","stargazers_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/stargazers","contributors_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/contributors","subscribers_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/subscribers","subscription_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/subscription","commits_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/commits{/sha}","git_commits_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/git/commits{/sha}","comments_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/comments{/number}","issue_comment_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/issues/comments{/number}","contents_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/contents/{+path}","compare_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/merges","archive_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/downloads","issues_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/issues{/number}","pulls_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/pulls{/number}","milestones_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/milestones{/number}","notifications_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/labels{/name}","releases_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/releases{/id}","deployments_url":"https://api.github.com/repos/davidkline-ms/MixedRealityToolkit-Unity/deployments","created_at":"2018-07-27T22:53:22Z","updated_at":"2018-10-09T17:06:32Z","pushed_at":"2018-10-16T17:46:34Z","git_url":"git://github.com/davidkline-ms/MixedRealityToolkit-Unity.git","ssh_url":"git@github.com:davidkline-ms/MixedRealityToolkit-Unity.git","clone_url":"https://github.com/davidkline-ms/MixedRealityToolkit-Unity.git","svn_url":"https://github.com/davidkline-ms/MixedRealityToolkit-Unity","homepage":"","size":708650,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"mrtk_development"}},"base":{"label":"Microsoft:feature/mrtk_spatialAwareness","ref":"feature/mrtk_spatialAwareness","sha":"7c3bafb516fb3cbb0d1a39f30a301a82ab1141a9","user":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":50605426,"node_id":"MDEwOlJlcG9zaXRvcnk1MDYwNTQyNg==","name":"MixedRealityToolkit-Unity","full_name":"Microsoft/MixedRealityToolkit-Unity","private":false,"owner":{"login":"Microsoft","id":6154722,"node_id":"MDEyOk9yZ2FuaXphdGlvbjYxNTQ3MjI=","avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity","description":"MixedRealityToolkit-Unity uses code from the base MixedRealityToolkit repository and makes it easier to consume in Unity.","fork":false,"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity","forks_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/forks","keys_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/teams","hooks_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/events","assignees_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/tags","blobs_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/languages","stargazers_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/subscription","commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/merges","archive_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/downloads","issues_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/deployments","created_at":"2016-01-28T18:54:58Z","updated_at":"2018-10-16T18:00:38Z","pushed_at":"2018-10-16T19:10:41Z","git_url":"git://github.com/Microsoft/MixedRealityToolkit-Unity.git","ssh_url":"git@github.com:Microsoft/MixedRealityToolkit-Unity.git","clone_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity.git","svn_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity","homepage":"","size":720117,"stargazers_count":2154,"watchers_count":2154,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1014,"mirror_url":null,"archived":false,"open_issues_count":411,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":1014,"open_issues":411,"watchers":2154,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917"},"html":{"href":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/2917"},"issue":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/2917"},"comments":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/2917/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/2917/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/2cacebf6edfe78a2a8dd48fe65e100bc42934a8b"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"keveleigh"}}