diff --git a/Assets/GoogleSignIn.meta b/Assets/GoogleSignIn.meta
new file mode 100644
index 00000000..b61c9432
--- /dev/null
+++ b/Assets/GoogleSignIn.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a089c79cc334748a5a29c5f219b7cfd4
+folderAsset: yes
+timeCreated: 1490807626
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor.meta b/Assets/GoogleSignIn/Editor.meta
new file mode 100644
index 00000000..d55e3f7a
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a7e77ece57ef34772969fad4915b1a4c
+folderAsset: yes
+timeCreated: 1490978071
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
new file mode 100644
index 00000000..625d2e51
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<dependencies>
+  <!-- See https://github.com/googlesamples/unity-jar-resolver#usage for
+    how to configure dependencies -->
+  <androidPackages>
+    <androidPackage spec="com.google.android.gms:play-services-auth:16+">
+      <androidSdkPackageIds>
+        <androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
+      </androidSdkPackageIds>
+    </androidPackage>
+  </androidPackages>
+
+  <!-- iOS Cocoapod dependencies can be specified by each iosPod element. -->
+  <iosPods>
+    <iosPod name="GoogleSignIn" version=">= 4.0.2" bitcodeEnabled="false"
+        minTargetSdk="6.0">
+    </iosPod>
+  </iosPods>
+</dependencies>
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta
new file mode 100644
index 00000000..6493d604
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 938014c9994164100b26d82840a88fbb
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
new file mode 100644
index 00000000..1ef90349
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<dependencies>
+<!-- Internal library dependency generated at build time. -->
+  <androidPackages>
+    <androidPackage spec="com.google.signin:google-signin-support:1.0.4">
+      <repositories>
+        <repository>Assets/GoogleSignIn/Editor/m2repository</repository>
+      </repositories>
+    </androidPackage>
+  </androidPackages>
+</dependencies>
diff --git a/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta
new file mode 100644
index 00000000..578e49d5
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e8689106c65f445c19cec6044d615c19
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt
new file mode 100644
index 00000000..a0e24547
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt
@@ -0,0 +1,33 @@
+Assets/PlayServicesResolver/Editor/Google.VersionHandlerImpl_v1.2.89.0.dll
+Assets/PlayServicesResolver/Editor/Google.IOSResolver_v1.2.89.0.dll
+Assets/PlayServicesResolver/Editor/Google.VersionHandler.dll
+Assets/PlayServicesResolver/Editor/Google.JarResolver_v1.2.89.0.dll
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h
+Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm
+Assets/Parse/LICENSE
+Assets/Parse/Plugins/Unity.Compat.dll
+Assets/Parse/Plugins/Unity.Tasks.dll
+Assets/SignInSample/MainScene.unity
+Assets/SignInSample/SigninSampleScript.cs
+Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
+Assets/GoogleSignIn/Impl/SignInHelperObject.cs
+Assets/GoogleSignIn/Impl/NativeFuture.cs
+Assets/GoogleSignIn/Impl/BaseObject.cs
+Assets/GoogleSignIn/GoogleSignIn.cs
+Assets/GoogleSignIn/GoogleSignInConfiguration.cs
+Assets/GoogleSignIn/Future.cs
+Assets/GoogleSignIn/GoogleSignInUser.cs
+Assets/GoogleSignIn/GoogleSignInStatusCode.cs
+Assets/GoogleSignIn/Editor/GoogleSignInDependencies.xml
+Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
+Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
diff --git a/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta
new file mode 100644
index 00000000..eb7a5d66
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/google-signin-plugin_v1.0.4.txt.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a67d5f0cfc09749e6b1ce13e8b8e6e1d
+labels:
+- gvh
+- gvh_manifest
+- gvh_version-1.0.4
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository.meta b/Assets/GoogleSignIn/Editor/m2repository.meta
new file mode 100644
index 00000000..26cfc222
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: eefc3dc8b56e545998952bd59ab36247
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com.meta b/Assets/GoogleSignIn/Editor/m2repository/com.meta
new file mode 100644
index 00000000..9372f2b8
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ade49ef91c70440a0baeac322ecaa2d7
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google.meta
new file mode 100644
index 00000000..a1cf31a7
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 707de6ade212a46b1ab4bf4d42325176
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta
new file mode 100644
index 00000000..4a56a312
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 34b86fc2e934d482ea5f9d1f5354b0f9
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta
new file mode 100644
index 00000000..1132fbfe
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e3becceb8680148d59e5bb93e5eb5a24
+folderAsset: yes
+timeCreated: 1508956004
+licenseType: Free
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta
new file mode 100644
index 00000000..27236f59
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 001a15402063b4df983ba8bc4ddb269f
+folderAsset: yes
+timeCreated: 1537405253
+licenseType: Pro
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
new file mode 100644
index 00000000..ce320d07
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.google.signin</groupId>
+  <artifactId>google-signin-support</artifactId>
+  <version>1.0.4</version>
+  <packaging>srcaar</packaging>
+</project>
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
new file mode 100644
index 00000000..a6bc0c50
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5
@@ -0,0 +1 @@
+7cd48eaf454469c04dae63043d467d69
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta
new file mode 100644
index 00000000..8209b096
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 907bf7a19cd7848cabf1f641f61343ee
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta
new file mode 100644
index 00000000..94612747
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a3f74b3d329a24e81a6c6f9f1d2f46f1
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
new file mode 100644
index 00000000..8721bf36
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1
@@ -0,0 +1 @@
+f30d09407a5b0e439bfc0e54e33f3a34f7c7d35c
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta
new file mode 100644
index 00000000..df944c49
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.pom.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e1a3ff77f802d43818521ff3db2bf944
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar
new file mode 100644
index 00000000..1ebd5a13
Binary files /dev/null and b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar differ
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
new file mode 100644
index 00000000..f7df30ce
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5
@@ -0,0 +1 @@
+040097cf545e84135c0e4d783e3b1143
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta
new file mode 100644
index 00000000..ee2f55dd
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 79f9d122dd99b483282294f3b1f1bd36
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta
new file mode 100644
index 00000000..4ae20ba3
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6eab7a3cbdbf34cffaf951dc9210a32c
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
new file mode 100644
index 00000000..db669bff
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1
@@ -0,0 +1 @@
+632874f93336b4f05e15f55b63656dace924fa72
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta
new file mode 100644
index 00000000..124743a3
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/1.0.4/google-signin-support-1.0.4.srcaar.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d508eb0e16bb14c8a962b343e755ef01
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
new file mode 100644
index 00000000..c3049afe
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>com.google.signin</groupId>
+  <artifactId>google-signin-support</artifactId>
+  <versioning>
+    <release>1.0.4</release>
+    <versions>
+      <version>1.0.4</version>
+    </versions>
+    <lastUpdated>20180920010048</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
new file mode 100644
index 00000000..77f39ed2
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5
@@ -0,0 +1 @@
+e243363a85b4f7bd1170918ba674061b
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta
new file mode 100644
index 00000000..49e3156c
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.md5.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c020582c1a85d47c7934908f00a0bd37
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta
new file mode 100644
index 00000000..1236df6d
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f3911d467587242978192a8723c68395
+labels:
+- gvh
+- gvh_version-1.0.4
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1 b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
new file mode 100644
index 00000000..e1c0999f
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+43ebede449c3782df517a7156c18c28cde4fd4f4
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta
new file mode 100644
index 00000000..63dc4be7
--- /dev/null
+++ b/Assets/GoogleSignIn/Editor/m2repository/com/google/signin/google-signin-support/maven-metadata.xml.sha1.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 16b8065a143bb4277af08381a56157dd
+labels:
+- gvh
+- gvh_version-1.0.4
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Future.cs b/Assets/GoogleSignIn/Future.cs
new file mode 100644
index 00000000..df469423
--- /dev/null
+++ b/Assets/GoogleSignIn/Future.cs
@@ -0,0 +1,84 @@
+// <copyright file="Future.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+namespace Google {
+  using System.Collections;
+  using System.Threading.Tasks;
+  using UnityEngine;
+
+  /// <summary>
+  /// Interface for implementations of the Future<T> API.
+  /// </summary>
+  internal interface FutureAPIImpl<T> {
+    bool Pending { get; }
+    GoogleSignInStatusCode Status { get; }
+    T Result { get; }
+  }
+
+  /// <summary>
+  /// Future return value.
+  /// </summary>
+  /// <remarks>This class provides a promise of a result from a method call.
+  /// The typical usage is to check the Pending property until it is false.
+  /// At this time either the Status or Result will be available for use.
+  /// Result is only set if  the operation was successful.
+  /// As a convience, a coroutine to complete a Task is provided.
+  /// </remarks>
+  public class Future<T> {
+
+    private FutureAPIImpl<T> apiImpl;
+
+    internal Future(FutureAPIImpl<T> impl) {
+      apiImpl = impl;
+    }
+
+    /// <summary>
+    /// Gets a value indicating whether this
+    /// <see cref="T:Google.Future`1"/> is pending.
+    /// </summary>
+    /// <value><c>true</c> if pending; otherwise, <c>false</c>.</value>
+    public bool Pending { get { return apiImpl.Pending; } }
+
+    /// <summary>
+    /// Gets the status.
+    /// </summary>
+    /// <value>The status is set when Pending == false.</value>
+    GoogleSignInStatusCode Status { get { return apiImpl.Status; } }
+
+    /// <summary>
+    /// Gets the result.
+    /// </summary>
+    /// <value>The result is set when Pending == false and there is no error.
+    /// </value>
+    T Result { get { return apiImpl.Result; } }
+
+    /// <summary>
+    /// Waits for result then completes the TaskCompleationSource.
+    /// </summary>
+    /// <returns>The for result.</returns>
+    /// <param name="tcs">Tcs.</param>
+    internal IEnumerator WaitForResult(TaskCompletionSource<T> tcs) {
+      yield return new WaitUntil(() => !Pending);
+      if (Status == GoogleSignInStatusCode.Canceled) {
+        tcs.SetCanceled();
+      } else if (Status == GoogleSignInStatusCode.Success ||
+            Status == GoogleSignInStatusCode.SuccessCached) {
+        tcs.SetResult(Result);
+      } else {
+        tcs.SetException(new GoogleSignIn.SignInException(Status));
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/Assets/GoogleSignIn/Future.cs.meta b/Assets/GoogleSignIn/Future.cs.meta
new file mode 100644
index 00000000..75a7f224
--- /dev/null
+++ b/Assets/GoogleSignIn/Future.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: ad3b09fb652fb4ff0a68d1966f13160e
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/GoogleSignIn.cs b/Assets/GoogleSignIn/GoogleSignIn.cs
new file mode 100644
index 00000000..c59ced72
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignIn.cs
@@ -0,0 +1,202 @@
+// <copyright file="GoogleSignIn.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+// </copyright>
+
+namespace Google {
+  using System;
+  using System.Runtime.Serialization;
+  using System.Threading.Tasks;
+  using Google.Impl;
+  using UnityEngine;
+
+  /// <summary>
+  /// Google sign in API.
+  /// </summary>
+  /// <remarks>This class implements the GoogleSignInAPI for Unity.
+  /// Typical usage is to set the Configuration options as needed, then
+  /// get the DefaultInstance and call signIn or signInSilently.  See
+  /// the <a href="https://developers.google.com/identity">
+  /// Google Sign-In API documentation for more details.</a>
+  /// <para>
+  /// <code>
+  /// private static readonly GoogleSignInConfiguration configuration =
+  ///                        new GoogleSignInConfiguration {
+  ///                          WebClientId = "<your client id here >",
+  ///                          RequestIdToken = true
+  ///                        };
+  ///
+  /// public void OnSignIn() {
+  ///   GoogleSignIn.Configuration = configuration;
+  ///   GoogleSignIn.Configuration.UseGameSignIn = false;
+  ///   GoogleSignIn.Configuration.RequestIdToken = true;
+  ///   GoogleSignIn.DefaultInstance.SignIn().ContinueWith(
+  ///           OnAuthenticationFinished);
+  /// }
+  /// </code>
+  /// </para>
+  /// </remarks>
+  public class GoogleSignIn {
+
+#if !UNITY_ANDROID && !UNITY_IOS
+  static GoogleSignIn() {
+    Debug.LogError("This platform is not supported");
+  }
+#endif
+
+    private static GoogleSignIn theInstance = null;
+    private static GoogleSignInConfiguration theConfiguration = null;
+    private ISignInImpl impl;
+
+    ///<summary> The configuration settings for Google Sign-in.</summary>
+    ///<remarks> The configuration should be set before calling the sign-in
+    /// methods.  Once the configuration is set it cannot be changed.
+    ///</remarks>
+    public static GoogleSignInConfiguration Configuration {
+      set {
+        // Can set the configuration until the singleton is created.
+        if (theInstance == null || theConfiguration == value || theConfiguration == null) {
+          theConfiguration = value;
+        } else {
+          throw new SignInException(GoogleSignInStatusCode.DeveloperError,
+              "DefaultInstance already created. " +
+              " Cannot change configuration after creation.");
+        }
+      }
+
+      get {
+        return theConfiguration;
+      }
+    }
+
+    /// <summary>
+    /// Singleton instance of this class.
+    /// </summary>
+    /// <value>The instance.</value>
+    public static GoogleSignIn DefaultInstance {
+      get {
+        if (theInstance == null) {
+#if UNITY_ANDROID || UNITY_IOS
+          theInstance = new GoogleSignIn(new GoogleSignInImpl(Configuration));
+#else
+          theInstance = new GoogleSignIn(null);
+          throw new SignInException(
+              GoogleSignInStatusCode.DeveloperError,
+              "This platform is not supported by GoogleSignIn");
+#endif
+        }
+        return theInstance;
+      }
+    }
+
+    internal GoogleSignIn(GoogleSignInImpl impl) {
+      this.impl = impl;
+    }
+
+    public void EnableDebugLogging(bool flag) {
+            impl.EnableDebugLogging(flag);
+    }
+
+    /// <summary>Starts the authentication process.</summary>
+    /// <remarks>
+    /// The authenication process is started and may display account picker
+    /// popups and consent prompts based on the state of authentication and
+    /// the requested elements.
+    /// </remarks>
+    public Task<GoogleSignInUser> SignIn() {
+      var tcs = new TaskCompletionSource<GoogleSignInUser>();
+      SignInHelperObject.Instance.StartCoroutine(
+        impl.SignIn().WaitForResult(tcs));
+      return tcs.Task;
+    }
+
+    /// <summary>Starts the silent authentication process.</summary>
+    /// <remarks>
+    /// The authenication process is started and will attempt to sign in without
+    /// displaying any UI.  If this cannot be done, the developer should call
+    /// SignIn().
+    /// </remarks>
+    public Task<GoogleSignInUser> SignInSilently() {
+      var tcs = new TaskCompletionSource<GoogleSignInUser>();
+      SignInHelperObject.Instance.StartCoroutine(
+          impl.SignInSilently().WaitForResult(tcs));
+      return tcs.Task;
+    }
+
+    /// <summary>
+    /// Signs out the User.
+    /// </summary>
+    /// <remarks>Future sign-in attempts will require the user to select the
+    /// account to use when signing in.
+    /// </remarks>
+    public void SignOut() {
+      theConfiguration = null;
+      impl.SignOut();
+    }
+
+    /// <summary>
+    /// Disconnect this instance.
+    /// </summary>
+    /// <remarks>When the user is disconnected, it revokes all access that may
+    /// have been granted to this application.  This includes any server side
+    /// access tokens derived from server auth codes.  As a result, future
+    /// sign-in attempts will require the user to re-consent to the requested
+    /// scopes.
+    /// </remarks>
+    public void Disconnect() {
+      impl.Disconnect();
+    }
+
+    /// <summary>
+    /// Sign in exception.  This is a checked exception for handling specific
+    /// errors during the sign-in process.
+    /// </summary>
+    [Serializable]
+    public class SignInException : Exception {
+      internal SignInException(GoogleSignInStatusCode status) {
+        Status = status;
+      }
+
+      public SignInException(GoogleSignInStatusCode status, string message) :
+          base(message) {
+        Status = status;
+      }
+
+      public SignInException(GoogleSignInStatusCode status, string message,
+          Exception innerException) : base(message, innerException) {
+        Status = status;
+      }
+
+      protected SignInException(GoogleSignInStatusCode status,
+                                SerializationInfo info,
+                                StreamingContext context) :
+          base(info, context) {
+        Status = status;
+      }
+
+      public GoogleSignInStatusCode Status {
+        get;
+        internal set;
+      }
+    }
+  }
+
+  internal interface ISignInImpl {
+    Future<GoogleSignInUser> SignIn();
+    Future<GoogleSignInUser> SignInSilently();
+    void EnableDebugLogging(bool flag);
+    void SignOut();
+    void Disconnect();
+  }
+}  // namespace Google
diff --git a/Assets/GoogleSignIn/GoogleSignIn.cs.meta b/Assets/GoogleSignIn/GoogleSignIn.cs.meta
new file mode 100644
index 00000000..31609ffd
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignIn.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 138b984208e394be797ce8905a44fd54
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/GoogleSignInConfiguration.cs b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs
new file mode 100644
index 00000000..d914c68d
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs
@@ -0,0 +1,63 @@
+// <copyright file="GoogleSignInConfiguration.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google {
+  using System.Collections.Generic;
+
+  /// <summary>
+  /// Configuration properties for Google Sign-In.
+  /// </summary>
+  public class GoogleSignInConfiguration {
+    /// <summary>Set to true to use games signin, false for default signin.
+    /// </summary>
+    /// <remarks>Note: The Games configuration is not supported on non-Android
+    /// platforms.
+    /// If games configuration is used, you must also add the
+    /// play-services-games libraries and dependencies.
+    /// See the README for more details.
+    /// </remarks>
+    public bool UseGameSignIn = false;
+    /// <summary>Web client id associated with this app.</summary>
+    /// <remarks>Required for requesting auth code or id token.</remarks>
+    public string WebClientId = null;
+    /// <summary>Set to true for getting an auth code when authenticating.
+    /// </summary>
+    public bool RequestAuthCode = false;
+    /// <summary>Set to true to request to reset the refresh token.
+    ///   Causes re-consent.
+    /// </summary>
+    public bool ForceTokenRefresh = false;
+    /// <summary>Request email address, requires consent.</summary>
+    public bool RequestEmail = false;
+    /// <summary>Request id token, requires consent.</summary>
+    public bool RequestIdToken = false;
+    /// <summary>Request profile information, requires consent.</summary>
+    public bool RequestProfile = false;
+    /// <summary>Hides popup UIs from games services.</summary>
+    /// <remarks>Used with games signin to show or hide the connecting popup UI
+    /// and to associate an invisible view for other popups.  This is
+    /// recommended for VR applications.  This has no effect if UseGameSignIn is
+    /// false.
+    /// </remarks>
+    public bool HidePopups = false;
+    /// <summary>Account name to use when authenticating,
+    ///  null indicates use default.</summary>
+    public string AccountName = null;
+    /// <summary>Additional scopes to request, requires consent.</summary>
+    public IEnumerable<string> AdditionalScopes = null;
+  }
+}
+
diff --git a/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta
new file mode 100644
index 00000000..943644cc
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInConfiguration.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 0c3999c0f68f04ae08f04fb3bf2a2050
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/GoogleSignInController.cs b/Assets/GoogleSignIn/GoogleSignInController.cs
new file mode 100644
index 00000000..5383ed44
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInController.cs
@@ -0,0 +1,50 @@
+using UnityEngine;
+using Google;
+using System.Threading.Tasks;
+
+public class GoogleSignInController : MonoBehaviour
+{
+    private GoogleSignInConfiguration configuration;
+
+    void Awake()
+    {
+        // Set up the Google Sign-In configuration
+        configuration = new GoogleSignInConfiguration
+        {
+            WebClientId = "624507103444-6agok4g1q29bsb615v235jbf0k585ruk.apps.googleusercontent.com",
+            RequestEmail = true,
+            RequestIdToken = false,  // ❌ We no longer request IdToken, since we use ServerAuthCode instead
+            RequestAuthCode = true   // ✅ Enable ServerAuthCode for secure backend authentication
+        };
+
+        GoogleSignIn.Configuration = configuration;
+    }
+
+    public void SignInWithGoogle()
+    {
+        GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnGoogleSignIn);
+    }
+
+    private void OnGoogleSignIn(Task<GoogleSignInUser> task)
+    {
+        if (task.IsFaulted)
+        {
+            Debug.LogError("Google Sign-In encountered an error: " + task.Exception);
+        }
+        else if (task.IsCanceled)
+        {
+            Debug.Log("Google Sign-In was canceled.");
+        }
+        else
+        {
+            GoogleSignInUser user = task.Result;
+            Debug.Log("✅ Google Sign-In succeeded!");
+            Debug.Log("👤 Display Name: " + user.DisplayName);
+            Debug.Log("📧 Email: " + user.Email);
+            Debug.Log("🔑 Server Auth Code: " + user.AuthCode);
+
+            // 🔹 Send this AuthCode to your backend (PlayFab, Firebase, or custom server)
+            // The backend will exchange this for an access token.
+        }
+    }
+}
diff --git a/Assets/GoogleSignIn/GoogleSignInController.cs.meta b/Assets/GoogleSignIn/GoogleSignInController.cs.meta
new file mode 100644
index 00000000..0b41ba01
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInController.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8948afce6ec0e984aa137d3f84aba688
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/GoogleSignInStatusCode.cs b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs
new file mode 100644
index 00000000..0719f2c2
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs
@@ -0,0 +1,72 @@
+// <copyright file="GoogleSignInStatusCode.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google {
+
+  /// <summary>
+  /// Status code for the SignIn operations.
+  /// </summary>
+  /// <remarks>All successful status codes are less than or equal to 0.
+  /// </remarks>
+  public enum GoogleSignInStatusCode {
+    /// <summary>The operation was successful, but used the device's cache.
+    /// </summary>
+    SuccessCached = -1,
+
+    /// <summary>The operation was successful.</summary>
+    Success = 0,
+
+    /// <summary>The client attempted to call a method from an API that
+    /// failed to connect.</summary>
+    ApiNotConnected = 1,
+
+    /// <summary>The result was canceled either due to client disconnect
+    /// or cancel().</summary>
+    Canceled = 2,
+
+    /// <summary> A blocking call was interrupted while waiting and did not
+    /// run to completion.</summary>
+    Interrupted = 3,
+
+    /// <summary> The client attempted to connect to the service with an
+    /// invalid account name specified. </summary>
+    InvalidAccount = 4,
+
+    /// <summary>Timed out while awaiting the result.</summary>
+    Timeout = 5,
+
+    /// <summary>The application is misconfigured.
+    /// This error is not recoverable.</summary>
+    /// <remarks>
+    /// The developer should look at the logs after this to determine
+    /// more actionable information.
+    /// </remarks>
+    DeveloperError = 6,
+
+    /// <summary>An internal error occurred. Retrying should resolve the
+    /// problem.</summary>
+    InternalError = 7,
+
+    /// <summary>A network error occurred. Retrying should resolve the problem.
+    /// </summary>
+    NetworkError = 8,
+
+    /// <summary> The operation failed with no more detailed information.
+    /// </summary>
+    Error = 9,
+  }
+}  // namespace GoogleSignIn
+
diff --git a/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta
new file mode 100644
index 00000000..238e45f5
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInStatusCode.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 077933fcaedac412d9762bf3e0a3be68
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/GoogleSignInUser.cs b/Assets/GoogleSignIn/GoogleSignInUser.cs
new file mode 100644
index 00000000..a3ea8b3f
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInUser.cs
@@ -0,0 +1,76 @@
+// <copyright file="GoogleSignInUser.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google {
+  using System;
+
+    /// <summary> Information for the authenticated user.</summary>
+    public class GoogleSignInUser {
+
+    /// <summary> Server AuthCode to be exchanged for an auth token.</summary>
+    ///<remarks> null if not requested, or if there was an error.</remarks>
+    public string AuthCode {
+      get;
+      internal set;
+    }
+
+    /// <summary> Email address.</summary>
+    ///<remarks> null if not requested, or if there was an error.</remarks>
+    public string Email {
+      get;
+      internal set;
+    }
+
+    /// <summary> Id token.</summary>
+    ///<remarks> null if not requested, or if there was an error.</remarks>
+    public string IdToken {
+      get;
+      internal set;
+    }
+
+    /// <summary> Display Name.</summary>
+    public string DisplayName {
+      get;
+      internal set;
+    }
+
+    /// <summary> Given Name.</summary>
+    public string GivenName {
+      get;
+      internal set;
+    }
+
+    /// <summary> Family Name.</summary>
+    public string FamilyName {
+      get;
+      internal set;
+    }
+
+    /// <summary> Profile photo</summary>
+    /// <remarks> Can be null if the profile is not requested,
+    /// or none set.</remarks>
+    public Uri ImageUrl {
+      get;
+      internal set;
+    }
+
+    /// <summary> User ID</summary>
+    public string UserId {
+      get;
+      internal set;
+    }
+  }
+}
diff --git a/Assets/GoogleSignIn/GoogleSignInUser.cs.meta b/Assets/GoogleSignIn/GoogleSignInUser.cs.meta
new file mode 100644
index 00000000..587c6861
--- /dev/null
+++ b/Assets/GoogleSignIn/GoogleSignInUser.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: c56b92217d0144af5907627d1235e0a5
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Impl.meta b/Assets/GoogleSignIn/Impl.meta
new file mode 100644
index 00000000..de5f17f2
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 2fbe4f3ec9db4415e849f9bb89e63a92
+folderAsset: yes
+timeCreated: 1502761839
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Impl/BaseObject.cs b/Assets/GoogleSignIn/Impl/BaseObject.cs
new file mode 100644
index 00000000..44d65013
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/BaseObject.cs
@@ -0,0 +1,70 @@
+// <copyright file="BaseObject.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google.Impl {
+  using System;
+  using System.Runtime.InteropServices;
+  using System.Text;
+  using UnityEngine;
+
+  /// <summary>
+  /// Base object manages the pointer to a native object which provides the
+  /// implementation of a C# object.
+  /// </summary>
+  internal abstract class BaseObject : IDisposable {
+    // handle to native object.
+    private HandleRef selfHandleRef;
+    private static HandleRef nullSelf = new HandleRef();
+
+    public BaseObject(IntPtr intPtr) {
+      selfHandleRef = new HandleRef(this, intPtr);
+    }
+
+    protected HandleRef SelfPtr() {
+      if (selfHandleRef.Equals(nullSelf)) {
+        throw new InvalidOperationException(
+          "Attempted to use object after it was cleaned up");
+      }
+      return selfHandleRef;
+    }
+
+    public virtual void Dispose() {
+      selfHandleRef = nullSelf;
+    }
+
+    internal delegate UIntPtr OutStringMethod([In, Out] byte[] out_bytes,
+        UIntPtr out_size);
+
+    internal static String OutParamsToString(OutStringMethod outStringMethod) {
+      UIntPtr requiredSize = outStringMethod(null, UIntPtr.Zero);
+      if (requiredSize.Equals(UIntPtr.Zero)) {
+        return null;
+      }
+
+      string str = null;
+      try {
+        byte[] array = new byte[requiredSize.ToUInt32()];
+        outStringMethod(array, requiredSize);
+        str = Encoding.UTF8.GetString(array, 0,
+                (int)requiredSize.ToUInt32() - 1);
+      } catch (Exception e) {
+        Debug.LogError("Exception creating string from char array: " + e);
+        str = string.Empty;
+      }
+      return str;
+    }
+  }
+}
diff --git a/Assets/GoogleSignIn/Impl/BaseObject.cs.meta b/Assets/GoogleSignIn/Impl/BaseObject.cs.meta
new file mode 100644
index 00000000..0e24225d
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/BaseObject.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: fe250cda690a44cb08f8f7d26c9723b4
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
new file mode 100644
index 00000000..78c8081f
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs
@@ -0,0 +1,187 @@
+// <copyright file="GoogleSignInImpl.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google.Impl {
+  using System;
+  using System.Collections.Generic;
+  using System.Runtime.InteropServices;
+
+  internal class GoogleSignInImpl : BaseObject, ISignInImpl {
+
+#if UNITY_ANDROID
+    private const string DllName = "native-googlesignin";
+#else
+    private const string DllName = "__Internal";
+#endif
+
+    internal GoogleSignInImpl(GoogleSignInConfiguration configuration)
+          : base(GoogleSignIn_Create(GetPlayerActivity())) {
+
+      if (configuration != null) {
+        List<string> scopes = new List<string>();
+        if (configuration.AdditionalScopes != null) {
+          scopes.AddRange(configuration.AdditionalScopes);
+        }
+        GoogleSignIn_Configure(SelfPtr(), configuration.UseGameSignIn,
+                     configuration.WebClientId,
+                     configuration.RequestAuthCode,
+                     configuration.ForceTokenRefresh,
+                     configuration.RequestEmail,
+                     configuration.RequestIdToken,
+                     configuration.HidePopups,
+                     scopes.ToArray(),
+                     scopes.Count,
+                     configuration.AccountName);
+      }
+    }
+
+    /// <summary>Enables/Disables verbose logging to help troubleshooting</summary>
+    public void EnableDebugLogging(bool flag) {
+        GoogleSignIn_EnableDebugLogging(SelfPtr(), flag);
+    }
+
+    /// <summary>
+    /// Starts the authentication process.
+    /// </summary>
+    /// <remarks>
+    /// The authenication process is started and may display account picker
+    /// popups and consent prompts based on the state of authentication and
+    /// the requested elements.
+    /// </remarks>
+    public Future<GoogleSignInUser> SignIn() {
+      IntPtr nativeFuture = GoogleSignIn_SignIn(SelfPtr());
+      return new Future<GoogleSignInUser>(new NativeFuture(nativeFuture));
+    }
+
+    /// <summary>
+    /// Starts the authentication process.
+    /// </summary>
+    /// <remarks>
+    /// The authenication process is started and may display account picker
+    /// popups and consent prompts based on the state of authentication and
+    /// the requested elements.
+    /// </remarks>
+    public Future<GoogleSignInUser> SignInSilently() {
+      IntPtr nativeFuture = GoogleSignIn_SignInSilently(SelfPtr());
+      return new Future<GoogleSignInUser>(new NativeFuture(nativeFuture));
+    }
+
+    /// <summary>
+    /// Signs out the User.
+    /// </summary>
+    public void SignOut() {
+      GoogleSignIn_Signout(SelfPtr());
+    }
+
+    /// <summary>
+    /// Disconnects the user from the application and revokes all consent.
+    /// </summary>
+    public void Disconnect() {
+      GoogleSignIn_Disconnect(SelfPtr());
+    }
+
+    /// <summary>
+    /// Creates an instance of the native Google Sign-In implementation.
+    /// </summary>
+    /// <remarks>
+    ///  For Android this must be the JNI raw object for the parentActivity.
+    ///  For iOS it is ignored.
+    /// </remarks>
+    /// <returns>The pointer to the instance.</returns>
+    /// <param name="data">Data used in creating the instance.</param>
+    [DllImport(DllName)]
+    static extern IntPtr GoogleSignIn_Create(IntPtr data);
+
+    [DllImport(DllName)]
+    static extern void GoogleSignIn_EnableDebugLogging(HandleRef self, bool flag);
+
+    [DllImport(DllName)]
+    static extern bool GoogleSignIn_Configure(HandleRef self,
+      bool useGameSignIn, string webClientId,
+      bool requestAuthCode, bool forceTokenRefresh, bool requestEmail,
+      bool requestIdToken, bool hidePopups, string[] additionalScopes,
+      int scopeCount, string accountName);
+
+    [DllImport(DllName)]
+    static extern IntPtr GoogleSignIn_SignIn(HandleRef self);
+
+    [DllImport(DllName)]
+    static extern IntPtr GoogleSignIn_SignInSilently(HandleRef self);
+
+    [DllImport(DllName)]
+    static extern void GoogleSignIn_Signout(HandleRef self);
+
+    [DllImport(DllName)]
+    static extern void GoogleSignIn_Disconnect(HandleRef self);
+
+    [DllImport(DllName)]
+    internal static extern void GoogleSignIn_DisposeFuture(HandleRef self);
+
+    [DllImport(DllName)]
+    internal static extern bool GoogleSignIn_Pending(HandleRef self);
+
+    [DllImport(DllName)]
+    internal static extern IntPtr GoogleSignIn_Result(HandleRef self);
+
+    [DllImport(DllName)]
+    internal static extern int GoogleSignIn_Status(HandleRef self);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetServerAuthCode(
+      HandleRef self, [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetDisplayName(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetEmail(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetFamilyName(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetGivenName(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetIdToken(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetImageUrl(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    [DllImport(DllName)]
+    internal static extern UIntPtr GoogleSignIn_GetUserId(HandleRef self,
+      [In, Out] byte[] bytes, UIntPtr len);
+
+    // Gets the Unity player activity.
+    // For iOS, this returns Zero.
+    private static IntPtr GetPlayerActivity() {
+#if UNITY_ANDROID
+      UnityEngine.AndroidJavaClass jc = new UnityEngine.AndroidJavaClass(
+        "com.unity3d.player.UnityPlayer");
+      return jc.GetStatic<UnityEngine.AndroidJavaObject>("currentActivity")
+               .GetRawObject();
+#else
+      return IntPtr.Zero;
+#endif
+    }
+  }
+}
diff --git a/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta
new file mode 100644
index 00000000..46c1d561
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/GoogleSignInImpl.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 9ae1f008f9f994b9c96c1a14067d7b48
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Impl/NativeFuture.cs b/Assets/GoogleSignIn/Impl/NativeFuture.cs
new file mode 100644
index 00000000..6d460f22
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/NativeFuture.cs
@@ -0,0 +1,102 @@
+// <copyright file="NativeFuture.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//    limitations under the License.
+// </copyright>
+
+namespace Google.Impl {
+  using System;
+  using System.Runtime.InteropServices;
+
+  /// <summary>
+  /// Native future is an interal class that implements the FutureAPIImpl
+  /// by calling native methods which are implemented in the native code.
+  /// </summary>
+  internal class NativeFuture : BaseObject, FutureAPIImpl<GoogleSignInUser> {
+
+    internal NativeFuture(IntPtr ptr) : base(ptr) {
+    }
+
+    public override void Dispose() {
+      GoogleSignInImpl.GoogleSignIn_DisposeFuture(SelfPtr());
+      base.Dispose();
+    }
+
+    public bool Pending {
+      get {
+        return GoogleSignInImpl.GoogleSignIn_Pending(SelfPtr());
+      }
+    }
+
+    public GoogleSignInUser Result {
+      get {
+        IntPtr ptr = GoogleSignInImpl.GoogleSignIn_Result(SelfPtr());
+        if (ptr != IntPtr.Zero) {
+          GoogleSignInUser user = new GoogleSignInUser();
+          HandleRef userPtr = new HandleRef(user, ptr);
+
+          user.DisplayName = OutParamsToString((out_string, out_size) =>
+                  GoogleSignInImpl.GoogleSignIn_GetDisplayName(userPtr,
+                                                               out_string,
+                                                               out_size));
+          user.Email = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetEmail(userPtr, out_string,
+                                                     out_size));
+
+          user.FamilyName = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetFamilyName(userPtr, out_string,
+                                                          out_size));
+
+          user.GivenName = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetGivenName(userPtr, out_string,
+                                                         out_size));
+
+          user.IdToken = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetIdToken(userPtr, out_string,
+                                                       out_size));
+
+          user.AuthCode = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetServerAuthCode(userPtr, out_string,
+                                                              out_size));
+
+          string url = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetImageUrl(userPtr, out_string,
+                                                        out_size));
+          if (url.Length > 0) {
+            user.ImageUrl = new System.Uri(url);
+          }
+
+          user.UserId = OutParamsToString((out_string, out_size) =>
+              GoogleSignInImpl.GoogleSignIn_GetUserId(userPtr, out_string,
+                                                      out_size));
+          return user;
+        } else {
+          return null;
+        }
+      }
+    }
+
+    /// <summary>
+    /// Gets the status.
+    /// </summary>
+    /// <remarks>The platform specific implementation maps the platform specific
+    /// code to one defined in GoogleSignStatusCode.</remarks>
+    /// <value>The status.</value>
+    public GoogleSignInStatusCode Status {
+      get {
+        return (GoogleSignInStatusCode)GoogleSignInImpl.GoogleSignIn_Status(
+          SelfPtr());
+      }
+    }
+  }
+}
diff --git a/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta b/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta
new file mode 100644
index 00000000..0cb0bd1b
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/NativeFuture.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 5f1aae79b1ca4432d9d8ec382c54bf46
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSignIn/Impl/SignInHelperObject.cs b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs
new file mode 100644
index 00000000..6fbf3fe0
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs
@@ -0,0 +1,42 @@
+// <copyright file="SignInHelperObject.cs" company="Google Inc.">
+// Copyright (C) 2017 Google Inc. All Rights Reserved.
+//
+//  Licensed under the Apache License, Version 2.0 (the "License");
+//  you may not use this file except in compliance with the License.
+//  You may obtain a copy of the License at
+//
+//  http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+// </copyright>
+namespace Google.Impl {
+  using UnityEngine;
+
+  ///<summary>Helper object to connect the Sign-in API to the Unity Game Scene.
+  ///</summary>
+  ///<remarks>This class is added to the scene so that the Google Sign-in API
+  ///  can start coroutines.
+  ///</remarks>
+  public class SignInHelperObject : MonoBehaviour {
+
+    private static SignInHelperObject instance;
+
+    internal static SignInHelperObject Instance {
+      get {
+        if (Application.isPlaying) {
+          // add an invisible game object to the scene
+          GameObject obj = new GameObject("GoogleSignInHelperObject");
+          DontDestroyOnLoad(obj);
+          instance = obj.AddComponent<SignInHelperObject>();
+        } else {
+          instance = new SignInHelperObject();
+        }
+        return instance;
+      }
+    }
+  }
+}
diff --git a/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta
new file mode 100644
index 00000000..2dd5652c
--- /dev/null
+++ b/Assets/GoogleSignIn/Impl/SignInHelperObject.cs.meta
@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: ad98e5b48888e44eb81dd5884d3a1754
+labels:
+- gvh
+- gvh_version-1.0.4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK.meta b/Assets/GoogleSigninSDK.meta
new file mode 100644
index 00000000..d037d551
--- /dev/null
+++ b/Assets/GoogleSigninSDK.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: df8ccdbfa53820647be6f67fba435252
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK/GoogleSignInManager.cs b/Assets/GoogleSigninSDK/GoogleSignInManager.cs
new file mode 100644
index 00000000..49297585
--- /dev/null
+++ b/Assets/GoogleSigninSDK/GoogleSignInManager.cs
@@ -0,0 +1,233 @@
+using UnityEngine;
+using UnityEngine.UI;
+using Google;
+using PlayFab;
+using PlayFab.ClientModels;
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+public class GoogleSignInManager : MonoBehaviour
+{
+    private GoogleSignInConfiguration configuration;
+    public Bootstrapper bootstrapper;
+    public Button googleSignInButton;
+    public Button guestLoginButton;
+
+    void Awake()
+    {
+        configuration = new GoogleSignInConfiguration
+        {
+            WebClientId = "1044061384825-kervrjq8gcopk6ijs69qnm4jqeh7rj7r.apps.googleusercontent.com",
+            RequestEmail = true,
+            RequestAuthCode = true
+        };
+
+        GoogleSignIn.Configuration = configuration;
+        Application.quitting += SyncPlayerPrefsToPlayFabOnQuit;
+    }
+
+    void Start()
+    {
+        googleSignInButton.onClick.RemoveAllListeners();
+        googleSignInButton.onClick.AddListener(SignInWithGoogle);
+
+        guestLoginButton.onClick.RemoveAllListeners();
+        guestLoginButton.onClick.AddListener(GuestLogin);
+
+        if (PlayerPrefs.HasKey("PlayFabID") && !PlayerPrefs.HasKey("GuestMode"))
+        {
+            Debug.Log("User previously signed in with Google. Attempting silent login...");
+            googleSignInButton.gameObject.SetActive(false);
+            guestLoginButton.gameObject.SetActive(false);
+            SignInSilently();
+        }
+        else if (PlayerPrefs.HasKey("GuestMode"))
+        {
+            Debug.Log("Guest mode previously selected. Letting user choose again.");
+            googleSignInButton.gameObject.SetActive(true);
+            guestLoginButton.gameObject.SetActive(true);
+        }
+        else
+        {
+            Debug.Log("No login info found. Showing login options.");
+            googleSignInButton.gameObject.SetActive(true);
+            guestLoginButton.gameObject.SetActive(true);
+        }
+    }
+
+    public void GuestLogin()
+    {
+        Debug.Log("Starting game in Guest Mode...");
+        SafePlayerPrefs.SetInt("GuestMode", 1);
+        PlayerPrefs.Save();
+
+        googleSignInButton.gameObject.SetActive(false);
+        guestLoginButton.gameObject.SetActive(false);
+
+        bootstrapper.StartGame();
+    }
+
+    public void SignInWithGoogle()
+    {
+        PlayerPrefs.DeleteKey("GuestMode");
+        PlayerPrefs.DeleteAll();
+        PlayerPrefs.Save();
+
+        googleSignInButton.interactable = false;
+        guestLoginButton.interactable = false;
+
+        GoogleSignIn.DefaultInstance.SignIn().ContinueWith(OnGoogleSignIn);
+    }
+
+    private void OnGoogleSignIn(Task<GoogleSignInUser> task)
+    {
+        if (task.IsFaulted || task.IsCanceled)
+        {
+            Debug.LogError("Google Sign-In failed: " + task.Exception);
+
+            googleSignInButton.gameObject.SetActive(true);
+            googleSignInButton.interactable = true;
+
+            guestLoginButton.gameObject.SetActive(true);
+            guestLoginButton.interactable = true;
+            return;
+        }
+
+        GoogleSignInUser user = task.Result;
+        string authCode = user.AuthCode;
+        SafePlayerPrefs.SetString("GoogleAuthCode", authCode);
+        PlayerPrefs.Save();
+
+        LoginToPlayFab(authCode);
+    }
+
+    private void SignInSilently()
+    {
+        Debug.Log("Attempting Google Silent Sign-In...");
+
+        GoogleSignIn.DefaultInstance.SignInSilently().ContinueWith(task =>
+        {
+            if (task.IsFaulted || task.IsCanceled)
+            {
+                Debug.LogWarning("Silent Sign-In failed. Showing login buttons.");
+                googleSignInButton.gameObject.SetActive(true);
+                googleSignInButton.interactable = true;
+
+                guestLoginButton.gameObject.SetActive(true);
+                guestLoginButton.interactable = true;
+                return;
+            }
+
+            GoogleSignInUser user = task.Result;
+            string authCode = user.AuthCode;
+            SafePlayerPrefs.SetString("GoogleAuthCode", authCode);
+            PlayerPrefs.Save();
+
+            LoginToPlayFab(authCode);
+        });
+    }
+
+    private void LoginToPlayFab(string authCode)
+    {
+        PlayFabSettings.staticSettings.TitleId = "1819C6";
+        var request = new LoginWithGoogleAccountRequest
+        {
+            TitleId = "1819C6",
+            ServerAuthCode = authCode,
+            CreateAccount = true
+        };
+
+        PlayFabClientAPI.LoginWithGoogleAccount(request, OnPlayFabLoginSuccess, OnPlayFabLoginFailure);
+    }
+
+    private void OnPlayFabLoginSuccess(LoginResult result)
+    {
+        Debug.Log("✅ PlayFab Login Success! PlayFab ID: " + result.PlayFabId);
+        SafePlayerPrefs.SetString("PlayFabID", result.PlayFabId);
+        PlayerPrefs.Save();
+
+        LoadPlayerPrefsFromPlayFab(() =>
+        {
+            googleSignInButton.gameObject.SetActive(false);
+            guestLoginButton.gameObject.SetActive(false);
+            bootstrapper.StartGame();
+        });
+    }
+
+    private void OnPlayFabLoginFailure(PlayFabError error)
+    {
+        Debug.LogError("❌ PlayFab Login Failed: " + error.GenerateErrorReport());
+
+        googleSignInButton.gameObject.SetActive(true);
+        googleSignInButton.interactable = true;
+
+        guestLoginButton.gameObject.SetActive(true);
+        guestLoginButton.interactable = true;
+    }
+
+    private void LoadPlayerPrefsFromPlayFab(Action onComplete)
+    {
+        PlayFabClientAPI.GetUserData(new GetUserDataRequest(), result =>
+        {
+            if (result.Data != null)
+            {
+                foreach (var entry in result.Data)
+                {
+                    string key = entry.Key;
+                    string rawValue = entry.Value.Value;
+
+                    if (rawValue.StartsWith("int:") && int.TryParse(rawValue.Substring(4), out int i))
+                        SafePlayerPrefs.SetInt(key, i);
+                    else if (rawValue.StartsWith("float:") && float.TryParse(rawValue.Substring(6), out float f))
+                        SafePlayerPrefs.SetFloat(key, f);
+                    else if (rawValue.StartsWith("string:"))
+                        SafePlayerPrefs.SetString(key, rawValue.Substring(7));
+                    else
+                        SafePlayerPrefs.SetString(key, rawValue);
+
+                    PlayerPrefsKeys.RegisterKey(key);
+                }
+                PlayerPrefs.Save();
+            }
+
+            onComplete?.Invoke();
+        },
+        error =>
+        {
+            Debug.LogError("❌ Failed to load SafePlayerPrefs from PlayFab: " + error.GenerateErrorReport());
+            onComplete?.Invoke();
+        });
+    }
+
+    private void SyncPlayerPrefsToPlayFabOnQuit()
+    {
+        if (PlayerPrefs.HasKey("GuestMode")) return;
+
+        Dictionary<string, string> allPrefs = new Dictionary<string, string>();
+        foreach (var key in PlayerPrefsKeys.GetAllKeys())
+        {
+            allPrefs[key] = PlayerPrefs.GetString(key);
+        }
+
+        var request = new UpdateUserDataRequest
+        {
+            Data = allPrefs
+        };
+
+        PlayFabClientAPI.UpdateUserData(request,
+            result => Debug.Log("✅ Synced SafePlayerPrefs to PlayFab on quit."),
+            error => Debug.LogError("❌ Failed to sync SafePlayerPrefs: " + error.GenerateErrorReport()));
+    }
+
+    public void SignOut()
+    {
+        PlayerPrefs.DeleteKey("GoogleAuthCode");
+        PlayerPrefs.DeleteKey("PlayFabID");
+        PlayerPrefs.DeleteKey("GuestMode");
+        PlayerPrefs.Save();
+
+        GoogleSignIn.DefaultInstance.SignOut();
+        Debug.Log("User signed out.");
+    }
+}
diff --git a/Assets/GoogleSigninSDK/GoogleSignInManager.cs.meta b/Assets/GoogleSigninSDK/GoogleSignInManager.cs.meta
new file mode 100644
index 00000000..9a5af1d6
--- /dev/null
+++ b/Assets/GoogleSigninSDK/GoogleSignInManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: aea303bf6931eb64a925ac187863ae99
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs b/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs
new file mode 100644
index 00000000..fbe794c4
--- /dev/null
+++ b/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs
@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using UnityEngine;
+public static class PlayerPrefsKeys
+{
+    private const string KeyRegistry = "_AllPlayerPrefsKeys";
+
+    public static void RegisterKey(string key)
+    {
+        var keys = PlayerPrefs.GetString(KeyRegistry, "");
+        if (!keys.Contains(key))
+        {
+            keys += key + ";";
+            SafePlayerPrefs.SetString(KeyRegistry, keys);
+            PlayerPrefs.Save();
+        }
+    }
+
+    public static List<string> GetAllKeys()
+    {
+        var keysString = PlayerPrefs.GetString(KeyRegistry, "");
+        return new List<string>(keysString.Split(';', System.StringSplitOptions.RemoveEmptyEntries));
+    }
+}
diff --git a/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs.meta b/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs.meta
new file mode 100644
index 00000000..59a532b4
--- /dev/null
+++ b/Assets/GoogleSigninSDK/PlayerPrefsKeys.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ffa4debad77245b4d9620a5fc2b07c9d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs b/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs
new file mode 100644
index 00000000..a6881f5a
--- /dev/null
+++ b/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs
@@ -0,0 +1,134 @@
+using UnityEngine;
+using PlayFab;
+using PlayFab.ClientModels;
+using System.Collections.Generic;
+
+public class PlayerPrefsSyncManager : MonoBehaviour
+{
+    private static PlayerPrefsSyncManager instance;
+
+    private void OnApplicationQuit()
+    {
+        SyncPlayerPrefsToPlayFabOnQuit();
+    }
+
+    private void OnApplicationPause()
+    {
+        SyncPlayerPrefsToPlayFabOnQuit();
+    }
+
+    private void OnApplicationFocus(bool focus)
+    {
+        //if (!focus)
+        SyncPlayerPrefsToPlayFabOnQuit();
+    }
+
+    void Awake()
+    {
+        if (instance == null)
+        {
+            instance = this;
+            DontDestroyOnLoad(this.gameObject);
+            Application.quitting += SyncPlayerPrefsToPlayFabOnQuit;
+        }
+        else
+        {
+            Destroy(gameObject);
+        }
+    }
+
+    private const int MaxKeysPerRequest = 10;
+
+    public void SyncPlayerPrefsToPlayFabOnQuit()
+    {
+        if (PlayFabClientAPI.IsClientLoggedIn())
+        {
+
+            var keys = PlayerPrefsKeys.GetAllKeys();
+            if (keys.Count == 0)
+            {
+                Debug.Log("No PlayerPrefs keys registered, skipping sync.");
+                return;
+            }
+
+            Dictionary<string, string> allPrefs = new Dictionary<string, string>();
+
+            foreach (var key in keys)
+            {
+                string strVal = PlayerPrefs.GetString(key, "__MISSING__");
+                if (strVal != "__MISSING__")
+                {
+                    allPrefs[key] = "string:" + strVal;
+                    continue;
+                }
+
+                int intVal = PlayerPrefs.GetInt(key, int.MinValue + 1);
+                if (intVal != int.MinValue + 1)
+                {
+                    allPrefs[key] = "int:" + intVal;
+                    continue;
+                }
+
+                float floatVal = PlayerPrefs.GetFloat(key, float.MinValue + 1);
+                if (floatVal != float.MinValue + 1)
+                {
+                    allPrefs[key] = "float:" + floatVal.ToString("R");
+                }
+            }
+
+            foreach (var pair in allPrefs)
+            {
+                Debug.Log($"[Sync] {pair.Key} = {pair.Value}");
+            }
+
+            // Split into batches of 10
+            var batches = new List<Dictionary<string, string>>();
+            var currentBatch = new Dictionary<string, string>();
+
+            foreach (var pair in allPrefs)
+            {
+                currentBatch[pair.Key] = pair.Value;
+                if (currentBatch.Count == MaxKeysPerRequest)
+                {
+                    batches.Add(currentBatch);
+                    currentBatch = new Dictionary<string, string>();
+                }
+            }
+
+            if (currentBatch.Count > 0)
+            {
+                batches.Add(currentBatch);
+            }
+
+            UploadPlayerPrefsBatches(batches, 0);
+        }
+
+    }
+
+    private void UploadPlayerPrefsBatches(List<Dictionary<string, string>> batches, int index)
+    {
+        if (index >= batches.Count)
+        {
+            Debug.Log("✅ All PlayerPrefs batches synced to PlayFab.");
+            return;
+        }
+
+        var request = new UpdateUserDataRequest
+        {
+            Data = batches[index],
+            Permission = UserDataPermission.Public
+        };
+
+        PlayFabClientAPI.UpdateUserData(request,
+            result =>
+            {
+                Debug.Log($"✅ Synced batch {index + 1}/{batches.Count}");
+                UploadPlayerPrefsBatches(batches, index + 1);
+            },
+            error =>
+            {
+                Debug.LogError($"❌ Failed to sync batch {index + 1}/{batches.Count}: {error.GenerateErrorReport()}");
+            });
+    }
+
+}
diff --git a/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs.meta b/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs.meta
new file mode 100644
index 00000000..ae012cd4
--- /dev/null
+++ b/Assets/GoogleSigninSDK/PlayerPrefsSyncManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c814388591ae90d4aa18f1259f9c3b10
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK/SafePlayerPrefs.cs b/Assets/GoogleSigninSDK/SafePlayerPrefs.cs
new file mode 100644
index 00000000..64ac397c
--- /dev/null
+++ b/Assets/GoogleSigninSDK/SafePlayerPrefs.cs
@@ -0,0 +1,24 @@
+using UnityEngine;
+public static class SafePlayerPrefs
+{
+    public static void SetInt(string key, int value)
+    {
+        PlayerPrefs.SetInt(key, value);
+        PlayerPrefsKeys.RegisterKey(key);
+        PlayerPrefs.Save();
+    }
+
+    public static void SetFloat(string key, float value)
+    {
+        PlayerPrefs.SetFloat(key, value);
+        PlayerPrefsKeys.RegisterKey(key);
+        PlayerPrefs.Save();
+    }
+
+    public static void SetString(string key, string value)
+    {
+        PlayerPrefs.SetString(key, value);
+        PlayerPrefsKeys.RegisterKey(key);
+        PlayerPrefs.Save();
+    }
+}
diff --git a/Assets/GoogleSigninSDK/SafePlayerPrefs.cs.meta b/Assets/GoogleSigninSDK/SafePlayerPrefs.cs.meta
new file mode 100644
index 00000000..10756386
--- /dev/null
+++ b/Assets/GoogleSigninSDK/SafePlayerPrefs.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3f16590318a73204e98d26d21f94e188
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/GoogleSigninSDK/SigninWithGoogle.png b/Assets/GoogleSigninSDK/SigninWithGoogle.png
new file mode 100644
index 00000000..a0828ca6
Binary files /dev/null and b/Assets/GoogleSigninSDK/SigninWithGoogle.png differ
diff --git a/Assets/GoogleSigninSDK/SigninWithGoogle.png.meta b/Assets/GoogleSigninSDK/SigninWithGoogle.png.meta
new file mode 100644
index 00000000..84750a5d
--- /dev/null
+++ b/Assets/GoogleSigninSDK/SigninWithGoogle.png.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 2d53a66c391dadc4b8ad1347e8c7682f
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 0
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 0
+  swizzle: 50462976
+  cookieLightType: 0
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo LWRP.unitypackage.meta b/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo LWRP.unitypackage.meta
new file mode 100644
index 00000000..481168ca
--- /dev/null
+++ b/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo LWRP.unitypackage.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 8f45e171c1b0c824c8ee28fba89f60d9
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo URP.unitypackage.meta b/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo URP.unitypackage.meta
new file mode 100644
index 00000000..425aca80
--- /dev/null
+++ b/Assets/JMO Assets/Toony Colors Pro/Demo TCP2/Cat Demo URP.unitypackage.meta	
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d9caefce2b89817488383ea39c1affb2
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/LeaderBoard/LBEntrySelfItem.prefab b/Assets/LeaderBoard/LBEntrySelfItem.prefab
index 5f915124..97711a86 100644
--- a/Assets/LeaderBoard/LBEntrySelfItem.prefab
+++ b/Assets/LeaderBoard/LBEntrySelfItem.prefab
@@ -83,6 +83,14 @@ PrefabInstance:
     serializedVersion: 3
     m_TransformParent: {fileID: 0}
     m_Modifications:
+    - target: {fileID: 319142888219417387, guid: 88afb99e58a715640befe7148c6e92c6, type: 3}
+      propertyPath: m_SizeDelta.x
+      value: 153.7637
+      objectReference: {fileID: 0}
+    - target: {fileID: 319142888219417387, guid: 88afb99e58a715640befe7148c6e92c6, type: 3}
+      propertyPath: m_AnchoredPosition.x
+      value: -48.407166
+      objectReference: {fileID: 0}
     - target: {fileID: 1173944660103738944, guid: 88afb99e58a715640befe7148c6e92c6, type: 3}
       propertyPath: m_IsActive
       value: 1
@@ -209,7 +217,7 @@ PrefabInstance:
       objectReference: {fileID: 0}
     - target: {fileID: 7909119700891515046, guid: 88afb99e58a715640befe7148c6e92c6, type: 3}
       propertyPath: m_fontSize
-      value: 57.9
+      value: 68.9
       objectReference: {fileID: 0}
     - target: {fileID: 7909119700891515046, guid: 88afb99e58a715640befe7148c6e92c6, type: 3}
       propertyPath: m_fontAsset
diff --git a/Assets/LeaderBoard/LeaderboardUIScreen.cs b/Assets/LeaderBoard/LeaderboardUIScreen.cs
index c1803af2..fc4140bd 100644
--- a/Assets/LeaderBoard/LeaderboardUIScreen.cs
+++ b/Assets/LeaderBoard/LeaderboardUIScreen.cs
@@ -1,4 +1,4 @@
-using System.Collections;
+using System.Collections;
 using System.Collections.Generic;
 using DG.Tweening;
 using PlayFab;
@@ -12,22 +12,33 @@ public class LeaderboardUIScreen : MonoBehaviour
     [SerializeField] private Transform content;
     [SerializeField] private List<LBPedestalItem> _lbPedestalItems;
 
-    
+
     public void Init()
     {
-        PlayFabManager.Instance.playFabLeaderboards.GetLeaderboard(OnLeaderboardFetchSuccess, OnLeaderboardFetchFailure);
+        Debug.Log("Init called. IsClientLoggedIn: " + PlayFabClientAPI.IsClientLoggedIn());
+
+        if (PlayFabClientAPI.IsClientLoggedIn())
+        {
+            PlayFabManager.Instance.playFabLeaderboards.GetLeaderboard(OnLeaderboardFetchSuccess, OnLeaderboardFetchFailure);
+        }
+        else
+        {
+            Debug.LogWarning("Not logged in yet. Cannot fetch leaderboard.");
+        }
     }
 
+
     public void OnClose()
     {
         // GameObject[] temp = content.transform.GetComponentsInChildren<GameObject>();
         // for (int i = 0; i < temp.Length; i++)
         // {
-            // Destroy(temp[i]);
+        // Destroy(temp[i]);
         // }
     }
     private void OnLeaderboardFetchSuccess(List<PlayerLeaderboardEntry> leaderboard)
     {
+        Debug.Log("OnLeaderboardFetchSuccess");
         foreach (Transform child in content.transform)
         {
             Destroy(child.gameObject);
@@ -46,30 +57,51 @@ public class LeaderboardUIScreen : MonoBehaviour
             }
         }
 
-        content.GetComponent<RectTransform>().DOAnchorPosX(0f,1f).SetEase(Ease.OutElastic);
+        content.GetComponent<RectTransform>().DOAnchorPosX(0f, 1f).SetEase(Ease.OutElastic);
     }
-
     private void PopulateLbItem(PlayerLeaderboardEntry lbEntry)
     {
-        bool isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
+        bool isSelf = false;
+        if (lbEntry.Profile != null && PlayFabManager.Instance.playFabUserDataManager.myProfile != null)
+        {
+            isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
+        }
+
         LBEntryItem lbItem = Instantiate(isSelf ? lbItemSelfPrefab : lbItemPrefab, content).GetComponent<LBEntryItem>();
-        lbItem.nameText.text = lbEntry.DisplayName;
+        lbItem.nameText.text = lbEntry.DisplayName ?? lbEntry.PlayFabId;
         lbItem.rankText.text = (lbEntry.Position + 1).ToString();
         lbItem.scoreText.text = lbEntry.StatValue.ToString();
-        PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
-            {
-                lbItem.profilePic.sprite = sprite;
-            },
-            (s) =>
-            {
-                Debug.Log("Couldnt get pic");
-            });
+
+        PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, sprite =>
+        {
+            lbItem.profilePic.sprite = sprite;
+        }, error =>
+        {
+            Debug.Log("Couldn't get pic");
+        });
     }
 
+    //private void PopulateLbItem(PlayerLeaderboardEntry lbEntry)
+    //{
+    //    bool isSelf = lbEntry.Profile.PlayerId == PlayFabManager.Instance.playFabUserDataManager.myProfile.PlayerId;
+    //    LBEntryItem lbItem = Instantiate(isSelf ? lbItemSelfPrefab : lbItemPrefab, content).GetComponent<LBEntryItem>();
+    //    lbItem.nameText.text = lbEntry.DisplayName;
+    //    lbItem.rankText.text = (lbEntry.Position + 1).ToString();
+    //    lbItem.scoreText.text = lbEntry.StatValue.ToString();
+    //    PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
+    //        {
+    //            lbItem.profilePic.sprite = sprite;
+    //        },
+    //        (s) =>
+    //        {
+    //            Debug.Log("Couldnt get pic");
+    //        });
+    //}
+
     private void PopulatePedestalItem(PlayerLeaderboardEntry lbEntry)
     {
         LBPedestalItem pedestalItem = _lbPedestalItems[lbEntry.Position];
-        pedestalItem.nameText.text = lbEntry.DisplayName??lbEntry.PlayFabId;
+        pedestalItem.nameText.text = lbEntry.DisplayName ?? lbEntry.PlayFabId;
         pedestalItem.scoreText.text = lbEntry.StatValue.ToString();
         PlayFabManager.Instance.playFabUserDataManager.GetPlayerAvatarImage(lbEntry.PlayFabId, (sprite) =>
             {
@@ -81,11 +113,11 @@ public class LeaderboardUIScreen : MonoBehaviour
             });
     }
 
-    private void OnLeaderboardFetchFailure(PlayFabError obj)
+    private void OnLeaderboardFetchFailure(PlayFabError error)
     {
-        Debug.Log("Couldn't Load Leaderboards");
-        throw new System.NotImplementedException();
+        Debug.LogError("❌ Failed to fetch leaderboard: " + error.GenerateErrorReport());
     }
 
 
+
 }
\ No newline at end of file
diff --git a/Assets/LeaderBoardPlayfabDoTween.unitypackage.meta b/Assets/LeaderBoardPlayfabDoTween.unitypackage.meta
new file mode 100644
index 00000000..c6a3cebd
--- /dev/null
+++ b/Assets/LeaderBoardPlayfabDoTween.unitypackage.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a7e70d5f313c0df4ab5d4d87c0453d37
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-1.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-1.fbx.meta
index 44841ab6..0feab758 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-1.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-1.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 10213bc5a764bff4aa413bcc0ca743d8
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -40,6 +40,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -86,7 +87,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -94,27 +95,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -146,6 +155,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-10.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-10.fbx.meta
index e90dd8c5..6ae0540f 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-10.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-10.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: d5c51d95490ba67449bf450c1f6766e7
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-11.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-11.fbx.meta
index f4398aa6..806d2ce2 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-11.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-11.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 96ea0ce53aaeb874dadb7fbd8df49ba0
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-12.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-12.fbx.meta
index 2fa930e0..a125eda8 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-12.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-12.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 0558ec2941de94e4db043fcb0767fa61
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -29,6 +29,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -46,7 +47,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -54,27 +55,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -106,6 +115,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-13.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-13.fbx.meta
index ffe7fdc7..3f21df77 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-13.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-13.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: bbaee1258b3d2e5478753225434c6a40
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-14.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-14.fbx.meta
index f130c5d6..fb5cff8e 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-14.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-14.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 4d1d3f4f619fdee4ca95ec16c8d663ae
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-15.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-15.fbx.meta
index 24063d69..4e041682 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-15.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-15.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 9efdf49cca747064e89ea3e7f0793e03
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-16.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-16.fbx.meta
index 2d5e7ac5..52a40665 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-16.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-16.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 648d8aa6bf8b31d4c8c183cac2acc9ed
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -29,6 +29,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -46,7 +47,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -54,27 +55,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -106,6 +115,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-17.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-17.fbx.meta
index 918bfd71..2f8f55f5 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-17.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-17.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: d4827d7a0075e0c48a560f143eff7b29
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-18.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-18.fbx.meta
index a8e86987..1577f30b 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-18.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-18.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: a52fcffb80399d64c987a89db2be29ed
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-19.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-19.fbx.meta
index 8172691b..ea433912 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-19.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-19.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 14c78d93df006874295a5d3c52aad34e
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -40,6 +40,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -86,7 +87,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -94,27 +95,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -146,6 +155,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-2.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-2.fbx.meta
index 96cd7074..f39b8b58 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-2.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-2.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 272963cf44d860f4ba485564b3c95190
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-20.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-20.fbx.meta
index af28c6b9..824482fb 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-20.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-20.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 890c226d9b1299e41ad65e25aa7b62b2
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -34,6 +34,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -51,7 +52,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -59,27 +60,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -111,6 +120,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-21.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-21.fbx.meta
index 096a6347..f2d63f28 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-21.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-21.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 62aa7979cf5731442b3c64ec4872c34d
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -29,6 +29,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -46,7 +47,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -54,27 +55,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -106,6 +115,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-22.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-22.fbx.meta
index 3ef0f8dc..26a0ab0f 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-22.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-22.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 422c7777062857b40a0f35f82cbf8a37
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -623603649343465320
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 0
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-23.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-23.fbx.meta
index 10580673..6ec88ba6 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-23.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-23.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 7ae98c42d2204e642905b4b9e0b6cb06
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -24,6 +24,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -41,7 +42,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -49,27 +50,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -101,6 +110,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-24.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-24.fbx.meta
index 4d2f8604..27e61bbd 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-24.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-24.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 892d5903261578049bfe43d781bac3eb
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -34,6 +34,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -51,7 +52,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -59,27 +60,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -111,6 +120,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-25.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-25.fbx.meta
index ffbb6ab7..b1d2bc8c 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-25.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-25.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: a3a8c83d8c885974cbd4d5672a5197a5
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -19,6 +19,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -36,7 +37,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -44,27 +45,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -96,6 +105,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-26.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-26.fbx.meta
index 5f0d3438..c63935df 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-26.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-26.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: e22b3be4ca0c4944d86b6294263b1a13
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-27.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-27.fbx.meta
index f213601d..2d5ce147 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-27.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-27.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 6de0180b33a743943ae05d7c4cb2b7aa
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-28.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-28.fbx.meta
index d32ee6c3..3d7c4931 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-28.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-28.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: db57c2c2127569845aefad98ee63d2ea
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -37,6 +37,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -83,7 +84,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -91,27 +92,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -143,6 +152,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-29.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-29.fbx.meta
index 3b9270a8..7cfefccb 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-29.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-29.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 2ca7e5fb6cdfc4d4d9500a6fcd09e121
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-3.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-3.fbx.meta
index 023c2252..f109d944 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-3.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-3.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 8ee572fb70b2ffc478e4ccf8c7ec76ad
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-30.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-30.fbx.meta
index 8c814318..901da079 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-30.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-30.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: b032f04f161f5c045b59fcccb6cecd68
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -37,6 +37,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -83,7 +84,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -91,27 +92,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -143,6 +152,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-31.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-31.fbx.meta
index 221691ca..ffa5cdca 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-31.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-31.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 5f700f4ff3d4b69408d1901a314a716e
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -37,6 +37,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -83,7 +84,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -91,27 +92,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -143,6 +152,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-4.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-4.fbx.meta
index 3ad52db9..2959a5e5 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-4.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-4.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 0254126a56147c84589ec0d79f78cfbd
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-5.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-5.fbx.meta
index ad7e1a03..33f5ee77 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-5.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-5.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: e5b57df68cb6ef64196bbf03402b8907
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-6.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-6.fbx.meta
index 28714f70..2a0db8fc 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-6.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-6.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 6c4c78a4c9d3d5b428dbf44c6ad553ed
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -37,6 +37,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -83,7 +84,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -91,27 +92,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -143,6 +152,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-7.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-7.fbx.meta
index 52f98050..0c6ef089 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-7.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-7.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 1823c26c2292d4845bcca3fab0faefe8
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -37,6 +37,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -83,7 +84,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -91,27 +92,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -143,6 +152,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-8.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-8.fbx.meta
index efdbdde3..fc62d544 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-8.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-8.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 907425677c2250045a8f9e1f82c5f96b
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -32,6 +32,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -78,7 +79,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -86,27 +87,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -138,6 +147,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-9.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-9.fbx.meta
index bb95c0db..a4508cee 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-9.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Obstacle-9.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 4f209cddfd48c3040804868a82d3d85d
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable:
   - first:
       74: -1881513580907979650
@@ -27,6 +27,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -73,7 +74,7 @@ ModelImporter:
       maskType: 3
       maskSource: {instanceID: 0}
       additiveReferencePoseFrame: 1
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -81,27 +82,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -133,6 +142,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Platform.fbx.meta b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Platform.fbx.meta
index 13ac498d..b0368ae1 100644
--- a/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Platform.fbx.meta	
+++ b/Assets/PACKAGES/TRAPS AND OBSTACLES/Traps-Obstacles/Models/Platform.fbx.meta	
@@ -1,7 +1,7 @@
 fileFormatVersion: 2
 guid: 98b88a3f0e5cfbd45a9a9d07aa716d7b
 ModelImporter:
-  serializedVersion: 19301
+  serializedVersion: 22200
   internalIDToNameTable: []
   externalObjects:
   - first:
@@ -19,6 +19,7 @@ ModelImporter:
     bakeSimulation: 0
     resampleCurves: 1
     optimizeGameObjects: 0
+    removeConstantScaleCurves: 0
     motionNodeName: 
     rigImportErrors: 
     rigImportWarnings: 
@@ -36,7 +37,7 @@ ModelImporter:
     extraExposedTransformPaths: []
     extraUserProperties: []
     clipAnimations: []
-    isReadable: 0
+    isReadable: 1
   meshes:
     lODScreenPercentages: []
     globalScale: 1
@@ -44,27 +45,35 @@ ModelImporter:
     addColliders: 0
     useSRGBMaterialColor: 1
     sortHierarchyByName: 1
+    importPhysicalCameras: 1
     importVisibility: 1
     importBlendShapes: 1
     importCameras: 1
     importLights: 1
+    nodeNameCollisionStrategy: 0
     fileIdsGeneration: 2
     swapUVChannels: 0
     generateSecondaryUV: 0
     useFileUnits: 1
     keepQuads: 0
     weldVertices: 1
+    bakeAxisConversion: 0
     preserveHierarchy: 0
     skinWeightsMode: 0
     maxBonesPerVertex: 4
     minBoneWeight: 0.001
+    optimizeBones: 1
     meshOptimizationFlags: -1
     indexFormat: 0
     secondaryUVAngleDistortion: 8
     secondaryUVAreaDistortion: 15.000001
     secondaryUVHardAngle: 88
+    secondaryUVMarginMethod: 0
+    secondaryUVMinLightmapResolution: 40
+    secondaryUVMinObjectScale: 1
     secondaryUVPackMargin: 4
     useFileScale: 1
+    strictVertexDataChecks: 0
   tangentSpace:
     normalSmoothAngle: 60
     normalImportMode: 0
@@ -96,6 +105,9 @@ ModelImporter:
   animationType: 2
   humanoidOversampling: 1
   avatarSetup: 0
+  addHumanoidExtraRootOnlyWhenUsingAvatar: 0
+  importBlendShapeDeformPercent: 0
+  remapMaterialsIfMaterialImportModeIsNone: 1
   additionalBone: 0
   userData: 
   assetBundleName: 
diff --git a/Assets/PlayFabSDK/Shared/Public/Resources/PlayFabSharedSettings.asset b/Assets/PlayFabSDK/Shared/Public/Resources/PlayFabSharedSettings.asset
index dc0c4f98..8911982d 100644
--- a/Assets/PlayFabSDK/Shared/Public/Resources/PlayFabSharedSettings.asset
+++ b/Assets/PlayFabSDK/Shared/Public/Resources/PlayFabSharedSettings.asset
@@ -12,8 +12,8 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 093286084a3d1994a9c28281a1c38b1d, type: 3}
   m_Name: PlayFabSharedSettings
   m_EditorClassIdentifier: 
-  TitleId: 7D3B9
-  DeveloperSecretKey: U4C66QH1S7DKJH1CAEBMICAZ1KJU5E97YZ5BRU6OOREYUE9AJD
+  TitleId: 1819C6
+  DeveloperSecretKey: 
   ProductionEnvironmentUrl: 
   RequestType: 0
   DisableDeviceInfo: 0
diff --git a/Assets/Plugins/Android.meta b/Assets/Plugins/Android.meta
new file mode 100644
index 00000000..a98ee054
--- /dev/null
+++ b/Assets/Plugins/Android.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 735638248e1ec3a4ca98408f55832865
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/Android/google-signin-support-1.0.4.aar b/Assets/Plugins/Android/google-signin-support-1.0.4.aar
new file mode 100644
index 00000000..1ebd5a13
Binary files /dev/null and b/Assets/Plugins/Android/google-signin-support-1.0.4.aar differ
diff --git a/Assets/Plugins/Android/google-signin-support-1.0.4.aar.meta b/Assets/Plugins/Android/google-signin-support-1.0.4.aar.meta
new file mode 100644
index 00000000..250474c4
--- /dev/null
+++ b/Assets/Plugins/Android/google-signin-support-1.0.4.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: ff8209b689cd4e54b844eda1ce5184c6
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Android: Android
+    second:
+      enabled: 1
+      settings: {}
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/Android/gradleTemplate.properties b/Assets/Plugins/Android/gradleTemplate.properties
new file mode 100644
index 00000000..87046809
--- /dev/null
+++ b/Assets/Plugins/Android/gradleTemplate.properties
@@ -0,0 +1,8 @@
+org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
+org.gradle.parallel=true
+unityStreamingAssets=**STREAMING_ASSETS**
+# Android Resolver Properties Start
+android.useAndroidX=true
+android.enableJetifier=true
+# Android Resolver Properties End
+**ADDITIONAL_PROPERTIES**
diff --git a/Assets/Plugins/Android/gradleTemplate.properties.meta b/Assets/Plugins/Android/gradleTemplate.properties.meta
new file mode 100644
index 00000000..96719f18
--- /dev/null
+++ b/Assets/Plugins/Android/gradleTemplate.properties.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b7a7987296799604ba041c218810da95
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/Android/mainTemplate.gradle b/Assets/Plugins/Android/mainTemplate.gradle
new file mode 100644
index 00000000..d5a6b988
--- /dev/null
+++ b/Assets/Plugins/Android/mainTemplate.gradle
@@ -0,0 +1,63 @@
+apply plugin: 'com.android.library'
+**APPLY_PLUGINS**
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+
+    // ✅ Required for Google Sign-In
+    implementation 'com.google.android.gms:play-services-auth:20.7.0'
+    implementation 'com.google.android.gms:play-services-base:18.2.0'
+
+    // ⚠️ Don't add google-signin-support here - handled via .aar in Plugins/Android
+
+**DEPS**
+}
+
+android {
+    namespace "com.unity3d.player"
+    ndkPath "**NDKPATH**"
+    compileSdkVersion **APIVERSION**
+    buildToolsVersion '**BUILDTOOLS**'
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_11
+        targetCompatibility JavaVersion.VERSION_11
+    }
+
+    defaultConfig {
+        minSdkVersion **MINSDKVERSION**
+        targetSdkVersion **TARGETSDKVERSION**
+        ndk {
+            abiFilters **ABIFILTERS**
+        }
+        versionCode **VERSIONCODE**
+        versionName '**VERSIONNAME**'
+        consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
+    }
+
+    lintOptions {
+        abortOnError false
+    }
+
+    aaptOptions {
+        noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
+        ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
+    }
+
+    packagingOptions {
+        // Avoid duplicate .so/native library errors
+        pickFirst '**/*.so'
+        exclude 'META-INF/*.kotlin_module'
+        exclude 'META-INF/DEPENDENCIES'
+        exclude 'META-INF/LICENSE'
+        exclude 'META-INF/LICENSE.txt'
+        exclude 'META-INF/NOTICE'
+        exclude 'META-INF/NOTICE.txt'
+    }
+
+**PACKAGING_OPTIONS**
+}
+
+**IL_CPP_BUILD_SETUP**
+**SOURCE_BUILD_SETUP**
+**EXTERNAL_SOURCES**
diff --git a/Assets/Plugins/Android/mainTemplate.gradle.meta b/Assets/Plugins/Android/mainTemplate.gradle.meta
new file mode 100644
index 00000000..f9867512
--- /dev/null
+++ b/Assets/Plugins/Android/mainTemplate.gradle.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c624515b6be0f19458c9543fc324bde9
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/Android/settingsTemplate.gradle b/Assets/Plugins/Android/settingsTemplate.gradle
new file mode 100644
index 00000000..f9c1bdbf
--- /dev/null
+++ b/Assets/Plugins/Android/settingsTemplate.gradle
@@ -0,0 +1,30 @@
+pluginManagement {
+    repositories {
+        **ARTIFACTORYREPOSITORY**
+        gradlePluginPortal()
+        google()
+        mavenCentral()
+    }
+}
+
+include ':launcher', ':unityLibrary'
+**INCLUDES**
+
+dependencyResolutionManagement {
+    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
+    repositories {
+        **ARTIFACTORYREPOSITORY**
+        google()
+        mavenCentral()
+// Android Resolver Repos Start
+        def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
+        maven {
+            url (unityProjectPath + "/Assets/GoogleSignIn/Editor/m2repository") // Assets/GoogleSignIn/Editor/GoogleSignInSupportDependencies.xml:9
+        }
+        mavenLocal()
+// Android Resolver Repos End
+        flatDir {
+            dirs "${project(':unityLibrary').projectDir}/libs"
+        }
+    }
+}
diff --git a/Assets/Plugins/Android/settingsTemplate.gradle.meta b/Assets/Plugins/Android/settingsTemplate.gradle.meta
new file mode 100644
index 00000000..f4a4bf65
--- /dev/null
+++ b/Assets/Plugins/Android/settingsTemplate.gradle.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b08bd3fa1c073b942850f7a4a4020e36
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole.meta b/Assets/Plugins/IngameDebugConsole.meta
new file mode 100644
index 00000000..4be78b69
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2be5416df8b0f5c4f884742889e8863e
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Android.meta b/Assets/Plugins/IngameDebugConsole/Android.meta
new file mode 100644
index 00000000..fcaef243
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Android.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3d7d7a61a5341904eb3c65af025b1d86
+folderAsset: yes
+timeCreated: 1510075633
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs
new file mode 100644
index 00000000..95e8df7b
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs
@@ -0,0 +1,54 @@
+#if !UNITY_EDITOR && UNITY_ANDROID
+using System.Collections.Generic;
+using UnityEngine;
+
+// Credit: https://stackoverflow.com/a/41018028/2373034
+namespace IngameDebugConsole
+{
+	public class DebugLogLogcatListener : AndroidJavaProxy
+	{
+		private Queue<string> queuedLogs;
+		private AndroidJavaObject nativeObject;
+
+		public DebugLogLogcatListener() : base( "com.yasirkula.unity.DebugConsoleLogcatLogReceiver" )
+		{
+			queuedLogs = new Queue<string>( 16 );
+		}
+
+		~DebugLogLogcatListener()
+		{
+			Stop();
+
+			if( nativeObject != null )
+				nativeObject.Dispose();
+		}
+
+		public void Start( string arguments )
+		{
+			if( nativeObject == null )
+				nativeObject = new AndroidJavaObject( "com.yasirkula.unity.DebugConsoleLogcatLogger" );
+
+			nativeObject.Call( "Start", this, arguments );
+		}
+
+		public void Stop()
+		{
+			if( nativeObject != null )
+				nativeObject.Call( "Stop" );
+		}
+
+		public void OnLogReceived( string log )
+		{
+			queuedLogs.Enqueue( log );
+		}
+
+		public string GetLog()
+		{
+			if( queuedLogs.Count > 0 )
+				return queuedLogs.Dequeue();
+
+			return null;
+		}
+	}
+}
+#endif
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta
new file mode 100644
index 00000000..8f332f61
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Android/DebugLogLogcatListener.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: dd3b7385882055d4a8c2b91deb6b2470
+timeCreated: 1510076185
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar
new file mode 100644
index 00000000..e8bb24f4
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar differ
diff --git a/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta
new file mode 100644
index 00000000..b67820ba
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Android/IngameDebugConsole.aar.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: bf909fab1c14af446b0a854de42289b2
+timeCreated: 1510086220
+licenseType: Store
+PluginImporter:
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    data:
+      first:
+        Android: Android
+      second:
+        enabled: 1
+        settings: {}
+    data:
+      first:
+        Any: 
+      second:
+        enabled: 0
+        settings: {}
+    data:
+      first:
+        Editor: Editor
+      second:
+        enabled: 0
+        settings:
+          DefaultValueInitialized: true
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Editor.meta b/Assets/Plugins/IngameDebugConsole/Editor.meta
new file mode 100644
index 00000000..89ddb4f2
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Editor.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 86f54622630720f4abe279acdbb8886f
+folderAsset: yes
+timeCreated: 1561217660
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs
new file mode 100644
index 00000000..63b2eb03
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs
@@ -0,0 +1,83 @@
+using UnityEditor;
+
+namespace IngameDebugConsole
+{
+	[CustomEditor( typeof( DebugLogManager ) )]
+	public class DebugLogManagerEditor : Editor
+	{
+		private SerializedProperty singleton;
+		private SerializedProperty minimumHeight;
+		private SerializedProperty enablePopup;
+		private SerializedProperty startInPopupMode;
+		private SerializedProperty startMinimized;
+		private SerializedProperty toggleWithKey;
+		private SerializedProperty toggleKey;
+		private SerializedProperty enableSearchbar;
+		private SerializedProperty topSearchbarMinWidth;
+		private SerializedProperty clearCommandAfterExecution;
+		private SerializedProperty commandHistorySize;
+		private SerializedProperty showCommandSuggestions;
+		private SerializedProperty receiveLogcatLogsInAndroid;
+		private SerializedProperty logcatArguments;
+
+		private void OnEnable()
+		{
+			singleton = serializedObject.FindProperty( "singleton" );
+			minimumHeight = serializedObject.FindProperty( "minimumHeight" );
+			enablePopup = serializedObject.FindProperty( "enablePopup" );
+			startInPopupMode = serializedObject.FindProperty( "startInPopupMode" );
+			startMinimized = serializedObject.FindProperty( "startMinimized" );
+			toggleWithKey = serializedObject.FindProperty( "toggleWithKey" );
+			toggleKey = serializedObject.FindProperty( "toggleKey" );
+			enableSearchbar = serializedObject.FindProperty( "enableSearchbar" );
+			topSearchbarMinWidth = serializedObject.FindProperty( "topSearchbarMinWidth" );
+			clearCommandAfterExecution = serializedObject.FindProperty( "clearCommandAfterExecution" );
+			commandHistorySize = serializedObject.FindProperty( "commandHistorySize" );
+			showCommandSuggestions = serializedObject.FindProperty( "showCommandSuggestions" );
+			receiveLogcatLogsInAndroid = serializedObject.FindProperty( "receiveLogcatLogsInAndroid" );
+			logcatArguments = serializedObject.FindProperty( "logcatArguments" );
+		}
+
+		public override void OnInspectorGUI()
+		{
+			serializedObject.Update();
+
+			EditorGUILayout.PropertyField( singleton );
+			EditorGUILayout.PropertyField( minimumHeight );
+			EditorGUILayout.PropertyField( enablePopup );
+
+			if( enablePopup.boolValue )
+				DrawSubProperty( startInPopupMode );
+			else
+				DrawSubProperty( startMinimized );
+
+			EditorGUILayout.PropertyField( toggleWithKey );
+
+			if( toggleWithKey.boolValue )
+				DrawSubProperty( toggleKey );
+
+			EditorGUILayout.PropertyField( enableSearchbar );
+
+			if( enableSearchbar.boolValue )
+				DrawSubProperty( topSearchbarMinWidth );
+
+			EditorGUILayout.PropertyField( clearCommandAfterExecution );
+			EditorGUILayout.PropertyField( commandHistorySize );
+			EditorGUILayout.PropertyField( showCommandSuggestions );
+			EditorGUILayout.PropertyField( receiveLogcatLogsInAndroid );
+
+			if( receiveLogcatLogsInAndroid.boolValue )
+				DrawSubProperty( logcatArguments );
+
+			DrawPropertiesExcluding( serializedObject, "m_Script" );
+			serializedObject.ApplyModifiedProperties();
+		}
+
+		private void DrawSubProperty( SerializedProperty property )
+		{
+			EditorGUI.indentLevel++;
+			EditorGUILayout.PropertyField( property );
+			EditorGUI.indentLevel--;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta
new file mode 100644
index 00000000..2fcd70ec
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Editor/DebugLogManagerEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4c23e5c521cb0c54b9a638b2a653d1d3
+timeCreated: 1561217671
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef
new file mode 100644
index 00000000..c2ac0063
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef
@@ -0,0 +1,17 @@
+{
+    "name": "IngameDebugConsole.Editor",
+    "references": [
+        "IngameDebugConsole.Runtime"
+    ],
+    "includePlatforms": [
+        "Editor"
+    ],
+    "excludePlatforms": [],
+    "allowUnsafeCode": false,
+    "overrideReferences": false,
+    "precompiledReferences": [],
+    "autoReferenced": true,
+    "defineConstraints": [],
+    "versionDefines": [],
+    "noEngineReferences": false
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta
new file mode 100644
index 00000000..e2378b7e
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Editor/IngameDebugConsole.Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 466e67dabd1db22468246c39eddb6c3f
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef
new file mode 100644
index 00000000..9f4bfcff
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef
@@ -0,0 +1,3 @@
+{
+	"name": "IngameDebugConsole.Runtime"
+}
diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta
new file mode 100644
index 00000000..7e13cb2d
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.Runtime.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 3de88c88fbbb8f944b9210d496af9762
+AssemblyDefinitionImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab
new file mode 100644
index 00000000..1a434d3c
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab
@@ -0,0 +1,4005 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &100406
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22478474}
+  - component: {fileID: 22292746}
+  - component: {fileID: 11476740}
+  m_Layer: 5
+  m_Name: NewInfoCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &109254
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 437128}
+  - component: {fileID: 11418932}
+  - component: {fileID: 11492840}
+  - component: {fileID: 114575087663981696}
+  m_Layer: 0
+  m_Name: EventSystem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &110786
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22460680}
+  - component: {fileID: 22261918}
+  - component: {fileID: 11431488}
+  - component: {fileID: 114538072837526774}
+  m_Layer: 5
+  m_Name: DebugLogWindowResize
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &118212
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22429100}
+  - component: {fileID: 22207004}
+  - component: {fileID: 11499344}
+  - component: {fileID: 11414302}
+  - component: {fileID: 11460786}
+  m_Layer: 5
+  m_Name: Scrollbar Vertical
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &119972
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22485076}
+  - component: {fileID: 11471588}
+  m_Layer: 5
+  m_Name: Viewport
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &121708
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22456566}
+  - component: {fileID: 222466100300644746}
+  - component: {fileID: 114944715489184838}
+  - component: {fileID: 114777798721274074}
+  m_Layer: 5
+  m_Name: Buttons
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &123548
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22466754}
+  - component: {fileID: 22288586}
+  - component: {fileID: 11495556}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &132536
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22457152}
+  - component: {fileID: 22331464}
+  - component: {fileID: 11440770}
+  - component: {fileID: 11490438}
+  - component: {fileID: 11452418}
+  m_Layer: 5
+  m_Name: IngameDebugConsole
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &133140
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22428984}
+  - component: {fileID: 22231690}
+  - component: {fileID: 11400378}
+  - component: {fileID: 11466918}
+  m_Layer: 5
+  m_Name: FilterLogButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &133612
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22468896}
+  - component: {fileID: 22255062}
+  - component: {fileID: 11448508}
+  - component: {fileID: 11477250}
+  m_Layer: 5
+  m_Name: HideButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &135210
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22496878}
+  - component: {fileID: 22213036}
+  - component: {fileID: 11450122}
+  m_Layer: 5
+  m_Name: ErrorCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &142160
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22488670}
+  - component: {fileID: 22236784}
+  - component: {fileID: 11491814}
+  - component: {fileID: 11437802}
+  m_Layer: 5
+  m_Name: CollapseButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &145092
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22497984}
+  - component: {fileID: 22209426}
+  - component: {fileID: 11437286}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &148506
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22435388}
+  - component: {fileID: 22236120}
+  - component: {fileID: 11430762}
+  m_Layer: 5
+  m_Name: WarningImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &160714
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22439026}
+  - component: {fileID: 22209194}
+  - component: {fileID: 11486984}
+  m_Layer: 5
+  m_Name: InfoImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &161086
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22420992}
+  - component: {fileID: 22290652}
+  - component: {fileID: 11419610}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &163938
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22455554}
+  - component: {fileID: 22258478}
+  - component: {fileID: 11490350}
+  - component: {fileID: 11472314}
+  m_Layer: 5
+  m_Name: FilterWarningButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &164562
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22485120}
+  - component: {fileID: 22261724}
+  - component: {fileID: 114435636144975300}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &165242
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22452256}
+  - component: {fileID: 22278414}
+  - component: {fileID: 11431640}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &166206
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22412306}
+  - component: {fileID: 22260676}
+  - component: {fileID: 11421290}
+  m_Layer: 5
+  m_Name: ErrorImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &168792
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22431144}
+  - component: {fileID: 22240830}
+  - component: {fileID: 11411602}
+  m_Layer: 5
+  m_Name: NewErrorCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &170186
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22495692}
+  - component: {fileID: 22248262}
+  - component: {fileID: 11406916}
+  - component: {fileID: 11420596}
+  m_Layer: 5
+  m_Name: FilterErrorButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &171206
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22482970}
+  m_Layer: 5
+  m_Name: Sliding Area
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &173314
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22436850}
+  - component: {fileID: 11405548}
+  - component: {fileID: 22273436}
+  - component: {fileID: 11410364}
+  - component: {fileID: 11414998}
+  m_Layer: 5
+  m_Name: Debugs
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &176246
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22427174}
+  - component: {fileID: 22242412}
+  - component: {fileID: 11496004}
+  m_Layer: 5
+  m_Name: WarningCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &176876
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22452314}
+  - component: {fileID: 22235120}
+  - component: {fileID: 11400274}
+  m_Layer: 5
+  m_Name: LogCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &178532
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22414360}
+  - component: {fileID: 22223402}
+  - component: {fileID: 11410584}
+  - component: {fileID: 11491080}
+  - component: {fileID: 22505754}
+  m_Layer: 5
+  m_Name: DebugLogPopup
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &183006
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22477946}
+  - component: {fileID: 22230524}
+  - component: {fileID: 11400672}
+  - component: {fileID: 22509978}
+  m_Layer: 5
+  m_Name: DebugLogWindow
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &187566
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22400762}
+  - component: {fileID: 11453682}
+  m_Layer: 5
+  m_Name: LogsContainer
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &189604
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22426080}
+  - component: {fileID: 22270452}
+  - component: {fileID: 11419798}
+  m_Layer: 5
+  m_Name: Handle
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &192924
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22436794}
+  - component: {fileID: 22260966}
+  - component: {fileID: 11414436}
+  m_Layer: 5
+  m_Name: NewWarningCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &437128
+Transform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109254}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22457152}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &11400274
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176876}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11400378
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133140}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11400672
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 183006}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.21960784, g: 0.21960784, b: 0.21960784, a: 0.797}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11405548
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173314}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1367256648, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Content: {fileID: 22400762}
+  m_Horizontal: 0
+  m_Vertical: 1
+  m_MovementType: 2
+  m_Elasticity: 0.1
+  m_Inertia: 1
+  m_DecelerationRate: 0.01
+  m_ScrollSensitivity: 25
+  m_Viewport: {fileID: 22485076}
+  m_HorizontalScrollbar: {fileID: 0}
+  m_VerticalScrollbar: {fileID: 11414302}
+  m_HorizontalScrollbarVisibility: 2
+  m_VerticalScrollbarVisibility: 0
+  m_HorizontalScrollbarSpacing: -3
+  m_VerticalScrollbarSpacing: -3
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11406916
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 170186}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11410364
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173314}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0.392}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11410584
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178532}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.30588236, g: 0.30588236, b: 0.30588236, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11411602
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168792}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11414302
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 118212}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -2061169968, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11419798}
+  m_HandleRect: {fileID: 22426080}
+  m_Direction: 2
+  m_Value: 0
+  m_Size: 1
+  m_NumberOfSteps: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11414436
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 192924}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11414998
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173314}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: cb564dcb180e586429c57456166a76b5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  debugsScrollRect: {fileID: 11405548}
+  debugLogManager: {fileID: 11452418}
+--- !u!114 &11418932
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109254}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -619905303, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_FirstSelected: {fileID: 0}
+  m_sendNavigationEvents: 0
+  m_DragThreshold: 5
+--- !u!114 &11419610
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 161086}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: a9fd8f6b461461f4a92eafc60921ee78, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11419798
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 189604}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.2509804, g: 0.2509804, b: 0.2509804, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11420596
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 170186}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11406916}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11421290
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166206}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11430762
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 148506}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11431488
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 110786}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11431640
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 165242}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11437286
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 145092}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11437802
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 142160}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11491814}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11440770
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 132536}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1980459831, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_UiScaleMode: 1
+  m_ReferencePixelsPerUnit: 100
+  m_ScaleFactor: 1
+  m_ReferenceResolution: {x: 800, y: 600}
+  m_ScreenMatchMode: 0
+  m_MatchWidthOrHeight: 1
+  m_PhysicalUnit: 3
+  m_FallbackScreenDPI: 96
+  m_DefaultSpriteDPI: 96
+  m_DynamicPixelsPerUnit: 1
+--- !u!114 &11448508
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133612}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11450122
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 135210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11452418
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 132536}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6a4f16ed905adcd4ab0d7c8c11f0d72c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  singleton: 1
+  minimumHeight: 200
+  enablePopup: 1
+  startInPopupMode: 1
+  startMinimized: 0
+  toggleWithKey: 1
+  toggleKey: 96
+  enableSearchbar: 1
+  topSearchbarMinWidth: 360
+  clearCommandAfterExecution: 1
+  commandHistorySize: 15
+  showCommandSuggestions: 1
+  receiveLogcatLogsInAndroid: 0
+  logcatArguments: 
+  avoidScreenCutout: 1
+  maxLogLength: 10000
+  autoFocusOnCommandInputField: 1
+  logItemPrefab: {fileID: 11408050, guid: 391be5df5ef62f345bb76a1051c04da7, type: 2}
+  commandSuggestionPrefab: {fileID: 114169395487023046, guid: 5e66896448428cf46a1854dbdc014914,
+    type: 2}
+  infoLog: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3}
+  warningLog: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3}
+  errorLog: {fileID: 21300000, guid: 66305a19e3614694f868c75a982e6b68, type: 3}
+  collapseButtonNormalColor: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  collapseButtonSelectedColor: {r: 0.44117647, g: 0.4346886, b: 0.4346886, a: 1}
+  filterButtonsNormalColor: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  filterButtonsSelectedColor: {r: 0.44117647, g: 0.4346886, b: 0.4346886, a: 1}
+  commandSuggestionHighlightStart: <color=orange>
+  commandSuggestionHighlightEnd: </color>
+  logWindowTR: {fileID: 22477946}
+  logItemsContainer: {fileID: 22400762}
+  commandSuggestionsContainer: {fileID: 224982529675224150}
+  commandInputField: {fileID: 114000010993257018}
+  hideButton: {fileID: 11477250}
+  clearButton: {fileID: 114466839828933532}
+  collapseButton: {fileID: 11491814}
+  filterInfoButton: {fileID: 11400378}
+  filterWarningButton: {fileID: 11490350}
+  filterErrorButton: {fileID: 11406916}
+  infoEntryCountText: {fileID: 11400274}
+  warningEntryCountText: {fileID: 11496004}
+  errorEntryCountText: {fileID: 11450122}
+  searchbar: {fileID: 224927884203097686}
+  searchbarSlotTop: {fileID: 224619367409363176}
+  searchbarSlotBottom: {fileID: 224755787573573022}
+  snapToBottomButton: {fileID: 1486651836328188}
+  logWindowCanvasGroup: {fileID: 22509978}
+  popupManager: {fileID: 11491080}
+  logItemsScrollRect: {fileID: 11405548}
+  recycledListView: {fileID: 11453682}
+--- !u!114 &11453682
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 187566}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: ce231987d32488f43b6fb798f7df43f6, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  transformComponent: {fileID: 22400762}
+  viewportTransform: {fileID: 22485076}
+  debugManager: {fileID: 11452418}
+  logItemNormalColor1: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 0.697}
+  logItemNormalColor2: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.697}
+  logItemSelectedColor: {r: 0.32941177, g: 0.4862745, b: 0.7058824, a: 0.697}
+--- !u!114 &11460786
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 118212}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -1862395651, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Delegates:
+  - eventID: 13
+    callback:
+      m_PersistentCalls:
+        m_Calls:
+        - m_Target: {fileID: 11414998}
+          m_MethodName: OnScrollbarDragStart
+          m_Mode: 0
+          m_Arguments:
+            m_ObjectArgument: {fileID: 0}
+            m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+            m_IntArgument: 0
+            m_FloatArgument: 0
+            m_StringArgument: 
+            m_BoolArgument: 0
+          m_CallState: 2
+      m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI,
+        Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  - eventID: 14
+    callback:
+      m_PersistentCalls:
+        m_Calls:
+        - m_Target: {fileID: 11414998}
+          m_MethodName: OnScrollbarDragEnd
+          m_Mode: 0
+          m_Arguments:
+            m_ObjectArgument: {fileID: 0}
+            m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+            m_IntArgument: 0
+            m_FloatArgument: 0
+            m_StringArgument: 
+            m_BoolArgument: 0
+          m_CallState: 2
+      m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI,
+        Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  delegates: []
+--- !u!114 &11466918
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133140}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11400378}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11471588
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 119972}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -146154839, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!114 &11472314
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 163938}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11490350}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11476740
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 100406}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11477250
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133612}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11448508}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11486984
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 160714}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 5a97d5afa6254804f81b7ba956296996, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11490350
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 163938}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11490438
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 132536}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1301386320, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreReversedGraphics: 1
+  m_BlockingObjects: 0
+  m_BlockingMask:
+    serializedVersion: 2
+    m_Bits: 4294967295
+--- !u!114 &11491080
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178532}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 05cc4b1999716644c9308528e38e7081, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  debugManager: {fileID: 11452418}
+  newInfoCountText: {fileID: 11476740}
+  newWarningCountText: {fileID: 11414436}
+  newErrorCountText: {fileID: 11411602}
+  alertColorInfo: {r: 0.050980393, g: 0.32941177, b: 0.5647059, a: 1}
+  alertColorWarning: {r: 0.59607846, g: 0.45490196, b: 0, a: 1}
+  alertColorError: {r: 0.5647059, g: 0.050980393, b: 0.050980393, a: 1}
+--- !u!114 &11491814
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 142160}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11492840
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109254}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1077351063, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_HorizontalAxis: Horizontal
+  m_VerticalAxis: Vertical
+  m_SubmitButton: Submit
+  m_CancelButton: Cancel
+  m_InputActionsPerSecond: 10
+  m_RepeatDelay: 0.5
+  m_ForceModuleActive: 0
+--- !u!114 &11495556
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 123548}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 05c7216c78d4dd34ebe2bac9c1e274d7, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11496004
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176246}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 0
+--- !u!114 &11499344
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 118212}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.2, g: 0.2, b: 0.2, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!222 &22207004
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 118212}
+--- !u!222 &22209194
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 160714}
+--- !u!222 &22209426
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 145092}
+--- !u!222 &22213036
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 135210}
+--- !u!222 &22223402
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178532}
+--- !u!222 &22230524
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 183006}
+--- !u!222 &22231690
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133140}
+--- !u!222 &22235120
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176876}
+--- !u!222 &22236120
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 148506}
+--- !u!222 &22236784
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 142160}
+--- !u!222 &22240830
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168792}
+--- !u!222 &22242412
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176246}
+--- !u!222 &22248262
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 170186}
+--- !u!222 &22255062
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133612}
+--- !u!222 &22258478
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 163938}
+--- !u!222 &22260676
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166206}
+--- !u!222 &22260966
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 192924}
+--- !u!222 &22261724
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 164562}
+--- !u!222 &22261918
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 110786}
+--- !u!222 &22270452
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 189604}
+--- !u!222 &22273436
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173314}
+--- !u!222 &22278414
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 165242}
+--- !u!222 &22288586
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 123548}
+--- !u!222 &22290652
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 161086}
+--- !u!222 &22292746
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 100406}
+--- !u!223 &22331464
+Canvas:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 132536}
+  m_Enabled: 1
+  serializedVersion: 3
+  m_RenderMode: 0
+  m_Camera: {fileID: 0}
+  m_PlaneDistance: 100
+  m_PixelPerfect: 0
+  m_ReceivesEvents: 1
+  m_OverrideSorting: 0
+  m_OverridePixelPerfect: 0
+  m_SortingBucketNormalizedSize: 0
+  m_AdditionalShaderChannelsFlag: 25
+  m_SortingLayerID: 0
+  m_SortingOrder: 1001
+  m_TargetDisplay: 0
+--- !u!224 &22400762
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 187566}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22485076}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0.00012207031}
+  m_SizeDelta: {x: 0, y: 50}
+  m_Pivot: {x: 0, y: 1}
+--- !u!224 &22412306
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166206}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.025}
+  m_AnchorMax: {x: 0.45, y: 0.325}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -1, y: 0}
+  m_Pivot: {x: 1, y: 0.5}
+--- !u!224 &22414360
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178532}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22439026}
+  - {fileID: 22435388}
+  - {fileID: 22412306}
+  - {fileID: 22478474}
+  - {fileID: 22436794}
+  - {fileID: 22431144}
+  m_Father: {fileID: 22457152}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: -36, y: 0}
+  m_SizeDelta: {x: 72, y: 72}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22420992
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 161086}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22460680}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.15, y: 0.12}
+  m_AnchorMax: {x: 0.85, y: 0.88}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22426080
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 189604}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22482970}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 20, y: 20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22427174
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176246}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22455554}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.55, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -2, y: -2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22428984
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133140}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22497984}
+  - {fileID: 22452314}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22429100
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 118212}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22482970}
+  m_Father: {fileID: 22436850}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 28, y: 0}
+  m_Pivot: {x: 1, y: 1}
+--- !u!224 &22431144
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 168792}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.45, y: 0.025}
+  m_AnchorMax: {x: 1, y: 0.325}
+  m_AnchoredPosition: {x: -1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22435388
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 148506}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.35}
+  m_AnchorMax: {x: 0.45, y: 0.65}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -1, y: 0}
+  m_Pivot: {x: 1, y: 0.5}
+--- !u!224 &22436794
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 192924}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.45, y: 0.35}
+  m_AnchorMax: {x: 1, y: 0.65}
+  m_AnchoredPosition: {x: -1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22436850
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173314}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22485076}
+  - {fileID: 22429100}
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: -72}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22439026
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 160714}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.675}
+  m_AnchorMax: {x: 0.45, y: 0.975}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -1, y: 0}
+  m_Pivot: {x: 1, y: 0.5}
+--- !u!224 &22452256
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 165242}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22495692}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0.55, y: 1}
+  m_AnchoredPosition: {x: 1, y: 0.5}
+  m_SizeDelta: {x: -2, y: -7}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22452314
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 176876}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22428984}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.55, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -2, y: -2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22455554
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 163938}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22466754}
+  - {fileID: 22427174}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22456566
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121708}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224856348943071238}
+  - {fileID: 22488670}
+  - {fileID: 224619367409363176}
+  - {fileID: 22428984}
+  - {fileID: 22455554}
+  - {fileID: 22495692}
+  - {fileID: 22468896}
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 36}
+  m_Pivot: {x: 1, y: 1}
+--- !u!224 &22457152
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 132536}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 0, y: 0, z: 0}
+  m_Children:
+  - {fileID: 22477946}
+  - {fileID: 22414360}
+  - {fileID: 437128}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 0}
+--- !u!224 &22460680
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 110786}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22420992}
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 64, y: 36}
+  m_Pivot: {x: 1, y: 0}
+--- !u!224 &22466754
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 123548}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22455554}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0.55, y: 1}
+  m_AnchoredPosition: {x: 1, y: 0.5}
+  m_SizeDelta: {x: -2, y: -7}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22468896
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 133612}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22485120}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 6
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22477946
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 183006}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22456566}
+  - {fileID: 224755787573573022}
+  - {fileID: 22436850}
+  - {fileID: 224175272648112170}
+  - {fileID: 224000011255372986}
+  - {fileID: 22460680}
+  m_Father: {fileID: 22457152}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0, y: 1}
+--- !u!224 &22478474
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 100406}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22414360}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.45, y: 0.675}
+  m_AnchorMax: {x: 1, y: 0.975}
+  m_AnchoredPosition: {x: -1, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22482970
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 171206}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22426080}
+  m_Father: {fileID: 22429100}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -20, y: -20}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22485076
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 119972}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22400762}
+  - {fileID: 224170087475393432}
+  m_Father: {fileID: 22436850}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -29, y: 0}
+  m_Pivot: {x: 0, y: 1}
+--- !u!224 &22485120
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 164562}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22468896}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.15, y: 0.12}
+  m_AnchorMax: {x: 0.85, y: 0.88}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22488670
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 142160}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224781297716539566}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22495692
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 170186}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22452256}
+  - {fileID: 22496878}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 5
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22496878
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 135210}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22495692}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.55, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -2, y: -2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22497984
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 145092}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22428984}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0.55, y: 1}
+  m_AnchoredPosition: {x: 1, y: 0.5}
+  m_SizeDelta: {x: -2, y: -7}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &22505754
+CanvasGroup:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 178532}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
+--- !u!225 &22509978
+CanvasGroup:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 183006}
+  m_Enabled: 1
+  m_Alpha: 0
+  m_Interactable: 0
+  m_BlocksRaycasts: 0
+  m_IgnoreParentGroups: 0
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 132536}
+  m_IsPrefabParent: 1
+--- !u!1 &1000010562689872
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224000014081388310}
+  - component: {fileID: 222000011960742964}
+  - component: {fileID: 114000012764979206}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1000013017939458
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224000014244241328}
+  - component: {fileID: 222000010368327546}
+  - component: {fileID: 114000013429243584}
+  m_Layer: 5
+  m_Name: Placeholder
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1000013131456698
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224000011255372986}
+  - component: {fileID: 222000010912077860}
+  - component: {fileID: 114000013324539428}
+  - component: {fileID: 114000010993257018}
+  m_Layer: 5
+  m_Name: CommandInputField
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1023677686285356
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224755787573573022}
+  - component: {fileID: 222554695212194500}
+  - component: {fileID: 114565304207243400}
+  m_Layer: 5
+  m_Name: SearchbarSlotBottom
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!1 &1046123681008450
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224757625655964314}
+  - component: {fileID: 222859164510105872}
+  - component: {fileID: 114958054160062352}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1065080943999816
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224982529675224150}
+  - component: {fileID: 222691170673863110}
+  - component: {fileID: 114095641519247160}
+  - component: {fileID: 114749866180229960}
+  m_Layer: 5
+  m_Name: CommandSuggestionsContainer
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!1 &1164238372139318
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224669170713768380}
+  - component: {fileID: 222006696964694420}
+  - component: {fileID: 114590115059802926}
+  m_Layer: 5
+  m_Name: Placeholder
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1197649202466618
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224927884203097686}
+  - component: {fileID: 222677458225366564}
+  - component: {fileID: 114677982133495580}
+  - component: {fileID: 114664465529608634}
+  m_Layer: 5
+  m_Name: Searchbar
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1316062289193744
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224781297716539566}
+  - component: {fileID: 222390805710412110}
+  - component: {fileID: 114375211676648468}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1419055185851692
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224175272648112170}
+  - component: {fileID: 114201206152803294}
+  m_Layer: 5
+  m_Name: CommandSuggestions
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1486651836328188
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224170087475393432}
+  - component: {fileID: 222255240242372310}
+  - component: {fileID: 114590956026916120}
+  - component: {fileID: 114786672304321734}
+  m_Layer: 5
+  m_Name: SnapToBottom
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!1 &1608527955020594
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224619367409363176}
+  - component: {fileID: 222199124140025852}
+  - component: {fileID: 114533172895795940}
+  - component: {fileID: 114425215294804516}
+  m_Layer: 5
+  m_Name: SearchbarSlotTop
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1797932393879816
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224479789572691966}
+  - component: {fileID: 222428315485768352}
+  - component: {fileID: 114704198421030094}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1828058091608518
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224856348943071238}
+  - component: {fileID: 222172057957339964}
+  - component: {fileID: 114501864645789684}
+  - component: {fileID: 114466839828933532}
+  m_Layer: 5
+  m_Name: ClearButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1837270565088688
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224726770285678000}
+  - component: {fileID: 222974975071271426}
+  - component: {fileID: 114796147118253168}
+  m_Layer: 5
+  m_Name: Image
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &1926020646996780
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224332069547574292}
+  - component: {fileID: 222821544406435052}
+  - component: {fileID: 114187932873892064}
+  m_Layer: 5
+  m_Name: Icon
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &114000010993257018
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013131456698}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 575553740, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114000013324539428}
+  m_TextComponent: {fileID: 114000012764979206}
+  m_Placeholder: {fileID: 114000013429243584}
+  m_ContentType: 0
+  m_InputType: 0
+  m_AsteriskChar: 42
+  m_KeyboardType: 0
+  m_LineType: 2
+  m_HideMobileInput: 0
+  m_CharacterValidation: 0
+  m_CharacterLimit: 0
+  m_OnEndEdit:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_CustomCaretColor: 0
+  m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
+  m_Text: 
+  m_CaretBlinkRate: 0.85
+  m_CaretWidth: 1
+  m_ReadOnly: 0
+--- !u!114 &114000012764979206
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010562689872}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 
+--- !u!114 &114000013324539428
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013131456698}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114000013429243584
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013017939458}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 0.653}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 2
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: (type help for list of commands)
+--- !u!114 &114095641519247160
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1065080943999816}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.334, g: 0.3286984, b: 0.3286984, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114187932873892064
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1926020646996780}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: e04e6c970b950d946a782ea08e5f971d, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114201206152803294
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1419055185851692}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 6
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 0
+  m_ChildForceExpandHeight: 0
+  m_ChildControlWidth: 1
+  m_ChildControlHeight: 1
+--- !u!114 &114375211676648468
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1316062289193744}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: d1546f8db185caf4dafcfa58efa3ba2c, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114425215294804516
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1608527955020594}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_IgnoreLayout: 0
+  m_MinWidth: -1
+  m_MinHeight: -1
+  m_PreferredWidth: -1
+  m_PreferredHeight: -1
+  m_FlexibleWidth: 2
+  m_FlexibleHeight: -1
+--- !u!114 &114435636144975300
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 164562}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: b3905a73a6672d9449647aaf036e23fc, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114466839828933532
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1828058091608518}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114501864645789684}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &114501864645789684
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1828058091608518}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114533172895795940
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1608527955020594}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.24264705, g: 0.24443123, b: 0.24443123, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114538072837526774
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 110786}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 6565f2084f5aef44abe57c988745b9c3, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  debugManager: {fileID: 11452418}
+--- !u!114 &114565304207243400
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1023677686285356}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.31617647, g: 0.31617647, b: 0.31617647, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114575087663981696
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 109254}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1327945023, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!114 &114590115059802926
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1164238372139318}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 0.653}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 2
+    m_BestFit: 1
+    m_MinSize: 2
+    m_MaxSize: 16
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Search...
+--- !u!114 &114590956026916120
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1486651836328188}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.30980393, g: 0.30980393, b: 0.30980393, a: 0.6862745}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: b902f763d0e47364dae25207b7e47800, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114664465529608634
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1197649202466618}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114677982133495580}
+  m_TextComponent: {fileID: 114958054160062352}
+  m_Placeholder: {fileID: 114590115059802926}
+  m_ContentType: 0
+  m_InputType: 0
+  m_AsteriskChar: 42
+  m_KeyboardType: 0
+  m_LineType: 0
+  m_HideMobileInput: 0
+  m_CharacterValidation: 0
+  m_CharacterLimit: 0
+  m_OnEndEdit:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.InputField+SubmitEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.InputField+OnChangeEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+  m_CustomCaretColor: 0
+  m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
+  m_Text: 
+  m_CaretBlinkRate: 0.85
+  m_CaretWidth: 1
+  m_ReadOnly: 0
+--- !u!114 &114677982133495580
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1197649202466618}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 0}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114704198421030094
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1797932393879816}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 7a9e374666ad6cc47807bb001844f3d8, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114749866180229960
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1065080943999816}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 10
+    m_Right: 10
+    m_Top: 10
+    m_Bottom: 10
+  m_ChildAlignment: 6
+  m_Spacing: 2
+  m_ChildForceExpandWidth: 0
+  m_ChildForceExpandHeight: 0
+  m_ChildControlWidth: 1
+  m_ChildControlHeight: 1
+--- !u!114 &114777798721274074
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121708}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -405508275, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding:
+    m_Left: 0
+    m_Right: 0
+    m_Top: 0
+    m_Bottom: 0
+  m_ChildAlignment: 0
+  m_Spacing: 0
+  m_ChildForceExpandWidth: 1
+  m_ChildForceExpandHeight: 1
+  m_ChildControlWidth: 1
+  m_ChildControlHeight: 1
+--- !u!114 &114786672304321734
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1486651836328188}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114590956026916120}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &114796147118253168
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1837270565088688}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9485294, g: 0.9485294, b: 0.9485294, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066c0b04be98cd348abb79add91d42bf, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 1
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114944715489184838
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121708}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114958054160062352
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1046123681008450}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.8392157, g: 0.84313726, b: 0.84313726, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 0
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 
+--- !u!222 &222000010368327546
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013017939458}
+--- !u!222 &222000010912077860
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013131456698}
+--- !u!222 &222000011960742964
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010562689872}
+--- !u!222 &222006696964694420
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1164238372139318}
+--- !u!222 &222172057957339964
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1828058091608518}
+--- !u!222 &222199124140025852
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1608527955020594}
+--- !u!222 &222255240242372310
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1486651836328188}
+--- !u!222 &222390805710412110
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1316062289193744}
+--- !u!222 &222428315485768352
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1797932393879816}
+--- !u!222 &222466100300644746
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 121708}
+--- !u!222 &222554695212194500
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1023677686285356}
+--- !u!222 &222677458225366564
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1197649202466618}
+--- !u!222 &222691170673863110
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1065080943999816}
+--- !u!222 &222821544406435052
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1926020646996780}
+--- !u!222 &222859164510105872
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1046123681008450}
+--- !u!222 &222974975071271426
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1837270565088688}
+--- !u!224 &224000011255372986
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013131456698}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224000014244241328}
+  - {fileID: 224000014081388310}
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 4
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: -32, y: 0}
+  m_SizeDelta: {x: -64, y: 36}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!224 &224000014081388310
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000010562689872}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224000011255372986}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -20, y: -16}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224000014244241328
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1000013017939458}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224000011255372986}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -20, y: -16}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224170087475393432
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1486651836328188}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224726770285678000}
+  m_Father: {fileID: 22485076}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0, y: 8}
+  m_SizeDelta: {x: 42, y: 42}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!224 &224175272648112170
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1419055185851692}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224982529675224150}
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 36}
+  m_SizeDelta: {x: 0, y: 5000}
+  m_Pivot: {x: 0, y: 0}
+--- !u!224 &224332069547574292
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1926020646996780}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224927884203097686}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 1}
+  m_AnchoredPosition: {x: 2, y: 0}
+  m_SizeDelta: {x: 25, y: -6}
+  m_Pivot: {x: 0, y: 0.5}
+--- !u!224 &224479789572691966
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1797932393879816}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224856348943071238}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.15, y: 0.12}
+  m_AnchorMax: {x: 0.85, y: 0.88}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224619367409363176
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1608527955020594}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224927884203097686}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224669170713768380
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1164238372139318}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224927884203097686}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 15, y: -0.5}
+  m_SizeDelta: {x: -30, y: -13}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224726770285678000
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1837270565088688}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224170087475393432}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.2, y: 0.2}
+  m_AnchorMax: {x: 0.8, y: 0.8}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224755787573573022
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1023677686285356}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22477946}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: -36}
+  m_SizeDelta: {x: 0, y: 36}
+  m_Pivot: {x: 0.5, y: 1}
+--- !u!224 &224757625655964314
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1046123681008450}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224927884203097686}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 15, y: -0.5}
+  m_SizeDelta: {x: -30, y: -13}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224781297716539566
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1316062289193744}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22488670}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.15, y: 0.12}
+  m_AnchorMax: {x: 0.85, y: 0.88}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224856348943071238
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1828058091608518}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224479789572691966}
+  m_Father: {fileID: 22456566}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224927884203097686
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1197649202466618}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224332069547574292}
+  - {fileID: 224669170713768380}
+  - {fileID: 224757625655964314}
+  m_Father: {fileID: 224619367409363176}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224982529675224150
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1065080943999816}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224175272648112170}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: -0.00005340576}
+  m_SizeDelta: {x: 24, y: 24}
+  m_Pivot: {x: 0, y: 0}
diff --git a/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta
new file mode 100644
index 00000000..cb0d55bc
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/IngameDebugConsole.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 67117722a812a2e46ab8cb8eafbf5f5e
+timeCreated: 1466014755
+licenseType: Store
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs.meta b/Assets/Plugins/IngameDebugConsole/Prefabs.meta
new file mode 100644
index 00000000..5eae9ada
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Prefabs.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 7dbc36665bc0d684db9a4447e27a7a4b
+folderAsset: yes
+timeCreated: 1520417401
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab
new file mode 100644
index 00000000..0f8cf147
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab
@@ -0,0 +1,87 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 1386426139070838}
+  m_IsPrefabParent: 1
+--- !u!1 &1386426139070838
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224955737853170496}
+  - component: {fileID: 222541766812100524}
+  - component: {fileID: 114169395487023046}
+  m_Layer: 5
+  m_Name: CommandSuggestion
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &114169395487023046
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1386426139070838}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: help
+--- !u!222 &222541766812100524
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1386426139070838}
+--- !u!224 &224955737853170496
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1386426139070838}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 0, y: 0}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta
new file mode 100644
index 00000000..44072226
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Prefabs/CommandSuggestion.prefab.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 5e66896448428cf46a1854dbdc014914
+timeCreated: 1601390136
+licenseType: Store
+NativeFormatImporter:
+  mainObjectFileID: 100100000
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab
new file mode 100644
index 00000000..c80442f1
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab
@@ -0,0 +1,640 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!1 &104862
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22461494}
+  - component: {fileID: 22233942}
+  - component: {fileID: 11411806}
+  m_Layer: 5
+  m_Name: LogCount
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!1 &151462
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22420350}
+  - component: {fileID: 22200920}
+  - component: {fileID: 11432936}
+  m_Layer: 5
+  m_Name: LogCountText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &152362
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22427300}
+  - component: {fileID: 22262284}
+  - component: {fileID: 11404142}
+  m_Layer: 5
+  m_Name: LogType
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &166880
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22479264}
+  - component: {fileID: 22288988}
+  - component: {fileID: 11459012}
+  - component: {fileID: 11408050}
+  - component: {fileID: 11456372}
+  - component: {fileID: 225819852034701160}
+  m_Layer: 5
+  m_Name: DebugLogItem
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!1 &173670
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 22457652}
+  - component: {fileID: 22240404}
+  - component: {fileID: 11465282}
+  m_Layer: 5
+  m_Name: LogText
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &11404142
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 152362}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 33b115bf5efdfa04d8e2e0b70a6643cd, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11408050
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: d2ea291be9de70a4abfec595203c96c1, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  transformComponent: {fileID: 22479264}
+  imageComponent: {fileID: 11459012}
+  canvasGroupComponent: {fileID: 225819852034701160}
+  logText: {fileID: 11465282}
+  logTypeImage: {fileID: 11404142}
+  logCountParent: {fileID: 104862}
+  logCountText: {fileID: 11432936}
+  copyLogButton: {fileID: 224006190298411330}
+--- !u!114 &11411806
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104862}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: b3f0d976f6d6802479d6465d11b3aa68, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11432936
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151462}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 1
+    m_MinSize: 1
+    m_MaxSize: 16
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: 1
+--- !u!114 &11456372
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 11459012}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!114 &11459012
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.23529412, g: 0.23529412, b: 0.23529412, a: 0.697}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 98e8e1cf8dc7dbf469617c2e40c8a944, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &11465282
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173670}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 15
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 3
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 1
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Debug.Log summary
+--- !u!222 &22200920
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151462}
+--- !u!222 &22233942
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104862}
+--- !u!222 &22240404
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173670}
+--- !u!222 &22262284
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 152362}
+--- !u!222 &22288988
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+--- !u!224 &22420350
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 151462}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22461494}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: -2, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22427300
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 152362}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22479264}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0.5}
+  m_AnchorMax: {x: 0, y: 0.5}
+  m_AnchoredPosition: {x: 25, y: 0}
+  m_SizeDelta: {x: 32, y: 32}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22457652
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 173670}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 22479264}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 22.5, y: 0}
+  m_SizeDelta: {x: -55, y: -2}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22461494
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 104862}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22420350}
+  m_Father: {fileID: 22479264}
+  m_RootOrder: 2
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 1, y: 0.5}
+  m_AnchorMax: {x: 1, y: 0.5}
+  m_AnchoredPosition: {x: -28, y: 0}
+  m_SizeDelta: {x: 38, y: 28}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &22479264
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 22427300}
+  - {fileID: 22457652}
+  - {fileID: 22461494}
+  - {fileID: 224006190298411330}
+  m_Father: {fileID: 0}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 1}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 40}
+  m_Pivot: {x: 0, y: 1}
+--- !u!1001 &100100000
+Prefab:
+  m_ObjectHideFlags: 1
+  serializedVersion: 2
+  m_Modification:
+    m_TransformParent: {fileID: 0}
+    m_Modifications: []
+    m_RemovedComponents: []
+  m_ParentPrefab: {fileID: 0}
+  m_RootGameObject: {fileID: 166880}
+  m_IsPrefabParent: 1
+--- !u!1 &1396836967994216
+GameObject:
+  m_ObjectHideFlags: 0
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224006190298411330}
+  - component: {fileID: 222870443111501910}
+  - component: {fileID: 114119781176956926}
+  - component: {fileID: 114694923173451186}
+  m_Layer: 5
+  m_Name: CopyLogButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
+--- !u!1 &1503640463151286
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224887990600088790}
+  - component: {fileID: 222313182602304162}
+  - component: {fileID: 114549765989288124}
+  m_Layer: 5
+  m_Name: Text
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &114119781176956926
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1396836967994216}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.42647058, g: 0.42647058, b: 0.42647058, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: 066d3840badf4d24dba1d42b4c59b888, type: 3}
+  m_Type: 1
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+--- !u!114 &114549765989288124
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1503640463151286}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.83823526, g: 0.84439874, b: 0.84439874, a: 1}
+  m_RaycastTarget: 0
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_FontData:
+    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+    m_FontSize: 16
+    m_FontStyle: 0
+    m_BestFit: 0
+    m_MinSize: 1
+    m_MaxSize: 40
+    m_Alignment: 4
+    m_AlignByGeometry: 0
+    m_RichText: 1
+    m_HorizontalOverflow: 0
+    m_VerticalOverflow: 0
+    m_LineSpacing: 1
+  m_Text: Copy
+--- !u!114 &114694923173451186
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1396836967994216}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114119781176956926}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls:
+      - m_Target: {fileID: 11408050}
+        m_MethodName: CopyLog
+        m_Mode: 1
+        m_Arguments:
+          m_ObjectArgument: {fileID: 0}
+          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
+          m_IntArgument: 0
+          m_FloatArgument: 0
+          m_StringArgument: 
+          m_BoolArgument: 0
+        m_CallState: 2
+    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+--- !u!222 &222313182602304162
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1503640463151286}
+--- !u!222 &222870443111501910
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1396836967994216}
+--- !u!224 &224006190298411330
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1396836967994216}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children:
+  - {fileID: 224887990600088790}
+  m_Father: {fileID: 22479264}
+  m_RootOrder: 3
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 0}
+  m_AnchoredPosition: {x: 0, y: 2}
+  m_SizeDelta: {x: -100, y: 36}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!224 &224887990600088790
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1503640463151286}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224006190298411330}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!225 &225819852034701160
+CanvasGroup:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 166880}
+  m_Enabled: 1
+  m_Alpha: 1
+  m_Interactable: 1
+  m_BlocksRaycasts: 1
+  m_IgnoreParentGroups: 0
diff --git a/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta
new file mode 100644
index 00000000..b2a75778
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Prefabs/DebugLogItem.prefab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 391be5df5ef62f345bb76a1051c04da7
+timeCreated: 1465919887
+licenseType: Store
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/README.txt b/Assets/Plugins/IngameDebugConsole/README.txt
new file mode 100644
index 00000000..33c0498b
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/README.txt
@@ -0,0 +1,10 @@
+= In-game Debug Console =
+
+Online documentation available at: https://github.com/yasirkula/UnityIngameDebugConsole
+E-mail: yasirkula@gmail.com
+
+1. ABOUT
+This asset helps you see debug messages (logs, warnings, errors, exceptions) runtime in a build (also assertions in editor) and execute commands using its built-in console.
+
+2. HOW TO
+You can simply place the IngameDebugConsole prefab to your scene. Hovering the cursor over its properties in the Inspector will reveal explanatory tooltips.
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/README.txt.meta b/Assets/Plugins/IngameDebugConsole/README.txt.meta
new file mode 100644
index 00000000..21f8dae5
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/README.txt.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: edf2ac73f7bc3064c96d53009106dc53
+timeCreated: 1563307881
+licenseType: Store
+TextScriptImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts.meta b/Assets/Plugins/IngameDebugConsole/Scripts.meta
new file mode 100644
index 00000000..1040eb3e
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 860c08388401a6d4e858fe4910ea9337
+folderAsset: yes
+timeCreated: 1465930645
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs
new file mode 100644
index 00000000..86537b17
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs
@@ -0,0 +1,116 @@
+// #define RESET_REMOVED_ELEMENTS
+
+namespace IngameDebugConsole
+{
+	public class CircularBuffer<T>
+	{
+		private T[] arr;
+		private int startIndex;
+
+		public int Count { get; private set; }
+		public T this[int index] { get { return arr[( startIndex + index ) % arr.Length]; } }
+
+		public CircularBuffer( int capacity )
+		{
+			arr = new T[capacity];
+		}
+
+		// Old elements are overwritten when capacity is reached
+		public void Add( T value )
+		{
+			if( Count < arr.Length )
+				arr[Count++] = value;
+			else
+			{
+				arr[startIndex] = value;
+				if( ++startIndex >= arr.Length )
+					startIndex = 0;
+			}
+		}
+	}
+
+	public class DynamicCircularBuffer<T>
+	{
+		private T[] arr;
+		private int startIndex;
+
+		public int Count { get; private set; }
+		public T this[int index]
+		{
+			get { return arr[( startIndex + index ) % arr.Length]; }
+			set { arr[( startIndex + index ) % arr.Length] = value; }
+		}
+
+		public DynamicCircularBuffer( int initialCapacity = 2 )
+		{
+			arr = new T[initialCapacity];
+		}
+
+		public void Add( T value )
+		{
+			if( Count >= arr.Length )
+			{
+				int prevSize = arr.Length;
+				int newSize = prevSize > 0 ? prevSize * 2 : 2; // Size must be doubled (at least), or the shift operation below must consider IndexOutOfRange situations
+
+				System.Array.Resize( ref arr, newSize );
+
+				if( startIndex > 0 )
+				{
+					if( startIndex <= ( prevSize - 1 ) / 2 )
+					{
+						// Move elements [0,startIndex) to the end
+						for( int i = 0; i < startIndex; i++ )
+						{
+							arr[i + prevSize] = arr[i];
+#if RESET_REMOVED_ELEMENTS
+							arr[i] = default( T );
+#endif
+						}
+					}
+					else
+					{
+						// Move elements [startIndex,prevSize) to the end
+						int delta = newSize - prevSize;
+						for( int i = prevSize - 1; i >= startIndex; i-- )
+						{
+							arr[i + delta] = arr[i];
+#if RESET_REMOVED_ELEMENTS
+							arr[i] = default( T );
+#endif
+						}
+
+						startIndex += delta;
+					}
+				}
+			}
+
+			this[Count++] = value;
+		}
+
+		public T RemoveFirst()
+		{
+			T element = arr[startIndex];
+#if RESET_REMOVED_ELEMENTS
+			arr[startIndex] = default( T );
+#endif
+
+			if( ++startIndex >= arr.Length )
+				startIndex = 0;
+
+			Count--;
+			return element;
+		}
+
+		public T RemoveLast()
+		{
+			T element = arr[Count - 1];
+#if RESET_REMOVED_ELEMENTS
+			arr[Count - 1] = default( T );
+#endif
+
+			Count--;
+			return element;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta
new file mode 100644
index 00000000..cbd5ebc8
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/CircularBuffer.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6136cb3c00eac0149901b8e7f2fecef8
+timeCreated: 1550943949
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs
new file mode 100644
index 00000000..c1259d03
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs
@@ -0,0 +1,23 @@
+using System;
+
+namespace IngameDebugConsole
+{
+	[AttributeUsage( AttributeTargets.Method, Inherited = false, AllowMultiple = true )]
+	public class ConsoleMethodAttribute : Attribute
+	{
+		private string m_command;
+		private string m_description;
+		private string[] m_parameterNames;
+
+		public string Command { get { return m_command; } }
+		public string Description { get { return m_description; } }
+		public string[] ParameterNames { get { return m_parameterNames; } }
+
+		public ConsoleMethodAttribute( string command, string description, params string[] parameterNames )
+		{
+			m_command = command;
+			m_description = description;
+			m_parameterNames = parameterNames;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta
new file mode 100644
index 00000000..a55a26b2
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/ConsoleMethodAttribute.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 324bb39c0bff0f74fa42f83e91f07e3a
+timeCreated: 1520710946
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs
new file mode 100644
index 00000000..2cbbe01b
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs
@@ -0,0 +1,1431 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Reflection;
+using System.Text;
+using Object = UnityEngine.Object;
+
+// Manages the console commands, parses console input and handles execution of commands
+// Supported method parameter types: int, float, bool, string, Vector2, Vector3, Vector4
+
+// Helper class to store important information about a command
+namespace IngameDebugConsole
+{
+	public class ConsoleMethodInfo
+	{
+		public readonly MethodInfo method;
+		public readonly Type[] parameterTypes;
+		public readonly object instance;
+
+		public readonly string command;
+		public readonly string signature;
+		public readonly string[] parameters;
+
+		public ConsoleMethodInfo( MethodInfo method, Type[] parameterTypes, object instance, string command, string signature, string[] parameters )
+		{
+			this.method = method;
+			this.parameterTypes = parameterTypes;
+			this.instance = instance;
+			this.command = command;
+			this.signature = signature;
+			this.parameters = parameters;
+		}
+
+		public bool IsValid()
+		{
+			if( !method.IsStatic && ( instance == null || instance.Equals( null ) ) )
+				return false;
+
+			return true;
+		}
+	}
+
+	public static class DebugLogConsole
+	{
+		public delegate bool ParseFunction( string input, out object output );
+
+		// All the commands
+		private static readonly List<ConsoleMethodInfo> methods = new List<ConsoleMethodInfo>();
+		private static readonly List<ConsoleMethodInfo> matchingMethods = new List<ConsoleMethodInfo>( 4 );
+
+		// All the parse functions
+		private static readonly Dictionary<Type, ParseFunction> parseFunctions = new Dictionary<Type, ParseFunction>()
+		{
+			{ typeof( string ), ParseString },
+			{ typeof( bool ), ParseBool },
+			{ typeof( int ), ParseInt },
+			{ typeof( uint ), ParseUInt },
+			{ typeof( long ), ParseLong },
+			{ typeof( ulong ), ParseULong },
+			{ typeof( byte ), ParseByte },
+			{ typeof( sbyte ), ParseSByte },
+			{ typeof( short ), ParseShort },
+			{ typeof( ushort ), ParseUShort },
+			{ typeof( char ), ParseChar },
+			{ typeof( float ), ParseFloat },
+			{ typeof( double ), ParseDouble },
+			{ typeof( decimal ), ParseDecimal },
+			{ typeof( Vector2 ), ParseVector2 },
+			{ typeof( Vector3 ), ParseVector3 },
+			{ typeof( Vector4 ), ParseVector4 },
+			{ typeof( Quaternion ), ParseQuaternion },
+			{ typeof( Color ), ParseColor },
+			{ typeof( Color32 ), ParseColor32 },
+			{ typeof( Rect ), ParseRect },
+			{ typeof( RectOffset ), ParseRectOffset },
+			{ typeof( Bounds ), ParseBounds },
+			{ typeof( GameObject ), ParseGameObject },
+#if UNITY_2017_2_OR_NEWER
+			{ typeof( Vector2Int ), ParseVector2Int },
+			{ typeof( Vector3Int ), ParseVector3Int },
+			{ typeof( RectInt ), ParseRectInt },
+			{ typeof( BoundsInt ), ParseBoundsInt },
+#endif
+		};
+
+		// All the readable names of accepted types
+		private static readonly Dictionary<Type, string> typeReadableNames = new Dictionary<Type, string>()
+		{
+			{ typeof( string ), "String" },
+			{ typeof( bool ), "Boolean" },
+			{ typeof( int ), "Integer" },
+			{ typeof( uint ), "Unsigned Integer" },
+			{ typeof( long ), "Long" },
+			{ typeof( ulong ), "Unsigned Long" },
+			{ typeof( byte ), "Byte" },
+			{ typeof( sbyte ), "Short Byte" },
+			{ typeof( short ), "Short" },
+			{ typeof( ushort ), "Unsigned Short" },
+			{ typeof( char ), "Char" },
+			{ typeof( float ), "Float" },
+			{ typeof( double ), "Double" },
+			{ typeof( decimal ), "Decimal" }
+		};
+
+		// Split arguments of an entered command
+		private static readonly List<string> commandArguments = new List<string>( 8 );
+
+		// Command parameter delimeter groups
+		private static readonly string[] inputDelimiters = new string[] { "\"\"", "''", "{}", "()", "[]" };
+
+		// CompareInfo used for case-insensitive command name comparison
+		private static readonly CompareInfo caseInsensitiveComparer = new CultureInfo( "en-US" ).CompareInfo;
+
+		static DebugLogConsole()
+		{
+#if UNITY_EDITOR || !NETFX_CORE
+			// Find all [ConsoleMethod] functions
+			// Don't search built-in assemblies for console methods since they can't have any
+			string[] ignoredAssemblies = new string[]
+			{
+				"Unity",
+				"System",
+				"Mono.",
+				"mscorlib",
+				"netstandard",
+				"TextMeshPro",
+				"Microsoft.GeneratedCode",
+				"I18N",
+				"Boo.",
+				"UnityScript.",
+				"ICSharpCode.",
+				"ExCSS.Unity",
+#if UNITY_EDITOR
+				"Assembly-CSharp-Editor",
+				"Assembly-UnityScript-Editor",
+				"nunit.",
+				"SyntaxTree.",
+				"AssetStoreTools",
+#endif
+			};
+
+			foreach( Assembly assembly in AppDomain.CurrentDomain.GetAssemblies() )
+			{
+#if NET_4_6 || NET_STANDARD_2_0
+				if( assembly.IsDynamic )
+					continue;
+#endif
+
+				string assemblyName = assembly.GetName().Name;
+				bool ignoreAssembly = false;
+				for( int i = 0; i < ignoredAssemblies.Length; i++ )
+				{
+					if( caseInsensitiveComparer.IsPrefix( assemblyName, ignoredAssemblies[i], CompareOptions.IgnoreCase ) )
+					{
+						ignoreAssembly = true;
+						break;
+					}
+				}
+
+				if( ignoreAssembly )
+					continue;
+
+				try
+				{
+					foreach( Type type in assembly.GetExportedTypes() )
+					{
+						foreach( MethodInfo method in type.GetMethods( BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly ) )
+						{
+							foreach( object attribute in method.GetCustomAttributes( typeof( ConsoleMethodAttribute ), false ) )
+							{
+								ConsoleMethodAttribute consoleMethod = attribute as ConsoleMethodAttribute;
+								if( consoleMethod != null )
+									AddCommand( consoleMethod.Command, consoleMethod.Description, method, null, consoleMethod.ParameterNames );
+							}
+						}
+					}
+				}
+				catch( NotSupportedException ) { }
+				catch( System.IO.FileNotFoundException ) { }
+				catch( Exception e )
+				{
+					Debug.LogError( "Couldn't search assembly for [ConsoleMethod] attributes: " + assemblyName + "\n" + e.ToString() );
+				}
+			}
+#endif
+
+			AddCommand( "help", "Prints all commands", LogAllCommands );
+			AddCommand( "sysinfo", "Prints system information", LogSystemInfo );
+		}
+
+		// Logs the list of available commands
+		public static void LogAllCommands()
+		{
+			int length = 25;
+			for( int i = 0; i < methods.Count; i++ )
+			{
+				if( methods[i].IsValid() )
+					length += 3 + methods[i].signature.Length;
+			}
+
+			StringBuilder stringBuilder = new StringBuilder( length );
+			stringBuilder.Append( "Available commands:" );
+
+			for( int i = 0; i < methods.Count; i++ )
+			{
+				if( methods[i].IsValid() )
+					stringBuilder.Append( "\n- " ).Append( methods[i].signature );
+			}
+
+			Debug.Log( stringBuilder.ToString() );
+
+			// After typing help, the log that lists all the commands should automatically be expanded for better UX
+			if( DebugLogManager.Instance )
+			{
+				DebugLogManager.Instance.ExpandLatestPendingLog();
+				DebugLogManager.Instance.StripStackTraceFromLatestPendingLog();
+			}
+		}
+
+		// Logs system information
+		public static void LogSystemInfo()
+		{
+			StringBuilder stringBuilder = new StringBuilder( 1024 );
+			stringBuilder.Append( "Rig: " ).AppendSysInfoIfPresent( SystemInfo.deviceModel ).AppendSysInfoIfPresent( SystemInfo.processorType )
+				.AppendSysInfoIfPresent( SystemInfo.systemMemorySize, "MB RAM" ).Append( SystemInfo.processorCount ).Append( " cores\n" );
+			stringBuilder.Append( "OS: " ).Append( SystemInfo.operatingSystem ).Append( "\n" );
+			stringBuilder.Append( "GPU: " ).Append( SystemInfo.graphicsDeviceName ).Append( " " ).Append( SystemInfo.graphicsMemorySize )
+				.Append( "MB " ).Append( SystemInfo.graphicsDeviceVersion )
+				.Append( SystemInfo.graphicsMultiThreaded ? " multi-threaded\n" : "\n" );
+			stringBuilder.Append( "Data Path: " ).Append( Application.dataPath ).Append( "\n" );
+			stringBuilder.Append( "Persistent Data Path: " ).Append( Application.persistentDataPath ).Append( "\n" );
+			stringBuilder.Append( "StreamingAssets Path: " ).Append( Application.streamingAssetsPath ).Append( "\n" );
+			stringBuilder.Append( "Temporary Cache Path: " ).Append( Application.temporaryCachePath ).Append( "\n" );
+			stringBuilder.Append( "Device ID: " ).Append( SystemInfo.deviceUniqueIdentifier ).Append( "\n" );
+			stringBuilder.Append( "Max Texture Size: " ).Append( SystemInfo.maxTextureSize ).Append( "\n" );
+#if UNITY_5_6_OR_NEWER
+			stringBuilder.Append( "Max Cubemap Size: " ).Append( SystemInfo.maxCubemapSize ).Append( "\n" );
+#endif
+			stringBuilder.Append( "Accelerometer: " ).Append( SystemInfo.supportsAccelerometer ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Gyro: " ).Append( SystemInfo.supportsGyroscope ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Location Service: " ).Append( SystemInfo.supportsLocationService ? "supported\n" : "not supported\n" );
+#if !UNITY_2019_1_OR_NEWER
+			stringBuilder.Append( "Image Effects: " ).Append( SystemInfo.supportsImageEffects ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "RenderToCubemap: " ).Append( SystemInfo.supportsRenderToCubemap ? "supported\n" : "not supported\n" );
+#endif
+			stringBuilder.Append( "Compute Shaders: " ).Append( SystemInfo.supportsComputeShaders ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Shadows: " ).Append( SystemInfo.supportsShadows ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Instancing: " ).Append( SystemInfo.supportsInstancing ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Motion Vectors: " ).Append( SystemInfo.supportsMotionVectors ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "3D Textures: " ).Append( SystemInfo.supports3DTextures ? "supported\n" : "not supported\n" );
+#if UNITY_5_6_OR_NEWER
+			stringBuilder.Append( "3D Render Textures: " ).Append( SystemInfo.supports3DRenderTextures ? "supported\n" : "not supported\n" );
+#endif
+			stringBuilder.Append( "2D Array Textures: " ).Append( SystemInfo.supports2DArrayTextures ? "supported\n" : "not supported\n" );
+			stringBuilder.Append( "Cubemap Array Textures: " ).Append( SystemInfo.supportsCubemapArrayTextures ? "supported" : "not supported" );
+
+			Debug.Log( stringBuilder.ToString() );
+
+			// After typing sysinfo, the log that lists system information should automatically be expanded for better UX
+			if( DebugLogManager.Instance )
+			{
+				DebugLogManager.Instance.ExpandLatestPendingLog();
+				DebugLogManager.Instance.StripStackTraceFromLatestPendingLog();
+			}
+		}
+
+		private static StringBuilder AppendSysInfoIfPresent( this StringBuilder sb, string info, string postfix = null )
+		{
+			if( info != SystemInfo.unsupportedIdentifier )
+			{
+				sb.Append( info );
+
+				if( postfix != null )
+					sb.Append( postfix );
+
+				sb.Append( " " );
+			}
+
+			return sb;
+		}
+
+		private static StringBuilder AppendSysInfoIfPresent( this StringBuilder sb, int info, string postfix = null )
+		{
+			if( info > 0 )
+			{
+				sb.Append( info );
+
+				if( postfix != null )
+					sb.Append( postfix );
+
+				sb.Append( " " );
+			}
+
+			return sb;
+		}
+
+		// Add a custom Type to the list of recognized command parameter Types
+		public static void AddCustomParameterType( Type type, ParseFunction parseFunction, string typeReadableName = null )
+		{
+			if( type == null )
+			{
+				Debug.LogError( "Parameter type can't be null!" );
+				return;
+			}
+			else if( parseFunction == null )
+			{
+				Debug.LogError( "Parameter parseFunction can't be null!" );
+				return;
+			}
+
+			parseFunctions[type] = parseFunction;
+
+			if( !string.IsNullOrEmpty( typeReadableName ) )
+				typeReadableNames[type] = typeReadableName;
+		}
+
+		// Remove a custom Type from the list of recognized command parameter Types
+		public static void RemoveCustomParameterType( Type type )
+		{
+			parseFunctions.Remove( type );
+			typeReadableNames.Remove( type );
+		}
+
+		// Add a command related with an instance method (i.e. non static method)
+		public static void AddCommandInstance( string command, string description, string methodName, object instance, params string[] parameterNames )
+		{
+			if( instance == null )
+			{
+				Debug.LogError( "Instance can't be null!" );
+				return;
+			}
+
+			AddCommand( command, description, methodName, instance.GetType(), instance, parameterNames );
+		}
+
+		// Add a command related with a static method (i.e. no instance is required to call the method)
+		public static void AddCommandStatic( string command, string description, string methodName, Type ownerType, params string[] parameterNames )
+		{
+			AddCommand( command, description, methodName, ownerType, null, parameterNames );
+		}
+
+		// Add a command that can be related to either a static or an instance method
+		public static void AddCommand( string command, string description, Action method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1>( string command, string description, Action<T1> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1>( string command, string description, Func<T1> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2>( string command, string description, Action<T1, T2> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2>( string command, string description, Func<T1, T2> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2, T3>( string command, string description, Action<T1, T2, T3> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2, T3>( string command, string description, Func<T1, T2, T3> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2, T3, T4>( string command, string description, Action<T1, T2, T3, T4> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2, T3, T4>( string command, string description, Func<T1, T2, T3, T4> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand<T1, T2, T3, T4, T5>( string command, string description, Func<T1, T2, T3, T4, T5> method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+		public static void AddCommand( string command, string description, Delegate method ) { AddCommand( command, description, method.Method, method.Target, null ); }
+
+		// Add a command with custom parameter names
+		public static void AddCommand<T1>( string command, string description, Action<T1> method, string parameterName ) { AddCommand( command, description, method.Method, method.Target, new string[1] { parameterName } ); }
+		public static void AddCommand<T1, T2>( string command, string description, Action<T1, T2> method, string parameterName1, string parameterName2 ) { AddCommand( command, description, method.Method, method.Target, new string[2] { parameterName1, parameterName2 } ); }
+		public static void AddCommand<T1, T2>( string command, string description, Func<T1, T2> method, string parameterName ) { AddCommand( command, description, method.Method, method.Target, new string[1] { parameterName } ); }
+		public static void AddCommand<T1, T2, T3>( string command, string description, Action<T1, T2, T3> method, string parameterName1, string parameterName2, string parameterName3 ) { AddCommand( command, description, method.Method, method.Target, new string[3] { parameterName1, parameterName2, parameterName3 } ); }
+		public static void AddCommand<T1, T2, T3>( string command, string description, Func<T1, T2, T3> method, string parameterName1, string parameterName2 ) { AddCommand( command, description, method.Method, method.Target, new string[2] { parameterName1, parameterName2 } ); }
+		public static void AddCommand<T1, T2, T3, T4>( string command, string description, Action<T1, T2, T3, T4> method, string parameterName1, string parameterName2, string parameterName3, string parameterName4 ) { AddCommand( command, description, method.Method, method.Target, new string[4] { parameterName1, parameterName2, parameterName3, parameterName4 } ); }
+		public static void AddCommand<T1, T2, T3, T4>( string command, string description, Func<T1, T2, T3, T4> method, string parameterName1, string parameterName2, string parameterName3 ) { AddCommand( command, description, method.Method, method.Target, new string[3] { parameterName1, parameterName2, parameterName3 } ); }
+		public static void AddCommand<T1, T2, T3, T4, T5>( string command, string description, Func<T1, T2, T3, T4, T5> method, string parameterName1, string parameterName2, string parameterName3, string parameterName4 ) { AddCommand( command, description, method.Method, method.Target, new string[4] { parameterName1, parameterName2, parameterName3, parameterName4 } ); }
+		public static void AddCommand( string command, string description, Delegate method, params string[] parameterNames ) { AddCommand( command, description, method.Method, method.Target, parameterNames ); }
+
+		// Create a new command and set its properties
+		private static void AddCommand( string command, string description, string methodName, Type ownerType, object instance, string[] parameterNames )
+		{
+			// Get the method from the class
+			MethodInfo method = ownerType.GetMethod( methodName, BindingFlags.Public | BindingFlags.NonPublic | ( instance != null ? BindingFlags.Instance : BindingFlags.Static ) );
+			if( method == null )
+			{
+				Debug.LogError( methodName + " does not exist in " + ownerType );
+				return;
+			}
+
+			AddCommand( command, description, method, instance, parameterNames );
+		}
+
+		private static void AddCommand( string command, string description, MethodInfo method, object instance, string[] parameterNames )
+		{
+			if( string.IsNullOrEmpty( command ) )
+			{
+				Debug.LogError( "Command name can't be empty!" );
+				return;
+			}
+
+			command = command.Trim();
+			if( command.IndexOf( ' ' ) >= 0 )
+			{
+				Debug.LogError( "Command name can't contain whitespace: " + command );
+				return;
+			}
+
+			// Fetch the parameters of the class
+			ParameterInfo[] parameters = method.GetParameters();
+			if( parameters == null )
+				parameters = new ParameterInfo[0];
+
+			// Store the parameter types in an array
+			Type[] parameterTypes = new Type[parameters.Length];
+			for( int i = 0; i < parameters.Length; i++ )
+			{
+				if( parameters[i].ParameterType.IsByRef )
+				{
+					Debug.LogError( "Command can't have 'out' or 'ref' parameters" );
+					return;
+				}
+
+				Type parameterType = parameters[i].ParameterType;
+				if( parseFunctions.ContainsKey( parameterType ) || typeof( Component ).IsAssignableFrom( parameterType ) || parameterType.IsEnum || IsSupportedArrayType( parameterType ) )
+					parameterTypes[i] = parameterType;
+				else
+				{
+					Debug.LogError( string.Concat( "Parameter ", parameters[i].Name, "'s Type ", parameterType, " isn't supported" ) );
+					return;
+				}
+			}
+
+			int commandIndex = FindCommandIndex( command );
+			if( commandIndex < 0 )
+				commandIndex = ~commandIndex;
+			else
+			{
+				int commandFirstIndex = commandIndex;
+				int commandLastIndex = commandIndex;
+
+				while( commandFirstIndex > 0 && caseInsensitiveComparer.Compare( methods[commandFirstIndex - 1].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+					commandFirstIndex--;
+				while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+					commandLastIndex++;
+
+				commandIndex = commandFirstIndex;
+				for( int i = commandFirstIndex; i <= commandLastIndex; i++ )
+				{
+					int parameterCountDiff = methods[i].parameterTypes.Length - parameterTypes.Length;
+					if( parameterCountDiff <= 0 )
+					{
+						// We are sorting the commands in 2 steps:
+						// 1: Sorting by their 'command' names which is handled by FindCommandIndex
+						// 2: Sorting by their parameter counts which is handled here (parameterCountDiff <= 0)
+						commandIndex = i + 1;
+
+						// Check if this command has been registered before and if it is, overwrite that command
+						if( parameterCountDiff == 0 )
+						{
+							int j = 0;
+							while( j < parameterTypes.Length && parameterTypes[j] == methods[i].parameterTypes[j] )
+								j++;
+
+							if( j >= parameterTypes.Length )
+							{
+								commandIndex = i;
+								commandLastIndex--;
+								methods.RemoveAt( i-- );
+
+								continue;
+							}
+						}
+					}
+				}
+			}
+
+			// Create the command
+			StringBuilder methodSignature = new StringBuilder( 256 );
+			string[] parameterSignatures = new string[parameterTypes.Length];
+
+			methodSignature.Append( command ).Append( ": " );
+
+			if( !string.IsNullOrEmpty( description ) )
+				methodSignature.Append( description ).Append( " -> " );
+
+			methodSignature.Append( method.DeclaringType.ToString() ).Append( "." ).Append( method.Name ).Append( "(" );
+			for( int i = 0; i < parameterTypes.Length; i++ )
+			{
+				int parameterSignatureStartIndex = methodSignature.Length;
+
+				methodSignature.Append( GetTypeReadableName( parameterTypes[i] ) ).Append( " " ).Append( ( parameterNames != null && i < parameterNames.Length && !string.IsNullOrEmpty( parameterNames[i] ) ) ? parameterNames[i] : parameters[i].Name );
+
+				if( i < parameterTypes.Length - 1 )
+					methodSignature.Append( ", " );
+
+				parameterSignatures[i] = methodSignature.ToString( parameterSignatureStartIndex, methodSignature.Length - parameterSignatureStartIndex );
+			}
+
+			methodSignature.Append( ")" );
+
+			Type returnType = method.ReturnType;
+			if( returnType != typeof( void ) )
+				methodSignature.Append( " : " ).Append( GetTypeReadableName( returnType ) );
+
+			methods.Insert( commandIndex, new ConsoleMethodInfo( method, parameterTypes, instance, command, methodSignature.ToString(), parameterSignatures ) );
+		}
+
+		// Remove all commands with the matching command name from the console
+		public static void RemoveCommand( string command )
+		{
+			if( !string.IsNullOrEmpty( command ) )
+			{
+				for( int i = methods.Count - 1; i >= 0; i-- )
+				{
+					if( caseInsensitiveComparer.Compare( methods[i].command, command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+						methods.RemoveAt( i );
+				}
+			}
+		}
+
+		// Remove all commands with the matching method from the console
+		public static void RemoveCommand( Action method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1>( Action<T1> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1>( Func<T1> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2>( Action<T1, T2> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2>( Func<T1, T2> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2, T3>( Action<T1, T2, T3> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2, T3>( Func<T1, T2, T3> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2, T3, T4>( Action<T1, T2, T3, T4> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2, T3, T4>( Func<T1, T2, T3, T4> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand<T1, T2, T3, T4, T5>( Func<T1, T2, T3, T4, T5> method ) { RemoveCommand( method.Method ); }
+		public static void RemoveCommand( Delegate method ) { RemoveCommand( method.Method ); }
+
+		public static void RemoveCommand( MethodInfo method )
+		{
+			if( method != null )
+			{
+				for( int i = methods.Count - 1; i >= 0; i-- )
+				{
+					if( methods[i].method == method )
+						methods.RemoveAt( i );
+				}
+			}
+		}
+
+		// Returns the first command that starts with the entered argument
+		public static string GetAutoCompleteCommand( string commandStart )
+		{
+			int commandIndex = FindCommandIndex( commandStart );
+			if( commandIndex < 0 )
+				commandIndex = ~commandIndex;
+
+			string result = null;
+			for( int i = commandIndex; i >= 0 && caseInsensitiveComparer.IsPrefix( methods[i].command, commandStart, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ); i-- )
+				result = methods[i].command;
+
+			if( result == null )
+			{
+				for( int i = commandIndex + 1; i < methods.Count && caseInsensitiveComparer.IsPrefix( methods[i].command, commandStart, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ); i++ )
+					result = methods[i].command;
+			}
+
+			return result;
+		}
+
+		// Parse the command and try to execute it
+		public static void ExecuteCommand( string command )
+		{
+			if( command == null )
+				return;
+
+			command = command.Trim();
+
+			if( command.Length == 0 )
+				return;
+
+			// Split the command's arguments
+			commandArguments.Clear();
+			FetchArgumentsFromCommand( command, commandArguments );
+
+			// Find all matching commands
+			matchingMethods.Clear();
+			bool parameterCountMismatch = false;
+			int commandIndex = FindCommandIndex( commandArguments[0] );
+			if( commandIndex >= 0 )
+			{
+				string _command = commandArguments[0];
+
+				int commandLastIndex = commandIndex;
+				while( commandIndex > 0 && caseInsensitiveComparer.Compare( methods[commandIndex - 1].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+					commandIndex--;
+				while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+					commandLastIndex++;
+
+				while( commandIndex <= commandLastIndex )
+				{
+					if( !methods[commandIndex].IsValid() )
+					{
+						methods.RemoveAt( commandIndex );
+						commandLastIndex--;
+					}
+					else
+					{
+						// Check if number of parameters match
+						if( methods[commandIndex].parameterTypes.Length == commandArguments.Count - 1 )
+							matchingMethods.Add( methods[commandIndex] );
+						else
+							parameterCountMismatch = true;
+
+						commandIndex++;
+					}
+				}
+			}
+
+			if( matchingMethods.Count == 0 )
+			{
+				if( parameterCountMismatch )
+				{
+					string _command = commandArguments[0];
+					int commandsLength = _command.Length + 75;
+					for( int i = 0; i < methods.Count; i++ )
+					{
+						if( caseInsensitiveComparer.Compare( methods[i].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+							commandsLength += methods[i].signature.Length + 3;
+					}
+
+					StringBuilder stringBuilder = new StringBuilder( commandsLength );
+					stringBuilder.Append( "ERROR: " ).Append( _command ).Append( " doesn't take " ).Append( commandArguments.Count - 1 ).Append( " parameter(s). Available command(s):" );
+
+					for( int i = 0; i < methods.Count; i++ )
+					{
+						if( caseInsensitiveComparer.Compare( methods[i].command, _command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+							stringBuilder.Append( "\n- " ).Append( methods[i].signature );
+					}
+
+					Debug.LogWarning( stringBuilder.ToString() );
+
+					// The log that lists method signature(s) for this command should automatically be expanded for better UX
+					if( DebugLogManager.Instance )
+					{
+						DebugLogManager.Instance.ExpandLatestPendingLog();
+						DebugLogManager.Instance.StripStackTraceFromLatestPendingLog();
+					}
+				}
+				else
+					Debug.LogWarning( "ERROR: can't find command: " + commandArguments[0] );
+
+				return;
+			}
+
+			ConsoleMethodInfo methodToExecute = null;
+			object[] parameters = new object[commandArguments.Count - 1];
+			string errorMessage = null;
+			for( int i = 0; i < matchingMethods.Count && methodToExecute == null; i++ )
+			{
+				ConsoleMethodInfo methodInfo = matchingMethods[i];
+
+				// Parse the parameters into objects
+				bool success = true;
+				for( int j = 0; j < methodInfo.parameterTypes.Length && success; j++ )
+				{
+					try
+					{
+						string argument = commandArguments[j + 1];
+						Type parameterType = methodInfo.parameterTypes[j];
+
+						object val;
+						if( ParseArgument( argument, parameterType, out val ) )
+							parameters[j] = val;
+						else
+						{
+							success = false;
+							errorMessage = string.Concat( "ERROR: couldn't parse ", argument, " to ", GetTypeReadableName( parameterType ) );
+						}
+					}
+					catch( Exception e )
+					{
+						success = false;
+						errorMessage = "ERROR: " + e.ToString();
+					}
+				}
+
+				if( success )
+					methodToExecute = methodInfo;
+			}
+
+			if( methodToExecute == null )
+				Debug.LogWarning( !string.IsNullOrEmpty( errorMessage ) ? errorMessage : "ERROR: something went wrong" );
+			else
+			{
+				Debug.Log( "Executing command: " + commandArguments[0] );
+
+				// Execute the method associated with the command
+				object result = methodToExecute.method.Invoke( methodToExecute.instance, parameters );
+				if( methodToExecute.method.ReturnType != typeof( void ) )
+				{
+					// Print the returned value to the console
+					if( result == null || result.Equals( null ) )
+						Debug.Log( "Value returned: null" );
+					else
+						Debug.Log( "Value returned: " + result.ToString() );
+				}
+			}
+		}
+
+		public static void FetchArgumentsFromCommand( string command, List<string> commandArguments )
+		{
+			for( int i = 0; i < command.Length; i++ )
+			{
+				if( char.IsWhiteSpace( command[i] ) )
+					continue;
+
+				int delimiterIndex = IndexOfDelimiterGroup( command[i] );
+				if( delimiterIndex >= 0 )
+				{
+					int endIndex = IndexOfDelimiterGroupEnd( command, delimiterIndex, i + 1 );
+					commandArguments.Add( command.Substring( i + 1, endIndex - i - 1 ) );
+					i = ( endIndex < command.Length - 1 && command[endIndex + 1] == ',' ) ? endIndex + 1 : endIndex;
+				}
+				else
+				{
+					int endIndex = IndexOfChar( command, ' ', i + 1 );
+					commandArguments.Add( command.Substring( i, command[endIndex - 1] == ',' ? endIndex - 1 - i : endIndex - i ) );
+					i = endIndex;
+				}
+			}
+		}
+
+		// Finds all commands that have a matching signature with command
+		// - caretIndexIncrements: indices inside "string command" that separate two arguments in the command. This is used to
+		//   figure out which argument the caret is standing on
+		// - commandName: command's name (first argument)
+		internal static void GetCommandSuggestions( string command, List<ConsoleMethodInfo> matchingCommands, List<int> caretIndexIncrements, ref string commandName, out int numberOfParameters )
+		{
+			bool commandNameCalculated = false;
+			bool commandNameFullyTyped = false;
+			numberOfParameters = -1;
+			for( int i = 0; i < command.Length; i++ )
+			{
+				if( char.IsWhiteSpace( command[i] ) )
+					continue;
+
+				int delimiterIndex = IndexOfDelimiterGroup( command[i] );
+				if( delimiterIndex >= 0 )
+				{
+					int endIndex = IndexOfDelimiterGroupEnd( command, delimiterIndex, i + 1 );
+					if( !commandNameCalculated )
+					{
+						commandNameCalculated = true;
+						commandNameFullyTyped = command.Length > endIndex;
+
+						int commandNameLength = endIndex - i - 1;
+						if( commandName == null || commandNameLength == 0 || commandName.Length != commandNameLength || caseInsensitiveComparer.IndexOf( command, commandName, i + 1, commandNameLength, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) != i + 1 )
+							commandName = command.Substring( i + 1, commandNameLength );
+					}
+
+					i = ( endIndex < command.Length - 1 && command[endIndex + 1] == ',' ) ? endIndex + 1 : endIndex;
+					caretIndexIncrements.Add( i + 1 );
+				}
+				else
+				{
+					int endIndex = IndexOfChar( command, ' ', i + 1 );
+					if( !commandNameCalculated )
+					{
+						commandNameCalculated = true;
+						commandNameFullyTyped = command.Length > endIndex;
+
+						int commandNameLength = command[endIndex - 1] == ',' ? endIndex - 1 - i : endIndex - i;
+						if( commandName == null || commandNameLength == 0 || commandName.Length != commandNameLength || caseInsensitiveComparer.IndexOf( command, commandName, i, commandNameLength, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) != i )
+							commandName = command.Substring( i, commandNameLength );
+					}
+
+					i = endIndex;
+					caretIndexIncrements.Add( i );
+				}
+
+				numberOfParameters++;
+			}
+
+			if( !commandNameCalculated )
+				commandName = string.Empty;
+
+			if( !string.IsNullOrEmpty( commandName ) )
+			{
+				int commandIndex = FindCommandIndex( commandName );
+				if( commandIndex < 0 )
+					commandIndex = ~commandIndex;
+
+				int commandLastIndex = commandIndex;
+				if( !commandNameFullyTyped )
+				{
+					// Match all commands that start with commandName
+					if( commandIndex < methods.Count && caseInsensitiveComparer.IsPrefix( methods[commandIndex].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) )
+					{
+						while( commandIndex > 0 && caseInsensitiveComparer.IsPrefix( methods[commandIndex - 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) )
+							commandIndex--;
+						while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.IsPrefix( methods[commandLastIndex + 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) )
+							commandLastIndex++;
+					}
+					else
+						commandLastIndex = -1;
+				}
+				else
+				{
+					// Match only the commands that are equal to commandName
+					if( commandIndex < methods.Count && caseInsensitiveComparer.Compare( methods[commandIndex].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+					{
+						while( commandIndex > 0 && caseInsensitiveComparer.Compare( methods[commandIndex - 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+							commandIndex--;
+						while( commandLastIndex < methods.Count - 1 && caseInsensitiveComparer.Compare( methods[commandLastIndex + 1].command, commandName, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace ) == 0 )
+							commandLastIndex++;
+					}
+					else
+						commandLastIndex = -1;
+				}
+
+				for( ; commandIndex <= commandLastIndex; commandIndex++ )
+				{
+					if( methods[commandIndex].parameterTypes.Length >= numberOfParameters )
+						matchingCommands.Add( methods[commandIndex] );
+				}
+			}
+		}
+
+		// Find the index of the delimiter group that 'c' belongs to
+		private static int IndexOfDelimiterGroup( char c )
+		{
+			for( int i = 0; i < inputDelimiters.Length; i++ )
+			{
+				if( c == inputDelimiters[i][0] )
+					return i;
+			}
+
+			return -1;
+		}
+
+		private static int IndexOfDelimiterGroupEnd( string command, int delimiterIndex, int startIndex )
+		{
+			char startChar = inputDelimiters[delimiterIndex][0];
+			char endChar = inputDelimiters[delimiterIndex][1];
+
+			// Check delimiter's depth for array support (e.g. [[1 2] [3 4]] for Vector2 array)
+			int depth = 1;
+
+			for( int i = startIndex; i < command.Length; i++ )
+			{
+				char c = command[i];
+				if( c == endChar && --depth <= 0 )
+					return i;
+				else if( c == startChar )
+					depth++;
+			}
+
+			return command.Length;
+		}
+
+		// Find the index of char in the string, or return the length of string instead of -1
+		private static int IndexOfChar( string command, char c, int startIndex )
+		{
+			int result = command.IndexOf( c, startIndex );
+			if( result < 0 )
+				result = command.Length;
+
+			return result;
+		}
+
+		// Find command's index in the list of registered commands using binary search
+		private static int FindCommandIndex( string command )
+		{
+			int min = 0;
+			int max = methods.Count - 1;
+			while( min <= max )
+			{
+				int mid = ( min + max ) / 2;
+				int comparison = caseInsensitiveComparer.Compare( command, methods[mid].command, CompareOptions.IgnoreCase | CompareOptions.IgnoreNonSpace );
+				if( comparison == 0 )
+					return mid;
+				else if( comparison < 0 )
+					max = mid - 1;
+				else
+					min = mid + 1;
+			}
+
+			return ~min;
+		}
+
+		public static bool IsSupportedArrayType( Type type )
+		{
+			if( type.IsArray )
+			{
+				if( type.GetArrayRank() != 1 )
+					return false;
+
+				type = type.GetElementType();
+			}
+			else if( type.IsGenericType )
+			{
+				if( type.GetGenericTypeDefinition() != typeof( List<> ) )
+					return false;
+
+				type = type.GetGenericArguments()[0];
+			}
+			else
+				return false;
+
+			return parseFunctions.ContainsKey( type ) || typeof( Component ).IsAssignableFrom( type ) || type.IsEnum;
+		}
+
+		public static string GetTypeReadableName( Type type )
+		{
+			string result;
+			if( typeReadableNames.TryGetValue( type, out result ) )
+				return result;
+
+			if( IsSupportedArrayType( type ) )
+			{
+				Type elementType = type.IsArray ? type.GetElementType() : type.GetGenericArguments()[0];
+				if( typeReadableNames.TryGetValue( elementType, out result ) )
+					return result + "[]";
+				else
+					return elementType.Name + "[]";
+			}
+
+			return type.Name;
+		}
+
+		public static bool ParseArgument( string input, Type argumentType, out object output )
+		{
+			ParseFunction parseFunction;
+			if( parseFunctions.TryGetValue( argumentType, out parseFunction ) )
+				return parseFunction( input, out output );
+			else if( typeof( Component ).IsAssignableFrom( argumentType ) )
+				return ParseComponent( input, argumentType, out output );
+			else if( argumentType.IsEnum )
+				return ParseEnum( input, argumentType, out output );
+			else if( IsSupportedArrayType( argumentType ) )
+				return ParseArray( input, argumentType, out output );
+			else
+			{
+				output = null;
+				return false;
+			}
+		}
+
+		public static bool ParseString( string input, out object output )
+		{
+			output = input;
+			return true;
+		}
+
+		public static bool ParseBool( string input, out object output )
+		{
+			if( input == "1" || input.ToLowerInvariant() == "true" )
+			{
+				output = true;
+				return true;
+			}
+
+			if( input == "0" || input.ToLowerInvariant() == "false" )
+			{
+				output = false;
+				return true;
+			}
+
+			output = false;
+			return false;
+		}
+
+		public static bool ParseInt( string input, out object output )
+		{
+			int value;
+			bool result = int.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseUInt( string input, out object output )
+		{
+			uint value;
+			bool result = uint.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseLong( string input, out object output )
+		{
+			long value;
+			bool result = long.TryParse( !input.EndsWith( "L", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseULong( string input, out object output )
+		{
+			ulong value;
+			bool result = ulong.TryParse( !input.EndsWith( "L", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseByte( string input, out object output )
+		{
+			byte value;
+			bool result = byte.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseSByte( string input, out object output )
+		{
+			sbyte value;
+			bool result = sbyte.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseShort( string input, out object output )
+		{
+			short value;
+			bool result = short.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseUShort( string input, out object output )
+		{
+			ushort value;
+			bool result = ushort.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseChar( string input, out object output )
+		{
+			char value;
+			bool result = char.TryParse( input, out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseFloat( string input, out object output )
+		{
+			float value;
+			bool result = float.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseDouble( string input, out object output )
+		{
+			double value;
+			bool result = double.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseDecimal( string input, out object output )
+		{
+			decimal value;
+			bool result = decimal.TryParse( !input.EndsWith( "f", StringComparison.OrdinalIgnoreCase ) ? input : input.Substring( 0, input.Length - 1 ), out value );
+
+			output = value;
+			return result;
+		}
+
+		public static bool ParseVector2( string input, out object output )
+		{
+			return ParseVector( input, typeof( Vector2 ), out output );
+		}
+
+		public static bool ParseVector3( string input, out object output )
+		{
+			return ParseVector( input, typeof( Vector3 ), out output );
+		}
+
+		public static bool ParseVector4( string input, out object output )
+		{
+			return ParseVector( input, typeof( Vector4 ), out output );
+		}
+
+		public static bool ParseQuaternion( string input, out object output )
+		{
+			return ParseVector( input, typeof( Quaternion ), out output );
+		}
+
+		public static bool ParseColor( string input, out object output )
+		{
+			return ParseVector( input, typeof( Color ), out output );
+		}
+
+		public static bool ParseColor32( string input, out object output )
+		{
+			return ParseVector( input, typeof( Color32 ), out output );
+		}
+
+		public static bool ParseRect( string input, out object output )
+		{
+			return ParseVector( input, typeof( Rect ), out output );
+		}
+
+		public static bool ParseRectOffset( string input, out object output )
+		{
+			return ParseVector( input, typeof( RectOffset ), out output );
+		}
+
+		public static bool ParseBounds( string input, out object output )
+		{
+			return ParseVector( input, typeof( Bounds ), out output );
+		}
+
+#if UNITY_2017_2_OR_NEWER
+		public static bool ParseVector2Int( string input, out object output )
+		{
+			return ParseVector( input, typeof( Vector2Int ), out output );
+		}
+
+		public static bool ParseVector3Int( string input, out object output )
+		{
+			return ParseVector( input, typeof( Vector3Int ), out output );
+		}
+
+		public static bool ParseRectInt( string input, out object output )
+		{
+			return ParseVector( input, typeof( RectInt ), out output );
+		}
+
+		public static bool ParseBoundsInt( string input, out object output )
+		{
+			return ParseVector( input, typeof( BoundsInt ), out output );
+		}
+#endif
+
+		public static bool ParseGameObject( string input, out object output )
+		{
+			output = input == "null" ? null : GameObject.Find( input );
+			return true;
+		}
+
+		public static bool ParseComponent( string input, Type componentType, out object output )
+		{
+			GameObject gameObject = input == "null" ? null : GameObject.Find( input );
+			output = gameObject ? gameObject.GetComponent( componentType ) : null;
+			return true;
+		}
+
+		public static bool ParseEnum( string input, Type enumType, out object output )
+		{
+			const int NONE = 0, OR = 1, AND = 2;
+
+			int outputInt = 0;
+			int operation = 0; // 0: nothing, 1: OR with outputInt, 2: AND with outputInt
+			for( int i = 0; i < input.Length; i++ )
+			{
+				string enumStr;
+				int orIndex = input.IndexOf( '|', i );
+				int andIndex = input.IndexOf( '&', i );
+				if( orIndex < 0 )
+					enumStr = input.Substring( i, ( andIndex < 0 ? input.Length : andIndex ) - i ).Trim();
+				else
+					enumStr = input.Substring( i, ( andIndex < 0 ? orIndex : Mathf.Min( andIndex, orIndex ) ) - i ).Trim();
+
+				int value;
+				if( !int.TryParse( enumStr, out value ) )
+				{
+					if( Enum.IsDefined( enumType, enumStr ) )
+						value = Convert.ToInt32( Enum.Parse( enumType, enumStr ) );
+					else
+					{
+						output = null;
+						return false;
+					}
+				}
+
+				if( operation == NONE )
+					outputInt = value;
+				else if( operation == OR )
+					outputInt |= value;
+				else
+					outputInt &= value;
+
+				if( orIndex >= 0 )
+				{
+					if( andIndex > orIndex )
+					{
+						operation = AND;
+						i = andIndex;
+					}
+					else
+					{
+						operation = OR;
+						i = orIndex;
+					}
+				}
+				else if( andIndex >= 0 )
+				{
+					operation = AND;
+					i = andIndex;
+				}
+				else
+					i = input.Length;
+			}
+
+			output = Enum.ToObject( enumType, outputInt );
+			return true;
+		}
+
+		public static bool ParseArray( string input, Type arrayType, out object output )
+		{
+			List<string> valuesToParse = new List<string>( 2 );
+			FetchArgumentsFromCommand( input, valuesToParse );
+
+			IList result = (IList) Activator.CreateInstance( arrayType, new object[1] { valuesToParse.Count } );
+			output = result;
+
+			if( arrayType.IsArray )
+			{
+				Type elementType = arrayType.GetElementType();
+				for( int i = 0; i < valuesToParse.Count; i++ )
+				{
+					object obj;
+					if( !ParseArgument( valuesToParse[i], elementType, out obj ) )
+						return false;
+
+					result[i] = obj;
+				}
+			}
+			else
+			{
+				Type elementType = arrayType.GetGenericArguments()[0];
+				for( int i = 0; i < valuesToParse.Count; i++ )
+				{
+					object obj;
+					if( !ParseArgument( valuesToParse[i], elementType, out obj ) )
+						return false;
+
+					result.Add( obj );
+				}
+			}
+
+			return true;
+		}
+
+		// Create a vector of specified type (fill the blank slots with 0 or ignore unnecessary slots)
+		private static bool ParseVector( string input, Type vectorType, out object output )
+		{
+			List<string> tokens = new List<string>( input.Replace( ',', ' ' ).Trim().Split( ' ' ) );
+			for( int i = tokens.Count - 1; i >= 0; i-- )
+			{
+				tokens[i] = tokens[i].Trim();
+				if( tokens[i].Length == 0 )
+					tokens.RemoveAt( i );
+			}
+
+			float[] tokenValues = new float[tokens.Count];
+			for( int i = 0; i < tokens.Count; i++ )
+			{
+				object val;
+				if( !ParseFloat( tokens[i], out val ) )
+				{
+					if( vectorType == typeof( Vector3 ) )
+						output = Vector3.zero;
+					else if( vectorType == typeof( Vector2 ) )
+						output = Vector2.zero;
+					else
+						output = Vector4.zero;
+
+					return false;
+				}
+
+				tokenValues[i] = (float) val;
+			}
+
+			if( vectorType == typeof( Vector3 ) )
+			{
+				Vector3 result = Vector3.zero;
+
+				for( int i = 0; i < tokenValues.Length && i < 3; i++ )
+					result[i] = tokenValues[i];
+
+				output = result;
+			}
+			else if( vectorType == typeof( Vector2 ) )
+			{
+				Vector2 result = Vector2.zero;
+
+				for( int i = 0; i < tokenValues.Length && i < 2; i++ )
+					result[i] = tokenValues[i];
+
+				output = result;
+			}
+			else if( vectorType == typeof( Vector4 ) )
+			{
+				Vector4 result = Vector4.zero;
+
+				for( int i = 0; i < tokenValues.Length && i < 4; i++ )
+					result[i] = tokenValues[i];
+
+				output = result;
+			}
+			else if( vectorType == typeof( Quaternion ) )
+			{
+				Quaternion result = Quaternion.identity;
+
+				for( int i = 0; i < tokenValues.Length && i < 4; i++ )
+					result[i] = tokenValues[i];
+
+				output = result;
+			}
+			else if( vectorType == typeof( Color ) )
+			{
+				Color result = Color.black;
+
+				for( int i = 0; i < tokenValues.Length && i < 4; i++ )
+					result[i] = tokenValues[i];
+
+				output = result;
+			}
+			else if( vectorType == typeof( Color32 ) )
+			{
+				Color32 result = new Color32( 0, 0, 0, 255 );
+
+				if( tokenValues.Length > 0 )
+					result.r = (byte) Mathf.RoundToInt( tokenValues[0] );
+				if( tokenValues.Length > 1 )
+					result.g = (byte) Mathf.RoundToInt( tokenValues[1] );
+				if( tokenValues.Length > 2 )
+					result.b = (byte) Mathf.RoundToInt( tokenValues[2] );
+				if( tokenValues.Length > 3 )
+					result.a = (byte) Mathf.RoundToInt( tokenValues[3] );
+
+				output = result;
+			}
+			else if( vectorType == typeof( Rect ) )
+			{
+				Rect result = Rect.zero;
+
+				if( tokenValues.Length > 0 )
+					result.x = tokenValues[0];
+				if( tokenValues.Length > 1 )
+					result.y = tokenValues[1];
+				if( tokenValues.Length > 2 )
+					result.width = tokenValues[2];
+				if( tokenValues.Length > 3 )
+					result.height = tokenValues[3];
+
+				output = result;
+			}
+			else if( vectorType == typeof( RectOffset ) )
+			{
+				RectOffset result = new RectOffset();
+
+				if( tokenValues.Length > 0 )
+					result.left = Mathf.RoundToInt( tokenValues[0] );
+				if( tokenValues.Length > 1 )
+					result.right = Mathf.RoundToInt( tokenValues[1] );
+				if( tokenValues.Length > 2 )
+					result.top = Mathf.RoundToInt( tokenValues[2] );
+				if( tokenValues.Length > 3 )
+					result.bottom = Mathf.RoundToInt( tokenValues[3] );
+
+				output = result;
+			}
+			else if( vectorType == typeof( Bounds ) )
+			{
+				Vector3 center = Vector3.zero;
+				for( int i = 0; i < tokenValues.Length && i < 3; i++ )
+					center[i] = tokenValues[i];
+
+				Vector3 size = Vector3.zero;
+				for( int i = 3; i < tokenValues.Length && i < 6; i++ )
+					size[i - 3] = tokenValues[i];
+
+				output = new Bounds( center, size );
+			}
+#if UNITY_2017_2_OR_NEWER
+			else if( vectorType == typeof( Vector3Int ) )
+			{
+				Vector3Int result = Vector3Int.zero;
+
+				for( int i = 0; i < tokenValues.Length && i < 3; i++ )
+					result[i] = Mathf.RoundToInt( tokenValues[i] );
+
+				output = result;
+			}
+			else if( vectorType == typeof( Vector2Int ) )
+			{
+				Vector2Int result = Vector2Int.zero;
+
+				for( int i = 0; i < tokenValues.Length && i < 2; i++ )
+					result[i] = Mathf.RoundToInt( tokenValues[i] );
+
+				output = result;
+			}
+			else if( vectorType == typeof( RectInt ) )
+			{
+				RectInt result = new RectInt();
+
+				if( tokenValues.Length > 0 )
+					result.x = Mathf.RoundToInt( tokenValues[0] );
+				if( tokenValues.Length > 1 )
+					result.y = Mathf.RoundToInt( tokenValues[1] );
+				if( tokenValues.Length > 2 )
+					result.width = Mathf.RoundToInt( tokenValues[2] );
+				if( tokenValues.Length > 3 )
+					result.height = Mathf.RoundToInt( tokenValues[3] );
+
+				output = result;
+			}
+			else if( vectorType == typeof( BoundsInt ) )
+			{
+				Vector3Int center = Vector3Int.zero;
+				for( int i = 0; i < tokenValues.Length && i < 3; i++ )
+					center[i] = Mathf.RoundToInt( tokenValues[i] );
+
+				Vector3Int size = Vector3Int.zero;
+				for( int i = 3; i < tokenValues.Length && i < 6; i++ )
+					size[i - 3] = Mathf.RoundToInt( tokenValues[i] );
+
+				output = new BoundsInt( center, size );
+			}
+#endif
+			else
+			{
+				output = null;
+				return false;
+			}
+
+			return true;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta
new file mode 100644
index 00000000..756bdf78
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogConsole.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d15693a03d0d33b4892c6365a2a97e19
+timeCreated: 1472036503
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs
new file mode 100644
index 00000000..cc582c4c
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs
@@ -0,0 +1,92 @@
+using UnityEngine;
+
+// Container for a simple debug entry
+namespace IngameDebugConsole
+{
+	public class DebugLogEntry : System.IEquatable<DebugLogEntry>
+	{
+		private const int HASH_NOT_CALCULATED = -623218;
+
+		public string logString;
+		public string stackTrace;
+
+		private string completeLog;
+
+		// Sprite to show with this entry
+		public Sprite logTypeSpriteRepresentation;
+
+		// Collapsed count
+		public int count;
+
+		private int hashValue;
+
+		public void Initialize( string logString, string stackTrace )
+		{
+			this.logString = logString;
+			this.stackTrace = stackTrace;
+
+			completeLog = null;
+			count = 1;
+			hashValue = HASH_NOT_CALCULATED;
+		}
+
+		// Check if two entries have the same origin
+		public bool Equals( DebugLogEntry other )
+		{
+			return this.logString == other.logString && this.stackTrace == other.stackTrace;
+		}
+
+		// Checks if logString or stackTrace contains the search term
+		public bool MatchesSearchTerm( string searchTerm )
+		{
+			return ( logString != null && logString.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ) ||
+				( stackTrace != null && stackTrace.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 );
+		}
+
+		// Return a string containing complete information about this debug entry
+		public override string ToString()
+		{
+			if( completeLog == null )
+				completeLog = string.Concat( logString, "\n", stackTrace );
+
+			return completeLog;
+		}
+
+		// Credit: https://stackoverflow.com/a/19250516/2373034
+		public override int GetHashCode()
+		{
+			if( hashValue == HASH_NOT_CALCULATED )
+			{
+				unchecked
+				{
+					hashValue = 17;
+					hashValue = hashValue * 23 + ( logString == null ? 0 : logString.GetHashCode() );
+					hashValue = hashValue * 23 + ( stackTrace == null ? 0 : stackTrace.GetHashCode() );
+				}
+			}
+
+			return hashValue;
+		}
+	}
+
+	public struct QueuedDebugLogEntry
+	{
+		public readonly string logString;
+		public readonly string stackTrace;
+		public readonly LogType logType;
+
+		public QueuedDebugLogEntry( string logString, string stackTrace, LogType logType )
+		{
+			this.logString = logString;
+			this.stackTrace = stackTrace;
+			this.logType = logType;
+		}
+
+		// Checks if logString or stackTrace contains the search term
+		public bool MatchesSearchTerm( string searchTerm )
+		{
+			return ( logString != null && logString.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 ) ||
+				( stackTrace != null && stackTrace.IndexOf( searchTerm, System.StringComparison.OrdinalIgnoreCase ) >= 0 );
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta
new file mode 100644
index 00000000..3a1dd214
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogEntry.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: e7b1a420c564be040bf73b8a377fc2c2
+timeCreated: 1466375168
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs
new file mode 100644
index 00000000..95bb0697
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs
@@ -0,0 +1,35 @@
+namespace IngameDebugConsole
+{
+	public class DebugLogIndexList
+	{
+		private int[] indices;
+		private int size;
+
+		public int Count { get { return size; } }
+		public int this[int index] { get { return indices[index]; } }
+
+		public DebugLogIndexList()
+		{
+			indices = new int[64];
+			size = 0;
+		}
+
+		public void Add( int index )
+		{
+			if( size == indices.Length )
+				System.Array.Resize( ref indices, size * 2 );
+
+			indices[size++] = index;
+		}
+
+		public void Clear()
+		{
+			size = 0;
+		}
+
+		public int IndexOf( int index )
+		{
+			return System.Array.IndexOf( indices, index );
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta
new file mode 100644
index 00000000..5f86ef52
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogIndexList.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 37c6c91e5bfac6f499698c03f593bcbb
+timeCreated: 1520627934
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs
new file mode 100644
index 00000000..ff1cf6d8
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs
@@ -0,0 +1,217 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+#if UNITY_EDITOR
+using UnityEditor;
+using System.Text.RegularExpressions;
+#endif
+
+// A UI element to show information about a debug entry
+namespace IngameDebugConsole
+{
+	public class DebugLogItem : MonoBehaviour, IPointerClickHandler
+	{
+		#region Platform Specific Elements
+#if !UNITY_2018_1_OR_NEWER
+#if !UNITY_EDITOR && UNITY_ANDROID
+		private static AndroidJavaClass m_ajc = null;
+		private static AndroidJavaClass AJC
+		{
+			get
+			{
+				if( m_ajc == null )
+					m_ajc = new AndroidJavaClass( "com.yasirkula.unity.DebugConsole" );
+
+				return m_ajc;
+			}
+		}
+
+		private static AndroidJavaObject m_context = null;
+		private static AndroidJavaObject Context
+		{
+			get
+			{
+				if( m_context == null )
+				{
+					using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) )
+					{
+						m_context = unityClass.GetStatic<AndroidJavaObject>( "currentActivity" );
+					}
+				}
+
+				return m_context;
+			}
+		}
+#elif !UNITY_EDITOR && UNITY_IOS
+		[System.Runtime.InteropServices.DllImport( "__Internal" )]
+		private static extern void _DebugConsole_CopyText( string text );
+#endif
+#endif
+		#endregion
+
+#pragma warning disable 0649
+		// Cached components
+		[SerializeField]
+		private RectTransform transformComponent;
+		public RectTransform Transform { get { return transformComponent; } }
+
+		[SerializeField]
+		private Image imageComponent;
+		public Image Image { get { return imageComponent; } }
+
+		[SerializeField]
+		private CanvasGroup canvasGroupComponent;
+		public CanvasGroup CanvasGroup { get { return canvasGroupComponent; } }
+
+		[SerializeField]
+		private Text logText;
+		[SerializeField]
+		private Image logTypeImage;
+
+		// Objects related to the collapsed count of the debug entry
+		[SerializeField]
+		private GameObject logCountParent;
+		[SerializeField]
+		private Text logCountText;
+
+		[SerializeField]
+		private RectTransform copyLogButton;
+#pragma warning restore 0649
+
+		// Debug entry to show with this log item
+		private DebugLogEntry logEntry;
+
+		// Index of the entry in the list of entries
+		private int entryIndex;
+		public int Index { get { return entryIndex; } }
+
+		private Vector2 logTextOriginalPosition;
+		private Vector2 logTextOriginalSize;
+		private float copyLogButtonHeight;
+
+		private DebugLogRecycledListView manager;
+
+		public void Initialize( DebugLogRecycledListView manager )
+		{
+			this.manager = manager;
+
+			logTextOriginalPosition = logText.rectTransform.anchoredPosition;
+			logTextOriginalSize = logText.rectTransform.sizeDelta;
+			copyLogButtonHeight = copyLogButton.anchoredPosition.y + copyLogButton.sizeDelta.y + 2f; // 2f: space between text and button
+		}
+
+		public void SetContent( DebugLogEntry logEntry, int entryIndex, bool isExpanded )
+		{
+			this.logEntry = logEntry;
+			this.entryIndex = entryIndex;
+
+			Vector2 size = transformComponent.sizeDelta;
+			if( isExpanded )
+			{
+				logText.horizontalOverflow = HorizontalWrapMode.Wrap;
+				size.y = manager.SelectedItemHeight;
+
+				if( !copyLogButton.gameObject.activeSelf )
+				{
+					copyLogButton.gameObject.SetActive( true );
+
+					logText.rectTransform.anchoredPosition = new Vector2( logTextOriginalPosition.x, logTextOriginalPosition.y + copyLogButtonHeight * 0.5f );
+					logText.rectTransform.sizeDelta = logTextOriginalSize - new Vector2( 0f, copyLogButtonHeight );
+				}
+			}
+			else
+			{
+				logText.horizontalOverflow = HorizontalWrapMode.Overflow;
+				size.y = manager.ItemHeight;
+
+				if( copyLogButton.gameObject.activeSelf )
+				{
+					copyLogButton.gameObject.SetActive( false );
+
+					logText.rectTransform.anchoredPosition = logTextOriginalPosition;
+					logText.rectTransform.sizeDelta = logTextOriginalSize;
+				}
+			}
+			transformComponent.sizeDelta = size;
+
+			logText.text = isExpanded ? logEntry.ToString() : logEntry.logString;
+			logTypeImage.sprite = logEntry.logTypeSpriteRepresentation;
+		}
+
+		// Show the collapsed count of the debug entry
+		public void ShowCount()
+		{
+			logCountText.text = logEntry.count.ToString();
+
+			if( !logCountParent.activeSelf )
+				logCountParent.SetActive( true );
+		}
+
+		// Hide the collapsed count of the debug entry
+		public void HideCount()
+		{
+			if( logCountParent.activeSelf )
+				logCountParent.SetActive( false );
+		}
+
+		// This log item is clicked, show the debug entry's stack trace
+		public void OnPointerClick( PointerEventData eventData )
+		{
+#if UNITY_EDITOR
+			if( eventData.button == PointerEventData.InputButton.Right )
+			{
+				Match regex = Regex.Match( logEntry.stackTrace, @"\(at .*\.cs:[0-9]+\)$", RegexOptions.Multiline );
+				if( regex.Success )
+				{
+					string line = logEntry.stackTrace.Substring( regex.Index + 4, regex.Length - 5 );
+					int lineSeparator = line.IndexOf( ':' );
+					MonoScript script = AssetDatabase.LoadAssetAtPath<MonoScript>( line.Substring( 0, lineSeparator ) );
+					if( script != null )
+						AssetDatabase.OpenAsset( script, int.Parse( line.Substring( lineSeparator + 1 ) ) );
+				}
+			}
+			else
+				manager.OnLogItemClicked( this );
+#else
+			manager.OnLogItemClicked( this );
+#endif
+		}
+
+		public void CopyLog()
+		{
+			string log = logEntry.ToString();
+			if( string.IsNullOrEmpty( log ) )
+				return;
+
+#if UNITY_EDITOR || UNITY_2018_1_OR_NEWER || ( !UNITY_ANDROID && !UNITY_IOS )
+			GUIUtility.systemCopyBuffer = log;
+#elif UNITY_ANDROID
+			AJC.CallStatic( "CopyText", Context, log );
+#elif UNITY_IOS
+			_DebugConsole_CopyText( log );
+#endif
+		}
+
+		public float CalculateExpandedHeight( string content )
+		{
+			string text = logText.text;
+			HorizontalWrapMode wrapMode = logText.horizontalOverflow;
+
+			logText.text = content;
+			logText.horizontalOverflow = HorizontalWrapMode.Wrap;
+
+			float result = logText.preferredHeight + copyLogButtonHeight;
+
+			logText.text = text;
+			logText.horizontalOverflow = wrapMode;
+
+			return Mathf.Max( manager.ItemHeight, result );
+		}
+
+		// Return a string containing complete information about the debug entry
+		public override string ToString()
+		{
+			return logEntry.ToString();
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta
new file mode 100644
index 00000000..15a0f84c
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogItem.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: d2ea291be9de70a4abfec595203c96c1
+timeCreated: 1465919949
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs
new file mode 100644
index 00000000..d17993a4
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs
@@ -0,0 +1,1318 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+
+// Receives debug entries and custom events (e.g. Clear, Collapse, Filter by Type)
+// and notifies the recycled list view of changes to the list of debug entries
+// 
+// - Vocabulary -
+// Debug/Log entry: a Debug.Log/LogError/LogWarning/LogException/LogAssertion request made by
+//                   the client and intercepted by this manager object
+// Debug/Log item: a visual (uGUI) representation of a debug entry
+// 
+// There can be a lot of debug entries in the system but there will only be a handful of log items 
+// to show their properties on screen (these log items are recycled as the list is scrolled)
+
+// An enum to represent filtered log types
+namespace IngameDebugConsole
+{
+	public enum DebugLogFilter
+	{
+		None = 0,
+		Info = 1,
+		Warning = 2,
+		Error = 4,
+		All = 7
+	}
+
+	public class DebugLogManager : MonoBehaviour
+	{
+		public static DebugLogManager Instance { get; private set; }
+
+#pragma warning disable 0649
+		[Header( "Properties" )]
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, console window will persist between scenes (i.e. not be destroyed when scene changes)" )]
+		private bool singleton = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "Minimum height of the console window" )]
+		private float minimumHeight = 200f;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If disabled, no popup will be shown when the console window is hidden" )]
+		private bool enablePopup = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, console will be initialized as a popup" )]
+		private bool startInPopupMode = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, console window will initially be invisible" )]
+		private bool startMinimized = false;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, pressing the Toggle Key will show/hide (i.e. toggle) the console window at runtime" )]
+		private bool toggleWithKey = false;
+
+		[SerializeField]
+		[HideInInspector]
+		private KeyCode toggleKey = KeyCode.BackQuote;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, the console window will have a searchbar" )]
+		private bool enableSearchbar = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "Width of the canvas determines whether the searchbar will be located inside the menu bar or underneath the menu bar. This way, the menu bar doesn't get too crowded on narrow screens. This value determines the minimum width of the canvas for the searchbar to appear inside the menu bar" )]
+		private float topSearchbarMinWidth = 360f;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, the command input field at the bottom of the console window will automatically be cleared after entering a command" )]
+		private bool clearCommandAfterExecution = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "Console keeps track of the previously entered commands. This value determines the capacity of the command history (you can scroll through the history via up and down arrow keys while the command input field is focused)" )]
+		private int commandHistorySize = 15;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, while typing a command, all of the matching commands' signatures will be displayed in a popup" )]
+		private bool showCommandSuggestions = true;
+
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "If enabled, on Android platform, logcat entries of the application will also be logged to the console with the prefix \"LOGCAT: \". This may come in handy especially if you want to access the native logs of your Android plugins (like Admob)" )]
+		private bool receiveLogcatLogsInAndroid = false;
+
+#pragma warning disable 0414
+		[SerializeField]
+		[HideInInspector]
+		[Tooltip( "Native logs will be filtered using these arguments. If left blank, all native logs of the application will be logged to the console. But if you want to e.g. see Admob's logs only, you can enter \"-s Ads\" (without quotes) here" )]
+		private string logcatArguments;
+#pragma warning restore 0414
+
+		[SerializeField]
+		[Tooltip( "If enabled, on Android and iOS devices with notch screens, the console window will be repositioned so that the cutout(s) don't obscure it" )]
+		private bool avoidScreenCutout = true;
+
+		[SerializeField]
+		[Tooltip( "If a log is longer than this limit, it will be truncated. This helps avoid reaching Unity's 65000 vertex limit for UI canvases" )]
+		private int maxLogLength = 10000;
+
+#if UNITY_EDITOR || UNITY_STANDALONE
+		[SerializeField]
+		[Tooltip( "If enabled, on standalone platforms, command input field will automatically be focused (start receiving keyboard input) after opening the console window" )]
+		private bool autoFocusOnCommandInputField = true;
+#endif
+
+		[Header( "Visuals" )]
+		[SerializeField]
+		private DebugLogItem logItemPrefab;
+
+		[SerializeField]
+		private Text commandSuggestionPrefab;
+
+		// Visuals for different log types
+		[SerializeField]
+		private Sprite infoLog;
+		[SerializeField]
+		private Sprite warningLog;
+		[SerializeField]
+		private Sprite errorLog;
+
+		private Dictionary<LogType, Sprite> logSpriteRepresentations;
+
+		[SerializeField]
+		private Color collapseButtonNormalColor;
+		[SerializeField]
+		private Color collapseButtonSelectedColor;
+
+		[SerializeField]
+		private Color filterButtonsNormalColor;
+		[SerializeField]
+		private Color filterButtonsSelectedColor;
+
+		[SerializeField]
+		private string commandSuggestionHighlightStart = "<color=orange>";
+		[SerializeField]
+		private string commandSuggestionHighlightEnd = "</color>";
+
+		[Header( "Internal References" )]
+		[SerializeField]
+		private RectTransform logWindowTR;
+
+		private RectTransform canvasTR;
+
+		[SerializeField]
+		private RectTransform logItemsContainer;
+
+		[SerializeField]
+		private RectTransform commandSuggestionsContainer;
+
+		[SerializeField]
+		private InputField commandInputField;
+
+		[SerializeField]
+		private Button hideButton;
+
+		[SerializeField]
+		private Button clearButton;
+
+		[SerializeField]
+		private Image collapseButton;
+
+		[SerializeField]
+		private Image filterInfoButton;
+		[SerializeField]
+		private Image filterWarningButton;
+		[SerializeField]
+		private Image filterErrorButton;
+
+		[SerializeField]
+		private Text infoEntryCountText;
+		[SerializeField]
+		private Text warningEntryCountText;
+		[SerializeField]
+		private Text errorEntryCountText;
+
+		[SerializeField]
+		private RectTransform searchbar;
+		[SerializeField]
+		private RectTransform searchbarSlotTop;
+		[SerializeField]
+		private RectTransform searchbarSlotBottom;
+
+		[SerializeField]
+		private GameObject snapToBottomButton;
+
+		// Canvas group to modify visibility of the log window
+		[SerializeField]
+		private CanvasGroup logWindowCanvasGroup;
+
+		[SerializeField]
+		private DebugLogPopup popupManager;
+
+		[SerializeField]
+		private ScrollRect logItemsScrollRect;
+		private RectTransform logItemsScrollRectTR;
+		private Vector2 logItemsScrollRectOriginalSize;
+
+		// Recycled list view to handle the log items efficiently
+		[SerializeField]
+		private DebugLogRecycledListView recycledListView;
+#pragma warning restore 0649
+
+		private bool isLogWindowVisible = true;
+		public bool IsLogWindowVisible { get { return isLogWindowVisible; } }
+
+		public bool PopupEnabled
+		{
+			get { return popupManager.gameObject.activeSelf; }
+			set { popupManager.gameObject.SetActive( value ); }
+		}
+
+		private bool screenDimensionsChanged = true;
+
+		// Number of entries filtered by their types
+		private int infoEntryCount = 0, warningEntryCount = 0, errorEntryCount = 0;
+
+		// Number of new entries received this frame
+		private int newInfoEntryCount = 0, newWarningEntryCount = 0, newErrorEntryCount = 0;
+
+		// Filters to apply to the list of debug entries to show
+		private bool isCollapseOn = false;
+		private DebugLogFilter logFilter = DebugLogFilter.All;
+
+		// Search filter
+		private string searchTerm;
+		private bool isInSearchMode;
+
+		// If the last log item is completely visible (scrollbar is at the bottom),
+		// scrollbar will remain at the bottom when new debug entries are received
+		private bool snapToBottom = true;
+
+		// List of unique debug entries (duplicates of entries are not kept)
+		private List<DebugLogEntry> collapsedLogEntries;
+
+		// Dictionary to quickly find if a log already exists in collapsedLogEntries
+		private Dictionary<DebugLogEntry, int> collapsedLogEntriesMap;
+
+		// The order the collapsedLogEntries are received 
+		// (duplicate entries have the same index (value))
+		private DebugLogIndexList uncollapsedLogEntriesIndices;
+
+		// Filtered list of debug entries to show
+		private DebugLogIndexList indicesOfListEntriesToShow;
+
+		// The log entry that must be focused this frame
+		private int indexOfLogEntryToSelectAndFocus = -1;
+
+		// Whether or not logs list view should be updated this frame
+		private bool shouldUpdateRecycledListView = false;
+
+		// Logs that should be registered in Update-loop
+		private DynamicCircularBuffer<QueuedDebugLogEntry> queuedLogEntries;
+		private object logEntriesLock;
+		private int pendingLogToAutoExpand;
+
+		// Command suggestions that match the currently entered command
+		private List<Text> commandSuggestionInstances;
+		private int visibleCommandSuggestionInstances = 0;
+		private List<ConsoleMethodInfo> matchingCommandSuggestions;
+		private List<int> commandCaretIndexIncrements;
+		private StringBuilder commandSuggestionsStringBuilder;
+		private string commandInputFieldPrevCommand;
+		private string commandInputFieldPrevCommandName;
+		private int commandInputFieldPrevParamCount = -1;
+		private int commandInputFieldPrevCaretPos = -1;
+		private int commandInputFieldPrevCaretArgumentIndex = -1;
+
+		// Pools for memory efficiency
+		private List<DebugLogEntry> pooledLogEntries;
+		private List<DebugLogItem> pooledLogItems;
+
+		// History of the previously entered commands
+		private CircularBuffer<string> commandHistory;
+		private int commandHistoryIndex = -1;
+		private string unfinishedCommand;
+
+		// Required in ValidateScrollPosition() function
+		private PointerEventData nullPointerEventData;
+
+		// Callbacks for log window show/hide events
+		public System.Action OnLogWindowShown, OnLogWindowHidden;
+
+#if UNITY_EDITOR
+		private bool isQuittingApplication;
+#endif
+
+#if !UNITY_EDITOR && UNITY_ANDROID
+		private DebugLogLogcatListener logcatListener;
+#endif
+
+		private void Awake()
+		{
+			// Only one instance of debug console is allowed
+			if( !Instance )
+			{
+				Instance = this;
+
+				// If it is a singleton object, don't destroy it between scene changes
+				if( singleton )
+					DontDestroyOnLoad( gameObject );
+			}
+			else if( Instance != this )
+			{
+				Destroy( gameObject );
+				return;
+			}
+
+			pooledLogEntries = new List<DebugLogEntry>( 16 );
+			pooledLogItems = new List<DebugLogItem>( 16 );
+			commandSuggestionInstances = new List<Text>( 8 );
+			matchingCommandSuggestions = new List<ConsoleMethodInfo>( 8 );
+			commandCaretIndexIncrements = new List<int>( 8 );
+			queuedLogEntries = new DynamicCircularBuffer<QueuedDebugLogEntry>( 16 );
+			commandHistory = new CircularBuffer<string>( commandHistorySize );
+
+			logEntriesLock = new object();
+			commandSuggestionsStringBuilder = new StringBuilder( 128 );
+
+			canvasTR = (RectTransform) transform;
+			logItemsScrollRectTR = (RectTransform) logItemsScrollRect.transform;
+			logItemsScrollRectOriginalSize = logItemsScrollRectTR.sizeDelta;
+
+			// Associate sprites with log types
+			logSpriteRepresentations = new Dictionary<LogType, Sprite>()
+			{
+				{ LogType.Log, infoLog },
+				{ LogType.Warning, warningLog },
+				{ LogType.Error, errorLog },
+				{ LogType.Exception, errorLog },
+				{ LogType.Assert, errorLog }
+			};
+
+			// Initially, all log types are visible
+			filterInfoButton.color = filterButtonsSelectedColor;
+			filterWarningButton.color = filterButtonsSelectedColor;
+			filterErrorButton.color = filterButtonsSelectedColor;
+
+			collapsedLogEntries = new List<DebugLogEntry>( 128 );
+			collapsedLogEntriesMap = new Dictionary<DebugLogEntry, int>( 128 );
+			uncollapsedLogEntriesIndices = new DebugLogIndexList();
+			indicesOfListEntriesToShow = new DebugLogIndexList();
+
+			recycledListView.Initialize( this, collapsedLogEntries, indicesOfListEntriesToShow, logItemPrefab.Transform.sizeDelta.y );
+			recycledListView.UpdateItemsInTheList( true );
+
+			if( minimumHeight < 200f )
+				minimumHeight = 200f;
+
+			if( enableSearchbar )
+				searchbar.GetComponent<InputField>().onValueChanged.AddListener( SearchTermChanged );
+			else
+			{
+				searchbar = null;
+				searchbarSlotTop.gameObject.SetActive( false );
+				searchbarSlotBottom.gameObject.SetActive( false );
+			}
+
+			if( commandSuggestionsContainer.gameObject.activeSelf )
+				commandSuggestionsContainer.gameObject.SetActive( false );
+
+			// Register to UI events
+			commandInputField.onValidateInput += OnValidateCommand;
+			commandInputField.onValueChanged.AddListener( RefreshCommandSuggestions );
+			commandInputField.onEndEdit.AddListener( OnEndEditCommand );
+			hideButton.onClick.AddListener( HideLogWindow );
+			clearButton.onClick.AddListener( ClearLogs );
+			collapseButton.GetComponent<Button>().onClick.AddListener( CollapseButtonPressed );
+			filterInfoButton.GetComponent<Button>().onClick.AddListener( FilterLogButtonPressed );
+			filterWarningButton.GetComponent<Button>().onClick.AddListener( FilterWarningButtonPressed );
+			filterErrorButton.GetComponent<Button>().onClick.AddListener( FilterErrorButtonPressed );
+			snapToBottomButton.GetComponent<Button>().onClick.AddListener( () => SetSnapToBottom( true ) );
+
+			nullPointerEventData = new PointerEventData( null );
+		}
+
+		private void OnEnable()
+		{
+			if( Instance != this )
+				return;
+
+			// Intercept debug entries
+			Application.logMessageReceivedThreaded -= ReceivedLog;
+			Application.logMessageReceivedThreaded += ReceivedLog;
+
+			if( receiveLogcatLogsInAndroid )
+			{
+#if !UNITY_EDITOR && UNITY_ANDROID
+				if( logcatListener == null )
+					logcatListener = new DebugLogLogcatListener();
+
+				logcatListener.Start( logcatArguments );
+#endif
+			}
+
+			DebugLogConsole.AddCommand( "save_logs", "Saves logs to a file", SaveLogsToFile );
+
+			//Debug.LogAssertion( "assert" );
+			//Debug.LogError( "error" );
+			//Debug.LogException( new System.IO.EndOfStreamException() );
+			//Debug.LogWarning( "warning" );
+			//Debug.Log( "log" );
+		}
+
+		private void OnDisable()
+		{
+			if( Instance != this )
+				return;
+
+			// Stop receiving debug entries
+			Application.logMessageReceivedThreaded -= ReceivedLog;
+
+#if !UNITY_EDITOR && UNITY_ANDROID
+			if( logcatListener != null )
+				logcatListener.Stop();
+#endif
+
+			DebugLogConsole.RemoveCommand( "save_logs" );
+		}
+
+		private void Start()
+		{
+			if( ( enablePopup && startInPopupMode ) || ( !enablePopup && startMinimized ) )
+				HideLogWindow();
+			else
+				ShowLogWindow();
+
+			PopupEnabled = enablePopup;
+		}
+
+#if UNITY_EDITOR
+		private void OnApplicationQuit()
+		{
+			isQuittingApplication = true;
+		}
+#endif
+
+		// Window is resized, update the list
+		private void OnRectTransformDimensionsChange()
+		{
+			screenDimensionsChanged = true;
+		}
+
+		private void Update()
+		{
+			// Toggling the console with toggleKey is handled in Update instead of LateUpdate because
+			// when we hide the console, we don't want the commandInputField to capture the toggleKey.
+			// InputField captures input in LateUpdate so deactivating it in Update ensures that
+			// no further input is captured
+			if( toggleWithKey )
+			{
+				if( Input.GetKeyDown( toggleKey ) )
+				{
+					if( isLogWindowVisible )
+						HideLogWindow();
+					else
+						ShowLogWindow();
+				}
+			}
+		}
+
+		private void LateUpdate()
+		{
+#if UNITY_EDITOR
+			if( isQuittingApplication )
+				return;
+#endif
+
+			int queuedLogCount = queuedLogEntries.Count;
+			if( queuedLogCount > 0 )
+			{
+				for( int i = 0; i < queuedLogCount; i++ )
+				{
+					QueuedDebugLogEntry logEntry;
+					lock( logEntriesLock )
+					{
+						logEntry = queuedLogEntries.RemoveFirst();
+					}
+
+					ProcessLog( logEntry );
+				}
+			}
+
+			// Update entry count texts in a single batch
+			if( newInfoEntryCount > 0 || newWarningEntryCount > 0 || newErrorEntryCount > 0 )
+			{
+				if( newInfoEntryCount > 0 )
+				{
+					infoEntryCount += newInfoEntryCount;
+					infoEntryCountText.text = infoEntryCount.ToString();
+				}
+
+				if( newWarningEntryCount > 0 )
+				{
+					warningEntryCount += newWarningEntryCount;
+					warningEntryCountText.text = warningEntryCount.ToString();
+				}
+
+				if( newErrorEntryCount > 0 )
+				{
+					errorEntryCount += newErrorEntryCount;
+					errorEntryCountText.text = errorEntryCount.ToString();
+				}
+
+				// If debug popup is visible, notify it of the new debug entries
+				if( !isLogWindowVisible )
+					popupManager.NewLogsArrived( newInfoEntryCount, newWarningEntryCount, newErrorEntryCount );
+
+				newInfoEntryCount = 0;
+				newWarningEntryCount = 0;
+				newErrorEntryCount = 0;
+			}
+
+			// Update visible logs if necessary
+			if( isLogWindowVisible && shouldUpdateRecycledListView )
+			{
+				recycledListView.OnLogEntriesUpdated( false );
+				shouldUpdateRecycledListView = false;
+			}
+
+			// Automatically expand the target log (if any)
+			if( indexOfLogEntryToSelectAndFocus >= 0 )
+			{
+				if( indexOfLogEntryToSelectAndFocus < indicesOfListEntriesToShow.Count )
+					recycledListView.SelectAndFocusOnLogItemAtIndex( indexOfLogEntryToSelectAndFocus );
+
+				indexOfLogEntryToSelectAndFocus = -1;
+			}
+
+			if( showCommandSuggestions && commandInputField.isFocused && commandInputField.caretPosition != commandInputFieldPrevCaretPos )
+				RefreshCommandSuggestions( commandInputField.text );
+
+			if( screenDimensionsChanged )
+			{
+				// Update the recycled list view
+				if( isLogWindowVisible )
+					recycledListView.OnViewportDimensionsChanged();
+				else
+					popupManager.OnViewportDimensionsChanged();
+
+#if UNITY_ANDROID || UNITY_IOS
+				CheckScreenCutout();
+#endif
+
+				if( searchbar )
+				{
+					float logWindowWidth = logWindowTR.rect.width;
+					if( logWindowWidth >= topSearchbarMinWidth )
+					{
+						if( searchbar.parent == searchbarSlotBottom )
+						{
+							searchbarSlotTop.gameObject.SetActive( true );
+							searchbar.SetParent( searchbarSlotTop, false );
+							searchbarSlotBottom.gameObject.SetActive( false );
+
+							logItemsScrollRectTR.anchoredPosition = Vector2.zero;
+							logItemsScrollRectTR.sizeDelta = logItemsScrollRectOriginalSize;
+						}
+					}
+					else
+					{
+						if( searchbar.parent == searchbarSlotTop )
+						{
+							searchbarSlotBottom.gameObject.SetActive( true );
+							searchbar.SetParent( searchbarSlotBottom, false );
+							searchbarSlotTop.gameObject.SetActive( false );
+
+							float searchbarHeight = searchbarSlotBottom.sizeDelta.y;
+							logItemsScrollRectTR.anchoredPosition = new Vector2( 0f, searchbarHeight * -0.5f );
+							logItemsScrollRectTR.sizeDelta = logItemsScrollRectOriginalSize - new Vector2( 0f, searchbarHeight );
+						}
+					}
+				}
+
+				screenDimensionsChanged = false;
+			}
+
+			// If snapToBottom is enabled, force the scrollbar to the bottom
+			if( snapToBottom )
+			{
+				logItemsScrollRect.verticalNormalizedPosition = 0f;
+
+				if( snapToBottomButton.activeSelf )
+					snapToBottomButton.SetActive( false );
+			}
+			else
+			{
+				float scrollPos = logItemsScrollRect.verticalNormalizedPosition;
+				if( snapToBottomButton.activeSelf != ( scrollPos > 1E-6f && scrollPos < 0.9999f ) )
+					snapToBottomButton.SetActive( !snapToBottomButton.activeSelf );
+			}
+
+			if( isLogWindowVisible && commandInputField.isFocused && commandHistory.Count > 0 )
+			{
+				if( Input.GetKeyDown( KeyCode.UpArrow ) )
+				{
+					if( commandHistoryIndex == -1 )
+					{
+						commandHistoryIndex = commandHistory.Count - 1;
+						unfinishedCommand = commandInputField.text;
+					}
+					else if( --commandHistoryIndex < 0 )
+						commandHistoryIndex = 0;
+
+					commandInputField.text = commandHistory[commandHistoryIndex];
+					commandInputField.caretPosition = commandInputField.text.Length;
+				}
+				else if( Input.GetKeyDown( KeyCode.DownArrow ) && commandHistoryIndex != -1 )
+				{
+					if( ++commandHistoryIndex < commandHistory.Count )
+						commandInputField.text = commandHistory[commandHistoryIndex];
+					else
+					{
+						commandHistoryIndex = -1;
+						commandInputField.text = unfinishedCommand ?? string.Empty;
+					}
+				}
+			}
+
+#if !UNITY_EDITOR && UNITY_ANDROID
+			if( logcatListener != null )
+			{
+				string log;
+				while( ( log = logcatListener.GetLog() ) != null )
+					ReceivedLog( "LOGCAT: " + log, string.Empty, LogType.Log );
+			}
+#endif
+		}
+
+		public void ShowLogWindow()
+		{
+			// Show the log window
+			logWindowCanvasGroup.interactable = true;
+			logWindowCanvasGroup.blocksRaycasts = true;
+			logWindowCanvasGroup.alpha = 1f;
+
+			popupManager.Hide();
+
+			// Update the recycled list view 
+			// (in case new entries were intercepted while log window was hidden)
+			recycledListView.OnLogEntriesUpdated( true );
+
+#if UNITY_EDITOR || UNITY_STANDALONE
+			// Focus on the command input field on standalone platforms when the console is opened
+			if( autoFocusOnCommandInputField )
+				StartCoroutine( ActivateCommandInputFieldCoroutine() );
+#endif
+
+			isLogWindowVisible = true;
+
+			if( OnLogWindowShown != null )
+				OnLogWindowShown();
+		}
+
+		public void HideLogWindow()
+		{
+			// Hide the log window
+			logWindowCanvasGroup.interactable = false;
+			logWindowCanvasGroup.blocksRaycasts = false;
+			logWindowCanvasGroup.alpha = 0f;
+
+			if( commandInputField.isFocused )
+				commandInputField.DeactivateInputField();
+
+			popupManager.Show();
+
+			isLogWindowVisible = false;
+
+			if( OnLogWindowHidden != null )
+				OnLogWindowHidden();
+		}
+
+		// Command field input is changed, check if command is submitted
+		private char OnValidateCommand( string text, int charIndex, char addedChar )
+		{
+			if( addedChar == '\t' ) // Autocomplete attempt
+			{
+				if( !string.IsNullOrEmpty( text ) )
+				{
+					string autoCompletedCommand = DebugLogConsole.GetAutoCompleteCommand( text );
+					if( !string.IsNullOrEmpty( autoCompletedCommand ) )
+						commandInputField.text = autoCompletedCommand;
+				}
+
+				return '\0';
+			}
+			else if( addedChar == '\n' ) // Command is submitted
+			{
+				// Clear the command field
+				if( clearCommandAfterExecution )
+					commandInputField.text = string.Empty;
+
+				if( text.Length > 0 )
+				{
+					if( commandHistory.Count == 0 || commandHistory[commandHistory.Count - 1] != text )
+						commandHistory.Add( text );
+
+					commandHistoryIndex = -1;
+					unfinishedCommand = null;
+
+					// Execute the command
+					DebugLogConsole.ExecuteCommand( text );
+
+					// Snap to bottom and select the latest entry
+					SetSnapToBottom( true );
+				}
+
+				return '\0';
+			}
+
+			return addedChar;
+		}
+
+		// A debug entry is received
+		public void ReceivedLog( string logString, string stackTrace, LogType logType )
+		{
+#if UNITY_EDITOR
+			if( isQuittingApplication )
+				return;
+#endif
+
+			// Truncate the log if it is longer than maxLogLength
+			int logLength = logString.Length;
+			if( stackTrace == null )
+			{
+				if( logLength > maxLogLength )
+					logString = logString.Substring( 0, maxLogLength - 11 ) + "<truncated>";
+			}
+			else
+			{
+				logLength += stackTrace.Length;
+				if( logLength > maxLogLength )
+				{
+					// Decide which log component(s) to truncate
+					int halfMaxLogLength = maxLogLength / 2;
+					if( logString.Length >= halfMaxLogLength )
+					{
+						if( stackTrace.Length >= halfMaxLogLength )
+						{
+							// Truncate both logString and stackTrace
+							logString = logString.Substring( 0, halfMaxLogLength - 11 ) + "<truncated>";
+
+							// If stackTrace doesn't end with a blank line, its last line won't be visible in the console for some reason
+							stackTrace = stackTrace.Substring( 0, halfMaxLogLength - 12 ) + "<truncated>\n";
+						}
+						else
+						{
+							// Truncate logString
+							logString = logString.Substring( 0, maxLogLength - stackTrace.Length - 11 ) + "<truncated>";
+						}
+					}
+					else
+					{
+						// Truncate stackTrace
+						stackTrace = stackTrace.Substring( 0, maxLogLength - logString.Length - 12 ) + "<truncated>\n";
+					}
+				}
+			}
+
+			QueuedDebugLogEntry queuedLogEntry = new QueuedDebugLogEntry( logString, stackTrace, logType );
+
+			lock( logEntriesLock )
+			{
+				queuedLogEntries.Add( queuedLogEntry );
+			}
+		}
+
+		// Present the log entry in the console
+		private void ProcessLog( QueuedDebugLogEntry queuedLogEntry )
+		{
+			LogType logType = queuedLogEntry.logType;
+			DebugLogEntry logEntry;
+			if( pooledLogEntries.Count > 0 )
+			{
+				logEntry = pooledLogEntries[pooledLogEntries.Count - 1];
+				pooledLogEntries.RemoveAt( pooledLogEntries.Count - 1 );
+			}
+			else
+				logEntry = new DebugLogEntry();
+
+			logEntry.Initialize( queuedLogEntry.logString, queuedLogEntry.stackTrace );
+
+			// Check if this entry is a duplicate (i.e. has been received before)
+			int logEntryIndex;
+			bool isEntryInCollapsedEntryList = collapsedLogEntriesMap.TryGetValue( logEntry, out logEntryIndex );
+			if( !isEntryInCollapsedEntryList )
+			{
+				// It is not a duplicate,
+				// add it to the list of unique debug entries
+				logEntry.logTypeSpriteRepresentation = logSpriteRepresentations[logType];
+
+				logEntryIndex = collapsedLogEntries.Count;
+				collapsedLogEntries.Add( logEntry );
+				collapsedLogEntriesMap[logEntry] = logEntryIndex;
+			}
+			else
+			{
+				// It is a duplicate, pool the duplicate log entry and
+				// increment the original debug item's collapsed count
+				pooledLogEntries.Add( logEntry );
+
+				logEntry = collapsedLogEntries[logEntryIndex];
+				logEntry.count++;
+			}
+
+			// Add the index of the unique debug entry to the list
+			// that stores the order the debug entries are received
+			uncollapsedLogEntriesIndices.Add( logEntryIndex );
+
+			// If this debug entry matches the current filters,
+			// add it to the list of debug entries to show
+			int logEntryIndexInEntriesToShow = -1;
+			Sprite logTypeSpriteRepresentation = logEntry.logTypeSpriteRepresentation;
+			if( isCollapseOn && isEntryInCollapsedEntryList )
+			{
+				if( isLogWindowVisible )
+				{
+					if( !isInSearchMode && logFilter == DebugLogFilter.All )
+						logEntryIndexInEntriesToShow = logEntryIndex;
+					else
+						logEntryIndexInEntriesToShow = indicesOfListEntriesToShow.IndexOf( logEntryIndex );
+
+					recycledListView.OnCollapsedLogEntryAtIndexUpdated( logEntryIndexInEntriesToShow );
+				}
+			}
+			else if( ( !isInSearchMode || queuedLogEntry.MatchesSearchTerm( searchTerm ) ) && ( logFilter == DebugLogFilter.All ||
+			   ( logTypeSpriteRepresentation == infoLog && ( ( logFilter & DebugLogFilter.Info ) == DebugLogFilter.Info ) ) ||
+			   ( logTypeSpriteRepresentation == warningLog && ( ( logFilter & DebugLogFilter.Warning ) == DebugLogFilter.Warning ) ) ||
+			   ( logTypeSpriteRepresentation == errorLog && ( ( logFilter & DebugLogFilter.Error ) == DebugLogFilter.Error ) ) ) )
+			{
+				indicesOfListEntriesToShow.Add( logEntryIndex );
+				logEntryIndexInEntriesToShow = indicesOfListEntriesToShow.Count - 1;
+
+				if( isLogWindowVisible )
+					shouldUpdateRecycledListView = true;
+			}
+
+			if( logType == LogType.Log )
+				newInfoEntryCount++;
+			else if( logType == LogType.Warning )
+				newWarningEntryCount++;
+			else
+				newErrorEntryCount++;
+
+			// Automatically expand this log if necessary
+			if( pendingLogToAutoExpand > 0 && --pendingLogToAutoExpand <= 0 && isLogWindowVisible && logEntryIndexInEntriesToShow >= 0 )
+				indexOfLogEntryToSelectAndFocus = logEntryIndexInEntriesToShow;
+		}
+
+		// Value of snapToBottom is changed (user scrolled the list manually)
+		public void SetSnapToBottom( bool snapToBottom )
+		{
+			this.snapToBottom = snapToBottom;
+		}
+
+		// Make sure the scroll bar of the scroll rect is adjusted properly
+		internal void ValidateScrollPosition()
+		{
+			logItemsScrollRect.OnScroll( nullPointerEventData );
+		}
+
+		// Automatically expand the latest log in queuedLogEntries
+		public void ExpandLatestPendingLog()
+		{
+			pendingLogToAutoExpand = queuedLogEntries.Count;
+		}
+
+		// Omits the latest log's stack trace
+		public void StripStackTraceFromLatestPendingLog()
+		{
+			QueuedDebugLogEntry log = queuedLogEntries[queuedLogEntries.Count - 1];
+			queuedLogEntries[queuedLogEntries.Count - 1] = new QueuedDebugLogEntry( log.logString, string.Empty, log.logType );
+		}
+
+		// Clear all the logs
+		public void ClearLogs()
+		{
+			snapToBottom = true;
+
+			infoEntryCount = 0;
+			warningEntryCount = 0;
+			errorEntryCount = 0;
+
+			infoEntryCountText.text = "0";
+			warningEntryCountText.text = "0";
+			errorEntryCountText.text = "0";
+
+			collapsedLogEntries.Clear();
+			collapsedLogEntriesMap.Clear();
+			uncollapsedLogEntriesIndices.Clear();
+			indicesOfListEntriesToShow.Clear();
+
+			recycledListView.DeselectSelectedLogItem();
+			recycledListView.OnLogEntriesUpdated( true );
+		}
+
+		// Collapse button is clicked
+		private void CollapseButtonPressed()
+		{
+			// Swap the value of collapse mode
+			isCollapseOn = !isCollapseOn;
+
+			snapToBottom = true;
+			collapseButton.color = isCollapseOn ? collapseButtonSelectedColor : collapseButtonNormalColor;
+			recycledListView.SetCollapseMode( isCollapseOn );
+
+			// Determine the new list of debug entries to show
+			FilterLogs();
+		}
+
+		// Filtering mode of info logs has changed
+		private void FilterLogButtonPressed()
+		{
+			logFilter = logFilter ^ DebugLogFilter.Info;
+
+			if( ( logFilter & DebugLogFilter.Info ) == DebugLogFilter.Info )
+				filterInfoButton.color = filterButtonsSelectedColor;
+			else
+				filterInfoButton.color = filterButtonsNormalColor;
+
+			FilterLogs();
+		}
+
+		// Filtering mode of warning logs has changed
+		private void FilterWarningButtonPressed()
+		{
+			logFilter = logFilter ^ DebugLogFilter.Warning;
+
+			if( ( logFilter & DebugLogFilter.Warning ) == DebugLogFilter.Warning )
+				filterWarningButton.color = filterButtonsSelectedColor;
+			else
+				filterWarningButton.color = filterButtonsNormalColor;
+
+			FilterLogs();
+		}
+
+		// Filtering mode of error logs has changed
+		private void FilterErrorButtonPressed()
+		{
+			logFilter = logFilter ^ DebugLogFilter.Error;
+
+			if( ( logFilter & DebugLogFilter.Error ) == DebugLogFilter.Error )
+				filterErrorButton.color = filterButtonsSelectedColor;
+			else
+				filterErrorButton.color = filterButtonsNormalColor;
+
+			FilterLogs();
+		}
+
+		// Search term has changed
+		private void SearchTermChanged( string searchTerm )
+		{
+			if( searchTerm != null )
+				searchTerm = searchTerm.Trim();
+
+			this.searchTerm = searchTerm;
+			bool isInSearchMode = !string.IsNullOrEmpty( searchTerm );
+			if( isInSearchMode || this.isInSearchMode )
+			{
+				this.isInSearchMode = isInSearchMode;
+				FilterLogs();
+			}
+		}
+
+		// Show suggestions for the currently entered command
+		private void RefreshCommandSuggestions( string command )
+		{
+			if( !showCommandSuggestions )
+				return;
+
+			commandInputFieldPrevCaretPos = commandInputField.caretPosition;
+
+			// Don't recalculate the command suggestions if the input command hasn't changed (i.e. only caret's position has changed)
+			bool commandChanged = command != commandInputFieldPrevCommand;
+			bool commandNameOrParametersChanged = false;
+			if( commandChanged )
+			{
+				commandInputFieldPrevCommand = command;
+
+				matchingCommandSuggestions.Clear();
+				commandCaretIndexIncrements.Clear();
+
+				string prevCommandName = commandInputFieldPrevCommandName;
+				int numberOfParameters;
+				DebugLogConsole.GetCommandSuggestions( command, matchingCommandSuggestions, commandCaretIndexIncrements, ref commandInputFieldPrevCommandName, out numberOfParameters );
+				if( prevCommandName != commandInputFieldPrevCommandName || numberOfParameters != commandInputFieldPrevParamCount )
+				{
+					commandInputFieldPrevParamCount = numberOfParameters;
+					commandNameOrParametersChanged = true;
+				}
+			}
+
+			int caretArgumentIndex = 0;
+			int caretPos = commandInputField.caretPosition;
+			for( int i = 0; i < commandCaretIndexIncrements.Count && caretPos > commandCaretIndexIncrements[i]; i++ )
+				caretArgumentIndex++;
+
+			if( caretArgumentIndex != commandInputFieldPrevCaretArgumentIndex )
+				commandInputFieldPrevCaretArgumentIndex = caretArgumentIndex;
+			else if( !commandChanged || !commandNameOrParametersChanged )
+			{
+				// Command suggestions don't need to be updated if:
+				// a) neither the entered command nor the argument that the caret is hovering has changed
+				// b) entered command has changed but command's name hasn't changed, parameter count hasn't changed and the argument
+				//    that the caret is hovering hasn't changed (i.e. user has continued typing a parameter's value)
+				return;
+			}
+
+			if( matchingCommandSuggestions.Count == 0 )
+				OnEndEditCommand( command );
+			else
+			{
+				if( !commandSuggestionsContainer.gameObject.activeSelf )
+					commandSuggestionsContainer.gameObject.SetActive( true );
+
+				int suggestionInstancesCount = commandSuggestionInstances.Count;
+				int suggestionsCount = matchingCommandSuggestions.Count;
+
+				for( int i = 0; i < suggestionsCount; i++ )
+				{
+					if( i >= visibleCommandSuggestionInstances )
+					{
+						if( i >= suggestionInstancesCount )
+							commandSuggestionInstances.Add( (Text) Instantiate( commandSuggestionPrefab, commandSuggestionsContainer, false ) );
+						else
+							commandSuggestionInstances[i].gameObject.SetActive( true );
+
+						visibleCommandSuggestionInstances++;
+					}
+
+					ConsoleMethodInfo suggestedCommand = matchingCommandSuggestions[i];
+					commandSuggestionsStringBuilder.Length = 0;
+					if( caretArgumentIndex > 0 )
+						commandSuggestionsStringBuilder.Append( suggestedCommand.command );
+					else
+						commandSuggestionsStringBuilder.Append( commandSuggestionHighlightStart ).Append( matchingCommandSuggestions[i].command ).Append( commandSuggestionHighlightEnd );
+
+					if( suggestedCommand.parameters.Length > 0 )
+					{
+						commandSuggestionsStringBuilder.Append( " " );
+
+						// If the command name wasn't highlighted, a parameter must always be highlighted
+						int caretParameterIndex = caretArgumentIndex - 1;
+						if( caretParameterIndex >= suggestedCommand.parameters.Length )
+							caretParameterIndex = suggestedCommand.parameters.Length - 1;
+
+						for( int j = 0; j < suggestedCommand.parameters.Length; j++ )
+						{
+							if( caretParameterIndex != j )
+								commandSuggestionsStringBuilder.Append( suggestedCommand.parameters[j] );
+							else
+								commandSuggestionsStringBuilder.Append( commandSuggestionHighlightStart ).Append( suggestedCommand.parameters[j] ).Append( commandSuggestionHighlightEnd );
+						}
+					}
+
+					commandSuggestionInstances[i].text = commandSuggestionsStringBuilder.ToString();
+				}
+
+				for( int i = visibleCommandSuggestionInstances - 1; i >= suggestionsCount; i-- )
+					commandSuggestionInstances[i].gameObject.SetActive( false );
+
+				visibleCommandSuggestionInstances = suggestionsCount;
+			}
+		}
+
+		// Command input field has lost focus
+		private void OnEndEditCommand( string command )
+		{
+			if( commandSuggestionsContainer.gameObject.activeSelf )
+				commandSuggestionsContainer.gameObject.SetActive( false );
+		}
+
+		// Debug window is being resized,
+		// Set the sizeDelta property of the window accordingly while
+		// preventing window dimensions from going below the minimum dimensions
+		internal void Resize( PointerEventData eventData )
+		{
+			// Grab the resize button from top; 36f is the height of the resize button
+			float newHeight = ( eventData.position.y - logWindowTR.position.y ) / -canvasTR.localScale.y + 36f;
+			if( newHeight < minimumHeight )
+				newHeight = minimumHeight;
+
+			Vector2 anchorMin = logWindowTR.anchorMin;
+			anchorMin.y = Mathf.Max( 0f, 1f - newHeight / canvasTR.sizeDelta.y );
+			logWindowTR.anchorMin = anchorMin;
+
+			// Update the recycled list view
+			recycledListView.OnViewportDimensionsChanged();
+		}
+
+		// Determine the filtered list of debug entries to show on screen
+		private void FilterLogs()
+		{
+			indicesOfListEntriesToShow.Clear();
+
+			if( logFilter != DebugLogFilter.None )
+			{
+				if( logFilter == DebugLogFilter.All )
+				{
+					if( isCollapseOn )
+					{
+						if( !isInSearchMode )
+						{
+							// All the unique debug entries will be listed just once.
+							// So, list of debug entries to show is the same as the
+							// order these unique debug entries are added to collapsedLogEntries
+							for( int i = 0, count = collapsedLogEntries.Count; i < count; i++ )
+								indicesOfListEntriesToShow.Add( i );
+						}
+						else
+						{
+							for( int i = 0, count = collapsedLogEntries.Count; i < count; i++ )
+							{
+								if( collapsedLogEntries[i].MatchesSearchTerm( searchTerm ) )
+									indicesOfListEntriesToShow.Add( i );
+							}
+						}
+					}
+					else
+					{
+						if( !isInSearchMode )
+						{
+							for( int i = 0, count = uncollapsedLogEntriesIndices.Count; i < count; i++ )
+								indicesOfListEntriesToShow.Add( uncollapsedLogEntriesIndices[i] );
+						}
+						else
+						{
+							for( int i = 0, count = uncollapsedLogEntriesIndices.Count; i < count; i++ )
+							{
+								if( collapsedLogEntries[uncollapsedLogEntriesIndices[i]].MatchesSearchTerm( searchTerm ) )
+									indicesOfListEntriesToShow.Add( uncollapsedLogEntriesIndices[i] );
+							}
+						}
+					}
+				}
+				else
+				{
+					// Show only the debug entries that match the current filter
+					bool isInfoEnabled = ( logFilter & DebugLogFilter.Info ) == DebugLogFilter.Info;
+					bool isWarningEnabled = ( logFilter & DebugLogFilter.Warning ) == DebugLogFilter.Warning;
+					bool isErrorEnabled = ( logFilter & DebugLogFilter.Error ) == DebugLogFilter.Error;
+
+					if( isCollapseOn )
+					{
+						for( int i = 0, count = collapsedLogEntries.Count; i < count; i++ )
+						{
+							DebugLogEntry logEntry = collapsedLogEntries[i];
+
+							if( isInSearchMode && !logEntry.MatchesSearchTerm( searchTerm ) )
+								continue;
+
+							if( logEntry.logTypeSpriteRepresentation == infoLog )
+							{
+								if( isInfoEnabled )
+									indicesOfListEntriesToShow.Add( i );
+							}
+							else if( logEntry.logTypeSpriteRepresentation == warningLog )
+							{
+								if( isWarningEnabled )
+									indicesOfListEntriesToShow.Add( i );
+							}
+							else if( isErrorEnabled )
+								indicesOfListEntriesToShow.Add( i );
+						}
+					}
+					else
+					{
+						for( int i = 0, count = uncollapsedLogEntriesIndices.Count; i < count; i++ )
+						{
+							DebugLogEntry logEntry = collapsedLogEntries[uncollapsedLogEntriesIndices[i]];
+
+							if( isInSearchMode && !logEntry.MatchesSearchTerm( searchTerm ) )
+								continue;
+
+							if( logEntry.logTypeSpriteRepresentation == infoLog )
+							{
+								if( isInfoEnabled )
+									indicesOfListEntriesToShow.Add( uncollapsedLogEntriesIndices[i] );
+							}
+							else if( logEntry.logTypeSpriteRepresentation == warningLog )
+							{
+								if( isWarningEnabled )
+									indicesOfListEntriesToShow.Add( uncollapsedLogEntriesIndices[i] );
+							}
+							else if( isErrorEnabled )
+								indicesOfListEntriesToShow.Add( uncollapsedLogEntriesIndices[i] );
+						}
+					}
+				}
+			}
+
+			// Update the recycled list view
+			recycledListView.DeselectSelectedLogItem();
+			recycledListView.OnLogEntriesUpdated( true );
+
+			ValidateScrollPosition();
+		}
+
+		public string GetAllLogs()
+		{
+			int count = uncollapsedLogEntriesIndices.Count;
+			int length = 0;
+			int newLineLength = System.Environment.NewLine.Length;
+			for( int i = 0; i < count; i++ )
+			{
+				DebugLogEntry entry = collapsedLogEntries[uncollapsedLogEntriesIndices[i]];
+				length += entry.logString.Length + entry.stackTrace.Length + newLineLength * 3;
+			}
+
+			length += 100; // Just in case...
+
+			StringBuilder sb = new StringBuilder( length );
+			for( int i = 0; i < count; i++ )
+			{
+				DebugLogEntry entry = collapsedLogEntries[uncollapsedLogEntriesIndices[i]];
+				sb.AppendLine( entry.logString ).AppendLine( entry.stackTrace ).AppendLine();
+			}
+
+			return sb.ToString();
+		}
+
+		private void SaveLogsToFile()
+		{
+			string path = Path.Combine( Application.persistentDataPath, System.DateTime.Now.ToString( "dd-MM-yyyy--HH-mm-ss" ) + ".txt" );
+			File.WriteAllText( path, GetAllLogs() );
+
+			Debug.Log( "Logs saved to: " + path );
+		}
+
+		// If a cutout is intersecting with debug window on notch screens, shift the window downwards
+		private void CheckScreenCutout()
+		{
+			if( !avoidScreenCutout )
+				return;
+
+#if UNITY_2017_2_OR_NEWER && !UNITY_EDITOR && ( UNITY_ANDROID || UNITY_IOS )
+			// Check if there is a cutout at the top of the screen
+			int screenHeight = Screen.height;
+			float safeYMax = Screen.safeArea.yMax;
+			if( safeYMax < screenHeight - 1 ) // 1: a small threshold
+			{
+				// There is a cutout, shift the log window downwards
+				float cutoutPercentage = ( screenHeight - safeYMax ) / Screen.height;
+				float cutoutLocalSize = cutoutPercentage * canvasTR.rect.height;
+
+				logWindowTR.anchoredPosition = new Vector2( 0f, -cutoutLocalSize );
+				logWindowTR.sizeDelta = new Vector2( 0f, -cutoutLocalSize );
+			}
+			else
+			{
+				logWindowTR.anchoredPosition = Vector2.zero;
+				logWindowTR.sizeDelta = Vector2.zero;
+			}
+#endif
+		}
+
+#if UNITY_EDITOR || UNITY_STANDALONE
+		private IEnumerator ActivateCommandInputFieldCoroutine()
+		{
+			// Waiting 1 frame before activating commandInputField ensures that the toggleKey isn't captured by it
+			yield return null;
+			commandInputField.ActivateInputField();
+
+			yield return null;
+			commandInputField.MoveTextEnd( false );
+		}
+#endif
+
+		// Pool an unused log item
+		internal void PoolLogItem( DebugLogItem logItem )
+		{
+			logItem.CanvasGroup.alpha = 0f;
+			logItem.CanvasGroup.blocksRaycasts = false;
+
+			pooledLogItems.Add( logItem );
+		}
+
+		// Fetch a log item from the pool
+		internal DebugLogItem PopLogItem()
+		{
+			DebugLogItem newLogItem;
+
+			// If pool is not empty, fetch a log item from the pool,
+			// create a new log item otherwise
+			if( pooledLogItems.Count > 0 )
+			{
+				newLogItem = pooledLogItems[pooledLogItems.Count - 1];
+				pooledLogItems.RemoveAt( pooledLogItems.Count - 1 );
+
+				newLogItem.CanvasGroup.alpha = 1f;
+				newLogItem.CanvasGroup.blocksRaycasts = true;
+			}
+			else
+			{
+				newLogItem = (DebugLogItem) Instantiate( logItemPrefab, logItemsContainer, false );
+				newLogItem.Initialize( recycledListView );
+			}
+
+			return newLogItem;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs.meta
new file mode 100644
index 00000000..bf3ee489
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogManager.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6a4f16ed905adcd4ab0d7c8c11f0d72c
+timeCreated: 1522092746
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: -9869
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs
new file mode 100644
index 00000000..21ac9398
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs
@@ -0,0 +1,229 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+using System.Collections;
+
+// Manager class for the debug popup
+namespace IngameDebugConsole
+{
+	public class DebugLogPopup : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IDragHandler, IEndDragHandler
+	{
+		private RectTransform popupTransform;
+
+		// Dimensions of the popup divided by 2
+		private Vector2 halfSize;
+
+		// Background image that will change color to indicate an alert
+		private Image backgroundImage;
+
+		// Canvas group to modify visibility of the popup
+		private CanvasGroup canvasGroup;
+
+#pragma warning disable 0649
+		[SerializeField]
+		private DebugLogManager debugManager;
+
+		[SerializeField]
+		private Text newInfoCountText;
+		[SerializeField]
+		private Text newWarningCountText;
+		[SerializeField]
+		private Text newErrorCountText;
+
+		[SerializeField]
+		private Color alertColorInfo;
+		[SerializeField]
+		private Color alertColorWarning;
+		[SerializeField]
+		private Color alertColorError;
+#pragma warning restore 0649
+
+		// Number of new debug entries since the log window has been closed
+		private int newInfoCount = 0, newWarningCount = 0, newErrorCount = 0;
+
+		private Color normalColor;
+
+		private bool isPopupBeingDragged = false;
+
+		// Coroutines for simple code-based animations
+		private IEnumerator moveToPosCoroutine = null;
+
+		void Awake()
+		{
+			popupTransform = (RectTransform) transform;
+			backgroundImage = GetComponent<Image>();
+			canvasGroup = GetComponent<CanvasGroup>();
+
+			normalColor = backgroundImage.color;
+		}
+
+		void Start()
+		{
+			halfSize = popupTransform.sizeDelta * 0.5f * popupTransform.root.localScale.x;
+		}
+
+		public void OnViewportDimensionsChanged()
+		{
+			if( !gameObject.activeSelf )
+				return;
+
+			halfSize = popupTransform.sizeDelta * 0.5f * popupTransform.root.localScale.x;
+			OnEndDrag( null );
+		}
+
+		public void NewLogsArrived( int newInfo, int newWarning, int newError )
+		{
+			if( newInfo > 0 )
+			{
+				newInfoCount += newInfo;
+				newInfoCountText.text = newInfoCount.ToString();
+			}
+
+			if( newWarning > 0 )
+			{
+				newWarningCount += newWarning;
+				newWarningCountText.text = newWarningCount.ToString();
+			}
+
+			if( newError > 0 )
+			{
+				newErrorCount += newError;
+				newErrorCountText.text = newErrorCount.ToString();
+			}
+
+			if( newErrorCount > 0 )
+				backgroundImage.color = alertColorError;
+			else if( newWarningCount > 0 )
+				backgroundImage.color = alertColorWarning;
+			else
+				backgroundImage.color = alertColorInfo;
+		}
+
+		private void Reset()
+		{
+			newInfoCount = 0;
+			newWarningCount = 0;
+			newErrorCount = 0;
+
+			newInfoCountText.text = "0";
+			newWarningCountText.text = "0";
+			newErrorCountText.text = "0";
+
+			backgroundImage.color = normalColor;
+		}
+
+		// A simple smooth movement animation
+		private IEnumerator MoveToPosAnimation( Vector3 targetPos )
+		{
+			float modifier = 0f;
+			Vector3 initialPos = popupTransform.position;
+
+			while( modifier < 1f )
+			{
+				modifier += 4f * Time.unscaledDeltaTime;
+				popupTransform.position = Vector3.Lerp( initialPos, targetPos, modifier );
+
+				yield return null;
+			}
+		}
+
+		// Popup is clicked
+		public void OnPointerClick( PointerEventData data )
+		{
+			// Hide the popup and show the log window
+			if( !isPopupBeingDragged )
+				debugManager.ShowLogWindow();
+		}
+
+		// Hides the log window and shows the popup
+		public void Show()
+		{
+			canvasGroup.interactable = true;
+			canvasGroup.blocksRaycasts = true;
+			canvasGroup.alpha = 1f;
+
+			// Reset the counters
+			Reset();
+
+			// Update position in case resolution changed while hidden
+			OnViewportDimensionsChanged();
+		}
+
+		// Hide the popup
+		public void Hide()
+		{
+			canvasGroup.interactable = false;
+			canvasGroup.blocksRaycasts = false;
+			canvasGroup.alpha = 0f;
+
+			isPopupBeingDragged = false;
+		}
+
+		public void OnBeginDrag( PointerEventData data )
+		{
+			isPopupBeingDragged = true;
+
+			// If a smooth movement animation is in progress, cancel it
+			if( moveToPosCoroutine != null )
+			{
+				StopCoroutine( moveToPosCoroutine );
+				moveToPosCoroutine = null;
+			}
+		}
+
+		// Reposition the popup
+		public void OnDrag( PointerEventData data )
+		{
+			popupTransform.position = data.position;
+		}
+
+		// Smoothly translate the popup to the nearest edge
+		public void OnEndDrag( PointerEventData data )
+		{
+			int screenWidth = Screen.width;
+			int screenHeight = Screen.height;
+
+			Vector3 pos = popupTransform.position;
+
+			// Find distances to all four edges
+			float distToLeft = pos.x;
+			float distToRight = Mathf.Abs( pos.x - screenWidth );
+
+			float distToBottom = Mathf.Abs( pos.y );
+			float distToTop = Mathf.Abs( pos.y - screenHeight );
+
+			float horDistance = Mathf.Min( distToLeft, distToRight );
+			float vertDistance = Mathf.Min( distToBottom, distToTop );
+
+			// Find the nearest edge's coordinates
+			if( horDistance < vertDistance )
+			{
+				if( distToLeft < distToRight )
+					pos = new Vector3( halfSize.x, pos.y, 0f );
+				else
+					pos = new Vector3( screenWidth - halfSize.x, pos.y, 0f );
+
+				pos.y = Mathf.Clamp( pos.y, halfSize.y, screenHeight - halfSize.y );
+			}
+			else
+			{
+				if( distToBottom < distToTop )
+					pos = new Vector3( pos.x, halfSize.y, 0f );
+				else
+					pos = new Vector3( pos.x, screenHeight - halfSize.y, 0f );
+
+				pos.x = Mathf.Clamp( pos.x, halfSize.x, screenWidth - halfSize.x );
+			}
+
+			// If another smooth movement animation is in progress, cancel it
+			if( moveToPosCoroutine != null )
+				StopCoroutine( moveToPosCoroutine );
+
+			// Smoothly translate the popup to the specified position
+			moveToPosCoroutine = MoveToPosAnimation( pos );
+			StartCoroutine( moveToPosCoroutine );
+
+			isPopupBeingDragged = false;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs.meta
new file mode 100644
index 00000000..04740d53
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogPopup.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 05cc4b1999716644c9308528e38e7081
+timeCreated: 1466533184
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs
new file mode 100644
index 00000000..85aa4557
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs
@@ -0,0 +1,362 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+// Handles the log items in an optimized way such that existing log items are
+// recycled within the list instead of creating a new log item at each chance
+namespace IngameDebugConsole
+{
+	public class DebugLogRecycledListView : MonoBehaviour
+	{
+#pragma warning disable 0649
+		// Cached components
+		[SerializeField]
+		private RectTransform transformComponent;
+		[SerializeField]
+		private RectTransform viewportTransform;
+
+		[SerializeField]
+		private DebugLogManager debugManager;
+
+		[SerializeField]
+		private Color logItemNormalColor1;
+		[SerializeField]
+		private Color logItemNormalColor2;
+		[SerializeField]
+		private Color logItemSelectedColor;
+#pragma warning restore 0649
+
+		private DebugLogManager manager;
+		private ScrollRect scrollView;
+
+		private float logItemHeight, _1OverLogItemHeight;
+		private float viewportHeight;
+
+		// Unique debug entries
+		private List<DebugLogEntry> collapsedLogEntries = null;
+
+		// Indices of debug entries to show in collapsedLogEntries
+		private DebugLogIndexList indicesOfEntriesToShow = null;
+
+		private int indexOfSelectedLogEntry = int.MaxValue;
+		private float positionOfSelectedLogEntry = float.MaxValue;
+		private float heightOfSelectedLogEntry;
+		private float deltaHeightOfSelectedLogEntry;
+
+		// Log items used to visualize the debug entries at specified indices
+		private Dictionary<int, DebugLogItem> logItemsAtIndices = new Dictionary<int, DebugLogItem>();
+
+		private bool isCollapseOn = false;
+
+		// Current indices of debug entries shown on screen
+		private int currentTopIndex = -1, currentBottomIndex = -1;
+
+		public float ItemHeight { get { return logItemHeight; } }
+		public float SelectedItemHeight { get { return heightOfSelectedLogEntry; } }
+
+		private void Awake()
+		{
+			scrollView = viewportTransform.GetComponentInParent<ScrollRect>();
+			scrollView.onValueChanged.AddListener( ( pos ) => UpdateItemsInTheList( false ) );
+
+			viewportHeight = viewportTransform.rect.height;
+		}
+
+		public void Initialize( DebugLogManager manager, List<DebugLogEntry> collapsedLogEntries, DebugLogIndexList indicesOfEntriesToShow, float logItemHeight )
+		{
+			this.manager = manager;
+			this.collapsedLogEntries = collapsedLogEntries;
+			this.indicesOfEntriesToShow = indicesOfEntriesToShow;
+			this.logItemHeight = logItemHeight;
+			_1OverLogItemHeight = 1f / logItemHeight;
+		}
+
+		public void SetCollapseMode( bool collapse )
+		{
+			isCollapseOn = collapse;
+		}
+
+		// A log item is clicked, highlight it
+		public void OnLogItemClicked( DebugLogItem item )
+		{
+			OnLogItemClickedInternal( item.Index, item );
+		}
+
+		// Force expand the log item at specified index
+		public void SelectAndFocusOnLogItemAtIndex( int itemIndex )
+		{
+			if( indexOfSelectedLogEntry != itemIndex ) // Make sure that we aren't deselecting the target log item
+				OnLogItemClickedInternal( itemIndex );
+
+			float transformComponentCenterYAtTop = viewportHeight * 0.5f;
+			float transformComponentCenterYAtBottom = transformComponent.sizeDelta.y - viewportHeight * 0.5f;
+			float transformComponentTargetCenterY = itemIndex * logItemHeight + viewportHeight * 0.5f;
+			if( transformComponentCenterYAtTop == transformComponentCenterYAtBottom )
+				scrollView.verticalNormalizedPosition = 0.5f;
+			else
+				scrollView.verticalNormalizedPosition = Mathf.Clamp01( Mathf.InverseLerp( transformComponentCenterYAtBottom, transformComponentCenterYAtTop, transformComponentTargetCenterY ) );
+
+			manager.SetSnapToBottom( false );
+		}
+
+		private void OnLogItemClickedInternal( int itemIndex, DebugLogItem referenceItem = null )
+		{
+			if( indexOfSelectedLogEntry != itemIndex )
+			{
+				DeselectSelectedLogItem();
+
+				if( !referenceItem )
+				{
+					if( currentTopIndex == -1 )
+						UpdateItemsInTheList( false ); // Try to generate some DebugLogItems, we need one DebugLogItem to calculate the text height
+
+					referenceItem = logItemsAtIndices[currentTopIndex];
+				}
+
+				indexOfSelectedLogEntry = itemIndex;
+				positionOfSelectedLogEntry = itemIndex * logItemHeight;
+				heightOfSelectedLogEntry = referenceItem.CalculateExpandedHeight( collapsedLogEntries[indicesOfEntriesToShow[itemIndex]].ToString() );
+				deltaHeightOfSelectedLogEntry = heightOfSelectedLogEntry - logItemHeight;
+
+				manager.SetSnapToBottom( false );
+			}
+			else
+				DeselectSelectedLogItem();
+
+			if( indexOfSelectedLogEntry >= currentTopIndex && indexOfSelectedLogEntry <= currentBottomIndex )
+				ColorLogItem( logItemsAtIndices[indexOfSelectedLogEntry], indexOfSelectedLogEntry );
+
+			CalculateContentHeight();
+
+			HardResetItems();
+			UpdateItemsInTheList( true );
+
+			manager.ValidateScrollPosition();
+		}
+
+		// Deselect the currently selected log item
+		public void DeselectSelectedLogItem()
+		{
+			int indexOfPreviouslySelectedLogEntry = indexOfSelectedLogEntry;
+			indexOfSelectedLogEntry = int.MaxValue;
+
+			positionOfSelectedLogEntry = float.MaxValue;
+			heightOfSelectedLogEntry = deltaHeightOfSelectedLogEntry = 0f;
+
+			if( indexOfPreviouslySelectedLogEntry >= currentTopIndex && indexOfPreviouslySelectedLogEntry <= currentBottomIndex )
+				ColorLogItem( logItemsAtIndices[indexOfPreviouslySelectedLogEntry], indexOfPreviouslySelectedLogEntry );
+		}
+
+		// Number of debug entries may be changed, update the list
+		public void OnLogEntriesUpdated( bool updateAllVisibleItemContents )
+		{
+			CalculateContentHeight();
+			viewportHeight = viewportTransform.rect.height;
+
+			if( updateAllVisibleItemContents )
+				HardResetItems();
+
+			UpdateItemsInTheList( updateAllVisibleItemContents );
+		}
+
+		// A single collapsed log entry at specified index is updated, refresh its item if visible
+		public void OnCollapsedLogEntryAtIndexUpdated( int index )
+		{
+			DebugLogItem logItem;
+			if( logItemsAtIndices.TryGetValue( index, out logItem ) )
+				logItem.ShowCount();
+		}
+
+		// Log window is resized, update the list
+		public void OnViewportDimensionsChanged()
+		{
+			viewportHeight = viewportTransform.rect.height;
+			UpdateItemsInTheList( false );
+		}
+
+		private void HardResetItems()
+		{
+			if( currentTopIndex != -1 )
+			{
+				DestroyLogItemsBetweenIndices( currentTopIndex, currentBottomIndex );
+				currentTopIndex = -1;
+			}
+		}
+
+		private void CalculateContentHeight()
+		{
+			float newHeight = Mathf.Max( 1f, indicesOfEntriesToShow.Count * logItemHeight + deltaHeightOfSelectedLogEntry );
+			transformComponent.sizeDelta = new Vector2( 0f, newHeight );
+		}
+
+		// Calculate the indices of log entries to show
+		// and handle log items accordingly
+		public void UpdateItemsInTheList( bool updateAllVisibleItemContents )
+		{
+			// If there is at least one log entry to show
+			if( indicesOfEntriesToShow.Count > 0 )
+			{
+				float contentPosTop = transformComponent.anchoredPosition.y - 1f;
+				float contentPosBottom = contentPosTop + viewportHeight + 2f;
+
+				if( positionOfSelectedLogEntry <= contentPosBottom )
+				{
+					if( positionOfSelectedLogEntry <= contentPosTop )
+					{
+						contentPosTop -= deltaHeightOfSelectedLogEntry;
+						contentPosBottom -= deltaHeightOfSelectedLogEntry;
+
+						if( contentPosTop < positionOfSelectedLogEntry - 1f )
+							contentPosTop = positionOfSelectedLogEntry - 1f;
+
+						if( contentPosBottom < contentPosTop + 2f )
+							contentPosBottom = contentPosTop + 2f;
+					}
+					else
+					{
+						contentPosBottom -= deltaHeightOfSelectedLogEntry;
+						if( contentPosBottom < positionOfSelectedLogEntry + 1f )
+							contentPosBottom = positionOfSelectedLogEntry + 1f;
+					}
+				}
+
+				int newTopIndex = (int) ( contentPosTop * _1OverLogItemHeight );
+				int newBottomIndex = (int) ( contentPosBottom * _1OverLogItemHeight );
+
+				if( newTopIndex < 0 )
+					newTopIndex = 0;
+
+				if( newBottomIndex > indicesOfEntriesToShow.Count - 1 )
+					newBottomIndex = indicesOfEntriesToShow.Count - 1;
+
+				if( currentTopIndex == -1 )
+				{
+					// There are no log items visible on screen,
+					// just create the new log items
+					updateAllVisibleItemContents = true;
+
+					currentTopIndex = newTopIndex;
+					currentBottomIndex = newBottomIndex;
+
+					CreateLogItemsBetweenIndices( newTopIndex, newBottomIndex );
+				}
+				else
+				{
+					// There are some log items visible on screen
+
+					if( newBottomIndex < currentTopIndex || newTopIndex > currentBottomIndex )
+					{
+						// If user scrolled a lot such that, none of the log items are now within
+						// the bounds of the scroll view, pool all the previous log items and create
+						// new log items for the new list of visible debug entries
+						updateAllVisibleItemContents = true;
+
+						DestroyLogItemsBetweenIndices( currentTopIndex, currentBottomIndex );
+						CreateLogItemsBetweenIndices( newTopIndex, newBottomIndex );
+					}
+					else
+					{
+						// User did not scroll a lot such that, there are still some log items within
+						// the bounds of the scroll view. Don't destroy them but update their content,
+						// if necessary
+						if( newTopIndex > currentTopIndex )
+							DestroyLogItemsBetweenIndices( currentTopIndex, newTopIndex - 1 );
+
+						if( newBottomIndex < currentBottomIndex )
+							DestroyLogItemsBetweenIndices( newBottomIndex + 1, currentBottomIndex );
+
+						if( newTopIndex < currentTopIndex )
+						{
+							CreateLogItemsBetweenIndices( newTopIndex, currentTopIndex - 1 );
+
+							// If it is not necessary to update all the log items,
+							// then just update the newly created log items. Otherwise,
+							// wait for the major update
+							if( !updateAllVisibleItemContents )
+								UpdateLogItemContentsBetweenIndices( newTopIndex, currentTopIndex - 1 );
+						}
+
+						if( newBottomIndex > currentBottomIndex )
+						{
+							CreateLogItemsBetweenIndices( currentBottomIndex + 1, newBottomIndex );
+
+							// If it is not necessary to update all the log items,
+							// then just update the newly created log items. Otherwise,
+							// wait for the major update
+							if( !updateAllVisibleItemContents )
+								UpdateLogItemContentsBetweenIndices( currentBottomIndex + 1, newBottomIndex );
+						}
+					}
+
+					currentTopIndex = newTopIndex;
+					currentBottomIndex = newBottomIndex;
+				}
+
+				if( updateAllVisibleItemContents )
+				{
+					// Update all the log items
+					UpdateLogItemContentsBetweenIndices( currentTopIndex, currentBottomIndex );
+				}
+			}
+			else
+				HardResetItems();
+		}
+
+		private void CreateLogItemsBetweenIndices( int topIndex, int bottomIndex )
+		{
+			for( int i = topIndex; i <= bottomIndex; i++ )
+				CreateLogItemAtIndex( i );
+		}
+
+		// Create (or unpool) a log item
+		private void CreateLogItemAtIndex( int index )
+		{
+			DebugLogItem logItem = debugManager.PopLogItem();
+
+			// Reposition the log item
+			Vector2 anchoredPosition = new Vector2( 1f, -index * logItemHeight );
+			if( index > indexOfSelectedLogEntry )
+				anchoredPosition.y -= deltaHeightOfSelectedLogEntry;
+
+			logItem.Transform.anchoredPosition = anchoredPosition;
+
+			// Color the log item
+			ColorLogItem( logItem, index );
+
+			// To access this log item easily in the future, add it to the dictionary
+			logItemsAtIndices[index] = logItem;
+		}
+
+		private void DestroyLogItemsBetweenIndices( int topIndex, int bottomIndex )
+		{
+			for( int i = topIndex; i <= bottomIndex; i++ )
+				debugManager.PoolLogItem( logItemsAtIndices[i] );
+		}
+
+		private void UpdateLogItemContentsBetweenIndices( int topIndex, int bottomIndex )
+		{
+			DebugLogItem logItem;
+			for( int i = topIndex; i <= bottomIndex; i++ )
+			{
+				logItem = logItemsAtIndices[i];
+				logItem.SetContent( collapsedLogEntries[indicesOfEntriesToShow[i]], i, i == indexOfSelectedLogEntry );
+
+				if( isCollapseOn )
+					logItem.ShowCount();
+				else
+					logItem.HideCount();
+			}
+		}
+
+		// Color a log item using its index
+		private void ColorLogItem( DebugLogItem logItem, int index )
+		{
+			if( index == indexOfSelectedLogEntry )
+				logItem.Image.color = logItemSelectedColor;
+			else if( index % 2 == 0 )
+				logItem.Image.color = logItemNormalColor1;
+			else
+				logItem.Image.color = logItemNormalColor2;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs.meta
new file mode 100644
index 00000000..b21437ef
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogRecycledListView.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: ce231987d32488f43b6fb798f7df43f6
+timeCreated: 1466373025
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs
new file mode 100644
index 00000000..99f7fc69
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs
@@ -0,0 +1,24 @@
+using UnityEngine;
+using UnityEngine.EventSystems;
+
+// Listens to drag event on the DebugLogManager's resize button
+namespace IngameDebugConsole
+{
+	public class DebugLogResizeListener : MonoBehaviour, IBeginDragHandler, IDragHandler
+	{
+#pragma warning disable 0649
+		[SerializeField]
+		private DebugLogManager debugManager;
+#pragma warning restore 0649
+
+		// This interface must be implemented in order to receive drag events
+		void IBeginDragHandler.OnBeginDrag( PointerEventData eventData )
+		{
+		}
+
+		void IDragHandler.OnDrag( PointerEventData eventData )
+		{
+			debugManager.Resize( eventData );
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs.meta
new file mode 100644
index 00000000..96c60ba0
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugLogResizeListener.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6565f2084f5aef44abe57c988745b9c3
+timeCreated: 1601221093
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs b/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs
new file mode 100644
index 00000000..9d69c198
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs
@@ -0,0 +1,60 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.EventSystems;
+
+// Listens to scroll events on the scroll rect that debug items are stored
+// and decides whether snap to bottom should be true or not
+// 
+// Procedure: if, after a user input (drag or scroll), scrollbar is at the bottom, then 
+// snap to bottom shall be true, otherwise it shall be false
+namespace IngameDebugConsole
+{
+	public class DebugsOnScrollListener : MonoBehaviour, IScrollHandler, IBeginDragHandler, IEndDragHandler
+	{
+		public ScrollRect debugsScrollRect;
+		public DebugLogManager debugLogManager;
+
+		public void OnScroll( PointerEventData data )
+		{
+			if( IsScrollbarAtBottom() )
+				debugLogManager.SetSnapToBottom( true );
+			else
+				debugLogManager.SetSnapToBottom( false );
+		}
+
+		public void OnBeginDrag( PointerEventData data )
+		{
+			debugLogManager.SetSnapToBottom( false );
+		}
+
+		public void OnEndDrag( PointerEventData data )
+		{
+			if( IsScrollbarAtBottom() )
+				debugLogManager.SetSnapToBottom( true );
+			else
+				debugLogManager.SetSnapToBottom( false );
+		}
+
+		public void OnScrollbarDragStart( BaseEventData data )
+		{
+			debugLogManager.SetSnapToBottom( false );
+		}
+
+		public void OnScrollbarDragEnd( BaseEventData data )
+		{
+			if( IsScrollbarAtBottom() )
+				debugLogManager.SetSnapToBottom( true );
+			else
+				debugLogManager.SetSnapToBottom( false );
+		}
+
+		private bool IsScrollbarAtBottom()
+		{
+			float scrollbarYPos = debugsScrollRect.verticalNormalizedPosition;
+			if( scrollbarYPos <= 1E-6f )
+				return true;
+
+			return false;
+		}
+	}
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs.meta b/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs.meta
new file mode 100644
index 00000000..010283bf
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Scripts/DebugsOnScrollListener.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: cb564dcb180e586429c57456166a76b5
+timeCreated: 1466004663
+licenseType: Store
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites.meta b/Assets/Plugins/IngameDebugConsole/Sprites.meta
new file mode 100644
index 00000000..6da2af75
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: cb5d7b23a9e684a41a6a5d4f300eb1e6
+folderAsset: yes
+timeCreated: 1465925237
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd
new file mode 100644
index 00000000..c4a34420
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd.meta
new file mode 100644
index 00000000..3742a3c9
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconClear.psd.meta
@@ -0,0 +1,153 @@
+fileFormatVersion: 2
+guid: 7a9e374666ad6cc47807bb001844f3d8
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: WebGL
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd
new file mode 100644
index 00000000..08fbc441
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd.meta
new file mode 100644
index 00000000..c34183a9
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconCollapse.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: d1546f8db185caf4dafcfa58efa3ba2c
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd
new file mode 100644
index 00000000..71bc06c4
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd.meta
new file mode 100644
index 00000000..60e4730d
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconError.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 66305a19e3614694f868c75a982e6b68
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd
new file mode 100644
index 00000000..977d7173
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd.meta
new file mode 100644
index 00000000..fee29385
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconHide.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: b3905a73a6672d9449647aaf036e23fc
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd
new file mode 100644
index 00000000..290a635d
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd.meta
new file mode 100644
index 00000000..8398c616
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconInfo.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 5a97d5afa6254804f81b7ba956296996
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd
new file mode 100644
index 00000000..e20abd9d
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd.meta
new file mode 100644
index 00000000..d35b91b4
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconResize.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: a9fd8f6b461461f4a92eafc60921ee78
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd
new file mode 100644
index 00000000..c9136b95
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd.meta
new file mode 100644
index 00000000..1b2f1f46
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottom.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 066c0b04be98cd348abb79add91d42bf
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd
new file mode 100644
index 00000000..97862869
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd.meta
new file mode 100644
index 00000000..83ebfd0b
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconSnapToBottomBg.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: b902f763d0e47364dae25207b7e47800
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 13, y: 13, z: 13, w: 13}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd b/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd
new file mode 100644
index 00000000..5ecf02a5
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd.meta
new file mode 100644
index 00000000..9d3f3191
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/IconWarning.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 05c7216c78d4dd34ebe2bac9c1e274d7
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd b/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd
new file mode 100644
index 00000000..87d6fe93
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd.meta
new file mode 100644
index 00000000..972a7141
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/SearchIcon.psd.meta
@@ -0,0 +1,153 @@
+fileFormatVersion: 2
+guid: e04e6c970b950d946a782ea08e5f971d
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: WebGL
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd
new file mode 100644
index 00000000..13b95a1b
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd.meta
new file mode 100644
index 00000000..100e1356
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground.psd.meta
@@ -0,0 +1,153 @@
+fileFormatVersion: 2
+guid: 066d3840badf4d24dba1d42b4c59b888
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 12, y: 12, z: 12, w: 12}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: WebGL
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 1
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd
new file mode 100644
index 00000000..49a6a548
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd.meta
new file mode 100644
index 00000000..3c37d23b
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground2.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 98e8e1cf8dc7dbf469617c2e40c8a944
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 12, y: 12, z: 12, w: 12}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd
new file mode 100644
index 00000000..2a449061
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd.meta
new file mode 100644
index 00000000..757e47aa
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/SlicedBackground3.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: b3f0d976f6d6802479d6465d11b3aa68
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 5
+  maxTextureSize: 32
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 1
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 13, y: 13, z: 13, w: 13}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 32
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta b/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta
new file mode 100644
index 00000000..3b3d3819
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/Unused.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f6caae32d463529478f2186f47c2e3fe
+folderAsset: yes
+timeCreated: 1466010601
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd
new file mode 100644
index 00000000..c96c48f1
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd.meta
new file mode 100644
index 00000000..61195b2d
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconErrorHighRes.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: a97ca0b99ece2d94aaaf59653feb45dd
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 64
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd
new file mode 100644
index 00000000..c7fccefb
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd.meta
new file mode 100644
index 00000000..2021d665
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconInfoHighRes.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: 33b115bf5efdfa04d8e2e0b70a6643cd
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 64
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd
new file mode 100644
index 00000000..603687f5
Binary files /dev/null and b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd differ
diff --git a/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd.meta b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd.meta
new file mode 100644
index 00000000..d125be52
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/Sprites/Unused/IconWarningHighRes.psd.meta
@@ -0,0 +1,140 @@
+fileFormatVersion: 2
+guid: af17f91b4376d6a41a793c056c02dadc
+TextureImporter:
+  internalIDToNameTable: []
+  externalObjects: {}
+  serializedVersion: 13
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+    flipGreenChannel: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  vTOnly: 0
+  ignoreMipmapLimit: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -3
+  maxTextureSize: 64
+  textureSettings:
+    serializedVersion: 2
+    filterMode: 1
+    aniso: 16
+    mipBias: 0
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  flipbookRows: 1
+  flipbookColumns: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  ignorePngGamma: 0
+  applyGammaDecoding: 1
+  swizzle: 50462976
+  cookieLightType: 1
+  platformSettings:
+  - serializedVersion: 3
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Standalone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: iPhone
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  - serializedVersion: 3
+    buildTarget: Android
+    maxTextureSize: 64
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 0
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    ignorePlatformSupport: 0
+    androidETC2FallbackOverride: 0
+    forceMaximumCompressionQuality_BC6H_BC7: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 5e97eb03825dee720800000000000000
+    internalID: 0
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+    secondaryTextures: []
+    nameFileIdTable: {}
+  mipmapLimitGroupName: 
+  pSDRemoveMatte: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/iOS.meta b/Assets/Plugins/IngameDebugConsole/iOS.meta
new file mode 100644
index 00000000..4237bec0
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/iOS.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 4552a2fd287aca645a670fa2b65e52a9
+folderAsset: yes
+timeCreated: 1586184974
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm b/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm
new file mode 100644
index 00000000..eab943d5
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm
@@ -0,0 +1,4 @@
+extern "C" void _DebugConsole_CopyText( const char* text ) 
+{
+	[UIPasteboard generalPasteboard].string = [NSString stringWithUTF8String:text];
+}
\ No newline at end of file
diff --git a/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm.meta b/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm.meta
new file mode 100644
index 00000000..9fe8ad68
--- /dev/null
+++ b/Assets/Plugins/IngameDebugConsole/iOS/IngameDebugConsole.mm.meta
@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 4b53767ec4f910e4a9876cbe77d57968
+timeCreated: 1498727312
+licenseType: Store
+PluginImporter:
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  isPreloaded: 0
+  isOverridable: 0
+  platformData:
+    data:
+      first:
+        Any: 
+      second:
+        enabled: 0
+        settings: {}
+    data:
+      first:
+        Editor: Editor
+      second:
+        enabled: 0
+        settings:
+          DefaultValueInitialized: true
+    data:
+      first:
+        iPhone: iOS
+      second:
+        enabled: 1
+        settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS.meta b/Assets/Plugins/iOS.meta
new file mode 100644
index 00000000..9d3bad92
--- /dev/null
+++ b/Assets/Plugins/iOS.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8b6270b07114ffc44be377d6c3feab22
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS/GoogleSignIn.meta b/Assets/Plugins/iOS/GoogleSignIn.meta
new file mode 100644
index 00000000..c4ea38dc
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 07c86a3f84f494e589218ed67d10255a
+folderAsset: yes
+timeCreated: 1490995894
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h
new file mode 100644
index 00000000..5e77bc10
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h
@@ -0,0 +1,20 @@
+/**
+ * Copyright 2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import <GoogleSignIn/GIDSignIn.h>
+@interface GoogleSignInHandler
+    : NSObject <GIDSignInDelegate, GIDSignInUIDelegate>
+
+@end
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h.meta b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h.meta
new file mode 100644
index 00000000..e115ee31
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.h.meta
@@ -0,0 +1,35 @@
+fileFormatVersion: 2
+guid: 62c129704e1ec48179ba285e1af154b8
+labels:
+- gvh
+- gvh_version-1.0.4
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm
new file mode 100644
index 00000000..9b82a370
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm
@@ -0,0 +1,345 @@
+/**
+ * Copyright 2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import "GoogleSignIn.h"
+#import <GoogleSignIn/GIDAuthentication.h>
+#import <GoogleSignIn/GIDGoogleUser.h>
+#import <GoogleSignIn/GIDProfileData.h>
+#import <GoogleSignIn/GIDSignIn.h>
+
+#import <memory>
+
+// These values are in the Unity plugin code.  The iOS specific
+// codes are mapped to these.
+static const int kStatusCodeSuccessCached = -1;
+static const int kStatusCodeSuccess = 0;
+static const int kStatusCodeApiNotConnected = 1;
+static const int kStatusCodeCanceled = 2;
+static const int kStatusCodeInterrupted = 3;
+static const int kStatusCodeInvalidAccount = 4;
+static const int kStatusCodeTimeout = 5;
+static const int kStatusCodeDeveloperError = 6;
+static const int kStatusCodeInternalError = 7;
+static const int kStatusCodeNetworkError = 8;
+static const int kStatusCodeError = 9;
+
+/**
+ * Helper method to pause the Unity player.  This is done when showing any UI.
+ */
+void UnpauseUnityPlayer() {
+  dispatch_async(dispatch_get_main_queue(), ^{
+    if (UnityIsPaused() > 0) {
+      UnityPause(0);
+    }
+  });
+}
+
+// result for pending operation.  Access to this should be protected using the
+// resultLock.
+struct SignInResult {
+  int result_code;
+  bool finished;
+};
+
+std::unique_ptr<SignInResult> currentResult_;
+
+NSRecursiveLock *resultLock = [NSRecursiveLock alloc];
+
+@implementation GoogleSignInHandler
+
+/**
+ * Overload the presenting of the UI so we can pause the Unity player.
+ */
+- (void)signIn:(GIDSignIn *)signIn
+    presentViewController:(UIViewController *)viewController {
+  UnityPause(true);
+  [UnityGetGLViewController() presentViewController:viewController
+                                           animated:YES
+                                         completion:nil];
+}
+
+/**
+ * Overload the dismissing so we can resume the Unity player.
+ */
+- (void)signIn:(GIDSignIn *)signIn
+    dismissViewController:(UIViewController *)viewController {
+  UnityPause(false);
+  [UnityGetGLViewController() dismissViewControllerAnimated:YES completion:nil];
+}
+
+/**
+ * The sign-in flow has finished and was successful if |error| is |nil|.
+ * Map the errors from the iOS SDK back to the Android values for consistency's
+ * sake in the Unity layer.
+ */
+- (void)signIn:(GIDSignIn *)signIn
+    didSignInForUser:(GIDGoogleUser *)user
+           withError:(NSError *)_error {
+  if (_error == nil) {
+    if (currentResult_) {
+      currentResult_->result_code = kStatusCodeSuccess;
+      currentResult_->finished = true;
+    } else {
+      NSLog(@"No currentResult to set status on!");
+    }
+    NSLog(@"didSignInForUser: SUCCESS");
+  } else {
+    NSLog(@"didSignInForUser: %@", _error.localizedDescription);
+    if (currentResult_) {
+      switch (_error.code) {
+      case kGIDSignInErrorCodeUnknown:
+        currentResult_->result_code = kStatusCodeError;
+        break;
+      case kGIDSignInErrorCodeKeychain:
+        currentResult_->result_code = kStatusCodeInternalError;
+        break;
+      case kGIDSignInErrorCodeNoSignInHandlersInstalled:
+        currentResult_->result_code = kStatusCodeDeveloperError;
+        break;
+      case kGIDSignInErrorCodeHasNoAuthInKeychain:
+        currentResult_->result_code = kStatusCodeError;
+        break;
+      case kGIDSignInErrorCodeCanceled:
+        currentResult_->result_code = kStatusCodeCanceled;
+        break;
+      default:
+        NSLog(@"Unmapped error code: %ld, returning Error",
+              static_cast<long>(_error.code));
+        currentResult_->result_code = kStatusCodeError;
+      }
+
+      currentResult_->finished = true;
+      UnpauseUnityPlayer();
+    } else {
+      NSLog(@"No currentResult to set status on!");
+    }
+  }
+}
+
+// Finished disconnecting |user| from the app successfully if |error| is |nil|.
+- (void)signIn:(GIDSignIn *)signIn
+    didDisconnectWithUser:(GIDGoogleUser *)user
+                withError:(NSError *)_error {
+  if (_error == nil) {
+    NSLog(@"didDisconnectWithUser: SUCCESS");
+  } else {
+    NSLog(@"didDisconnectWithUser: %@", _error);
+  }
+}
+
+@end
+
+/**
+ * These are the external "C" methods that are imported by the Unity C# code.
+ * The parameters are intended to be primative, easy to marshall.
+ */
+extern "C" {
+/**
+ * This method does nothing in the iOS implementation.  It is here
+ * to make the API uniform between Android and iOS.
+ */
+void *GoogleSignIn_Create(void *data) { return NULL; }
+
+void GoogleSignIn_EnableDebugLogging(void *unused, bool flag) {
+  if (flag) {
+    NSLog(@"GoogleSignIn: No optional logging available on iOS");
+  }
+}
+
+/**
+ * Configures the GIDSignIn instance.  The first parameter is unused in iOS.
+ * It is here to make the API between Android and iOS uniform.
+ */
+bool GoogleSignIn_Configure(void *unused, bool useGameSignIn,
+                            const char *webClientId, bool requestAuthCode,
+                            bool forceTokenRefresh, bool requestEmail,
+                            bool requestIdToken, bool hidePopups,
+                            const char **additionalScopes, int scopeCount,
+                            const char *accountName) {
+  if (webClientId) {
+    [GIDSignIn sharedInstance].serverClientID =
+        [NSString stringWithUTF8String:webClientId];
+  }
+
+  [GIDSignIn sharedInstance].shouldFetchBasicProfile = true;
+
+  int scopeSize = scopeCount;
+
+  if (scopeSize) {
+    NSMutableArray *tmpary =
+        [[NSMutableArray alloc] initWithCapacity:scopeSize];
+    for (int i = 0; i < scopeCount; i++) {
+      [tmpary addObject:[NSString stringWithUTF8String:additionalScopes[i]]];
+    }
+
+    [GIDSignIn sharedInstance].scopes = tmpary;
+  }
+
+  if (accountName) {
+    [GIDSignIn sharedInstance].loginHint =
+        [NSString stringWithUTF8String:accountName];
+  }
+
+  return !useGameSignIn;
+}
+
+/**
+ Starts the sign-in process.  Returns and error result if error, null otherwise.
+ */
+static SignInResult *startSignIn() {
+  bool busy = false;
+  [resultLock lock];
+  if (!currentResult_ || currentResult_->finished) {
+    currentResult_.reset(new SignInResult());
+    currentResult_->result_code = 0;
+    currentResult_->finished = false;
+  } else {
+    busy = true;
+  }
+  [resultLock unlock];
+
+  if (busy) {
+    NSLog(@"ERROR: There is already a pending sign-in operation.");
+    // Returned to the caller, should be deleted by calling
+    // GoogleSignIn_DisposeFuture().
+    return new SignInResult{.result_code = kStatusCodeDeveloperError,
+                            .finished = true};
+  }
+  return nullptr;
+}
+
+/**
+ * Sign-In.  The return value is a pointer to the currentResult object.
+ */
+void *GoogleSignIn_SignIn() {
+  SignInResult *result = startSignIn();
+  if (!result) {
+    [[GIDSignIn sharedInstance] signIn];
+    result = currentResult_.get();
+  }
+  return result;
+}
+
+/**
+ * Attempt a silent sign-in. Return value is the pointer to the currentResult
+ * object.
+ */
+void *GoogleSignIn_SignInSilently() {
+  SignInResult *result = startSignIn();
+  if (!result) {
+    [[GIDSignIn sharedInstance] signInSilently];
+    result = currentResult_.get();
+  }
+  return result;
+}
+
+void GoogleSignIn_Signout() {
+  GIDSignIn *signIn = [GIDSignIn sharedInstance];
+  [signIn signOut];
+}
+
+void GoogleSignIn_Disconnect() {
+  GIDSignIn *signIn = [GIDSignIn sharedInstance];
+  [signIn disconnect];
+}
+
+bool GoogleSignIn_Pending(SignInResult *result) {
+  volatile bool ret;
+  [resultLock lock];
+  ret = !result->finished;
+  [resultLock unlock];
+  return ret;
+}
+
+GIDGoogleUser *GoogleSignIn_Result(SignInResult *result) {
+  if (result && result->finished) {
+    GIDGoogleUser *guser = [GIDSignIn sharedInstance].currentUser;
+    return guser;
+  }
+  return nullptr;
+}
+
+int GoogleSignIn_Status(SignInResult *result) {
+  if (result) {
+    return result->result_code;
+  }
+  return kStatusCodeDeveloperError;
+}
+
+void GoogleSignIn_DisposeFuture(SignInResult *result) {
+  if (result == currentResult_.get()) {
+    currentResult_.reset(nullptr);
+  } else {
+    delete result;
+  }
+}
+
+/**
+ * Private helper function to copy NSString to char*.  If the destination is
+ * non-null, the contents of src are copied up to len bytes (using strncpy). The
+ * then len is returned. Otherwise returns length of the string to copy + 1.
+ */
+static size_t CopyNSString(NSString *src, char *dest, size_t len) {
+  if (dest && src && len) {
+    const char *string = [src UTF8String];
+    strncpy(dest, string, len);
+    return len;
+  }
+  return src ? src.length + 1 : 0;
+}
+
+size_t GoogleSignIn_GetServerAuthCode(GIDGoogleUser *guser, char *buf,
+                                      size_t len) {
+  NSString *val = [guser serverAuthCode];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetDisplayName(GIDGoogleUser *guser, char *buf,
+                                   size_t len) {
+  NSString *val = [guser.profile name];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetEmail(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSString *val = [guser.profile email];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetFamilyName(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSString *val = [guser.profile familyName];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetGivenName(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSString *val = [guser.profile givenName];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetIdToken(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSString *val = [guser.authentication idToken];
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetImageUrl(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSURL *url = [guser.profile imageURLWithDimension:128];
+  NSString *val = url ? [url absoluteString] : nullptr;
+  return CopyNSString(val, buf, len);
+}
+
+size_t GoogleSignIn_GetUserId(GIDGoogleUser *guser, char *buf, size_t len) {
+  NSString *val = [guser userID];
+  return CopyNSString(val, buf, len);
+}
+} // extern "C"
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm.meta b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm.meta
new file mode 100644
index 00000000..98623911
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignIn.mm.meta
@@ -0,0 +1,35 @@
+fileFormatVersion: 2
+guid: 521784ee6b2184e0e947a8fd1508afbc
+labels:
+- gvh
+- gvh_version-1.0.4
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h
new file mode 100644
index 00000000..97fdef8e
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h
@@ -0,0 +1,37 @@
+/**
+ * Copyright 2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#import "GoogleSignIn.h"
+#import <UnityAppController.h>
+
+// Controller to handle Google SignIn.  The AppController methods are swizzled
+// into the UnityAppController in order to avoid breaking other code that needs
+// to handle these messages also.
+@interface UnityAppController (GoogleSignInAppController)
+// These are the implementations for GSI.  The signatures match the
+// AppController methods.
+- (BOOL)application:(UIApplication *)application
+    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
+
+- (BOOL)application:(UIApplication *)application
+            openURL:(NSURL *)url
+            options:(NSDictionary<NSString *, id> *)options;
+
+- (BOOL)application:(UIApplication *)application
+              openURL:(NSURL *)url
+    sourceApplication:(NSString *)sourceApplication
+           annotation:(id)annotation;
+
+@end
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h.meta b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h.meta
new file mode 100644
index 00000000..1005ed81
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.h.meta
@@ -0,0 +1,35 @@
+fileFormatVersion: 2
+guid: ce40e3e7b37a54617a4683dfc0479c71
+labels:
+- gvh
+- gvh_version-1.0.4
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm
new file mode 100644
index 00000000..33631489
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm
@@ -0,0 +1,124 @@
+/**
+ * Copyright 2017 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "GoogleSignInAppController.h"
+#import <objc/runtime.h>
+
+// Handles Google SignIn UI and events.
+GoogleSignInHandler *gsiHandler;
+
+/*
+ * Create a category to customize the application.  When this is loaded the
+ * method for the existing application and  GoogleSignIn are swizzled into the
+ * other's class selector.  Then we call our "own" msthod which is actually the
+ * original application's implementation. See more info at:
+ * https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html
+ */
+
+@implementation UnityAppController (GoogleSignInController)
+
+/*
+ Called when the category is loaded.  This is where the methods are swizzled
+ out.
+ */
++ (void)load {
+  Method original;
+  Method swizzled;
+
+  original = class_getInstanceMethod(
+      self, @selector(application:didFinishLaunchingWithOptions:));
+  swizzled = class_getInstanceMethod(
+      self,
+      @selector(GoogleSignInAppController:didFinishLaunchingWithOptions:));
+  method_exchangeImplementations(original, swizzled);
+
+  original = class_getInstanceMethod(
+      self, @selector(application:openURL:sourceApplication:annotation:));
+  swizzled = class_getInstanceMethod(
+      self, @selector
+      (GoogleSignInAppController:openURL:sourceApplication:annotation:));
+  method_exchangeImplementations(original, swizzled);
+
+  original =
+      class_getInstanceMethod(self, @selector(application:openURL:options:));
+  swizzled = class_getInstanceMethod(
+      self, @selector(GoogleSignInAppController:openURL:options:));
+  method_exchangeImplementations(original, swizzled);
+}
+
+- (BOOL)GoogleSignInAppController:(UIApplication *)application
+    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+
+  // IMPORTANT: IF you are not supplying a GoogleService-Info.plist in your
+  // project that contains the client id, you need to set the client id here.
+
+  NSString *path = [[NSBundle mainBundle] pathForResource:@"GoogleService-Info"
+                                                   ofType:@"plist"];
+  NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
+  NSString *clientId = [dict objectForKey:@"CLIENT_ID"];
+
+  gsiHandler = [GoogleSignInHandler alloc];
+
+  // Setup the Sign-In instance.
+  GIDSignIn *signIn = [GIDSignIn sharedInstance];
+  signIn.clientID = clientId;
+  signIn.uiDelegate = gsiHandler;
+  signIn.delegate = gsiHandler;
+
+  // looks like it's just calling itself, but the implementations were swapped
+  // so we're actually calling the original once we're done
+  return [self GoogleSignInAppController:application
+           didFinishLaunchingWithOptions:launchOptions];
+}
+
+/**
+ * Handle the auth URL
+ */
+- (BOOL)GoogleSignInAppController:(UIApplication *)application
+                          openURL:(NSURL *)url
+                sourceApplication:(NSString *)sourceApplication
+                       annotation:(id)annotation {
+  BOOL handled = [self GoogleSignInAppController:application
+                                         openURL:url
+                               sourceApplication:sourceApplication
+                                      annotation:annotation];
+
+  return [[GIDSignIn sharedInstance] handleURL:url
+                             sourceApplication:sourceApplication
+                                    annotation:annotation] ||
+         handled;
+}
+
+/**
+ * Handle the auth URL.
+ */
+- (BOOL)GoogleSignInAppController:(UIApplication *)app
+                          openURL:(NSURL *)url
+                          options:(NSDictionary *)options {
+
+  BOOL handled =
+      [self GoogleSignInAppController:app openURL:url options:options];
+
+  return [[GIDSignIn sharedInstance]
+                     handleURL:url
+             sourceApplication:
+                 options[UIApplicationOpenURLOptionsSourceApplicationKey]
+                    annotation:
+                        options[UIApplicationOpenURLOptionsAnnotationKey]] ||
+         handled;
+}
+
+@end
diff --git a/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm.meta b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm.meta
new file mode 100644
index 00000000..676c7108
--- /dev/null
+++ b/Assets/Plugins/iOS/GoogleSignIn/GoogleSignInAppController.mm.meta
@@ -0,0 +1,35 @@
+fileFormatVersion: 2
+guid: 50b2e1c9319e4446e9dbd9b183790472
+labels:
+- gvh
+- gvh_version-1.0.4
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Profile.cs b/Assets/Profile.cs
new file mode 100644
index 00000000..996d7fb4
--- /dev/null
+++ b/Assets/Profile.cs
@@ -0,0 +1,124 @@
+using PlayFab.ClientModels;
+using PlayFab;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+using MS;
+using TMPro;
+
+public class Profile : MonoBehaviour
+{
+    // Start is called before the first frame update
+    public Button EnteredNameButton;
+    public List<Sprite> AvatarSprites;
+    public Sprite AvatarSelectedSprite;
+    public Popup EnterNamePanel;
+    public Popup MainPanel;
+    public TMP_InputField nameInputField;
+    public Image HeaderProfileImg;
+    public TextMeshProUGUI HeaderProfileName;
+    public Image LevelFillerImg;
+    public TextMeshProUGUI LevelFillerText;
+    private void Start()
+    {
+        CheckForDisplayName();
+        CheckForAvatar();
+        if (EnteredNameButton != null)
+            EnteredNameButton.interactable = false;
+    }
+    private void CheckForAvatar()
+    {
+        int hasSelectedAvatar = PlayerPrefs.GetInt(GameConstants.AvatarSelectedCheckKey, 0);
+        if (hasSelectedAvatar > 0)
+        {
+            //string name = PlayerPrefs.GetString(GameConstants.DisplayNameKey);
+            //PlayFabLeaderboards.DisplayName = name;
+            AvatarSelectedSprite = AvatarSprites[PlayerPrefs.GetInt(GameConstants.AvatarSelectedIndex)];
+            HeaderProfileImg.sprite = AvatarSelectedSprite;
+        }
+        else
+        {
+            MainPanel.Close();
+            if (!EnterNamePanel.isOpen)
+                EnterNamePanel.Open();
+        }
+    }
+    private void CheckForDisplayName()
+    {
+        int hasEnteredName = PlayerPrefs.GetInt(GameConstants.NameEnteredCheckKey, 0);
+        if (hasEnteredName > 0)
+        {
+
+            string name = PlayerPrefs.GetString(GameConstants.DisplayNameKey);
+            PlayFabLeaderboards.DisplayName = name;
+            PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(name);
+            HeaderProfileName.text = name;
+            LevelFillerSetter();
+        }
+        else
+        {
+
+            Debug.Log("Name not found in plaerprefs");
+            MainPanel.Close();
+            if (!EnterNamePanel.isOpen)
+                EnterNamePanel.Open();
+        }
+    }
+    public void LevelFillerSetter()
+    {
+        int bestScore = PlayerPrefs.GetInt("BestScore", 0); // Default to 0 if not set
+
+        float fillAmount = Mathf.Clamp01((float)bestScore / 100f); // Ensure it stays between 0 and 1
+        LevelFillerImg.fillAmount = fillAmount;
+
+        //LevelFillerText.text = bestScore + "/" + maxScore;
+    }
+    public void OnDisplayNameEntered()
+    {
+        if (PlayFabClientAPI.IsClientLoggedIn())
+        {
+            PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text);
+        }
+        SafePlayerPrefs.SetInt(GameConstants.NameEnteredCheckKey, 1);
+        SafePlayerPrefs.SetString(GameConstants.DisplayNameKey, nameInputField.text);
+        HeaderProfileName.text = nameInputField.text;
+
+        EnterNamePanel.Close();
+        LevelFillerSetter();
+    }
+    public void OnAvatarSelected(int AvatarID)
+    {
+        //PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text);
+        EnteredNameButton.interactable = true;
+        SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedCheckKey, 1);
+        SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedIndex, AvatarID);
+        AvatarSelectedSprite = AvatarSprites[AvatarID];
+        HeaderProfileImg.sprite = AvatarSelectedSprite;
+        SetAvatarID(AvatarID);
+        //NameEnterPanel.Close();
+    }
+
+    public void SetAvatarID(int avatarID)
+    {
+        var request = new UpdateUserDataRequest
+        {
+            Data = new Dictionary<string, string>
+            {
+                { "AvatarID", avatarID.ToString() } // Convert int to string for storage
+            },
+            Permission = UserDataPermission.Public
+        };
+        if (PlayFabClientAPI.IsClientLoggedIn())
+            PlayFabClientAPI.UpdateUserData(request, OnDataUpdateSuccess, OnDataUpdateFailure);
+    }
+    private void OnDataUpdateSuccess(UpdateUserDataResult result)
+    {
+        Debug.Log("Avatar ID updated successfully.");
+    }
+
+    private void OnDataUpdateFailure(PlayFabError error)
+    {
+        Debug.LogError("Failed to update Avatar ID: " + error.GenerateErrorReport());
+    }
+}
\ No newline at end of file
diff --git a/Assets/Profile.cs.meta b/Assets/Profile.cs.meta
new file mode 100644
index 00000000..33e5bc4e
--- /dev/null
+++ b/Assets/Profile.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21236f4bddba5ff4db559d91c0c804b4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/Scenes/Gameplay.unity b/Assets/Scenes/Gameplay.unity
index 1f945781..97585eca 100644
--- a/Assets/Scenes/Gameplay.unity
+++ b/Assets/Scenes/Gameplay.unity
@@ -356,15 +356,82 @@ PrefabInstance:
       propertyPath: m_LocalEulerAnglesHint.z
       value: 0
       objectReference: {fileID: 0}
+    - target: {fileID: 1157998567861908839, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: Cash
+      value: 
+      objectReference: {fileID: 1800608275}
+    - target: {fileID: 1157998567861908839, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: Coin
+      value: 
+      objectReference: {fileID: 1800608275}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalPosition.x
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalPosition.y
+      value: -9.371103
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalPosition.z
+      value: 0.0000009313226
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalRotation.w
+      value: 0.7071068
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalRotation.x
+      value: -0.7071068
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalRotation.y
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2009757565125818060, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_LocalRotation.z
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 2611225516326384265, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_Alpha
+      value: 0
+      objectReference: {fileID: 0}
     - target: {fileID: 3163929202673714977, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
       propertyPath: m_Name
       value: Gameplay
       objectReference: {fileID: 0}
+    - target: {fileID: 3880209530060406563, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_IsActive
+      value: 1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4228029045456089926, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: ControlMoveAxis
+      value: -1
+      objectReference: {fileID: 0}
+    - target: {fileID: 4658097709374346372, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: m_IsActive
+      value: 0
+      objectReference: {fileID: 0}
+    - target: {fileID: 5728126654494554082, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+      propertyPath: field of view
+      value: 60.000004
+      objectReference: {fileID: 0}
     m_RemovedComponents: []
     m_RemovedGameObjects: []
     m_AddedGameObjects: []
     m_AddedComponents: []
   m_SourcePrefab: {fileID: 100100000, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+--- !u!114 &1800608275 stripped
+MonoBehaviour:
+  m_CorrespondingSourceObject: {fileID: 1806979901701207792, guid: f421b37d0d39dda4fbd3b3fb8fbda43d, type: 3}
+  m_PrefabInstance: {fileID: 1800608274}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 0}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1660057539 &9223372036854775807
 SceneRoots:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scenes/Loading.unity b/Assets/Scenes/Loading.unity
index 3f262ba6..07fcb3cf 100644
--- a/Assets/Scenes/Loading.unity
+++ b/Assets/Scenes/Loading.unity
@@ -122,6 +122,291 @@ NavMeshSettings:
     debug:
       m_Flags: 0
   m_NavMeshData: {fileID: 0}
+--- !u!1 &114691775
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 114691776}
+  - component: {fileID: 114691779}
+  - component: {fileID: 114691778}
+  - component: {fileID: 114691777}
+  m_Layer: 5
+  m_Name: GoogleSignInButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &114691776
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 114691775}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 780811412}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0, y: 600}
+  m_SizeDelta: {x: 525, y: 120}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &114691777
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 114691775}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 114691778}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &114691778
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 114691775}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: 2d53a66c391dadc4b8ad1347e8c7682f, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &114691779
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 114691775}
+  m_CullTransparentMesh: 1
+--- !u!1 &264554633
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 264554634}
+  - component: {fileID: 264554637}
+  - component: {fileID: 264554636}
+  - component: {fileID: 264554635}
+  m_Layer: 5
+  m_Name: GuestLoginButton
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &264554634
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 264554633}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 2090563053}
+  m_Father: {fileID: 780811412}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0, y: 380}
+  m_SizeDelta: {x: 381.3092, y: 169.72}
+  m_Pivot: {x: 0.5, y: 0}
+--- !u!114 &264554635
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 264554633}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Navigation:
+    m_Mode: 3
+    m_WrapAround: 0
+    m_SelectOnUp: {fileID: 0}
+    m_SelectOnDown: {fileID: 0}
+    m_SelectOnLeft: {fileID: 0}
+    m_SelectOnRight: {fileID: 0}
+  m_Transition: 1
+  m_Colors:
+    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+    m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+    m_ColorMultiplier: 1
+    m_FadeDuration: 0.1
+  m_SpriteState:
+    m_HighlightedSprite: {fileID: 0}
+    m_PressedSprite: {fileID: 0}
+    m_SelectedSprite: {fileID: 0}
+    m_DisabledSprite: {fileID: 0}
+  m_AnimationTriggers:
+    m_NormalTrigger: Normal
+    m_HighlightedTrigger: Highlighted
+    m_PressedTrigger: Pressed
+    m_SelectedTrigger: Selected
+    m_DisabledTrigger: Disabled
+  m_Interactable: 1
+  m_TargetGraphic: {fileID: 264554636}
+  m_OnClick:
+    m_PersistentCalls:
+      m_Calls: []
+--- !u!114 &264554636
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 264554633}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 128484845, guid: c7e8e001296d0aa4d8725a9a14607f61, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &264554637
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 264554633}
+  m_CullTransparentMesh: 1
+--- !u!1 &307130679
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 307130681}
+  - component: {fileID: 307130680}
+  m_Layer: 0
+  m_Name: PlayerPrefsSyncManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &307130680
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 307130679}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: c814388591ae90d4aa18f1259f9c3b10, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+--- !u!4 &307130681
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 307130679}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 350.22916, y: 1514.299, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &559579066
 GameObject:
   m_ObjectHideFlags: 0
@@ -321,6 +606,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   loadingSlider: {fileID: 616766207}
+  loadingBarObj: {fileID: 1182391840}
 --- !u!4 &631203635
 Transform:
   m_ObjectHideFlags: 0
@@ -554,6 +840,8 @@ RectTransform:
   - {fileID: 1080658819}
   - {fileID: 1951881489}
   - {fileID: 1182391841}
+  - {fileID: 114691776}
+  - {fileID: 264554634}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
@@ -573,6 +861,53 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 5b228182a9cf64d41a266c9af49429f9, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!1 &817146857
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 817146859}
+  - component: {fileID: 817146858}
+  m_Layer: 0
+  m_Name: GoogleSignInManager
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!114 &817146858
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 817146857}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: aea303bf6931eb64a925ac187863ae99, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  bootstrapper: {fileID: 631203634}
+  googleSignInButton: {fileID: 114691777}
+  guestLoginButton: {fileID: 264554635}
+--- !u!4 &817146859
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 817146857}
+  serializedVersion: 2
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 540, y: 523.49, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 0}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
 --- !u!1 &1080658818
 GameObject:
   m_ObjectHideFlags: 0
@@ -665,7 +1000,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!224 &1182391841
 RectTransform:
   m_ObjectHideFlags: 0
@@ -950,6 +1285,140 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 1951881488}
   m_CullTransparentMesh: 1
+--- !u!1 &2090563052
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2090563053}
+  - component: {fileID: 2090563055}
+  - component: {fileID: 2090563054}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &2090563053
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2090563052}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 264554634}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0, y: 0}
+  m_AnchorMax: {x: 1, y: 1}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 0, y: 0}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2090563054
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2090563052}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: Guest Login
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 5da2ee26a9d0b024dafba9acbda5519e, type: 2}
+  m_sharedMaterial: {fileID: 7937037986802887748, guid: 5da2ee26a9d0b024dafba9acbda5519e, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 54.2
+  m_fontSizeBase: 36
+  m_fontWeight: 400
+  m_enableAutoSizing: 1
+  m_fontSizeMin: 18
+  m_fontSizeMax: 54.2
+  m_fontStyle: 0
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 0
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
+--- !u!222 &2090563055
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2090563052}
+  m_CullTransparentMesh: 1
 --- !u!1 &2093053312
 GameObject:
   m_ObjectHideFlags: 0
@@ -1035,3 +1504,5 @@ SceneRoots:
   - {fileID: 695861345}
   - {fileID: 631203635}
   - {fileID: 732690152}
+  - {fileID: 817146859}
+  - {fileID: 307130681}
diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity
index b617e466..2e34c0e7 100644
--- a/Assets/Scenes/MainMenu.unity
+++ b/Assets/Scenes/MainMenu.unity
@@ -2049,6 +2049,82 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 443354260}
   m_CullTransparentMesh: 1
+--- !u!1 &475566240
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 475566241}
+  - component: {fileID: 475566243}
+  - component: {fileID: 475566242}
+  m_Layer: 5
+  m_Name: ScoreBG (1)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &475566241
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 475566240}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children:
+  - {fileID: 516868694}
+  m_Father: {fileID: 8946041516820998889}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0}
+  m_AnchorMax: {x: 0.5, y: 0}
+  m_AnchoredPosition: {x: 0, y: 145.9}
+  m_SizeDelta: {x: 141, y: 32}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &475566242
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 475566240}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_Sprite: {fileID: 21300000, guid: d1a254d145eb8a14ca793fd3035c8b0c, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
+  m_UseSpriteMesh: 0
+  m_PixelsPerUnitMultiplier: 1
+--- !u!222 &475566243
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 475566240}
+  m_CullTransparentMesh: 1
 --- !u!1 &483958581
 GameObject:
   m_ObjectHideFlags: 0
@@ -2258,6 +2334,140 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 505193140}
   m_CullTransparentMesh: 1
+--- !u!1 &516868693
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 516868694}
+  - component: {fileID: 516868695}
+  - component: {fileID: 516868696}
+  m_Layer: 5
+  m_Name: Text (TMP)
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!224 &516868694
+RectTransform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 516868693}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 475566241}
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 221.375, y: 55.3438}
+  m_Pivot: {x: 0.5, y: 0.5}
+--- !u!222 &516868695
+CanvasRenderer:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 516868693}
+  m_CullTransparentMesh: 1
+--- !u!114 &516868696
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 516868693}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 1, g: 1, b: 1, a: 1}
+  m_RaycastTarget: 1
+  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+  m_Maskable: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+  m_text: 0
+  m_isRightToLeft: 0
+  m_fontAsset: {fileID: 11400000, guid: 5da2ee26a9d0b024dafba9acbda5519e, type: 2}
+  m_sharedMaterial: {fileID: 2100000, guid: 1246bf1715be85246a64e0c6de518fab, type: 2}
+  m_fontSharedMaterials: []
+  m_fontMaterial: {fileID: 0}
+  m_fontMaterials: []
+  m_fontColor32:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
+  m_enableVertexGradient: 0
+  m_colorMode: 3
+  m_fontColorGradient:
+    topLeft: {r: 1, g: 1, b: 1, a: 1}
+    topRight: {r: 1, g: 1, b: 1, a: 1}
+    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
+    bottomRight: {r: 1, g: 1, b: 1, a: 1}
+  m_fontColorGradientPreset: {fileID: 0}
+  m_spriteAsset: {fileID: 0}
+  m_tintAllSprites: 0
+  m_StyleSheet: {fileID: 0}
+  m_TextStyleHashCode: -1183493901
+  m_overrideHtmlColors: 0
+  m_faceColor:
+    serializedVersion: 2
+    rgba: 4294967295
+  m_fontSize: 47.4
+  m_fontSizeBase: 20.2
+  m_fontWeight: 400
+  m_enableAutoSizing: 1
+  m_fontSizeMin: 18
+  m_fontSizeMax: 72
+  m_fontStyle: 32
+  m_HorizontalAlignment: 2
+  m_VerticalAlignment: 512
+  m_textAlignment: 65535
+  m_characterSpacing: 0
+  m_wordSpacing: 0
+  m_lineSpacing: 0
+  m_lineSpacingMax: 0
+  m_paragraphSpacing: 0
+  m_charWidthMaxAdj: 0
+  m_enableWordWrapping: 1
+  m_wordWrappingRatios: 0.4
+  m_overflowMode: 1
+  m_linkedTextComponent: {fileID: 0}
+  parentLinkedComponent: {fileID: 0}
+  m_enableKerning: 1
+  m_enableExtraPadding: 0
+  checkPaddingRequired: 0
+  m_isRichText: 1
+  m_parseCtrlCharacters: 1
+  m_isOrthographic: 1
+  m_isCullingEnabled: 0
+  m_horizontalMapping: 0
+  m_verticalMapping: 0
+  m_uvLineOffset: 0
+  m_geometrySortingOrder: 0
+  m_IsTextObjectScaleStatic: 0
+  m_VertexBufferAutoSizeReduction: 0
+  m_useMaxVisibleDescender: 1
+  m_pageToDisplay: 1
+  m_margin: {x: 0, y: 0, z: 0, w: 0}
+  m_isUsingLegacyAnimationComponent: 0
+  m_isVolumetricText: 0
+  m_hasFontAssetChanged: 0
+  m_baseMaterial: {fileID: 0}
+  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
 --- !u!1 &517469374
 GameObject:
   m_ObjectHideFlags: 0
@@ -4071,6 +4281,7 @@ GameObject:
   - component: {fileID: 800311214}
   - component: {fileID: 800311213}
   - component: {fileID: 800311212}
+  - component: {fileID: 800311216}
   m_Layer: 5
   m_Name: EnterNamePanel
   m_TagString: Untagged
@@ -4163,6 +4374,31 @@ CanvasRenderer:
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 800311210}
   m_CullTransparentMesh: 1
+--- !u!114 &800311216
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 800311210}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 21236f4bddba5ff4db559d91c0c804b4, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  EnteredNameButton: {fileID: 1054812274}
+  AvatarSprites:
+  - {fileID: 886436354, guid: 03f5944480e9ef64cb1ac4dd0e551a27, type: 3}
+  - {fileID: -1134907537, guid: 03f5944480e9ef64cb1ac4dd0e551a27, type: 3}
+  - {fileID: 526338147, guid: 03f5944480e9ef64cb1ac4dd0e551a27, type: 3}
+  AvatarSelectedSprite: {fileID: 0}
+  EnterNamePanel: {fileID: 800311212}
+  MainPanel: {fileID: 1295747850}
+  nameInputField: {fileID: 19370734}
+  HeaderProfileImg: {fileID: 1421235385}
+  HeaderProfileName: {fileID: 1884363898}
+  LevelFillerImg: {fileID: 825963822}
+  LevelFillerText: {fileID: 0}
 --- !u!1 &825963820
 GameObject:
   m_ObjectHideFlags: 0
@@ -11569,9 +11805,9 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: 12334
+  m_text: 0
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontAsset: {fileID: 11400000, guid: 5da2ee26a9d0b024dafba9acbda5519e, type: 2}
   m_sharedMaterial: {fileID: 2100000, guid: 1246bf1715be85246a64e0c6de518fab, type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
@@ -11596,14 +11832,14 @@ MonoBehaviour:
   m_faceColor:
     serializedVersion: 2
     rgba: 4294967295
-  m_fontSize: 27.2
-  m_fontSizeBase: 36
+  m_fontSize: 47.4
+  m_fontSizeBase: 20.2
   m_fontWeight: 400
   m_enableAutoSizing: 1
-  m_fontSizeMin: 14.5
+  m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 32
-  m_HorizontalAlignment: 1
+  m_HorizontalAlignment: 2
   m_VerticalAlignment: 512
   m_textAlignment: 65535
   m_characterSpacing: 0
@@ -11614,7 +11850,7 @@ MonoBehaviour:
   m_charWidthMaxAdj: 0
   m_enableWordWrapping: 1
   m_wordWrappingRatios: 0.4
-  m_overflowMode: 0
+  m_overflowMode: 1
   m_linkedTextComponent: {fileID: 0}
   parentLinkedComponent: {fileID: 0}
   m_enableKerning: 1
@@ -11658,9 +11894,9 @@ MonoBehaviour:
   m_OnCullStateChanged:
     m_PersistentCalls:
       m_Calls: []
-  m_text: 12334
+  m_text: 0
   m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
+  m_fontAsset: {fileID: 11400000, guid: 5da2ee26a9d0b024dafba9acbda5519e, type: 2}
   m_sharedMaterial: {fileID: 2100000, guid: 1246bf1715be85246a64e0c6de518fab, type: 2}
   m_fontSharedMaterials: []
   m_fontMaterial: {fileID: 0}
@@ -11685,14 +11921,14 @@ MonoBehaviour:
   m_faceColor:
     serializedVersion: 2
     rgba: 4294967295
-  m_fontSize: 27.2
-  m_fontSizeBase: 36
+  m_fontSize: 47.4
+  m_fontSizeBase: 20.2
   m_fontWeight: 400
   m_enableAutoSizing: 1
-  m_fontSizeMin: 14.5
+  m_fontSizeMin: 18
   m_fontSizeMax: 72
   m_fontStyle: 32
-  m_HorizontalAlignment: 1
+  m_HorizontalAlignment: 2
   m_VerticalAlignment: 512
   m_textAlignment: 65535
   m_characterSpacing: 0
@@ -11703,7 +11939,7 @@ MonoBehaviour:
   m_charWidthMaxAdj: 0
   m_enableWordWrapping: 1
   m_wordWrappingRatios: 0.4
-  m_overflowMode: 0
+  m_overflowMode: 1
   m_linkedTextComponent: {fileID: 0}
   parentLinkedComponent: {fileID: 0}
   m_enableKerning: 1
@@ -12300,7 +12536,7 @@ MonoBehaviour:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 3694136963135273964}
-  m_Enabled: 1
+  m_Enabled: 0
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
   m_Name: 
@@ -12340,7 +12576,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0}
   m_AnchorMax: {x: 0.5, y: 0}
-  m_AnchoredPosition: {x: 4, y: 154.9}
+  m_AnchoredPosition: {x: 0, y: 176}
   m_SizeDelta: {x: 141, y: 32}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &2127333613745618497
@@ -12356,7 +12592,7 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   pedestalNumber: 3
-  scoreText: {fileID: 4404033343624500367}
+  scoreText: {fileID: 516868696}
   profilePic: {fileID: 1872020314069923374}
   nameText: {fileID: 9071939939645621796}
 --- !u!114 &2280375978144475388
@@ -12794,39 +13030,9 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: 0, y: -1.2281}
+  m_AnchoredPosition: {x: 0, y: 17.8}
   m_SizeDelta: {x: 221.375, y: 55.3438}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &3416664224428966726
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8337526333926663540}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_Sprite: {fileID: 21300000, guid: d1a254d145eb8a14ca793fd3035c8b0c, type: 3}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
-  m_UseSpriteMesh: 0
-  m_PixelsPerUnitMultiplier: 1
 --- !u!95 &3467639516214727882
 Animator:
   serializedVersion: 5
@@ -12873,7 +13079,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!114 &3754722601061921717
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -12937,9 +13143,9 @@ RectTransform:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7504354048190083025}
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1.00032, y: 1.00032, z: 1.00032}
+  m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 8026882825163135342}
@@ -12947,7 +13153,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0}
   m_AnchorMax: {x: 0.5, y: 0}
-  m_AnchoredPosition: {x: 4, y: 138.5}
+  m_AnchoredPosition: {x: 0, y: 145.9}
   m_SizeDelta: {x: 141, y: 32}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &3872224433570044647
@@ -13087,25 +13293,6 @@ MonoBehaviour:
   m_ChildScaleWidth: 0
   m_ChildScaleHeight: 0
   m_ReverseArrangement: 0
---- !u!224 &4218099631219653145
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8524890883894783598}
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 6297160936045475414}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0.5}
-  m_AnchorMax: {x: 1, y: 0.5}
-  m_AnchoredPosition: {x: -50.5, y: -0.7949896}
-  m_SizeDelta: {x: 75.97, y: 30.41}
-  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &4229214337198962808
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -13154,95 +13341,6 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 1
---- !u!114 &4404033343624500367
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8524890883894783598}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Material: {fileID: 0}
-  m_Color: {r: 1, g: 1, b: 1, a: 1}
-  m_RaycastTarget: 1
-  m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
-  m_Maskable: 1
-  m_OnCullStateChanged:
-    m_PersistentCalls:
-      m_Calls: []
-  m_text: 12334
-  m_isRightToLeft: 0
-  m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
-  m_sharedMaterial: {fileID: 2100000, guid: 1246bf1715be85246a64e0c6de518fab, type: 2}
-  m_fontSharedMaterials: []
-  m_fontMaterial: {fileID: 0}
-  m_fontMaterials: []
-  m_fontColor32:
-    serializedVersion: 2
-    rgba: 4294967295
-  m_fontColor: {r: 1, g: 1, b: 1, a: 1}
-  m_enableVertexGradient: 0
-  m_colorMode: 3
-  m_fontColorGradient:
-    topLeft: {r: 1, g: 1, b: 1, a: 1}
-    topRight: {r: 1, g: 1, b: 1, a: 1}
-    bottomLeft: {r: 1, g: 1, b: 1, a: 1}
-    bottomRight: {r: 1, g: 1, b: 1, a: 1}
-  m_fontColorGradientPreset: {fileID: 0}
-  m_spriteAsset: {fileID: 0}
-  m_tintAllSprites: 0
-  m_StyleSheet: {fileID: 0}
-  m_TextStyleHashCode: -1183493901
-  m_overrideHtmlColors: 0
-  m_faceColor:
-    serializedVersion: 2
-    rgba: 4294967295
-  m_fontSize: 27.2
-  m_fontSizeBase: 36
-  m_fontWeight: 400
-  m_enableAutoSizing: 1
-  m_fontSizeMin: 14.5
-  m_fontSizeMax: 72
-  m_fontStyle: 32
-  m_HorizontalAlignment: 1
-  m_VerticalAlignment: 512
-  m_textAlignment: 65535
-  m_characterSpacing: 0
-  m_wordSpacing: 0
-  m_lineSpacing: 0
-  m_lineSpacingMax: 0
-  m_paragraphSpacing: 0
-  m_charWidthMaxAdj: 0
-  m_enableWordWrapping: 1
-  m_wordWrappingRatios: 0.4
-  m_overflowMode: 0
-  m_linkedTextComponent: {fileID: 0}
-  parentLinkedComponent: {fileID: 0}
-  m_enableKerning: 1
-  m_enableExtraPadding: 0
-  checkPaddingRequired: 0
-  m_isRichText: 1
-  m_parseCtrlCharacters: 1
-  m_isOrthographic: 1
-  m_isCullingEnabled: 0
-  m_horizontalMapping: 0
-  m_verticalMapping: 0
-  m_uvLineOffset: 0
-  m_geometrySortingOrder: 0
-  m_IsTextObjectScaleStatic: 0
-  m_VertexBufferAutoSizeReduction: 0
-  m_useMaxVisibleDescender: 1
-  m_pageToDisplay: 1
-  m_margin: {x: 0, y: 0, z: 0, w: 0}
-  m_isUsingLegacyAnimationComponent: 0
-  m_isVolumetricText: 0
-  m_hasFontAssetChanged: 0
-  m_baseMaterial: {fileID: 0}
-  m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
 --- !u!222 &4581989795419718254
 CanvasRenderer:
   m_ObjectHideFlags: 0
@@ -13656,26 +13754,6 @@ RectTransform:
   m_AnchoredPosition: {x: -3.1, y: -114.1}
   m_SizeDelta: {x: 120, y: 120}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!224 &6297160936045475414
-RectTransform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8337526333926663540}
-  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1.00032, y: 1.00032, z: 1.00032}
-  m_ConstrainProportionsScale: 0
-  m_Children:
-  - {fileID: 4218099631219653145}
-  m_Father: {fileID: 8946041516820998889}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 0.5, y: 0}
-  m_AnchorMax: {x: 0.5, y: 0}
-  m_AnchoredPosition: {x: 4, y: 138.8}
-  m_SizeDelta: {x: 141, y: 32}
-  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!1 &6329351691133065142
 GameObject:
   m_ObjectHideFlags: 0
@@ -14103,7 +14181,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!114 &7570351248279651149
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -14177,7 +14255,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: -0.3305, y: -13.2}
+  m_AnchoredPosition: {x: -0.3305, y: -0.8}
   m_SizeDelta: {x: 172.2484, y: 44.5333}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &7795106251941810256
@@ -14214,7 +14292,7 @@ MonoBehaviour:
   m_PrefabInstance: {fileID: 0}
   m_PrefabAsset: {fileID: 0}
   m_GameObject: {fileID: 7504354048190083025}
-  m_Enabled: 1
+  m_Enabled: 0
   m_EditorHideFlags: 0
   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
   m_Name: 
@@ -14258,14 +14336,6 @@ RectTransform:
   m_AnchoredPosition: {x: 11.378, y: 18.5}
   m_SizeDelta: {x: 1057.2, y: 793.97}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &7978439345004707343
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8337526333926663540}
-  m_CullTransparentMesh: 1
 --- !u!114 &7999982976484535055
 MonoBehaviour:
   m_ObjectHideFlags: 0
@@ -14293,10 +14363,10 @@ RectTransform:
   m_Children: []
   m_Father: {fileID: 3848434020715499350}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0.5}
-  m_AnchorMax: {x: 1, y: 0.5}
-  m_AnchoredPosition: {x: -50.5, y: -0.7949896}
-  m_SizeDelta: {x: 75.97, y: 30.41}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: 0}
+  m_SizeDelta: {x: 221.375, y: 55.3438}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &8120531799563461673
 RectTransform:
@@ -14318,14 +14388,6 @@ RectTransform:
   m_AnchoredPosition: {x: -0.000014259, y: -209}
   m_SizeDelta: {x: 1080, y: 833.9}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &8273856533194255613
-CanvasRenderer:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8524890883894783598}
-  m_CullTransparentMesh: 1
 --- !u!224 &8301229671545223574
 RectTransform:
   m_ObjectHideFlags: 0
@@ -14365,24 +14427,6 @@ RectTransform:
   m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 120, y: 120}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &8337526333926663540
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 6297160936045475414}
-  - component: {fileID: 7978439345004707343}
-  - component: {fileID: 3416664224428966726}
-  m_Layer: 5
-  m_Name: ScoreBG
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 0
 --- !u!224 &8419866729458327092
 RectTransform:
   m_ObjectHideFlags: 0
@@ -14448,7 +14492,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
-  m_AnchoredPosition: {x: -2.3936, y: -11.5607}
+  m_AnchoredPosition: {x: -2.3936, y: -0.8}
   m_SizeDelta: {x: 185.6433, y: 46.4108}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!114 &8509113260832753955
@@ -14481,24 +14525,6 @@ MonoBehaviour:
   m_FillOrigin: 0
   m_UseSpriteMesh: 0
   m_PixelsPerUnitMultiplier: 1
---- !u!1 &8524890883894783598
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 4218099631219653145}
-  - component: {fileID: 8273856533194255613}
-  - component: {fileID: 4404033343624500367}
-  m_Layer: 5
-  m_Name: Text (TMP)
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
 --- !u!1 &8753920188017403380
 GameObject:
   m_ObjectHideFlags: 0
@@ -14568,10 +14594,10 @@ RectTransform:
   m_Children: []
   m_Father: {fileID: 2000930026608204176}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
-  m_AnchorMin: {x: 1, y: 0.5}
-  m_AnchorMax: {x: 1, y: 0.5}
-  m_AnchoredPosition: {x: -50.5, y: -0.7949896}
-  m_SizeDelta: {x: 75.97, y: 30.41}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: 0, y: -1.2281}
+  m_SizeDelta: {x: 221.375, y: 55.3438}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &8933557623444557051
 CanvasRenderer:
@@ -14595,7 +14621,7 @@ RectTransform:
   m_Children:
   - {fileID: 4056225210829074065}
   - {fileID: 8498960607485967627}
-  - {fileID: 6297160936045475414}
+  - {fileID: 475566241}
   - {fileID: 1033533885}
   m_Father: {fileID: 1145879705990377755}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Assets/Scripts/Bootstrapper.cs b/Assets/Scripts/Bootstrapper.cs
index 2ed71fbb..8a6e01b2 100644
--- a/Assets/Scripts/Bootstrapper.cs
+++ b/Assets/Scripts/Bootstrapper.cs
@@ -1,5 +1,3 @@
-using System.Collections;
-using System.Collections.Generic;
 using DG.Tweening;
 using UnityEngine;
 using UnityEngine.SceneManagement;
@@ -7,11 +5,20 @@ using UnityEngine.UI;
 
 public class Bootstrapper : MonoBehaviour
 {
-    public Image loadingSlider;
-    // Start is called before the first frame update
-    void Start()
+    [SerializeField] private Image loadingSlider;
+    [SerializeField] private GameObject loadingBarObj;
+    private void Start()
     {
-        loadingSlider.DOFillAmount(1, 2.5f).OnComplete(() =>
+#if UNITY_EDITOR
+        StartGame();
+#endif
+    }
+    // Called from GoogleSignInManager when login is successful
+    public void StartGame()
+    {
+        Debug.Log("Starting game...");
+        loadingBarObj.SetActive(true);
+        loadingSlider.DOFillAmount(1f, 2.5f).OnComplete(() =>
         {
             SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
         });
diff --git a/Assets/Scripts/HomeScene.cs b/Assets/Scripts/HomeScene.cs
index 591ed862..81e27daa 100644
--- a/Assets/Scripts/HomeScene.cs
+++ b/Assets/Scripts/HomeScene.cs
@@ -90,10 +90,10 @@ public class HomeScene : MonoBehaviour
     {
         instance = this;
         OnPlayButtonPressed = new UnityEvent();
-        CheckForDisplayName();
-        CheckForAvatar();
+        //CheckForDisplayName();
+        //CheckForAvatar();
         SetupSettingToggle();
-        leaderboardUIScreen.Init();
+        //leaderboardUIScreen.Init();
         //if (GameManager.openLevelSelection)
         //{
         //    GameManager.openLevelSelection = false;
@@ -106,8 +106,8 @@ public class HomeScene : MonoBehaviour
         //Music.instance.Play(Music.Type.MainMusic);
         Application.targetFrameRate = 60;
         EnteredNameButton.interactable = false;
-        //MainScreen.Open();
         CashText.text = PlayerPrefs.GetInt("Cash").ToString();
+        MainScreen.Open();
     }
 
 
@@ -154,8 +154,8 @@ public class HomeScene : MonoBehaviour
     {
 
         //PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text.ToString());
-        PlayerPrefs.SetInt(GameConstants.NameEnteredCheckKey, 1);
-        PlayerPrefs.SetString(GameConstants.DisplayNameKey, nameInputField.text.ToString());
+        SafePlayerPrefs.SetInt(GameConstants.NameEnteredCheckKey, 1);
+        SafePlayerPrefs.SetString(GameConstants.DisplayNameKey, nameInputField.text.ToString());
 
         NameEnterPanel.Close();
         MainScreen.Open();
@@ -165,8 +165,8 @@ public class HomeScene : MonoBehaviour
     {
         //PlayFabManager.Instance.playFabLeaderboards.SetDisplayName(nameInputField.text);
         EnteredNameButton.interactable = true;
-        PlayerPrefs.SetInt(GameConstants.AvatarSelectedCheckKey, 1);
-        PlayerPrefs.SetInt(GameConstants.AvatarSelectedIndex, AvatarID);
+        SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedCheckKey, 1);
+        SafePlayerPrefs.SetInt(GameConstants.AvatarSelectedIndex, AvatarID);
         AvatarSelectedSprite = AvatarSprites[AvatarID];
         SetAvatarID(AvatarID);
         //NameEnterPanel.Close();
diff --git a/Assets/Scripts/PlayFab/PlayFabInit.cs b/Assets/Scripts/PlayFab/PlayFabInit.cs
index f92e1d8b..84df63e2 100644
--- a/Assets/Scripts/PlayFab/PlayFabInit.cs
+++ b/Assets/Scripts/PlayFab/PlayFabInit.cs
@@ -7,15 +7,15 @@ using UnityEngine.SceneManagement;
 
 public class PlayFabInit : MonoBehaviour
 {
-    public string playFabTitleId = "7D3B9"; // Replace with your PlayFab Title ID
+    public string playFabTitleId = "1819C6"; // Replace with your PlayFab Title ID
     void Start()
     {
     
-        if (string.IsNullOrEmpty(PlayFabSettings.TitleId))
-        {
-            PlayFabSettings.TitleId = playFabTitleId;
-        }
-        Login();
+        //if (string.IsNullOrEmpty(PlayFabSettings.TitleId))
+        //{
+        //    PlayFabSettings.TitleId = playFabTitleId;
+        //}
+        //Login();
     }
 
     void Login()
diff --git a/Assets/Scripts/PlayFab/PlayFabLeaderboards.cs b/Assets/Scripts/PlayFab/PlayFabLeaderboards.cs
index 33fe3ddc..6e554439 100644
--- a/Assets/Scripts/PlayFab/PlayFabLeaderboards.cs
+++ b/Assets/Scripts/PlayFab/PlayFabLeaderboards.cs
@@ -15,7 +15,7 @@ public class PlayFabLeaderboards : MonoBehaviour
             {
                 new StatisticUpdate
                 {
-                    StatisticName = GameConstants.LevelCompletedStatsKey,
+                    StatisticName = "HighScore",
                     Value = levelsCompleted
                 }
             }
@@ -64,18 +64,37 @@ public class PlayFabLeaderboards : MonoBehaviour
     
         PlayFabClientAPI.GetLeaderboard(request, result => onSuccess(result.Leaderboard), onFailure);
     }
-    
+
     public void GetLeaderboard(Action<List<PlayerLeaderboardEntry>> onSuccess, Action<PlayFabError> onFailure)
     {
         var request = new GetLeaderboardRequest
         {
-            StatisticName = GameConstants.LevelCompletedStatsKey,
-            StartPosition = 0,  
-            MaxResultsCount = 10
+            StatisticName = "HighScore",
+            StartPosition = 0,
+            MaxResultsCount = 10,
+            ProfileConstraints = new PlayerProfileViewConstraints
+            {
+                ShowDisplayName = true,
+                ShowAvatarUrl = true
+            }
         };
-    
         PlayFabClientAPI.GetLeaderboard(request, result => onSuccess(result.Leaderboard), onFailure);
+
+
+        
     }
+
+    //public void GetLeaderboard(Action<List<PlayerLeaderboardEntry>> onSuccess, Action<PlayFabError> onFailure)
+    //{
+    //    var request = new GetLeaderboardRequest
+    //    {
+    //        StatisticName = GameConstants.LevelCompletedStatsKey,
+    //        StartPosition = 0,  
+    //        MaxResultsCount = 10
+    //    };
+
+    //    PlayFabClientAPI.GetLeaderboard(request, result => onSuccess(result.Leaderboard), onFailure);
+    //}
     public void SetDisplayName(string displayName)
     {
         var request = new UpdateUserTitleDisplayNameRequest
diff --git a/Assets/Scripts/UIManager.cs b/Assets/Scripts/UIManager.cs
index 9c98aef5..eaf7a216 100644
--- a/Assets/Scripts/UIManager.cs
+++ b/Assets/Scripts/UIManager.cs
@@ -14,6 +14,7 @@ public class UIManager : MonoBehaviour
     public TextMeshProUGUI ScoreText;
     public TextMeshProUGUI BestScoreText;
     public TextMeshProUGUI GameOverCurrentScore;
+    public TextMeshProUGUI Cash;
     public Popup GameoverPanel;
     public Popup MainScreen;
     private void Awake()
@@ -41,7 +42,7 @@ public class UIManager : MonoBehaviour
             }
             else
             {
-                Health.fillAmount = player.Health/100f;
+                Health.fillAmount = player.Health / 100f;
                 //Health.text = "Health: " + player.Health.ToString();
             }
         }
@@ -49,6 +50,13 @@ public class UIManager : MonoBehaviour
     public void GameOver()
     {
         GameOverCurrentScore.text = GameManager.instance.Score.ToString();
+        Cash.text = GameManager.instance.Score.ToString();
+        int score = (int)GameManager.instance.Score;
+        int res = PlayerPrefs.GetInt("Cash")+score;
+        SafePlayerPrefs.SetInt("Cash", res);
+
+
+
         MainScreen.Close();
         GameoverPanel.Open();
         GameManager.instance.isGameOver = true;
@@ -58,8 +66,9 @@ public class UIManager : MonoBehaviour
         cameraFollow.isPlaying = false;
         if (GameManager.instance.Score > PlayerPrefs.GetInt("BestScore"))
         {
-            Debug.Log("Here");
-            PlayerPrefs.SetInt("BestScore", (int)GameManager.instance.Score);
+            SafePlayerPrefs.SetInt("BestScore", (int)GameManager.instance.Score);
+            PlayFabManager.Instance.playFabLeaderboards.UpdateLevelsCompleted((int)GameManager.instance.Score);
+
         }
     }
     public void Pause()
diff --git a/Assets/TowerEscapeKey.keystore b/Assets/TowerEscapeKey.keystore
new file mode 100644
index 00000000..1682c68f
Binary files /dev/null and b/Assets/TowerEscapeKey.keystore differ
diff --git a/Assets/TowerEscapeKey.keystore.meta b/Assets/TowerEscapeKey.keystore.meta
new file mode 100644
index 00000000..a90c1720
--- /dev/null
+++ b/Assets/TowerEscapeKey.keystore.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f8528f4712b27b74595a407ae0996ef9
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/google-services.json b/Assets/google-services.json
new file mode 100644
index 00000000..74b9956a
--- /dev/null
+++ b/Assets/google-services.json
@@ -0,0 +1,54 @@
+{
+  "project_info": {
+    "project_number": "1044061384825",
+    "project_id": "towerescape",
+    "storage_bucket": "towerescape.firebasestorage.app"
+  },
+  "client": [
+    {
+      "client_info": {
+        "mobilesdk_app_id": "1:1044061384825:android:d1ffae53c9b402098224a8",
+        "android_client_info": {
+          "package_name": "com.rizze.towerescape"
+        }
+      },
+      "oauth_client": [
+        {
+          "client_id": "1044061384825-1icpuda6102t6v9jlej0kc91hvduksde.apps.googleusercontent.com",
+          "client_type": 1,
+          "android_info": {
+            "package_name": "com.rizze.towerescape",
+            "certificate_hash": "b8d0c8502c7b94e92a0ba8de3841d43078812ad5"
+          }
+        },
+        {
+          "client_id": "1044061384825-kervrjq8gcopk6ijs69qnm4jqeh7rj7r.apps.googleusercontent.com",
+          "client_type": 3
+        }
+      ],
+      "api_key": [
+        {
+          "current_key": "AIzaSyDSxNaypMgCs2mm_t4RxaV8Va8NTjBgEmE"
+        }
+      ],
+      "services": {
+        "appinvite_service": {
+          "other_platform_oauth_client": [
+            {
+              "client_id": "1044061384825-kervrjq8gcopk6ijs69qnm4jqeh7rj7r.apps.googleusercontent.com",
+              "client_type": 3
+            },
+            {
+              "client_id": "1044061384825-lpsta8gilmijvo2886s2nabkh7t3gq7i.apps.googleusercontent.com",
+              "client_type": 2,
+              "ios_info": {
+                "bundle_id": "com.rizze.towerescape"
+              }
+            }
+          ]
+        }
+      }
+    }
+  ],
+  "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/Assets/google-services.json.meta b/Assets/google-services.json.meta
new file mode 100644
index 00000000..405d4d21
--- /dev/null
+++ b/Assets/google-services.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 6fc8361a6c5434b4c8c8f4bd4281c4bf
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset
index c53574c4..2a41f0cb 100644
--- a/ProjectSettings/EditorBuildSettings.asset
+++ b/ProjectSettings/EditorBuildSettings.asset
@@ -12,6 +12,6 @@ EditorBuildSettings:
     path: Assets/Scenes/MainMenu.unity
     guid: 9b814f32eb849e34f8290b210687919e
   - enabled: 1
-    path: Assets/Scenes/New Scene.unity
-    guid: b2d2def585012cb4f888bfcb51d460f8
+    path: Assets/Scenes/Gameplay.unity
+    guid: 319fb6e8662bafd4a8fed4106ad7bbf2
   m_configObjects: {}
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index c056a1e2..6c0f3a32 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -162,13 +162,13 @@ PlayerSettings:
   androidSupportedAspectRatio: 1
   androidMaxAspectRatio: 2.1
   applicationIdentifier:
-    Android: com.DefaultCompany.FlyingFred
+    Android: com.rizze.towerescape
   buildNumber:
     Standalone: 0
     VisionOS: 0
     iPhone: 0
     tvOS: 0
-  overrideDefaultApplicationIdentifier: 0
+  overrideDefaultApplicationIdentifier: 1
   AndroidBundleVersionCode: 1
   AndroidMinSdkVersion: 22
   AndroidTargetSdkVersion: 0
@@ -254,18 +254,18 @@ PlayerSettings:
   templateDefaultScene: Assets/Scenes/SampleScene.unity
   useCustomMainManifest: 0
   useCustomLauncherManifest: 0
-  useCustomMainGradleTemplate: 0
+  useCustomMainGradleTemplate: 1
   useCustomLauncherGradleManifest: 0
   useCustomBaseGradleTemplate: 0
-  useCustomGradlePropertiesTemplate: 0
-  useCustomGradleSettingsTemplate: 0
+  useCustomGradlePropertiesTemplate: 1
+  useCustomGradleSettingsTemplate: 1
   useCustomProguardFile: 0
-  AndroidTargetArchitectures: 1
+  AndroidTargetArchitectures: 3
   AndroidTargetDevices: 0
   AndroidSplashScreenScale: 0
   androidSplashScreen: {fileID: 0}
-  AndroidKeystoreName: 
-  AndroidKeyaliasName: 
+  AndroidKeystoreName: '{inproject}: Assets/TowerEscapeKey.keystore'
+  AndroidKeyaliasName: towerescapeali
   AndroidEnableArmv9SecurityFeatures: 0
   AndroidBuildApkPerCpuArchitecture: 0
   AndroidTVCompatibility: 0
@@ -273,7 +273,7 @@ PlayerSettings:
   AndroidEnableTango: 0
   androidEnableBanner: 1
   androidUseLowAccuracyLocation: 0
-  androidUseCustomKeystore: 0
+  androidUseCustomKeystore: 1
   m_AndroidBanners:
   - width: 320
     height: 180
@@ -839,7 +839,8 @@ PlayerSettings:
   scriptingDefineSymbols: {}
   additionalCompilerArguments: {}
   platformArchitecture: {}
-  scriptingBackend: {}
+  scriptingBackend:
+    Android: 1
   il2cppCompilerConfiguration: {}
   il2cppCodeGeneration: {}
   managedStrippingLevel: