diff --git a/.idea/.name b/.idea/.name
deleted file mode 100644
index 110be66..0000000
--- a/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-vncproxy
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 3b3cb8d..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <resourceExtensions />
-    <wildcardResourcePatterns>
-      <entry name="!?*.java" />
-      <entry name="!?*.form" />
-      <entry name="!?*.class" />
-      <entry name="!?*.groovy" />
-      <entry name="!?*.scala" />
-      <entry name="!?*.flex" />
-      <entry name="!?*.kt" />
-      <entry name="!?*.clj" />
-      <entry name="!?*.aj" />
-    </wildcardResourcePatterns>
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="false">
-        <processorPath useClasspath="true" />
-      </profile>
-    </annotationProcessing>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index c7d1c5a..0000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<component name="CopyrightManager">
-  <settings default="" />
-</component>
\ No newline at end of file
diff --git a/.idea/libraries/GOPATH__vncproxy_.xml b/.idea/libraries/GOPATH__vncproxy_.xml
index a3abc64..de67345 100644
--- a/.idea/libraries/GOPATH__vncproxy_.xml
+++ b/.idea/libraries/GOPATH__vncproxy_.xml
@@ -6,11 +6,14 @@
       <root url="file://$PROJECT_DIR$/../vncproxy1" />
       <root url="file://$PROJECT_DIR$/../GoProjExample" />
       <root url="file://$PROJECT_DIR$/../srf.opb" />
+      <root url="file://$PROJECT_DIR$/../vshpere-cli" />
       <root url="file://$PROJECT_DIR$/../sourcegraph.com" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/github.com" />
       <root url="file://$PROJECT_DIR$/../github.com" />
+      <root url="file://$PROJECT_DIR$/../experience.center.opb" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/gopkg.in" />
       <root url="file://$PROJECT_DIR$/../golang.org" />
+      <root url="file://$PROJECT_DIR$/../srf-test-exporter" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/golang.org" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/srf" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/version" />
@@ -24,11 +27,14 @@
       <root url="file://$PROJECT_DIR$/../vncproxy1" />
       <root url="file://$PROJECT_DIR$/../GoProjExample" />
       <root url="file://$PROJECT_DIR$/../srf.opb" />
+      <root url="file://$PROJECT_DIR$/../vshpere-cli" />
       <root url="file://$PROJECT_DIR$/../sourcegraph.com" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/github.com" />
       <root url="file://$PROJECT_DIR$/../github.com" />
+      <root url="file://$PROJECT_DIR$/../experience.center.opb" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/gopkg.in" />
       <root url="file://$PROJECT_DIR$/../golang.org" />
+      <root url="file://$PROJECT_DIR$/../srf-test-exporter" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/golang.org" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/srf" />
       <root url="file://$USER_HOME$/srf/experience.center.opb/src/version" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index be9be36..ce2a63a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,30 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="GOROOT" path="/usr/local/Cellar/go/1.8.3/libexec" />
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GOROOT" path="/usr/local/Cellar/go/1.8.3/libexec" />
+  <component name="MavenImportPreferences">
+    <option name="generalSettings">
+      <MavenGeneralSettings>
+        <option name="mavenHome" value="Bundled (Maven 3)" />
+      </MavenGeneralSettings>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" default="true">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
 </project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 06e0ada..86ed047 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/vncproxy.iml" filepath="$PROJECT_DIR$/.idea/vncproxy.iml" />
-    </modules>
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/vncproxy.iml" filepath="$PROJECT_DIR$/vncproxy.iml" />
+    </modules>
+  </component>
 </project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 9661ac7..35eb1dd 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
 </project>
\ No newline at end of file
diff --git a/.idea/vncproxy.iml b/.idea/vncproxy.iml
deleted file mode 100644
index fccf925..0000000
--- a/.idea/vncproxy.iml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="WEB_MODULE" version="4">
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="sourceFolder" forTests="false" />
-    <orderEntry type="library" name="GOPATH &lt;vncproxy&gt;" level="project" />
-  </component>
-</module>
-
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 0137706..4d2d2ba 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,1648 +1,1344 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ChangeListManager">
-    <list default="true" id="aeba8696-a0e4-4bdc-984c-b9ca26151c10" name="Default" comment="">
-      <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/recorder.go" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/compiler.xml" afterPath="$PROJECT_DIR$/.idea/compiler.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" afterPath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" afterPath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vncproxy.iml" afterPath="$PROJECT_DIR$/.idea/vncproxy.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/launch.json" afterPath="$PROJECT_DIR$/.vscode/launch.json" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/tasks.json" afterPath="$PROJECT_DIR$/.vscode/tasks.json" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/LICENSE" afterPath="$PROJECT_DIR$/LICENSE" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.md" afterPath="$PROJECT_DIR$/README.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/Logger.go" afterPath="$PROJECT_DIR$/common/Logger.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/encoding.go" afterPath="$PROJECT_DIR$/common/encoding.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/readers.go" afterPath="$PROJECT_DIR$/common/readers.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/rectangle.go" afterPath="$PROJECT_DIR$/common/rectangle.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-copy-rect.go" afterPath="$PROJECT_DIR$/encodings/enc-copy-rect.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-corre.go" afterPath="$PROJECT_DIR$/encodings/enc-corre.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-hextile.go" afterPath="$PROJECT_DIR$/encodings/enc-hextile.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-raw.go" afterPath="$PROJECT_DIR$/encodings/enc-raw.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-rre.go" afterPath="$PROJECT_DIR$/encodings/enc-rre.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-tight.go" afterPath="$PROJECT_DIR$/encodings/enc-tight.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-zlib.go" afterPath="$PROJECT_DIR$/encodings/enc-zlib.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-zrle.go" afterPath="$PROJECT_DIR$/encodings/enc-zrle.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/main.go" afterPath="$PROJECT_DIR$/main.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/README.md" afterPath="$PROJECT_DIR$/vnc/README.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client-conn.go" afterPath="$PROJECT_DIR$/vnc/client-conn.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_auth.go" afterPath="$PROJECT_DIR$/vnc/client_auth.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_auth_test.go" afterPath="$PROJECT_DIR$/vnc/client_auth_test.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client_test.go" afterPath="$PROJECT_DIR$/vnc/client_test.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/color.go" afterPath="$PROJECT_DIR$/vnc/color.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/pixel_format.go" afterPath="$PROJECT_DIR$/vnc/pixel_format.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/pointer.go" afterPath="$PROJECT_DIR$/vnc/pointer.go" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/server_messages.go" afterPath="$PROJECT_DIR$/vnc/server_messages.go" />
-    </list>
-    <ignored path="vncproxy.iws" />
-    <ignored path=".idea/workspace.xml" />
-    <ignored path=".idea/dataSources.local.xml" />
-    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
-    <option name="TRACKING_ENABLED" value="true" />
-    <option name="SHOW_DIALOG" value="false" />
-    <option name="HIGHLIGHT_CONFLICTS" value="true" />
-    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
-    <option name="LAST_RESOLUTION" value="IGNORE" />
-  </component>
-  <component name="CompilerWorkspaceConfiguration">
-    <option name="MAKE_PROJECT_ON_SAVE" value="true" />
-  </component>
-  <component name="CreatePatchCommitExecutor">
-    <option name="PATCH_PATH" value="" />
-  </component>
-  <component name="DatabaseView">
-    <option name="SHOW_INTERMEDIATE" value="true" />
-    <option name="GROUP_SCHEMA" value="true" />
-    <option name="GROUP_CONTENTS" value="false" />
-    <option name="SORT_POSITIONED" value="false" />
-    <option name="SHOW_TABLE_DETAILS" value="true" />
-    <option name="SHOW_EMPTY_GROUPS" value="false" />
-    <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
-  </component>
-  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
-  <component name="FavoritesManager">
-    <favorites_list name="vncproxy" />
-  </component>
-  <component name="FileEditorManager">
-    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
-      <file leaf-file-name="client-conn.go" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="254">
-              <caret line="482" column="0" lean-forward="false" selection-start-line="482" selection-start-column="0" selection-end-line="482" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="asm_amd64.s" pinned="false" current-in-tab="false">
-        <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_amd64.s">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="129">
-              <caret line="2196" column="0" lean-forward="false" selection-start-line="2196" selection-start-column="0" selection-end-line="2196" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="binary.go" pinned="false" current-in-tab="false">
-        <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/encoding/binary/binary.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="191">
-              <caret line="171" column="9" lean-forward="false" selection-start-line="167" selection-start-column="22" selection-end-line="171" selection-end-column="9" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="server_messages.go" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/vnc/server_messages.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="63">
-              <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="main.go" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/main.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="56">
-              <caret line="23" column="42" lean-forward="false" selection-start-line="23" selection-start-column="42" selection-end-line="23" selection-end-column="42" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="readers.go" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/common/readers.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="134">
-              <caret line="137" column="0" lean-forward="false" selection-start-line="137" selection-start-column="0" selection-end-line="137" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="io.go" pinned="false" current-in-tab="false">
-        <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/io/io.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="134">
-              <caret line="306" column="0" lean-forward="false" selection-start-line="306" selection-start-column="0" selection-end-line="306" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="recorder.go" pinned="false" current-in-tab="true">
-        <entry file="file://$PROJECT_DIR$/listeners/recorder.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="220">
-              <caret line="138" column="0" lean-forward="false" selection-start-line="138" selection-start-column="0" selection-end-line="138" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="enc-tight.go" pinned="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="207">
-              <caret line="177" column="0" lean-forward="false" selection-start-line="177" selection-start-column="0" selection-end-line="177" selection-end-column="0" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="file_unix.go" pinned="false" current-in-tab="false">
-        <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/os/file_unix.go">
-          <provider selected="true" editor-type-id="text-editor">
-            <state relative-caret-position="151">
-              <caret line="233" column="55" lean-forward="false" selection-start-line="233" selection-start-column="55" selection-end-line="233" selection-end-column="55" />
-              <folding />
-            </state>
-          </provider>
-        </entry>
-      </file>
-    </leaf>
-  </component>
-  <component name="FindInProjectRecents">
-    <findStrings>
-      <find>Read</find>
-      <find>.Read</find>
-      <find>.read</find>
-      <find>server</find>
-      <find>uint8</find>
-      <find>TightMinToCompress</find>
-      <find>mainloop</find>
-      <find>writeStartSession</find>
-      <find>padd</find>
-      <find>paddib</find>
-      <find>paddi</find>
-      <find>paddin</find>
-      <find>paddings</find>
-      <find>padding</find>
-      <find>paddingS</find>
-      <find>paddingSi</find>
-      <find>paddingSiz</find>
-      <find>read</find>
-      <find>paddingSize</find>
-    </findStrings>
-  </component>
-  <component name="Git.Settings">
-    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
-  </component>
-  <component name="GradleLocalSettings">
-    <option name="externalProjectsViewState">
-      <projects_view />
-    </option>
-  </component>
-  <component name="IdeDocumentHistory">
-    <option name="CHANGED_PATHS">
-      <list>
-        <option value="$PROJECT_DIR$/vnc/enc-tight.go" />
-        <option value="$PROJECT_DIR$/vnc/encoding/enc-raw.go" />
-        <option value="$PROJECT_DIR$/vnc/enc-raw.go" />
-        <option value="$PROJECT_DIR$/vnc/common/client.go" />
-        <option value="$PROJECT_DIR$/vnc/encoding/client.go" />
-        <option value="$PROJECT_DIR$/main.go" />
-        <option value="$PROJECT_DIR$/vnc/client.go" />
-        <option value="$PROJECT_DIR$/vnc/enc-rre.go" />
-        <option value="$PROJECT_DIR$/encodings/enc-raw.go" />
-        <option value="$PROJECT_DIR$/vnc/client-conn.go" />
-        <option value="$PROJECT_DIR$/vnc/server_messages.go" />
-        <option value="$PROJECT_DIR$/common/readers.go" />
-        <option value="$PROJECT_DIR$/listeners/recorder.go" />
-      </list>
-    </option>
-  </component>
-  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
-  <component name="JsGulpfileManager">
-    <detection-done>true</detection-done>
-    <sorting>DEFINITION_ORDER</sorting>
-  </component>
-  <component name="ProjectFrameBounds">
-    <option name="y" value="23" />
-    <option name="width" value="1280" />
-    <option name="height" value="773" />
-  </component>
-  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
-  <component name="ProjectReloadState">
-    <option name="STATE" value="1" />
-  </component>
-  <component name="ProjectView">
-    <navigator currentView="ProjectPane" proportions="" version="1">
-      <flattenPackages />
-      <showMembers />
-      <showModules />
-      <showLibraryContents />
-      <hideEmptyPackages />
-      <abbreviatePackageNames />
-      <autoscrollToSource ProjectPane="true" />
-      <autoscrollFromSource ProjectPane="true" />
-      <sortByType />
-      <manualOrder />
-      <foldersAlwaysOnTop value="true" />
-    </navigator>
-    <panes>
-      <pane id="Scope">
-        <subPane subId="Problems">
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vncproxy">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vnc">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-        <subPane subId="Project Files">
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vncproxy">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vncproxy">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vnc">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT USER_OBJECT="Root">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vncproxy">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="vnc">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT USER_OBJECT="common">
-              <option name="myItemId" value="" />
-              <option name="myItemType" value="" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-      </pane>
-      <pane id="PackagesPane" />
-      <pane id="ProjectPane">
-        <subPane>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="runtime" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="os" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="io" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="encoding" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="encoding" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="binary" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="External Libraries" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ExternalLibrariesNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="Go SDK 1.8.3" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.SyntheticLibraryElementNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="src" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="bytes" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vnc" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="listeners" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="encodings" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="vncproxy" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="common" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
-        </subPane>
-      </pane>
-      <pane id="Scratches" />
-    </panes>
-  </component>
-  <component name="PropertiesComponent">
-    <property name="aspect.path.notification.shown" value="true" />
-    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
-    <property name="WebServerToolWindowFactoryState" value="false" />
-    <property name="settings.editor.selected.configurable" value="reference.settingsdialog.IDE.editor.colors.General" />
-    <property name="go.libraries.notification.had.been.shown" value="true" />
-    <property name="recentsLimit" value="5" />
-  </component>
-  <component name="RecentsManager">
-    <key name="MoveFile.RECENT_KEYS">
-      <recent name="$PROJECT_DIR$/encodings" />
-      <recent name="$PROJECT_DIR$" />
-      <recent name="$PROJECT_DIR$/common" />
-      <recent name="C:\Users\betzalel\Dropbox\go\src\vncproxy\vnc" />
-      <recent name="C:\Users\betzalel\Dropbox\go\src\vncproxy\vnc\encoding" />
-    </key>
-  </component>
-  <component name="RunDashboard">
-    <option name="ruleStates">
-      <list>
-        <RuleState>
-          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
-        </RuleState>
-        <RuleState>
-          <option name="name" value="StatusDashboardGroupingRule" />
-        </RuleState>
-      </list>
-    </option>
-  </component>
-  <component name="RunManager" selected="Go Application.Build main.go and run">
-    <configuration default="false" name="Build main.go and run" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$/" />
-      <go_parameters value="-i" />
-      <filePath value="$PROJECT_DIR$/main.go" />
-      <kind value="PACKAGE" />
-      <package value="vncproxy" />
-      <method />
-    </configuration>
-    <configuration default="false" name="Build main.go and run (1)" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$/" />
-      <go_parameters value="-i -ldflags=&quot;-linkmode internal&quot;" />
-      <filePath value="$PROJECT_DIR$/main.go" />
-      <kind value="FILE" />
-      <package value="vncproxy" />
-      <method />
-    </configuration>
-    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
-      <module name="" />
-      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
-      <option name="PROGRAM_PARAMETERS" />
-      <predefined_log_file id="idea.log" enabled="true" />
-      <method />
-    </configuration>
-    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App">
-      <module name="" />
-      <option name="DEPLOY" value="true" />
-      <option name="ARTIFACT_NAME" value="" />
-      <option name="PM_INSTALL_OPTIONS" value="" />
-      <option name="ACTIVITY_EXTRA_FLAGS" value="" />
-      <option name="MODE" value="default_activity" />
-      <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
-      <option name="PREFERRED_AVD" value="" />
-      <option name="CLEAR_LOGCAT" value="false" />
-      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
-      <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
-      <option name="FORCE_STOP_RUNNING_APP" value="true" />
-      <option name="DEBUGGER_TYPE" value="Java" />
-      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
-      <option name="PREFERRED_AVD" value="" />
-      <Java />
-      <Profilers>
-        <option name="ENABLE_ADVANCED_PROFILING" value="true" />
-        <option name="GAPID_ENABLED" value="false" />
-        <option name="GAPID_DISABLE_PCS" value="false" />
-        <option name="SUPPORT_LIB_ENABLED" value="true" />
-        <option name="INSTRUMENTATION_ENABLED" value="true" />
-      </Profilers>
-      <option name="DEEP_LINK" value="" />
-      <option name="ACTIVITY_CLASS" value="" />
-      <method />
-    </configuration>
-    <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
-      <module name="" />
-      <option name="TESTING_TYPE" value="0" />
-      <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="PACKAGE_NAME" value="" />
-      <option name="EXTRA_OPTIONS" value="" />
-      <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
-      <option name="PREFERRED_AVD" value="" />
-      <option name="CLEAR_LOGCAT" value="false" />
-      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
-      <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
-      <option name="FORCE_STOP_RUNNING_APP" value="true" />
-      <option name="DEBUGGER_TYPE" value="Java" />
-      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
-      <option name="PREFERRED_AVD" value="" />
-      <Java />
-      <Profilers>
-        <option name="ENABLE_ADVANCED_PROFILING" value="true" />
-        <option name="GAPID_ENABLED" value="false" />
-        <option name="GAPID_DISABLE_PCS" value="false" />
-        <option name="SUPPORT_LIB_ENABLED" value="true" />
-        <option name="INSTRUMENTATION_ENABLED" value="true" />
-      </Profilers>
-      <method />
-    </configuration>
-    <configuration default="true" type="Applet" factoryName="Applet">
-      <option name="WIDTH" value="400" />
-      <option name="HEIGHT" value="300" />
-      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
-      <module />
-      <method />
-    </configuration>
-    <configuration default="true" type="Application" factoryName="Application">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <option name="arquillianRunConfiguration">
-        <value>
-          <option name="containerStateName" value="" />
-        </value>
-      </option>
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <envs />
-      <patterns />
-      <method />
-    </configuration>
-    <configuration default="true" type="ArquillianTestNG" factoryName="">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <option name="arquillianRunConfiguration">
-        <value>
-          <option name="containerStateName" value="" />
-        </value>
-      </option>
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="SUITE_NAME" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" />
-      <option name="TEST_OBJECT" value="CLASS" />
-      <option name="VM_PARAMETERS" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="OUTPUT_DIRECTORY" />
-      <option name="ANNOTATION_TYPE" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <option name="USE_DEFAULT_REPORTERS" value="false" />
-      <option name="PROPERTIES_FILE" />
-      <envs />
-      <properties />
-      <listeners />
-      <method />
-    </configuration>
-    <configuration default="true" type="Cold Fusion runner description" factoryName="Cold Fusion" custom_browser="" web_path="">
-      <method />
-    </configuration>
-    <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="myFilePath" />
-      <option name="GLUE" />
-      <option name="myNameFilter" />
-      <option name="myGeneratedName" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App">
-      <option name="BCName" value="" />
-      <option name="IOSSimulatorSdkPath" value="" />
-      <option name="adlOptions" value="" />
-      <option name="airProgramParameters" value="" />
-      <option name="appDescriptorForEmulator" value="Android" />
-      <option name="debugTransport" value="USB" />
-      <option name="debuggerSdkRaw" value="BC SDK" />
-      <option name="emulator" value="NexusOne" />
-      <option name="emulatorAdlOptions" value="" />
-      <option name="fastPackaging" value="true" />
-      <option name="fullScreenHeight" value="0" />
-      <option name="fullScreenWidth" value="0" />
-      <option name="launchUrl" value="false" />
-      <option name="launcherParameters">
-        <LauncherParameters>
-          <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
-          <option name="launcherType" value="OSDefault" />
-          <option name="newPlayerInstance" value="false" />
-          <option name="playerPath" value="/Applications/Flash Player Debugger.app" />
-        </LauncherParameters>
-      </option>
-      <option name="mobileRunTarget" value="Emulator" />
-      <option name="moduleName" value="" />
-      <option name="overriddenMainClass" value="" />
-      <option name="overriddenOutputFileName" value="" />
-      <option name="overrideMainClass" value="false" />
-      <option name="runTrusted" value="true" />
-      <option name="screenDpi" value="0" />
-      <option name="screenHeight" value="0" />
-      <option name="screenWidth" value="0" />
-      <option name="url" value="http://" />
-      <option name="usbDebugPort" value="7936" />
-      <method />
-    </configuration>
-    <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class">
-      <option name="BCName" value="" />
-      <option name="launcherParameters">
-        <LauncherParameters>
-          <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
-          <option name="launcherType" value="OSDefault" />
-          <option name="newPlayerInstance" value="false" />
-          <option name="playerPath" value="/Applications/Flash Player Debugger.app" />
-        </LauncherParameters>
-      </option>
-      <option name="moduleName" value="" />
-      <option name="trusted" value="true" />
-      <method />
-    </configuration>
-    <configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$/" />
-      <go_parameters value="-i" />
-      <filePath value="$PROJECT_DIR$/" />
-      <kind value="FILE" />
-      <package value="vncproxy" />
-      <method />
-    </configuration>
-    <configuration default="true" type="GoRunFileConfiguration" factoryName="Go Single File">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$" />
-      <filePath value="$PROJECT_DIR$" />
-      <method />
-    </configuration>
-    <configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$/" />
-      <go_parameters value="-i" />
-      <framework value="gotest" />
-      <kind value="DIRECTORY" />
-      <package value="vncproxy" />
-      <method />
-    </configuration>
-    <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle">
-      <ExternalSystemSettings>
-        <option name="executionName" />
-        <option name="externalProjectPath" />
-        <option name="externalSystemIdString" value="GRADLE" />
-        <option name="scriptParameters" />
-        <option name="taskDescriptions">
-          <list />
-        </option>
-        <option name="taskNames">
-          <list />
-        </option>
-        <option name="vmOptions" />
-      </ExternalSystemSettings>
-      <method />
-    </configuration>
-    <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails">
-      <setting name="vmparams" value="" />
-      <setting name="cmdLine" value="run-app" />
-      <setting name="passParentEnv" value="true" />
-      <setting name="launchBrowser" value="false" />
-      <setting name="launchBrowserUrl" value="" />
-      <setting name="depsClasspath" value="false" />
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <method />
-    </configuration>
-    <configuration default="true" type="JUnit" factoryName="JUnit">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="TEST_OBJECT" value="class" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <envs />
-      <patterns />
-      <method />
-    </configuration>
-    <configuration default="true" type="JarApplication" factoryName="JAR Application">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="Java Scratch" factoryName="Java Scratch">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="SCRATCH_FILE_ID" value="0" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="ENABLE_SWING_INSPECTOR" value="false" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
-      <node-interpreter value="project" />
-      <working-dir value="" />
-      <envs />
-      <scope-kind value="ALL" />
-      <method />
-    </configuration>
-    <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
-      <config-file value="" />
-      <node-interpreter value="project" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
-      <method />
-    </configuration>
-    <configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="VM_PARAMETERS" />
-      <option name="PROGRAM_PARAMETERS" />
-      <option name="WORKING_DIRECTORY" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <module name="vncproxy" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <option name="filePath" />
-      <option name="vmParameters" />
-      <option name="alternativeJrePath" />
-      <option name="programParameters" />
-      <option name="passParentEnvs" value="true" />
-      <option name="workingDirectory" />
-      <option name="isAlternativeJrePathEnabled" value="false" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="Remote" factoryName="Remote">
-      <option name="USE_SOCKET_TRANSPORT" value="true" />
-      <option name="SERVER_MODE" value="false" />
-      <option name="SHMEM_ADDRESS" value="javadebug" />
-      <option name="HOST" value="localhost" />
-      <option name="PORT" value="5005" />
-      <method />
-    </configuration>
-    <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="TestNG" factoryName="TestNG">
-      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-      <module name="" />
-      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-      <option name="ALTERNATIVE_JRE_PATH" />
-      <option name="SUITE_NAME" />
-      <option name="PACKAGE_NAME" />
-      <option name="MAIN_CLASS_NAME" />
-      <option name="METHOD_NAME" />
-      <option name="GROUP_NAME" />
-      <option name="TEST_OBJECT" value="CLASS" />
-      <option name="VM_PARAMETERS" value="-ea" />
-      <option name="PARAMETERS" />
-      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
-      <option name="OUTPUT_DIRECTORY" />
-      <option name="ANNOTATION_TYPE" />
-      <option name="ENV_VARIABLES" />
-      <option name="PASS_PARENT_ENVS" value="true" />
-      <option name="TEST_SEARCH_SCOPE">
-        <value defaultName="singleModule" />
-      </option>
-      <option name="USE_DEFAULT_REPORTERS" value="false" />
-      <option name="PROPERTIES_FILE" />
-      <envs />
-      <properties />
-      <listeners />
-      <method />
-    </configuration>
-    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
-      <node-interpreter>project</node-interpreter>
-      <node-options />
-      <gulpfile />
-      <tasks />
-      <arguments />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
-      <command value="run" />
-      <scripts />
-      <node-interpreter value="project" />
-      <envs />
-      <method />
-    </configuration>
-    <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher">
-      <method />
-    </configuration>
-    <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)">
-      <method />
-    </configuration>
-    <configuration default="false" name="runVnc" type="GoRunFileConfiguration" factoryName="Go Single File">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$/" />
-      <filePath value="$PROJECT_DIR$/main.go" />
-      <method />
-    </configuration>
-    <configuration default="false" name="Unnamed" type="GoRunFileConfiguration" factoryName="Go Single File">
-      <module name="vncproxy" />
-      <working_directory value="$PROJECT_DIR$" />
-      <filePath value="$PROJECT_DIR$/main.go" />
-      <method />
-    </configuration>
-    <list size="4">
-      <item index="0" class="java.lang.String" itemvalue="Go Single File.runVnc" />
-      <item index="1" class="java.lang.String" itemvalue="Go Single File.Unnamed" />
-      <item index="2" class="java.lang.String" itemvalue="Go Application.Build main.go and run" />
-      <item index="3" class="java.lang.String" itemvalue="Go Application.Build main.go and run (1)" />
-    </list>
-    <recent_temporary>
-      <list size="2">
-        <item index="0" class="java.lang.String" itemvalue="Go Application.Build main.go and run" />
-        <item index="1" class="java.lang.String" itemvalue="Go Application.Build main.go and run (1)" />
-      </list>
-    </recent_temporary>
-    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android Application">
-      <module name="" />
-      <option name="ACTIVITY_CLASS" value="" />
-      <option name="MODE" value="default_activity" />
-      <option name="DEPLOY" value="true" />
-      <option name="ARTIFACT_NAME" value="" />
-      <option name="TARGET_SELECTION_MODE" value="EMULATOR" />
-      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
-      <option name="PREFERRED_AVD" value="" />
-      <option name="USE_COMMAND_LINE" value="true" />
-      <option name="COMMAND_LINE" value="" />
-      <option name="WIPE_USER_DATA" value="false" />
-      <option name="DISABLE_BOOT_ANIMATION" value="false" />
-      <option name="NETWORK_SPEED" value="full" />
-      <option name="NETWORK_LATENCY" value="none" />
-      <option name="CLEAR_LOGCAT" value="false" />
-      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="true" />
-      <option name="FILTER_LOGCAT_AUTOMATICALLY" value="true" />
-      <method />
-    </configuration>
-  </component>
-  <component name="ShelveChangesManager" show_recycled="false">
-    <option name="remove_strategy" value="false" />
-  </component>
-  <component name="SvnConfiguration">
-    <configuration />
-  </component>
-  <component name="TaskManager">
-    <task active="true" id="Default" summary="Default task">
-      <changelist id="aeba8696-a0e4-4bdc-984c-b9ca26151c10" name="Default" comment="" />
-      <created>1497275544790</created>
-      <option name="number" value="Default" />
-      <option name="presentableId" value="Default" />
-      <updated>1497275544790</updated>
-      <workItem from="1497275546094" duration="650000" />
-      <workItem from="1497276271928" duration="154000" />
-      <workItem from="1497276427351" duration="817000" />
-      <workItem from="1497277513428" duration="371000" />
-      <workItem from="1497278098752" duration="3181000" />
-      <workItem from="1497313424857" duration="102000" />
-      <workItem from="1497313550726" duration="2070000" />
-      <workItem from="1497315693804" duration="252000" />
-      <workItem from="1497315971989" duration="1909000" />
-      <workItem from="1497322223215" duration="351000" />
-      <workItem from="1497605012099" duration="9448000" />
-    </task>
-    <servers />
-  </component>
-  <component name="TimeTrackingManager">
-    <option name="totallyTimeSpent" value="20500000" />
-  </component>
-  <component name="TodoView" selected-index="2">
-    <todo-panel id="selected-file">
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-    <todo-panel id="all">
-      <are-packages-shown value="true" />
-      <is-autoscroll-to-source value="true" />
-    </todo-panel>
-  </component>
-  <component name="ToolWindowManager">
-    <frame x="0" y="23" width="1280" height="773" extended-state="1" />
-    <editor active="true" />
-    <layout>
-      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.37151247" sideWeight="0.37883684" order="7" side_tool="true" content_ui="tabs" />
-      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Debug" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.37151247" sideWeight="0.6211632" order="3" side_tool="false" content_ui="tabs" />
-      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48869145" order="6" side_tool="false" content_ui="tabs" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.23054332" sideWeight="0.66220737" order="2" side_tool="false" content_ui="tabs" />
-      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.49353796" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48707592" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.1898223" sideWeight="0.4947994" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Problems" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32892805" sideWeight="0.48707592" order="8" side_tool="false" content_ui="tabs" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
-      <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.14658849" sideWeight="0.50520056" order="2" side_tool="true" content_ui="tabs" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
-      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
-      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
-    </layout>
-  </component>
-  <component name="TypeScriptGeneratedFilesManager">
-    <option name="processedProjectFiles" value="true" />
-  </component>
-  <component name="Vcs.Log.UiProperties">
-    <option name="RECENTLY_FILTERED_USER_GROUPS">
-      <collection />
-    </option>
-    <option name="RECENTLY_FILTERED_BRANCH_GROUPS">
-      <collection />
-    </option>
-  </component>
-  <component name="VcsContentAnnotationSettings">
-    <option name="myLimit" value="2678400000" />
-  </component>
-  <component name="XDebuggerManager">
-    <breakpoint-manager>
-      <breakpoints>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/vnc/server_messages.go</url>
-          <line>32</line>
-          <properties />
-          <option name="timeStamp" value="15" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/vnc/client-conn.go</url>
-          <line>482</line>
-          <properties />
-          <option name="timeStamp" value="17" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>115</line>
-          <properties />
-          <option name="timeStamp" value="19" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>103</line>
-          <properties />
-          <option name="timeStamp" value="20" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/vnc/server_messages.go</url>
-          <line>115</line>
-          <properties />
-          <option name="timeStamp" value="26" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url>
-          <line>113</line>
-          <properties />
-          <option name="timeStamp" value="32" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url>
-          <line>160</line>
-          <properties />
-          <option name="timeStamp" value="34" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url>
-          <line>168</line>
-          <properties />
-          <option name="timeStamp" value="35" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url>
-          <line>177</line>
-          <properties />
-          <option name="timeStamp" value="36" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/encodings/enc-tight.go</url>
-          <line>180</line>
-          <properties />
-          <option name="timeStamp" value="38" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/common/readers.go</url>
-          <line>138</line>
-          <properties />
-          <option name="timeStamp" value="39" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/common/readers.go</url>
-          <line>147</line>
-          <properties />
-          <option name="timeStamp" value="40" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/common/readers.go</url>
-          <line>137</line>
-          <properties />
-          <option name="timeStamp" value="41" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>28</line>
-          <properties />
-          <option name="timeStamp" value="42" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>77</line>
-          <properties />
-          <option name="timeStamp" value="44" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>108</line>
-          <properties />
-          <option name="timeStamp" value="45" />
-        </line-breakpoint>
-        <line-breakpoint type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>119</line>
-          <properties />
-          <option name="timeStamp" value="46" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>142</line>
-          <properties />
-          <option name="timeStamp" value="48" />
-        </line-breakpoint>
-        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
-          <url>file://$PROJECT_DIR$/listeners/recorder.go</url>
-          <line>138</line>
-          <properties />
-          <option name="timeStamp" value="49" />
-        </line-breakpoint>
-      </breakpoints>
-      <breakpoints-dialog>
-        <breakpoints-dialog />
-      </breakpoints-dialog>
-      <option name="time" value="50" />
-    </breakpoint-manager>
-    <watches-manager>
-      <configuration name="GoApplicationRunConfiguration">
-        <watch expression="r.buffer.Len()" />
-        <watch expression="paddedSize" />
-      </configuration>
-    </watches-manager>
-  </component>
-  <component name="antWorkspaceConfiguration">
-    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
-    <option name="FILTER_TARGETS" value="false" />
-  </component>
-  <component name="editorHistoryManager">
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="476">
-          <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="187">
-          <caret line="17" column="5" lean-forward="false" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="935">
-          <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="476">
-          <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="289">
-          <caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1003">
-          <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="315">
-          <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="825">
-          <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="360">
-          <caret line="24" column="60" lean-forward="false" selection-start-line="24" selection-start-column="60" selection-end-line="24" selection-end-column="60" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="476">
-          <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1003">
-          <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="289">
-          <caret line="17" column="5" lean-forward="true" selection-start-line="17" selection-start-column="5" selection-end-line="17" selection-end-column="5" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="315">
-          <caret line="28" column="48" lean-forward="false" selection-start-line="28" selection-start-column="48" selection-end-line="28" selection-end-column="48" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="825">
-          <caret line="59" column="23" lean-forward="false" selection-start-line="59" selection-start-column="23" selection-end-line="59" selection-end-column="23" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="360">
-          <caret line="24" column="60" lean-forward="false" selection-start-line="24" selection-start-column="60" selection-end-line="24" selection-end-column="60" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file:///usr/local/Cellar/go/1.8/libexec/src/os/file_unix.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="1785">
-          <caret line="122" column="0" lean-forward="false" selection-start-line="122" selection-start-column="0" selection-end-line="122" selection-end-column="0" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/README.md">
-      <provider selected="true" editor-type-id="split-provider[text-editor;markdown-preview-editor]">
-        <state split_layout="SPLIT">
-          <first_editor relative-caret-position="105">
-            <caret line="7" column="0" lean-forward="true" selection-start-line="7" selection-start-column="0" selection-end-line="7" selection-end-column="0" />
-          </first_editor>
-          <second_editor />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/bytes/buffer.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="150">
-          <caret line="14" column="64" lean-forward="false" selection-start-line="14" selection-start-column="64" selection-end-line="14" selection-end-column="64" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client.go" />
-    <entry file="file://$PROJECT_DIR$/vnc/enc-rre.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="465">
-          <caret line="31" column="0" lean-forward="false" selection-start-line="31" selection-start-column="0" selection-end-line="31" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/Logger.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-hextile.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="675">
-          <caret line="45" column="41" lean-forward="false" selection-start-line="45" selection-start-column="41" selection-end-line="45" selection-end-column="41" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="255">
-          <caret line="19" column="24" lean-forward="false" selection-start-line="19" selection-start-column="24" selection-end-line="19" selection-end-column="24" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client_test.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/color.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="60">
-          <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="31" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client_auth.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client_auth_test.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/listeners/multiListener.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="90">
-          <caret line="6" column="1" lean-forward="true" selection-start-line="6" selection-start-column="1" selection-end-line="6" selection-end-column="1" />
-          <folding>
-            <element signature="e#19#43#0" expanded="false" />
-          </folding>
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/listeners/pass-to.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="120">
-          <caret line="9" column="44" lean-forward="false" selection-start-line="9" selection-start-column="44" selection-end-line="9" selection-end-column="44" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/common/Logger.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="0">
-          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/os/file_unix.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="151">
-          <caret line="233" column="55" lean-forward="false" selection-start-line="233" selection-start-column="55" selection-end-line="233" selection-end-column="55" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/runtime/asm_amd64.s">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="129">
-          <caret line="2196" column="0" lean-forward="false" selection-start-line="2196" selection-start-column="0" selection-end-line="2196" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/encoding/binary/binary.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="191">
-          <caret line="171" column="9" lean-forward="false" selection-start-line="167" selection-start-column="22" selection-end-line="171" selection-end-column="9" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file:///usr/local/Cellar/go/1.8.3/libexec/src/io/io.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="134">
-          <caret line="306" column="0" lean-forward="false" selection-start-line="306" selection-start-column="0" selection-end-line="306" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/main.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="56">
-          <caret line="23" column="42" lean-forward="false" selection-start-line="23" selection-start-column="42" selection-end-line="23" selection-end-column="42" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="254">
-          <caret line="482" column="0" lean-forward="false" selection-start-line="482" selection-start-column="0" selection-end-line="482" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/vnc/server_messages.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="63">
-          <caret line="32" column="0" lean-forward="false" selection-start-line="32" selection-start-column="0" selection-end-line="32" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="207">
-          <caret line="177" column="0" lean-forward="false" selection-start-line="177" selection-start-column="0" selection-end-line="177" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/common/readers.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="134">
-          <caret line="137" column="0" lean-forward="false" selection-start-line="137" selection-start-column="0" selection-end-line="137" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/listeners/recorder.go">
-      <provider selected="true" editor-type-id="text-editor">
-        <state relative-caret-position="220">
-          <caret line="138" column="0" lean-forward="false" selection-start-line="138" selection-start-column="0" selection-end-line="138" selection-end-column="0" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-  </component>
-  <component name="masterDetails">
-    <states>
-      <state key="ProjectJDKs.UI">
-        <settings>
-          <last-edited>Go 1.6.2</last-edited>
-          <splitter-proportions>
-            <option name="proportions">
-              <list>
-                <option value="0.2" />
-              </list>
-            </option>
-          </splitter-proportions>
-        </settings>
-      </state>
-    </states>
-  </component>
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="a5d84862-9821-4d30-9a77-6235b55d6727" name="Default" comment="">
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/.name" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/compiler.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/copyright/profiles_settings.xml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/.idea/vncproxy.iml" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/pixel_format.go" afterPath="" />
+      <change type="DELETED" beforePath="$PROJECT_DIR$/vnc/server_messages.go" afterPath="" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" afterPath="$PROJECT_DIR$/.idea/libraries/GOPATH__vncproxy_.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/misc.xml" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/modules.xml" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/vcs.xml" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.vscode/launch.json" afterPath="$PROJECT_DIR$/.vscode/launch.json" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/encoding.go" afterPath="$PROJECT_DIR$/common/encoding.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/readers.go" afterPath="$PROJECT_DIR$/common/readers.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/common/rectangle.go" afterPath="$PROJECT_DIR$/common/rectangle.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-rre.go" afterPath="$PROJECT_DIR$/encodings/enc-rre.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/encodings/enc-tight.go" afterPath="$PROJECT_DIR$/encodings/enc-tight.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/listeners/pass-to.go" afterPath="$PROJECT_DIR$/listeners/pass-to.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/listeners/recorder.go" afterPath="$PROJECT_DIR$/listeners/recorder.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/main.go" afterPath="$PROJECT_DIR$/main.go" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/vnc/client-conn.go" afterPath="$PROJECT_DIR$/vnc/client-conn.go" />
+    </list>
+    <ignored path="$PROJECT_DIR$/out/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="CoverageDataManager">
+    <SUITE FILE_PATH="coverage/vncproxy$test_server_.coverage" NAME="test server  Coverage Results" MODIFIED="1497968383165" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="GoCoverage" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" />
+  </component>
+  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file leaf-file-name="main.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/main.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="240">
+              <caret line="23" column="26" lean-forward="false" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="server.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/server/server.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="2040">
+              <caret line="144" column="0" lean-forward="true" selection-start-line="144" selection-start-column="0" selection-end-line="144" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="server-message.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/common/server-message.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="300">
+              <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="21" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="client-message.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/common/client-message.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="20">
+              <caret line="28" column="1" lean-forward="true" selection-start-line="28" selection-start-column="1" selection-end-line="28" selection-end-column="1" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="enc-copy-rect.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/encodings/enc-copy-rect.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="0">
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="enc-raw.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="0">
+              <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="server_test.go" pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/server/server_test.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="255">
+              <caret line="24" column="37" lean-forward="false" selection-start-line="24" selection-start-column="37" selection-end-line="24" selection-end-column="37" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="client_test.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/vnc/client_test.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="195">
+              <caret line="29" column="1" lean-forward="true" selection-start-line="29" selection-start-column="1" selection-end-line="29" selection-end-column="1" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="server-conn.go" pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/server/server-conn.go">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="195">
+              <caret line="18" column="38" lean-forward="true" selection-start-line="18" selection-start-column="38" selection-end-line="18" selection-end-column="38" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>PixelFormat</find>
+      <find>setpixrl</find>
+      <find>writePixelFormat</find>
+      <find>nil,</find>
+      <find>binary.Write</find>
+      <find>WaitGroup</find>
+      <find>SetPixelFormat</find>
+      <find>authtext</find>
+      <find>ServerConfig</find>
+      <find>serverinit</find>
+      <find>uint16</find>
+      <find>writeto</find>
+      <find>ServerServerInitHandler</find>
+      <find>r</find>
+      <find>rfhc</find>
+      <find>rfh</find>
+      <find>rfher</find>
+      <find>rfhera</find>
+      <find>rfherad</find>
+      <find>rferad</find>
+      <find>rfberad</find>
+      <find>rfbrad</find>
+      <find>rfbread</find>
+      <find>rfbreadh</find>
+      <find>rfbreadhel</find>
+      <find>rfbreadhelper</find>
+      <find>rfbreadhelper{</find>
+      <find>mainLoop</find>
+      <find>NewServerConn</find>
+      <find>Serve</find>
+    </findStrings>
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="GradleLocalSettings">
+    <option name="externalProjectsViewState">
+      <projects_view />
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/main.go" />
+        <option value="$PROJECT_DIR$/server/client-messages.go" />
+        <option value="$PROJECT_DIR$/vnc/pixel-format.go" />
+        <option value="$PROJECT_DIR$/common/encoding.go" />
+        <option value="$PROJECT_DIR$/server/security.go" />
+        <option value="$PROJECT_DIR$/server/server-conn.go" />
+        <option value="$PROJECT_DIR$/server/handlers.go" />
+        <option value="$PROJECT_DIR$/server/server_test.go" />
+        <option value="$PROJECT_DIR$/server/server.go" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="width" value="1280" />
+    <option name="height" value="800" />
+  </component>
+  <component name="ProjectView">
+    <navigator currentView="ProjectPane" proportions="" version="1">
+      <flattenPackages />
+      <showMembers />
+      <showModules />
+      <showLibraryContents />
+      <hideEmptyPackages />
+      <abbreviatePackageNames />
+      <autoscrollToSource />
+      <autoscrollFromSource ProjectPane="true" />
+      <sortByType />
+      <manualOrder />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="ProjectPane">
+        <subPane>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vnc" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="server" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="encodings" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+          <PATH>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="vncproxy" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+            <PATH_ELEMENT>
+              <option name="myItemId" value="common" />
+              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
+            </PATH_ELEMENT>
+          </PATH>
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+      <pane id="Scratches" />
+      <pane id="PackagesPane" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$/vnc" />
+    <property name="FullScreen" value="true" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Go Test.test server ">
+    <configuration default="true" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" factoryName="Plugin">
+      <module name="" />
+      <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
+      <option name="PROGRAM_PARAMETERS" />
+      <predefined_log_file id="idea.log" enabled="true" />
+      <method />
+    </configuration>
+    <configuration default="true" type="AndroidRunConfigurationType" factoryName="Android App">
+      <module name="" />
+      <option name="DEPLOY" value="true" />
+      <option name="ARTIFACT_NAME" value="" />
+      <option name="PM_INSTALL_OPTIONS" value="" />
+      <option name="ACTIVITY_EXTRA_FLAGS" value="" />
+      <option name="MODE" value="default_activity" />
+      <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
+      <option name="PREFERRED_AVD" value="" />
+      <option name="CLEAR_LOGCAT" value="false" />
+      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
+      <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
+      <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="DEBUGGER_TYPE" value="Java" />
+      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
+      <option name="PREFERRED_AVD" value="" />
+      <Java />
+      <Profilers>
+        <option name="ENABLE_ADVANCED_PROFILING" value="true" />
+        <option name="GAPID_ENABLED" value="false" />
+        <option name="GAPID_DISABLE_PCS" value="false" />
+        <option name="SUPPORT_LIB_ENABLED" value="true" />
+        <option name="INSTRUMENTATION_ENABLED" value="true" />
+      </Profilers>
+      <option name="DEEP_LINK" value="" />
+      <option name="ACTIVITY_CLASS" value="" />
+      <method />
+    </configuration>
+    <configuration default="true" type="AndroidTestRunConfigurationType" factoryName="Android Tests">
+      <module name="" />
+      <option name="TESTING_TYPE" value="0" />
+      <option name="INSTRUMENTATION_RUNNER_CLASS" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="PACKAGE_NAME" value="" />
+      <option name="EXTRA_OPTIONS" value="" />
+      <option name="TARGET_SELECTION_MODE" value="SHOW_DIALOG" />
+      <option name="PREFERRED_AVD" value="" />
+      <option name="CLEAR_LOGCAT" value="false" />
+      <option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
+      <option name="SKIP_NOOP_APK_INSTALLATIONS" value="true" />
+      <option name="FORCE_STOP_RUNNING_APP" value="true" />
+      <option name="DEBUGGER_TYPE" value="Java" />
+      <option name="USE_LAST_SELECTED_DEVICE" value="false" />
+      <option name="PREFERRED_AVD" value="" />
+      <Java />
+      <Profilers>
+        <option name="ENABLE_ADVANCED_PROFILING" value="true" />
+        <option name="GAPID_ENABLED" value="false" />
+        <option name="GAPID_DISABLE_PCS" value="false" />
+        <option name="SUPPORT_LIB_ENABLED" value="true" />
+        <option name="INSTRUMENTATION_ENABLED" value="true" />
+      </Profilers>
+      <method />
+    </configuration>
+    <configuration default="true" type="Applet" factoryName="Applet">
+      <option name="HTML_USED" value="false" />
+      <option name="WIDTH" value="400" />
+      <option name="HEIGHT" value="300" />
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
+      <module />
+      <method />
+    </configuration>
+    <configuration default="true" type="Application" factoryName="Application">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="ArquillianJUnit" factoryName="" nameIsGenerated="true">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="arquillianRunConfiguration">
+        <value>
+          <option name="containerStateName" value="" />
+        </value>
+      </option>
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <envs />
+      <patterns />
+      <method />
+    </configuration>
+    <configuration default="true" type="ArquillianTestNG" factoryName="">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="arquillianRunConfiguration">
+        <value>
+          <option name="containerStateName" value="" />
+        </value>
+      </option>
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="GROUP_NAME" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="VM_PARAMETERS" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="OUTPUT_DIRECTORY" />
+      <option name="ANNOTATION_TYPE" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
+      <option name="PROPERTIES_FILE" />
+      <envs />
+      <properties />
+      <listeners />
+      <method />
+    </configuration>
+    <configuration default="true" type="Cold Fusion runner description" factoryName="Cold Fusion" custom_browser="" web_path="">
+      <method />
+    </configuration>
+    <configuration default="true" type="CucumberJavaRunConfigurationType" factoryName="Cucumber java">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="myFilePath" />
+      <option name="GLUE" />
+      <option name="myNameFilter" />
+      <option name="myGeneratedName" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="FlashRunConfigurationType" factoryName="Flash App">
+      <option name="BCName" value="" />
+      <option name="IOSSimulatorSdkPath" value="" />
+      <option name="adlOptions" value="" />
+      <option name="airProgramParameters" value="" />
+      <option name="appDescriptorForEmulator" value="Android" />
+      <option name="debugTransport" value="USB" />
+      <option name="debuggerSdkRaw" value="BC SDK" />
+      <option name="emulator" value="NexusOne" />
+      <option name="emulatorAdlOptions" value="" />
+      <option name="fastPackaging" value="true" />
+      <option name="fullScreenHeight" value="0" />
+      <option name="fullScreenWidth" value="0" />
+      <option name="launchUrl" value="false" />
+      <option name="launcherParameters">
+        <LauncherParameters>
+          <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
+          <option name="launcherType" value="OSDefault" />
+          <option name="newPlayerInstance" value="false" />
+          <option name="playerPath" value="FlashPlayerDebugger.exe" />
+        </LauncherParameters>
+      </option>
+      <option name="mobileRunTarget" value="Emulator" />
+      <option name="moduleName" value="" />
+      <option name="overriddenMainClass" value="" />
+      <option name="overriddenOutputFileName" value="" />
+      <option name="overrideMainClass" value="false" />
+      <option name="runTrusted" value="true" />
+      <option name="screenDpi" value="0" />
+      <option name="screenHeight" value="0" />
+      <option name="screenWidth" value="0" />
+      <option name="url" value="http://" />
+      <option name="usbDebugPort" value="7936" />
+      <method />
+    </configuration>
+    <configuration default="true" type="FlexUnitRunConfigurationType" factoryName="FlexUnit" appDescriptorForEmulator="Android" class_name="" emulatorAdlOptions="" method_name="" package_name="" scope="Class">
+      <option name="BCName" value="" />
+      <option name="launcherParameters">
+        <LauncherParameters>
+          <option name="browser" value="a7bb68e0-33c0-4d6f-a81a-aac1fdb870c8" />
+          <option name="launcherType" value="OSDefault" />
+          <option name="newPlayerInstance" value="false" />
+          <option name="playerPath" value="FlashPlayerDebugger.exe" />
+        </LauncherParameters>
+      </option>
+      <option name="moduleName" value="" />
+      <option name="trusted" value="true" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoAppEngineRunConfiguration" factoryName="Go App Engine">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoApplicationRunConfiguration" factoryName="Go Application">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy" />
+      <kind value="FILE" />
+      <package value="vncproxy" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoRemoteDebugConfigurationType" factoryName="Go Remote">
+      <method />
+    </configuration>
+    <configuration default="true" type="GoRunFileConfiguration" factoryName="Go Single File">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <filePath value="$PROJECT_DIR$" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GoTestRunConfiguration" factoryName="Go Test">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <framework value="gotest" />
+      <kind value="DIRECTORY" />
+      <package value="vncproxy" />
+      <method />
+    </configuration>
+    <configuration default="true" type="GradleRunConfiguration" factoryName="Gradle">
+      <ExternalSystemSettings>
+        <option name="executionName" />
+        <option name="externalProjectPath" />
+        <option name="externalSystemIdString" value="GRADLE" />
+        <option name="scriptParameters" />
+        <option name="taskDescriptions">
+          <list />
+        </option>
+        <option name="taskNames">
+          <list />
+        </option>
+        <option name="vmOptions" />
+      </ExternalSystemSettings>
+      <method />
+    </configuration>
+    <configuration default="true" type="GrailsRunConfigurationType" factoryName="Grails">
+      <setting name="vmparams" value="" />
+      <setting name="cmdLine" value="run-app" />
+      <setting name="passParentEnv" value="true" />
+      <setting name="launchBrowser" value="true" />
+      <setting name="launchBrowserUrl" value="" />
+      <setting name="depsClasspath" value="false" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <envs />
+      <patterns />
+      <method />
+    </configuration>
+    <configuration default="true" type="JarApplication" factoryName="JAR Application">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="Java Scratch" factoryName="Java Scratch">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="SCRATCH_FILE_ID" value="0" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="ENABLE_SWING_INSPECTOR" value="false" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
+      <node-interpreter value="project" />
+      <working-dir value="" />
+      <envs />
+      <scope-kind value="ALL" />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
+      <config-file value="" />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+      <method />
+    </configuration>
+    <configuration default="true" type="JetRunConfigurationType" factoryName="Kotlin">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="VM_PARAMETERS" />
+      <option name="PROGRAM_PARAMETERS" />
+      <option name="WORKING_DIRECTORY" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <module name="vncproxy" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType" factoryName="Kotlin script">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <option name="filePath" />
+      <option name="vmParameters" />
+      <option name="alternativeJrePath" />
+      <option name="programParameters" />
+      <option name="passParentEnvs" value="true" />
+      <option name="workingDirectory" />
+      <option name="isAlternativeJrePathEnabled" value="false" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="Remote" factoryName="Remote">
+      <option name="USE_SOCKET_TRANSPORT" value="true" />
+      <option name="SERVER_MODE" value="false" />
+      <option name="SHMEM_ADDRESS" value="javadebug" />
+      <option name="HOST" value="localhost" />
+      <option name="PORT" value="5005" />
+      <method />
+    </configuration>
+    <configuration default="true" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="TestNG" factoryName="TestNG">
+      <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+      <module name="" />
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="GROUP_NAME" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
+      <option name="OUTPUT_DIRECTORY" />
+      <option name="ANNOTATION_TYPE" />
+      <option name="ENV_VARIABLES" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
+      <option name="PROPERTIES_FILE" />
+      <envs />
+      <properties />
+      <listeners />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
+      <node-interpreter>project</node-interpreter>
+      <node-options />
+      <gulpfile />
+      <tasks />
+      <arguments />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="js.build_tools.npm" factoryName="npm">
+      <command value="run" />
+      <scripts />
+      <node-interpreter value="project" />
+      <envs />
+      <method />
+    </configuration>
+    <configuration default="true" type="osgi.bnd.run" factoryName="Run Launcher">
+      <method />
+    </configuration>
+    <configuration default="true" type="osgi.bnd.run" factoryName="Test Launcher (JUnit)">
+      <method />
+    </configuration>
+    <configuration default="false" name="Unnamed" type="GoApplicationRunConfiguration" factoryName="Go Application">
+      <module name="vncproxy" />
+      <working_directory value="C:\Users\betzalel\Dropbox\go\src\vncproxy" />
+      <go_parameters value="-i" />
+      <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy\main.go" />
+      <kind value="FILE" />
+      <method />
+    </configuration>
+    <configuration default="false" name="Server" type="GoApplicationRunConfiguration" factoryName="Go Application">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <filePath value="C:\Users\betzalel\Dropbox\go\src\vncproxy\server\main.go" />
+      <kind value="FILE" />
+      <package value="vncproxy" />
+      <method />
+    </configuration>
+    <configuration default="false" name="test server " type="GoTestRunConfiguration" factoryName="Go Test">
+      <module name="vncproxy" />
+      <working_directory value="$PROJECT_DIR$" />
+      <go_parameters value="-i" />
+      <framework value="gotest" />
+      <kind value="FILE" />
+      <package value="vncproxy" />
+      <directory value="$PROJECT_DIR$/server/server_test.go" />
+      <filePath value="$PROJECT_DIR$/server/server_test.go" />
+      <method />
+    </configuration>
+    <list size="3">
+      <item index="0" class="java.lang.String" itemvalue="Go Application.Unnamed" />
+      <item index="1" class="java.lang.String" itemvalue="Go Application.Server" />
+      <item index="2" class="java.lang.String" itemvalue="Go Test.test server " />
+    </list>
+  </component>
+  <component name="ShelveChangesManager" show_recycled="false">
+    <option name="remove_strategy" value="false" />
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="a5d84862-9821-4d30-9a77-6235b55d6727" name="Default" comment="" />
+      <created>1497962309959</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1497962309959</updated>
+      <workItem from="1497962311486" duration="10262000" />
+      <workItem from="1497992075962" duration="2116000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TestHistory">
+    <history-entry file="test_server_ - 2017.06.20 at 17h 34m 07s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.20 at 17h 34m 57s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 07m 31s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 07m 36s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 08m 55s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 11m 19s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 17m 38s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 21m 39s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 21m 43s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+    <history-entry file="test_server_ - 2017.06.21 at 00h 24m 16s.xml">
+      <configuration name="test server " configurationId="GoTestRunConfiguration" />
+    </history-entry>
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="12378000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="0" width="1280" height="800" extended-state="6" />
+    <layout>
+      <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
+      <window_info id="Nl-Palette" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Palette&#9;" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
+      <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.30136988" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Properties" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.27948305" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32981783" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
+      <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33972603" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Coverage" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="true" content_ui="tabs" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="processedProjectFiles" value="true" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="XDebuggerManager">
+    <breakpoint-manager>
+      <breakpoints>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>12</line>
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>15</line>
+          <option name="timeStamp" value="1" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/main.go</url>
+          <line>19</line>
+          <option name="timeStamp" value="2" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server_test.go</url>
+          <line>39</line>
+          <option name="timeStamp" value="5" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server_test.go</url>
+          <line>41</line>
+          <option name="timeStamp" value="6" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>156</line>
+          <option name="timeStamp" value="8" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>166</line>
+          <option name="timeStamp" value="9" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>169</line>
+          <option name="timeStamp" value="10" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>175</line>
+          <option name="timeStamp" value="13" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>180</line>
+          <option name="timeStamp" value="15" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>140</line>
+          <option name="timeStamp" value="16" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>141</line>
+          <option name="timeStamp" value="17" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>139</line>
+          <option name="timeStamp" value="18" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>199</line>
+          <option name="timeStamp" value="26" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/common/encoding.go</url>
+          <line>164</line>
+          <option name="timeStamp" value="31" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>124</line>
+          <option name="timeStamp" value="32" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>163</line>
+          <option name="timeStamp" value="36" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>213</line>
+          <option name="timeStamp" value="37" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>216</line>
+          <option name="timeStamp" value="38" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>218</line>
+          <option name="timeStamp" value="41" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>217</line>
+          <option name="timeStamp" value="42" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/security.go</url>
+          <line>210</line>
+          <option name="timeStamp" value="43" />
+        </line-breakpoint>
+        <line-breakpoint type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>136</line>
+          <option name="timeStamp" value="44" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>134</line>
+          <option name="timeStamp" value="45" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>151</line>
+          <option name="timeStamp" value="46" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>170</line>
+          <option name="timeStamp" value="47" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>173</line>
+          <option name="timeStamp" value="48" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>147</line>
+          <option name="timeStamp" value="50" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>171</line>
+          <option name="timeStamp" value="51" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>128</line>
+          <properties />
+          <option name="timeStamp" value="52" />
+        </line-breakpoint>
+        <line-breakpoint enabled="true" type="DlvLineBreakpoint">
+          <url>file://$PROJECT_DIR$/server/server.go</url>
+          <line>178</line>
+          <properties />
+          <option name="timeStamp" value="54" />
+        </line-breakpoint>
+      </breakpoints>
+      <breakpoints-dialog>
+        <breakpoints-dialog />
+      </breakpoints-dialog>
+      <option name="time" value="55" />
+    </breakpoint-manager>
+    <watches-manager />
+  </component>
+  <component name="antWorkspaceConfiguration">
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
+    <option name="FILTER_TARGETS" value="false" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/server/handlers.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="24" column="26" lean-forward="true" selection-start-line="24" selection-start-column="26" selection-end-line="24" selection-end-column="26" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/server.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1725">
+          <caret line="123" column="38" lean-forward="false" selection-start-line="123" selection-start-column="38" selection-end-line="123" selection-end-column="38" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/readers.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1380">
+          <caret line="96" column="1" lean-forward="true" selection-start-line="96" selection-start-column="1" selection-end-line="96" selection-end-column="1" />
+          <folding>
+            <marker date="1497991618000" expanded="true" signature="1507:1513" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1507:1597" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1554:1574" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1660:1854" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1739:1834" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1907:2069" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1992:2012" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2123:2286" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2209:2229" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2340:2503" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2426:2446" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2558:2970" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2672:2862" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2774:2859" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3040:3350" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3081:3121" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3221:3243" ph="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/client-message.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="7" column="5" lean-forward="false" selection-start-line="7" selection-start-column="5" selection-end-line="7" selection-end-column="5" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/client_test.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="360">
+          <caret line="28" column="29" lean-forward="true" selection-start-line="28" selection-start-column="29" selection-end-line="28" selection-end-column="29" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <marker date="1497903119000" expanded="false" signature="26:47" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="462:463" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="500:513" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1306:1511" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1406:1435" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1441:1482" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1646:3175" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1886:1968" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2509:3173" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2527:2719" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="2736:3000" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="2760:2846" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2897:2921" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3010:3170" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="3038:3100" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3299:10234" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3544:3759" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3618:3712" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4027:5051" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4054:4632" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4358:4426" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4432:4483" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4539:4632" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4659:4841" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4864:4977" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4987:5048" ph="..." />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/server_test.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="300">
+          <caret line="27" column="35" lean-forward="true" selection-start-line="27" selection-start-column="35" selection-end-line="27" selection-end-column="35" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vncproxy.iml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/client_auth_test.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="11" lean-forward="false" selection-start-line="0" selection-start-column="8" selection-end-line="0" selection-end-column="11" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/client_auth.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="408">
+          <caret line="29" column="0" lean-forward="true" selection-start-line="29" selection-start-column="0" selection-end-line="29" selection-end-column="0" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/pixel-format.go" />
+    <entry file="file://C:/Go/src/runtime/panic.go" />
+    <entry file="file://$PROJECT_DIR$/server/security.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="217" column="21" lean-forward="false" selection-start-line="217" selection-start-column="17" selection-end-line="217" selection-end-column="21" />
+          <folding>
+            <element signature="e#16#100#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/client-messages.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="119">
+          <caret line="34" column="0" lean-forward="true" selection-start-line="34" selection-start-column="0" selection-end-line="34" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/encodings/enc-tight.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding>
+            <marker date="1497903119000" expanded="false" signature="26:47" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="462:463" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="500:513" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1306:1511" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1406:1435" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1441:1482" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1646:3175" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="1886:1968" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2509:3173" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2527:2719" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="2736:3000" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="2760:2846" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="2897:2921" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3010:3170" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="3038:3100" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3299:10234" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3544:3759" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="3618:3712" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4027:5051" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4054:4632" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4358:4426" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4432:4483" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4539:4632" ph="{...}" />
+            <marker date="1497903119000" expanded="true" signature="4659:4841" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4864:4977" ph="..." />
+            <marker date="1497903119000" expanded="true" signature="4987:5048" ph="..." />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/encoding.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="170">
+          <caret line="10" column="5" lean-forward="false" selection-start-line="10" selection-start-column="5" selection-end-line="10" selection-end-column="5" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/readers.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="1380">
+          <caret line="96" column="1" lean-forward="false" selection-start-line="96" selection-start-column="1" selection-end-line="96" selection-end-column="1" />
+          <folding>
+            <marker date="1497991618000" expanded="true" signature="1507:1513" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1507:1597" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1554:1574" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1660:1854" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1739:1834" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1907:2069" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="1992:2012" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2123:2286" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2209:2229" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2340:2503" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2426:2446" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2558:2970" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2672:2862" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="2774:2859" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3040:3350" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3081:3121" ph="{...}" />
+            <marker date="1497991618000" expanded="true" signature="3221:3243" ph="{...}" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/handlers.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="143">
+          <caret line="253" column="54" lean-forward="true" selection-start-line="253" selection-start-column="54" selection-end-line="253" selection-end-column="54" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/client-conn.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="450" column="22" lean-forward="false" selection-start-line="450" selection-start-column="22" selection-end-line="450" selection-end-column="22" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/encodings/enc-copy-rect.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/demo.go1">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="190">
+          <caret line="53" column="16" lean-forward="false" selection-start-line="53" selection-start-column="16" selection-end-line="53" selection-end-column="16" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/main.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="23" column="26" lean-forward="false" selection-start-line="23" selection-start-column="26" selection-end-line="23" selection-end-column="26" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/vnc/client_test.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="29" column="1" lean-forward="true" selection-start-line="29" selection-start-column="1" selection-end-line="29" selection-end-column="1" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/server-message.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="300">
+          <caret line="20" column="21" lean-forward="false" selection-start-line="20" selection-start-column="4" selection-end-line="20" selection-end-column="21" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/encodings/enc-raw.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="0">
+          <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/common/client-message.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="20">
+          <caret line="28" column="1" lean-forward="true" selection-start-line="28" selection-start-column="1" selection-end-line="28" selection-end-column="1" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/server-conn.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="18" column="38" lean-forward="true" selection-start-line="18" selection-start-column="38" selection-end-line="18" selection-end-column="38" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/server.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="2040">
+          <caret line="144" column="0" lean-forward="true" selection-start-line="144" selection-start-column="0" selection-end-line="144" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/server/server_test.go">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="255">
+          <caret line="24" column="37" lean-forward="false" selection-start-line="24" selection-start-column="37" selection-end-line="24" selection-end-column="37" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+  </component>
 </project>
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index a0c94e2..c89bbc7 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -8,7 +8,7 @@
             "mode": "test",
             "remotePath": "",
             "port": 2345,
-            "program": "${workspaceRoot}/reader",
+            "program": "${workspaceRoot}/server",
             "args": [
                 "-test.v"
             ],
@@ -23,29 +23,6 @@
                 }
             },
             "showLog": true
-        },
-           {
-            "name": "Launch Grouper Tests",
-            "type": "go",
-            "request": "launch",
-            "mode": "test",
-            "remotePath": "",
-            "port": 2345,
-            "program": "${workspaceRoot}/consumer",
-            "args": [
-                "-test.v"
-            ],
-            "osx": {
-                "env": {
-                    //"GOPATH": "${env.HOME}/Dropbox/go"
-                }
-            },
-            "windows": {
-                "env": {
-                    //"GOPATH": "${env.USERPROFILE}\\Dropbox\\go"
-                }
-            },
-            "showLog": true
         },
         {
             "name": "Launch",
diff --git a/common/client-message.go b/common/client-message.go
new file mode 100644
index 0000000..89a7b99
--- /dev/null
+++ b/common/client-message.go
@@ -0,0 +1,58 @@
+package common
+
+import (
+	"io"
+	"net"
+)
+
+type ClientMessageType uint8
+
+//go:generate stringer -type=ClientMessageType
+
+// Client-to-Server message types.
+const (
+	SetPixelFormatMsgType ClientMessageType = iota
+	_
+	SetEncodingsMsgType
+	FramebufferUpdateRequestMsgType
+	KeyEventMsgType
+	PointerEventMsgType
+	ClientCutTextMsgType
+)
+
+// Color represents a single color in a color map.
+type Color struct {
+	pf      *PixelFormat
+	cm      *ColorMap
+	cmIndex uint32 // Only valid if pf.TrueColor is false.
+	R, G, B uint16
+}
+
+type ColorMap [256]Color
+
+type Conn interface {
+	io.ReadWriteCloser
+	Conn() net.Conn
+	Protocol() string
+	PixelFormat() *PixelFormat
+	SetPixelFormat(*PixelFormat) error
+	ColorMap() *ColorMap
+	SetColorMap(*ColorMap)
+	Encodings() []Encoding
+	SetEncodings([]EncodingType) error
+	Width() uint16
+	Height() uint16
+	SetWidth(uint16)
+	SetHeight(uint16)
+	DesktopName() string
+	SetDesktopName(string)
+	Flush() error
+	SetProtoVersion(string)
+}
+
+// ClientMessage is the interface
+type ClientMessage interface {
+	Type() ClientMessageType
+	Read(Conn) (ClientMessage, error)
+	Write(Conn) error
+}
diff --git a/common/encoding.go b/common/encoding.go
index a3d9203..e4d69fa 100644
--- a/common/encoding.go
+++ b/common/encoding.go
@@ -1,5 +1,11 @@
 package common
 
+import (
+	"encoding/binary"
+	"bytes"
+	"io"
+)
+
 // An Encoding implements a method for encoding pixel data that is
 // sent by the server to the client.
 type Encoding interface {
@@ -22,3 +28,168 @@ const (
 	EncodingTight    = 7
 	EncodingZRLE     = 16
 )
+
+// EncodingType represents a known VNC encoding type.
+type EncodingType int32
+
+//go:generate stringer -type=EncodingType
+
+const (
+	EncRaw                           EncodingType = 0
+	EncCopyRect                      EncodingType = 1
+	EncRRE                           EncodingType = 2
+	EncCoRRE                         EncodingType = 4
+	EncHextile                       EncodingType = 5
+	EncZlib                          EncodingType = 6
+	EncTight                         EncodingType = 7
+	EncZlibHex                       EncodingType = 8
+	EncUltra1                        EncodingType = 9
+	EncUltra2                        EncodingType = 10
+	EncJPEG                          EncodingType = 21
+	EncJRLE                          EncodingType = 22
+	EncTRLE                          EncodingType = 15
+	EncZRLE                          EncodingType = 16
+	EncJPEGQualityLevelPseudo10      EncodingType = -23
+	EncJPEGQualityLevelPseudo9       EncodingType = -24
+	EncJPEGQualityLevelPseudo8       EncodingType = -25
+	EncJPEGQualityLevelPseudo7       EncodingType = -26
+	EncJPEGQualityLevelPseudo6       EncodingType = -27
+	EncJPEGQualityLevelPseudo5       EncodingType = -28
+	EncJPEGQualityLevelPseudo4       EncodingType = -29
+	EncJPEGQualityLevelPseudo3       EncodingType = -30
+	EncJPEGQualityLevelPseudo2       EncodingType = -31
+	EncJPEGQualityLevelPseudo1       EncodingType = -32
+	EncColorPseudo                   EncodingType = -239
+	EncDesktopSizePseudo             EncodingType = -223
+	EncLastRectPseudo                EncodingType = -224
+	EncCompressionLevel10            EncodingType = -247
+	EncCompressionLevel9             EncodingType = -248
+	EncCompressionLevel8             EncodingType = -249
+	EncCompressionLevel7             EncodingType = -250
+	EncCompressionLevel6             EncodingType = -251
+	EncCompressionLevel5             EncodingType = -252
+	EncCompressionLevel4             EncodingType = -253
+	EncCompressionLevel3             EncodingType = -254
+	EncCompressionLevel2             EncodingType = -255
+	EncCompressionLevel1             EncodingType = -256
+	EncQEMUPointerMotionChangePseudo EncodingType = -257
+	EncQEMUExtendedKeyEventPseudo    EncodingType = -258
+	EncTightPng                      EncodingType = -260
+	EncExtendedDesktopSizePseudo     EncodingType = -308
+	EncXvpPseudo                     EncodingType = -309
+	EncFencePseudo                   EncodingType = -312
+	EncContinuousUpdatesPseudo       EncodingType = -313
+	EncClientRedirect                EncodingType = -311
+)
+
+// PixelFormat describes the way a pixel is formatted for a VNC connection.
+//
+// See RFC 6143 Section 7.4 for information on each of the fields.
+type PixelFormat struct {
+	BPP        uint8
+	Depth      uint8
+	BigEndian  bool
+	TrueColor  bool
+	RedMax     uint16
+	GreenMax   uint16
+	BlueMax    uint16
+	RedShift   uint8
+	GreenShift uint8
+	BlueShift  uint8
+}
+
+func (format *PixelFormat) WriteTo(w io.Writer) ( error) {
+	var buf bytes.Buffer
+
+	// Byte 1
+	if err := binary.Write(&buf, binary.BigEndian, format.BPP); err != nil {
+		return  err
+	}
+
+	// Byte 2
+	if err := binary.Write(&buf, binary.BigEndian, format.Depth); err != nil {
+		return  err
+	}
+
+	var boolByte byte
+	if format.BigEndian {
+		boolByte = 1
+	} else {
+		boolByte = 0
+	}
+
+	// Byte 3 (BigEndian)
+	if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil {
+		return  err
+	}
+
+	if format.TrueColor {
+		boolByte = 1
+	} else {
+		boolByte = 0
+	}
+
+	// Byte 4 (TrueColor)
+	if err := binary.Write(&buf, binary.BigEndian, boolByte); err != nil {
+		return  err
+	}
+
+	// If we have true color enabled then we have to fill in the rest of the
+	// structure with the color values.
+	if format.TrueColor {
+		if err := binary.Write(&buf, binary.BigEndian, format.RedMax); err != nil {
+			return  err
+		}
+
+		if err := binary.Write(&buf, binary.BigEndian, format.GreenMax); err != nil {
+			return  err
+		}
+
+		if err := binary.Write(&buf, binary.BigEndian, format.BlueMax); err != nil {
+			return  err
+		}
+
+		if err := binary.Write(&buf, binary.BigEndian, format.RedShift); err != nil {
+			return  err
+		}
+
+		if err := binary.Write(&buf, binary.BigEndian, format.GreenShift); err != nil {
+			return  err
+		}
+
+		if err := binary.Write(&buf, binary.BigEndian, format.BlueShift); err != nil {
+			return  err
+		}
+	}
+
+	w.Write(buf.Bytes()[0:16])
+	return  nil
+}
+
+func NewPixelFormat(bpp uint8) *PixelFormat {
+	bigEndian := false
+	//	rgbMax := uint16(math.Exp2(float64(bpp))) - 1
+	rMax := uint16(255)
+	gMax := uint16(255)
+	bMax := uint16(255)
+	var (
+		tc         = true
+		rs, gs, bs uint8
+		depth      uint8
+	)
+	switch bpp {
+	case 8:
+		tc = false
+		depth = 8
+		rs, gs, bs = 0, 0, 0
+	case 16:
+		depth = 16
+		rs, gs, bs = 0, 4, 8
+	case 32:
+		depth = 24
+		//	rs, gs, bs = 0, 8, 16
+		rs, gs, bs = 16, 8, 0
+	}
+
+	return &PixelFormat{bpp, depth, bigEndian, tc, rMax, gMax, bMax, rs, gs, bs}
+}
diff --git a/common/readers.go b/common/readers.go
index 19397ce..fc1d4b6 100644
--- a/common/readers.go
+++ b/common/readers.go
@@ -43,8 +43,8 @@ func (r *RfbReadHelper) SendRectSeparator(upcomingRectType int) error {
 
 }
 
-func (r *RfbReadHelper) SendMessageSeparator(upcomingMessageType int) error {
-	seg := &RfbSegment{SegmentType: SegmentMessageSeparator, UpcomingObjectType: upcomingMessageType}
+func (r *RfbReadHelper) SendMessageSeparator(upcomingMessageType ServerMessageType) error {
+	seg := &RfbSegment{SegmentType: SegmentMessageSeparator, UpcomingObjectType: int(upcomingMessageType)}
 	if r.Listener == nil {
 		return nil
 	}
@@ -67,7 +67,7 @@ func (r *RfbReadHelper) Read(p []byte) (n int, err error) {
 	//write the bytes to the Listener for further processing
 	seg := &RfbSegment{Bytes: p, SegmentType: SegmentBytes}
 	if r.Listener == nil {
-		return 0,nil
+		return 0, nil
 	}
 	r.Listener.Consume(seg)
 	if err != nil {
diff --git a/common/rectangle.go b/common/rectangle.go
index 5261903..3aa9623 100644
--- a/common/rectangle.go
+++ b/common/rectangle.go
@@ -20,15 +20,15 @@ func (r *Rectangle) String() string {
 // PixelFormat describes the way a pixel is formatted for a VNC connection.
 //
 // See RFC 6143 Section 7.4 for information on each of the fields.
-type PixelFormat struct {
-	BPP        uint8
-	Depth      uint8
-	BigEndian  bool
-	TrueColor  bool
-	RedMax     uint16
-	GreenMax   uint16
-	BlueMax    uint16
-	RedShift   uint8
-	GreenShift uint8
-	BlueShift  uint8
-}
+// type PixelFormat struct {
+// 	BPP        uint8
+// 	Depth      uint8
+// 	BigEndian  bool
+// 	TrueColor  bool
+// 	RedMax     uint16
+// 	GreenMax   uint16
+// 	BlueMax    uint16
+// 	RedShift   uint8
+// 	GreenShift uint8
+// 	BlueShift  uint8
+// }
diff --git a/common/server-message.go b/common/server-message.go
new file mode 100644
index 0000000..d82d298
--- /dev/null
+++ b/common/server-message.go
@@ -0,0 +1,25 @@
+package common
+
+type IClientConn interface {
+	CurrentPixelFormat() *PixelFormat
+	CurrentColorMap() *ColorMap
+	Encodings() []Encoding
+}
+
+type ServerMessage interface {
+	// The type of the message that is sent down on the wire.
+	Type() uint8
+	String() string
+	// Read reads the contents of the message from the reader. At the point
+	// this is called, the message type has already been read from the reader.
+	// This should return a new ServerMessage that is the appropriate type.
+	Read(IClientConn, *RfbReadHelper) (ServerMessage, error)
+}
+type ServerMessageType int8
+
+const (
+	FramebufferUpdate ServerMessageType = iota
+	SetColourMapEntries
+	Bell
+	ServerCutText
+)
diff --git a/encodings/enc-rre.go b/encodings/enc-rre.go
index 0f56984..c1feeba 100644
--- a/encodings/enc-rre.go
+++ b/encodings/enc-rre.go
@@ -17,8 +17,8 @@ func (z *RREEncoding) Read(pixelFmt *common.PixelFormat, rect *common.Rectangle,
 	//read whole rect background color
 	r.ReadBytes(bytesPerPixel)
 
-	//read all individual rects (color=BPP + x=16b + y=16b + w=16b + h=16b)
-	_, err := r.ReadBytes(int(numOfSubrectangles) * (bytesPerPixel + 8))
+	//read all individual rects (color=bytesPerPixel + x=16b + y=16b + w=16b + h=16b)
+	_, err := r.ReadBytes(int(numOfSubrectangles) * (bytesPerPixel + 8)) // x+y+w+h=8 bytes
 
 	if err != nil {
 		return nil, err
diff --git a/encodings/enc-tight.go b/encodings/enc-tight.go
index f0d5e4e..fcf586b 100644
--- a/encodings/enc-tight.go
+++ b/encodings/enc-tight.go
@@ -3,7 +3,6 @@ package encodings
 import (
 	"errors"
 	"fmt"
-	"io"
 	"vncproxy/common"
 )
 
@@ -20,13 +19,13 @@ const (
 )
 
 type TightEncoding struct {
-	output io.Writer
+	//output io.Writer
 	logger common.Logger
 }
 
-func (t *TightEncoding) SetOutput(output io.Writer) {
-	t.output = output
-}
+// func (t *TightEncoding) SetOutput(output io.Writer) {
+// 	t.output = output
+// }
 
 func (*TightEncoding) Type() int32 {
 	return 7
@@ -100,6 +99,8 @@ func (t *TightEncoding) Read(pixelFmt *common.PixelFormat, rect *common.Rectangl
 		fmt.Printf("reading fill size=%d\n", bytesPixel)
 		//read color
 		r.ReadBytes(int(bytesPixel))
+		//byt, _ := r.ReadBytes(3)
+		//fmt.Printf(">>>>>>>>>TightFillBytes=%v", byt)
 		return t, nil
 	case TightJpeg:
 		if pixelFmt.BPP == 8 {
diff --git a/listeners/pass-to.go b/listeners/pass-to.go
index 20b4ef4..5e6b7ce 100644
--- a/listeners/pass-to.go
+++ b/listeners/pass-to.go
@@ -1,12 +1,25 @@
 package listeners
 
-import "vncproxy/common"
-import "io"
+import (
+	"errors"
+	"io"
+	"vncproxy/common"
+)
 
 type PassListener struct {
 	io.Writer
 }
 
-func (*PassListener) Consume(seg *common.RfbSegment) error {
+func (p *PassListener) Consume(seg *common.RfbSegment) error {
+	switch seg.SegmentType {
+	case common.SegmentMessageSeparator:
+	case common.SegmentRectSeparator:
+	case common.SegmentBytes:
+		_, err := p.Writer.Write(seg.Bytes)
+		return err
+
+	default:
+		return errors.New("undefined RfbSegment type")
+	}
 	return nil
 }
diff --git a/listeners/recorder.go b/listeners/recorder.go
index 5c5e4e6..9d3fbd0 100644
--- a/listeners/recorder.go
+++ b/listeners/recorder.go
@@ -43,12 +43,6 @@ func NewRecorder(saveFilePath string, desktopName string, fbWidth uint16, fbHeig
 	return &rec
 }
 
-const (
-	FramebufferUpdate   = 0
-	SetColourMapEntries = 1
-	Bell                = 2
-	ServerCutText       = 3
-)
 const versionMsg_3_3 = "RFB 003.003\n"
 const versionMsg_3_7 = "RFB 003.007\n"
 const versionMsg_3_8 = "RFB 003.008\n"
@@ -96,12 +90,12 @@ func (r *Recorder) writeStartSession(desktopName string, framebufferWidth uint16
 func (r *Recorder) Consume(data *common.RfbSegment) error {
 	switch data.SegmentType {
 	case common.SegmentMessageSeparator:
-		switch data.UpcomingObjectType {
-		case FramebufferUpdate:
+		switch common.ServerMessageType(data.UpcomingObjectType) {
+		case common.FramebufferUpdate:
 			r.writeToDisk()
-		case SetColourMapEntries:
-		case Bell:
-		case ServerCutText:
+		case common.SetColourMapEntries:
+		case common.Bell:
+		case common.ServerCutText:
 		default:
 			return errors.New("unknown message type:" + string(data.UpcomingObjectType))
 		}
diff --git a/main.go b/main.go
index 705e6c2..ab98b4c 100644
--- a/main.go
+++ b/main.go
@@ -3,7 +3,6 @@ package main
 import (
 	"fmt"
 	"net"
-	"os"
 	"time"
 	"vncproxy/common"
 	"vncproxy/encodings"
@@ -21,8 +20,14 @@ func main() {
 	var noauth vnc.ClientAuthNone
 	authArr := []vnc.ClientAuth{&vnc.PasswordAuth{Password: "Ch_#!T@8"}, &noauth}
 
-	vncSrvMessagesChan := make(chan vnc.ServerMessage)
-	clientConn, err := vnc.Client(nc, &vnc.ClientConfig{Auth: authArr, ServerMessageCh: vncSrvMessagesChan, Exclusive: true})
+	vncSrvMessagesChan := make(chan common.ServerMessage)
+	clientConn, err := vnc.Client(nc,
+		&vnc.ClientConfig{
+			Auth:            authArr,
+			ServerMessageCh: vncSrvMessagesChan,
+			Exclusive:       true,
+		})
+
 	if err != nil {
 		fmt.Printf("error creating client: %s", err)
 	}
@@ -38,10 +43,10 @@ func main() {
 	cpyRect := encodings.CopyRectEncoding{}
 	//coRRE := encodings.CoRREEncoding{}
 	//hextile := encodings.HextileEncoding{}
-	file, _ := os.OpenFile("stam.bin", os.O_CREATE|os.O_RDWR, 0755)
-	defer file.Close()
+	// file, _ := os.OpenFile("stam.bin", os.O_CREATE|os.O_RDWR, 0755)
+	// defer file.Close()
 
-	tight.SetOutput(file)
+	//tight.SetOutput(file)
 	clientConn.SetEncodings([]common.Encoding{&cpyRect, &tight})
 
 	go func() {
@@ -50,7 +55,7 @@ func main() {
 			if err != nil {
 				fmt.Printf("error requesting fb update: %s\n", err)
 			}
-			time.Sleep(2 * time.Second)
+			time.Sleep(500 * time.Millisecond)
 		}
 	}()
 
diff --git a/server/client-messages.go b/server/client-messages.go
new file mode 100644
index 0000000..c30a414
--- /dev/null
+++ b/server/client-messages.go
@@ -0,0 +1,247 @@
+package server
+
+import (
+	"encoding/binary"
+	"vncproxy/common"
+)
+
+// SetPixelFormat holds the wire format message.
+type SetPixelFormat struct {
+	_  [3]byte            // padding
+	PF common.PixelFormat // pixel-format
+	_  [3]byte            // padding after pixel format
+}
+
+// Key represents a VNC key press.
+type Key uint32
+
+//go:generate stringer -type=Key
+
+// Keys is a slice of Key values.
+type Keys []Key
+
+func (*SetPixelFormat) Type() common.ClientMessageType {
+	return common.SetPixelFormatMsgType
+}
+
+func (msg *SetPixelFormat) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+
+	if err := binary.Write(c, binary.BigEndian, msg); err != nil {
+		return err
+	}
+
+	pf := c.PixelFormat()
+	// Invalidate the color map.
+	if pf.TrueColor {
+		c.SetColorMap(&common.ColorMap{})
+	}
+
+	return c.Flush()
+}
+
+func (*SetPixelFormat) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := SetPixelFormat{}
+	if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
+		return nil, err
+	}
+	return &msg, nil
+}
+
+// SetEncodings holds the wire format message, sans encoding-type field.
+type SetEncodings struct {
+	_         [1]byte // padding
+	EncNum    uint16  // number-of-encodings
+	Encodings []common.EncodingType
+}
+
+func (*SetEncodings) Type() common.ClientMessageType {
+	return common.SetEncodingsMsgType
+}
+
+func (*SetEncodings) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := SetEncodings{}
+	var pad [1]byte
+	if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
+		return nil, err
+	}
+
+	if err := binary.Read(c, binary.BigEndian, &msg.EncNum); err != nil {
+		return nil, err
+	}
+	var enc common.EncodingType
+	for i := uint16(0); i < msg.EncNum; i++ {
+		if err := binary.Read(c, binary.BigEndian, &enc); err != nil {
+			return nil, err
+		}
+		msg.Encodings = append(msg.Encodings, enc)
+	}
+	c.SetEncodings(msg.Encodings)
+	return &msg, nil
+}
+
+func (msg *SetEncodings) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+
+	var pad [1]byte
+	if err := binary.Write(c, binary.BigEndian, pad); err != nil {
+		return err
+	}
+
+	if uint16(len(msg.Encodings)) > msg.EncNum {
+		msg.EncNum = uint16(len(msg.Encodings))
+	}
+	if err := binary.Write(c, binary.BigEndian, msg.EncNum); err != nil {
+		return err
+	}
+	for _, enc := range msg.Encodings {
+		if err := binary.Write(c, binary.BigEndian, enc); err != nil {
+			return err
+		}
+	}
+	return c.Flush()
+}
+
+// FramebufferUpdateRequest holds the wire format message.
+type FramebufferUpdateRequest struct {
+	Inc           uint8  // incremental
+	X, Y          uint16 // x-, y-position
+	Width, Height uint16 // width, height
+}
+
+func (*FramebufferUpdateRequest) Type() common.ClientMessageType {
+	return common.FramebufferUpdateRequestMsgType
+}
+
+func (*FramebufferUpdateRequest) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := FramebufferUpdateRequest{}
+	if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
+		return nil, err
+	}
+	return &msg, nil
+}
+
+func (msg *FramebufferUpdateRequest) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+	if err := binary.Write(c, binary.BigEndian, msg); err != nil {
+		return err
+	}
+	return c.Flush()
+}
+
+// KeyEvent holds the wire format message.
+type KeyEvent struct {
+	Down uint8   // down-flag
+	_    [2]byte // padding
+	Key  Key     // key
+}
+
+func (*KeyEvent) Type() common.ClientMessageType {
+	return common.KeyEventMsgType
+}
+
+func (*KeyEvent) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := KeyEvent{}
+	if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
+		return nil, err
+	}
+	return &msg, nil
+}
+
+func (msg *KeyEvent) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+	if err := binary.Write(c, binary.BigEndian, msg); err != nil {
+		return err
+	}
+	return c.Flush()
+}
+
+// PointerEventMessage holds the wire format message.
+type PointerEvent struct {
+	Mask uint8  // button-mask
+	X, Y uint16 // x-, y-position
+}
+
+func (*PointerEvent) Type() common.ClientMessageType {
+	return common.PointerEventMsgType
+}
+
+func (*PointerEvent) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := PointerEvent{}
+	if err := binary.Read(c, binary.BigEndian, &msg); err != nil {
+		return nil, err
+	}
+	return &msg, nil
+}
+
+func (msg *PointerEvent) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+	if err := binary.Write(c, binary.BigEndian, msg); err != nil {
+		return err
+	}
+	return c.Flush()
+}
+
+// ClientCutText holds the wire format message, sans the text field.
+type ClientCutText struct {
+	_      [3]byte // padding
+	Length uint32  // length
+	Text   []byte
+}
+
+func (*ClientCutText) Type() common.ClientMessageType {
+	return common.ClientCutTextMsgType
+}
+
+func (*ClientCutText) Read(c common.Conn) (common.ClientMessage, error) {
+	msg := ClientCutText{}
+	var pad [3]byte
+	if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
+		return nil, err
+	}
+
+	if err := binary.Read(c, binary.BigEndian, &msg.Length); err != nil {
+		return nil, err
+	}
+
+	msg.Text = make([]byte, msg.Length)
+	if err := binary.Read(c, binary.BigEndian, &msg.Text); err != nil {
+		return nil, err
+	}
+	return &msg, nil
+}
+
+func (msg *ClientCutText) Write(c common.Conn) error {
+	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+		return err
+	}
+
+	var pad [3]byte
+	if err := binary.Write(c, binary.BigEndian, &pad); err != nil {
+		return err
+	}
+
+	if uint32(len(msg.Text)) > msg.Length {
+		msg.Length = uint32(len(msg.Text))
+	}
+
+	if err := binary.Write(c, binary.BigEndian, msg.Length); err != nil {
+		return err
+	}
+
+	if err := binary.Write(c, binary.BigEndian, msg.Text); err != nil {
+		return err
+	}
+
+	return c.Flush()
+}
diff --git a/server/debug.test b/server/debug.test
new file mode 100644
index 0000000..1404cd8
Binary files /dev/null and b/server/debug.test differ
diff --git a/server/handlers.go b/server/handlers.go
new file mode 100644
index 0000000..cf70fb6
--- /dev/null
+++ b/server/handlers.go
@@ -0,0 +1,492 @@
+package server
+
+import (
+	"encoding/binary"
+	"fmt"
+
+	"io"
+)
+
+// // ClientMessage is the interface
+// type ClientMessage interface {
+// 	Type() ClientMessageType
+// 	Read(Conn) (ClientMessage, error)
+// 	Write(Conn) error
+// }
+
+// // ServerMessage is the interface
+// type ServerMessage interface {
+// 	Type() ServerMessageType
+// 	Read(Conn) (ServerMessage, error)
+// 	Write(Conn) error
+// }
+
+const ProtoVersionLength = 12
+
+const (
+	ProtoVersionUnknown = ""
+	ProtoVersion33      = "RFB 003.003\n"
+	ProtoVersion38      = "RFB 003.008\n"
+)
+
+func ParseProtoVersion(pv []byte) (uint, uint, error) {
+	var major, minor uint
+
+	if len(pv) < ProtoVersionLength {
+		return 0, 0, fmt.Errorf("ProtocolVersion message too short (%v < %v)", len(pv), ProtoVersionLength)
+	}
+
+	l, err := fmt.Sscanf(string(pv), "RFB %d.%d\n", &major, &minor)
+	if l != 2 {
+		return 0, 0, fmt.Errorf("error parsing ProtocolVersion.")
+	}
+	if err != nil {
+		return 0, 0, err
+	}
+
+	return major, minor, nil
+}
+
+// func ClientVersionHandler(cfg *ClientConfig, c ServerConn) error {
+// 	var version [ProtoVersionLength]byte
+
+// 	if err := binary.Read(c, binary.BigEndian, &version); err != nil {
+// 		return err
+// 	}
+
+// 	major, minor, err := ParseProtoVersion(version[:])
+// 	if err != nil {
+// 		return err
+// 	}
+
+// 	pv := ProtoVersionUnknown
+// 	if major == 3 {
+// 		if minor >= 8 {
+// 			pv = ProtoVersion38
+// 		} else if minor >= 3 {
+// 			pv = ProtoVersion38
+// 		}
+// 	}
+// 	if pv == ProtoVersionUnknown {
+// 		return fmt.Errorf("ProtocolVersion handshake failed; unsupported version '%v'", string(version[:]))
+// 	}
+// 	c.SetProtoVersion(string(version[:]))
+
+// 	if err := binary.Write(c, binary.BigEndian, []byte(pv)); err != nil {
+// 		return err
+// 	}
+// 	return c.Flush()
+// }
+
+func ServerVersionHandler(cfg *ServerConfig, c *ServerConn) error {
+	var version [ProtoVersionLength]byte
+	if err := binary.Write(c, binary.BigEndian, []byte(ProtoVersion38)); err != nil {
+		return err
+	}
+	if err := c.Flush(); err != nil {
+		return err
+	}
+	if err := binary.Read(c, binary.BigEndian, &version); err != nil {
+		return err
+	}
+
+	major, minor, err := ParseProtoVersion(version[:])
+	if err != nil {
+		return err
+	}
+
+	pv := ProtoVersionUnknown
+	if major == 3 {
+		if minor >= 8 {
+			pv = ProtoVersion38
+		} else if minor >= 3 {
+			pv = ProtoVersion33
+		}
+	}
+	if pv == ProtoVersionUnknown {
+		return fmt.Errorf("ProtocolVersion handshake failed; unsupported version '%v'", string(version[:]))
+	}
+
+	c.SetProtoVersion(pv)
+	return nil
+}
+
+// func ClientSecurityHandler(cfg *ClientConfig, c Conn) error {
+// 	var numSecurityTypes uint8
+// 	if err := binary.Read(c, binary.BigEndian, &numSecurityTypes); err != nil {
+// 		return err
+// 	}
+// 	secTypes := make([]SecurityType, numSecurityTypes)
+// 	if err := binary.Read(c, binary.BigEndian, &secTypes); err != nil {
+// 		return err
+// 	}
+
+// 	var secType SecurityHandler
+// 	for _, st := range cfg.SecurityHandlers {
+// 		for _, sc := range secTypes {
+// 			if st.Type() == sc {
+// 				secType = st
+// 			}
+// 		}
+// 	}
+
+// 	if err := binary.Write(c, binary.BigEndian, cfg.SecurityHandlers[0].Type()); err != nil {
+// 		return err
+// 	}
+
+// 	if err := c.Flush(); err != nil {
+// 		return err
+// 	}
+
+// 	err := secType.Auth(c)
+// 	if err != nil {
+// 		return err
+// 	}
+
+// 	var authCode uint32
+// 	if err := binary.Read(c, binary.BigEndian, &authCode); err != nil {
+// 		return err
+// 	}
+
+// 	if authCode == 1 {
+// 		var reasonLength uint32
+// 		if err := binary.Read(c, binary.BigEndian, &reasonLength); err != nil {
+// 			return err
+// 		}
+// 		reasonText := make([]byte, reasonLength)
+// 		if err := binary.Read(c, binary.BigEndian, &reasonText); err != nil {
+// 			return err
+// 		}
+// 		return fmt.Errorf("%s", reasonText)
+// 	}
+
+// 	return nil
+// }
+
+func ServerSecurityHandler(cfg *ServerConfig, c *ServerConn) error {
+	if err := binary.Write(c, binary.BigEndian, uint8(len(cfg.SecurityHandlers))); err != nil {
+		return err
+	}
+
+	for _, sectype := range cfg.SecurityHandlers {
+		if err := binary.Write(c, binary.BigEndian, sectype.Type()); err != nil {
+			return err
+		}
+	}
+
+	if err := c.Flush(); err != nil {
+		return err
+	}
+
+	var secType SecurityType
+	if err := binary.Read(c, binary.BigEndian, &secType); err != nil {
+		return err
+	}
+
+	secTypes := make(map[SecurityType]SecurityHandler)
+	for _, sType := range cfg.SecurityHandlers {
+		secTypes[sType.Type()] = sType
+	}
+
+	sType, ok := secTypes[secType]
+	if !ok {
+		return fmt.Errorf("server type %d not implemented")
+	}
+
+	var authCode uint32
+	authErr := sType.Auth(c)
+	if authErr != nil {
+		authCode = uint32(1)
+	}
+
+	if err := binary.Write(c, binary.BigEndian, authCode); err != nil {
+		return err
+	}
+	if err := c.Flush(); err != nil {
+		return err
+	}
+
+	if authErr != nil {
+		if err := binary.Write(c, binary.BigEndian, len(authErr.Error())); err != nil {
+			return err
+		}
+		if err := binary.Write(c, binary.BigEndian, []byte(authErr.Error())); err != nil {
+			return err
+		}
+		if err := c.Flush(); err != nil {
+			return err
+		}
+		return authErr
+	}
+
+	return nil
+}
+
+// func ClientServerInitHandler(cfg *ClientConfig, c *ServerConn) error {
+// 	srvInit := &ServerInit{}
+
+// 	if err := binary.Read(c, binary.BigEndian, &srvInit.FBWidth); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Read(c, binary.BigEndian, &srvInit.FBHeight); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Read(c, binary.BigEndian, &srvInit.PixelFormat); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Read(c, binary.BigEndian, &srvInit.NameLength); err != nil {
+// 		return err
+// 	}
+
+// 	nameText := make([]byte, srvInit.NameLength)
+// 	if err := binary.Read(c, binary.BigEndian, nameText); err != nil {
+// 		return err
+// 	}
+
+// 	srvInit.NameText = nameText
+// 	c.SetDesktopName(string(srvInit.NameText))
+// 	c.SetWidth(srvInit.FBWidth)
+// 	c.SetHeight(srvInit.FBHeight)
+// 	c.SetPixelFormat(&srvInit.PixelFormat)
+// 	return nil
+// }
+
+func ServerServerInitHandler(cfg *ServerConfig, c *ServerConn) error {
+	srvInit := &ServerInit{
+		FBWidth:     c.Width(),
+		FBHeight:    c.Height(),
+		PixelFormat: *c.PixelFormat(),
+		NameLength:  uint32(len(cfg.DesktopName)),
+		NameText:    []byte(cfg.DesktopName),
+	}
+
+	if err := binary.Write(c, binary.BigEndian, srvInit.FBWidth); err != nil {
+		return err
+	}
+	if err := binary.Write(c, binary.BigEndian, srvInit.FBHeight); err != nil {
+		return err
+	}
+
+	if err := srvInit.PixelFormat.WriteTo(c); err != nil {
+		return err
+	}
+	if err := binary.Write(c, binary.BigEndian, srvInit.NameLength); err != nil {
+		return err
+	}
+
+	if err := binary.Write(c, binary.BigEndian, srvInit.NameText); err != nil {
+		return err
+	}
+	//
+	//serverCaps:=[]TightCapability{
+	//	TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")},
+	//}
+	//clientCaps:=[]TightCapability{
+	//	TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")},
+	//}
+	//encodingCaps:=[]TightCapability{
+	//	TightCapability{uint32(1), [4]byte(StandardVendor), [8]byte("12345678")},
+	//}
+	//
+	//tightInit:=TightServerInit{
+	//	serverCaps,clientCaps,encodingCaps,
+	//}
+	//tightInit.WriteTo(c)
+
+	return c.Flush()
+}
+
+const (
+	StandardVendor  = "STDV"
+	TridiaVncVendor = "TRDV"
+	TightVncVendor  = "TGHT"
+)
+
+/*
+  void initCapabilities() {
+    tunnelCaps    = new CapsContainer();
+    authCaps      = new CapsContainer();
+    serverMsgCaps = new CapsContainer();
+    clientMsgCaps = new CapsContainer();
+    encodingCaps  = new CapsContainer();
+
+    // Supported authentication methods
+    authCaps.add(AuthNone, StandardVendor, SigAuthNone,
+		 "No authentication");
+    authCaps.add(AuthVNC, StandardVendor, SigAuthVNC,
+		 "Standard VNC password authentication");
+
+    // Supported non-standard server-to-client messages
+    // [NONE]
+
+    // Supported non-standard client-to-server messages
+    // [NONE]
+
+    // Supported encoding types
+    encodingCaps.add(EncodingCopyRect, StandardVendor,
+		     SigEncodingCopyRect, "Standard CopyRect encoding");
+    encodingCaps.add(EncodingRRE, StandardVendor,
+		     SigEncodingRRE, "Standard RRE encoding");
+    encodingCaps.add(EncodingCoRRE, StandardVendor,
+		     SigEncodingCoRRE, "Standard CoRRE encoding");
+    encodingCaps.add(EncodingHextile, StandardVendor,
+		     SigEncodingHextile, "Standard Hextile encoding");
+    encodingCaps.add(EncodingZRLE, StandardVendor,
+		     SigEncodingZRLE, "Standard ZRLE encoding");
+    encodingCaps.add(EncodingZlib, TridiaVncVendor,
+		     SigEncodingZlib, "Zlib encoding");
+    encodingCaps.add(EncodingTight, TightVncVendor,
+		     SigEncodingTight, "Tight encoding");
+
+    // Supported pseudo-encoding types
+    encodingCaps.add(EncodingCompressLevel0, TightVncVendor,
+		     SigEncodingCompressLevel0, "Compression level");
+    encodingCaps.add(EncodingQualityLevel0, TightVncVendor,
+		     SigEncodingQualityLevel0, "JPEG quality level");
+    encodingCaps.add(EncodingXCursor, TightVncVendor,
+		     SigEncodingXCursor, "X-style cursor shape update");
+    encodingCaps.add(EncodingRichCursor, TightVncVendor,
+		     SigEncodingRichCursor, "Rich-color cursor shape update");
+    encodingCaps.add(EncodingPointerPos, TightVncVendor,
+		     SigEncodingPointerPos, "Pointer position update");
+    encodingCaps.add(EncodingLastRect, TightVncVendor,
+		     SigEncodingLastRect, "LastRect protocol extension");
+    encodingCaps.add(EncodingNewFBSize, TightVncVendor,
+		     SigEncodingNewFBSize, "Framebuffer size change");
+  }
+*/
+type TightServerInit struct {
+	ServerMessageCaps []TightCapability
+	ClientMessageCaps []TightCapability
+	EncodingCaps      []TightCapability
+}
+
+func (t *TightServerInit) ReadFrom(r io.Reader) error {
+	var numSrvCaps uint16
+	var numCliCaps uint16
+	var numEncCaps uint16
+	var padding uint16
+
+	if err := binary.Read(r, binary.BigEndian, &numSrvCaps); err != nil {
+		return err
+	}
+
+	if err := binary.Read(r, binary.BigEndian, &numCliCaps); err != nil {
+		return err
+	}
+
+	if err := binary.Read(r, binary.BigEndian, &numEncCaps); err != nil {
+		return err
+	}
+
+	if err := binary.Read(r, binary.BigEndian, &padding); err != nil {
+		return err
+	}
+
+	for i := 0; i < int(numSrvCaps); i++ {
+		cap := TightCapability{}
+		cap.ReadFrom(r)
+		t.ServerMessageCaps = append(t.ServerMessageCaps, cap)
+	}
+
+	for i := 0; i < int(numCliCaps); i++ {
+		cap := TightCapability{}
+		cap.ReadFrom(r)
+		t.ClientMessageCaps = append(t.ClientMessageCaps, cap)
+	}
+
+	for i := 0; i < int(numEncCaps); i++ {
+		cap := TightCapability{}
+		cap.ReadFrom(r)
+		t.EncodingCaps = append(t.EncodingCaps, cap)
+	}
+	return nil
+}
+
+func (t *TightServerInit) WriteTo(w io.Writer) error {
+	if err := binary.Write(w, binary.BigEndian, uint16(len(t.ServerMessageCaps))); err != nil {
+		return err
+	}
+	if err := binary.Write(w, binary.BigEndian, uint16(len(t.ClientMessageCaps))); err != nil {
+		return err
+	}
+	if err := binary.Write(w, binary.BigEndian, uint16(len(t.EncodingCaps))); err != nil {
+		return err
+	}
+
+	if err := binary.Write(w, binary.BigEndian, uint16(0)); err != nil {
+		return err
+	}
+
+	for _, s := range t.ServerMessageCaps {
+		s.WriteTo(w)
+	}
+	for _, s := range t.ClientMessageCaps {
+		s.WriteTo(w)
+	}
+	for _, s := range t.EncodingCaps {
+		s.WriteTo(w)
+	}
+	return nil
+}
+
+type TightCapability struct {
+	code   uint32
+	vendor [4]byte
+	name   [8]byte
+}
+
+func (t *TightCapability) WriteTo(w io.Writer) error {
+	if err := binary.Write(w, binary.BigEndian, t.code); err != nil {
+		return err
+	}
+	if err := binary.Write(w, binary.BigEndian, t.vendor); err != nil {
+		return err
+	}
+	if err := binary.Write(w, binary.BigEndian, t.name); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (t *TightCapability) ReadFrom(r io.Reader) error {
+
+	if err := binary.Read(r, binary.BigEndian, &t.code); err != nil {
+		return err
+	}
+
+	if err := binary.Read(r, binary.BigEndian, &t.vendor); err != nil {
+		return err
+	}
+
+	if err := binary.Read(r, binary.BigEndian, &t.name); err != nil {
+		return err
+	}
+	return nil
+}
+
+// func ClientClientInitHandler(cfg *ClientConfig, c *ServerConn) error {
+// 	var shared uint8
+// 	if cfg.Exclusive {
+// 		shared = 0
+// 	} else {
+// 		shared = 1
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, shared); err != nil {
+// 		return err
+// 	}
+// 	return c.Flush()
+// }
+
+func ServerClientInitHandler(cfg *ServerConfig, c *ServerConn) error {
+	var shared uint8
+	if err := binary.Read(c, binary.BigEndian, &shared); err != nil {
+		return err
+	}
+	/* TODO
+	if shared != 1 {
+		c.SetShared(false)
+	}
+	*/
+	return nil
+}
diff --git a/server/security.go b/server/security.go
new file mode 100644
index 0000000..6248115
--- /dev/null
+++ b/server/security.go
@@ -0,0 +1,333 @@
+package server
+
+import (
+	"bytes"
+	"crypto/des"
+	"crypto/rand"
+	"errors"
+	"log"
+	"vncproxy/common"
+)
+
+type SecurityType uint8
+
+const (
+	SecTypeUnknown  = SecurityType(0)
+	SecTypeNone     = SecurityType(1)
+	SecTypeVNC      = SecurityType(2)
+	SecTypeVeNCrypt = SecurityType(19)
+)
+
+type SecuritySubType uint32
+
+const (
+	SecSubTypeUnknown = SecuritySubType(0)
+)
+
+const (
+	SecSubTypeVeNCrypt01Unknown   = SecuritySubType(0)
+	SecSubTypeVeNCrypt01Plain     = SecuritySubType(19)
+	SecSubTypeVeNCrypt01TLSNone   = SecuritySubType(20)
+	SecSubTypeVeNCrypt01TLSVNC    = SecuritySubType(21)
+	SecSubTypeVeNCrypt01TLSPlain  = SecuritySubType(22)
+	SecSubTypeVeNCrypt01X509None  = SecuritySubType(23)
+	SecSubTypeVeNCrypt01X509VNC   = SecuritySubType(24)
+	SecSubTypeVeNCrypt01X509Plain = SecuritySubType(25)
+)
+
+const (
+	SecSubTypeVeNCrypt02Unknown   = SecuritySubType(0)
+	SecSubTypeVeNCrypt02Plain     = SecuritySubType(256)
+	SecSubTypeVeNCrypt02TLSNone   = SecuritySubType(257)
+	SecSubTypeVeNCrypt02TLSVNC    = SecuritySubType(258)
+	SecSubTypeVeNCrypt02TLSPlain  = SecuritySubType(259)
+	SecSubTypeVeNCrypt02X509None  = SecuritySubType(260)
+	SecSubTypeVeNCrypt02X509VNC   = SecuritySubType(261)
+	SecSubTypeVeNCrypt02X509Plain = SecuritySubType(262)
+)
+
+type SecurityHandler interface {
+	Type() SecurityType
+	SubType() SecuritySubType
+	Auth(common.Conn) error
+}
+
+// type ClientAuthNone struct{}
+
+// func (*ClientAuthNone) Type() SecurityType {
+// 	return SecTypeNone
+// }
+
+// func (*ClientAuthNone) SubType() SecuritySubType {
+// 	return SecSubTypeUnknown
+// }
+
+// func (*ClientAuthNone) Auth(conn common.Conn) error {
+// 	return nil
+// }
+
+// ServerAuthNone is the "none" authentication. See 7.2.1.
+type ServerAuthNone struct{}
+
+func (*ServerAuthNone) Type() SecurityType {
+	return SecTypeNone
+}
+
+func (*ServerAuthNone) Auth(c common.Conn) error {
+	return nil
+}
+
+func (*ServerAuthNone) SubType() SecuritySubType {
+	return SecSubTypeUnknown
+}
+
+// func (*ClientAuthVeNCrypt02Plain) Type() SecurityType {
+// 	return SecTypeVeNCrypt
+// }
+
+// func (*ClientAuthVeNCrypt02Plain) SubType() SecuritySubType {
+// 	return SecSubTypeVeNCrypt02Plain
+// }
+
+// // ClientAuthVeNCryptPlain see https://www.berrange.com/~dan/vencrypt.txt
+// type ClientAuthVeNCrypt02Plain struct {
+// 	Username []byte
+// 	Password []byte
+// }
+
+// func (auth *ClientAuthVeNCrypt02Plain) Auth(c common.Conn) error {
+// 	if err := binary.Write(c, binary.BigEndian, []uint8{0, 2}); err != nil {
+// 		return err
+// 	}
+// 	if err := c.Flush(); err != nil {
+// 		return err
+// 	}
+// 	var (
+// 		major, minor uint8
+// 	)
+
+// 	if err := binary.Read(c, binary.BigEndian, &major); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Read(c, binary.BigEndian, &minor); err != nil {
+// 		return err
+// 	}
+// 	res := uint8(1)
+// 	if major == 0 && minor == 2 {
+// 		res = uint8(0)
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, res); err != nil {
+// 		return err
+// 	}
+// 	c.Flush()
+// 	if err := binary.Write(c, binary.BigEndian, uint8(1)); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, auth.SubType()); err != nil {
+// 		return err
+// 	}
+// 	if err := c.Flush(); err != nil {
+// 		return err
+// 	}
+// 	var secType SecuritySubType
+// 	if err := binary.Read(c, binary.BigEndian, &secType); err != nil {
+// 		return err
+// 	}
+// 	if secType != auth.SubType() {
+// 		binary.Write(c, binary.BigEndian, uint8(1))
+// 		c.Flush()
+// 		return fmt.Errorf("invalid sectype")
+// 	}
+// 	if len(auth.Password) == 0 || len(auth.Username) == 0 {
+// 		return fmt.Errorf("Security Handshake failed; no username and/or password provided for VeNCryptAuth.")
+// 	}
+// 	/*
+// 		if err := binary.Write(c, binary.BigEndian, uint32(len(auth.Username))); err != nil {
+// 			return err
+// 		}
+
+// 		if err := binary.Write(c, binary.BigEndian, uint32(len(auth.Password))); err != nil {
+// 			return err
+// 		}
+
+// 		if err := binary.Write(c, binary.BigEndian, auth.Username); err != nil {
+// 			return err
+// 		}
+
+// 		if err := binary.Write(c, binary.BigEndian, auth.Password); err != nil {
+// 			return err
+// 		}
+// 	*/
+// 	var (
+// 		uLength, pLength uint32
+// 	)
+// 	if err := binary.Read(c, binary.BigEndian, &uLength); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Read(c, binary.BigEndian, &pLength); err != nil {
+// 		return err
+// 	}
+
+// 	username := make([]byte, uLength)
+// 	password := make([]byte, pLength)
+// 	if err := binary.Read(c, binary.BigEndian, &username); err != nil {
+// 		return err
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, &password); err != nil {
+// 		return err
+// 	}
+// 	if !bytes.Equal(auth.Username, username) || !bytes.Equal(auth.Password, password) {
+// 		return fmt.Errorf("invalid username/password")
+// 	}
+// 	return nil
+// }
+
+// ServerAuthVNC is the standard password authentication. See 7.2.2.
+type ServerAuthVNC struct{}
+
+func (*ServerAuthVNC) Type() SecurityType {
+	return SecTypeVNC
+}
+
+func (*ServerAuthVNC) SubType() SecuritySubType {
+	return SecSubTypeUnknown
+}
+
+const AUTH_FAIL = "Authentication Failure"
+
+func (auth *ServerAuthVNC) Auth(c common.Conn) error {
+	buf := make([]byte, 8+len([]byte(AUTH_FAIL)))
+	rand.Read(buf[:16]) // Random 16 bytes in buf
+	sndsz, err := c.Write(buf[:16])
+	if err != nil {
+		log.Printf("Error sending challenge to client: %s\n", err.Error())
+		return errors.New("Error sending challenge to client:" + err.Error())
+	}
+	if sndsz != 16 {
+		log.Printf("The full 16 byte challenge was not sent!\n")
+		return errors.New("The full 16 byte challenge was not sent")
+	}
+	c.Flush()
+	buf2 := make([]byte, 16)
+	_, err = c.Read(buf2)
+	if err != nil {
+		log.Printf("The authentication result was not read: %s\n", err.Error())
+		return errors.New("The authentication result was not read" + err.Error())
+	}
+	AuthText := "1234"
+	bk, err := des.NewCipher([]byte(fixDesKey(AuthText)))
+	if err != nil {
+		log.Printf("Error generating authentication cipher: %s\n", err.Error())
+		return errors.New("Error generating authentication cipher")
+	}
+	buf3 := make([]byte, 16)
+	bk.Encrypt(buf3, buf)               //Encrypt first 8 bytes
+	bk.Encrypt(buf3[8:], buf[8:])       // Encrypt second 8 bytes
+	if bytes.Compare(buf2, buf3) != 0 { // If the result does not decrypt correctly to what we sent then a problem
+		SetUint32(buf, 0, 1)
+		SetUint32(buf, 4, uint32(len([]byte(AUTH_FAIL))))
+		copy(buf[8:], []byte(AUTH_FAIL))
+		c.Write(buf)
+		c.Flush()
+		return errors.New("Authentication failed")
+	}
+	return nil
+}
+
+// SetUint32 set 4 bytes at pos in buf to the val (in big endian format)
+// A test is done to ensure there are 4 bytes available at pos in the buffer
+func SetUint32(buf []byte, pos int, val uint32) {
+	if pos+4 > len(buf) {
+		return
+	}
+	for i := 0; i < 4; i++ {
+		buf[3-i+pos] = byte(val)
+		val >>= 8
+	}
+}
+
+// fixDesKeyByte is used to mirror a byte's bits
+// This is not clearly indicated by the document, but is in actual fact used
+func fixDesKeyByte(val byte) byte {
+	var newval byte = 0
+	for i := 0; i < 8; i++ {
+		newval <<= 1
+		newval += (val & 1)
+		val >>= 1
+	}
+	return newval
+}
+
+// fixDesKey will make sure that exactly 8 bytes is used either by truncating or padding with nulls
+// The bytes are then bit mirrored and returned
+func fixDesKey(key string) []byte {
+	tmp := []byte(key)
+	buf := make([]byte, 8)
+	if len(tmp) <= 8 {
+		copy(buf, tmp)
+	} else {
+		copy(buf, tmp[:8])
+	}
+	for i := 0; i < 8; i++ {
+		buf[i] = fixDesKeyByte(buf[i])
+	}
+	return buf
+}
+
+// // ClientAuthVNC is the standard password authentication. See 7.2.2.
+// type ClientAuthVNC struct {
+// 	Challenge [16]byte
+// 	Password  []byte
+// }
+
+// func (*ClientAuthVNC) Type() SecurityType {
+// 	return SecTypeVNC
+// }
+// func (*ClientAuthVNC) SubType() SecuritySubType {
+// 	return SecSubTypeUnknown
+// }
+
+// func (auth *ClientAuthVNC) Auth(c common.Conn) error {
+// 	if len(auth.Password) == 0 {
+// 		return fmt.Errorf("Security Handshake failed; no password provided for VNCAuth.")
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, auth.Challenge); err != nil {
+// 		return err
+// 	}
+
+// 	auth.encode()
+
+// 	// Send the encrypted challenge back to server
+// 	if err := binary.Write(c, binary.BigEndian, auth.Challenge); err != nil {
+// 		return err
+// 	}
+
+// 	return c.Flush()
+// }
+
+// func (auth *ClientAuthVNC) encode() error {
+// 	// Copy password string to 8 byte 0-padded slice
+// 	key := make([]byte, 8)
+// 	copy(key, auth.Password)
+
+// 	// Each byte of the password needs to be reversed. This is a
+// 	// non RFC-documented behaviour of VNC clients and servers
+// 	for i := range key {
+// 		key[i] = (key[i]&0x55)<<1 | (key[i]&0xAA)>>1 // Swap adjacent bits
+// 		key[i] = (key[i]&0x33)<<2 | (key[i]&0xCC)>>2 // Swap adjacent pairs
+// 		key[i] = (key[i]&0x0F)<<4 | (key[i]&0xF0)>>4 // Swap the 2 halves
+// 	}
+
+// 	// Encrypt challenge with key.
+// 	cipher, err := des.NewCipher(key)
+// 	if err != nil {
+// 		return err
+// 	}
+// 	for i := 0; i < len(auth.Challenge); i += cipher.BlockSize() {
+// 		cipher.Encrypt(auth.Challenge[i:i+cipher.BlockSize()], auth.Challenge[i:i+cipher.BlockSize()])
+// 	}
+
+// 	return nil
+// }
diff --git a/server/server-conn.go b/server/server-conn.go
new file mode 100644
index 0000000..6a3fda1
--- /dev/null
+++ b/server/server-conn.go
@@ -0,0 +1,137 @@
+package server
+
+import (
+	"bufio"
+	"net"
+	"sync"
+	"vncproxy/common"
+)
+
+type ServerConn struct {
+	c        net.Conn
+	cfg      *ServerConfig
+	br       *bufio.Reader
+	bw       *bufio.Writer
+	protocol string
+	m        sync.Mutex
+	// If the pixel format uses a color map, then this is the color
+	// map that is used. This should not be modified directly, since
+	// the data comes from the server.
+	// Definition in ยง5 - Representation of Pixel Data.
+	colorMap *common.ColorMap
+
+	// Name associated with the desktop, sent from the server.
+	desktopName string
+
+	// Encodings supported by the client. This should not be modified
+	// directly. Instead, SetEncodings() should be used.
+	encodings []common.Encoding
+
+	// Height of the frame buffer in pixels, sent to the client.
+	fbHeight uint16
+
+	// Width of the frame buffer in pixels, sent to the client.
+	fbWidth uint16
+
+	// The pixel format associated with the connection. This shouldn't
+	// be modified. If you wish to set a new pixel format, use the
+	// SetPixelFormat method.
+	pixelFormat *common.PixelFormat
+
+	quit chan struct{}
+}
+
+func (c *ServerConn) UnreadByte() error {
+	return c.br.UnreadByte()
+}
+
+func (c *ServerConn) Conn() net.Conn {
+	return c.c
+}
+
+func (c *ServerConn) SetEncodings(encs []common.EncodingType) error {
+	encodings := make(map[int32]common.Encoding)
+	for _, enc := range c.cfg.Encodings {
+		encodings[enc.Type()] = enc
+	}
+	for _, encType := range encs {
+		if enc, ok := encodings[int32(encType)]; ok {
+			c.encodings = append(c.encodings, enc)
+		}
+	}
+	return nil
+}
+
+func (c *ServerConn) SetProtoVersion(pv string) {
+	c.protocol = pv
+}
+
+func (c *ServerConn) Flush() error {
+	//	c.m.Lock()
+	//	defer c.m.Unlock()
+	return c.bw.Flush()
+}
+
+func (c *ServerConn) Close() error {
+	return c.c.Close()
+}
+
+/*
+func (c *ServerConn) Input() chan *ServerMessage {
+	return c.cfg.ServerMessageCh
+}
+
+func (c *ServerConn) Output() chan *ClientMessage {
+	return c.cfg.ClientMessageCh
+}
+*/
+func (c *ServerConn) Read(buf []byte) (int, error) {
+	return c.br.Read(buf)
+}
+
+func (c *ServerConn) Write(buf []byte) (int, error) {
+	//	c.m.Lock()
+	//	defer c.m.Unlock()
+	return c.bw.Write(buf)
+}
+
+func (c *ServerConn) ColorMap() *common.ColorMap {
+	return c.colorMap
+}
+
+func (c *ServerConn) SetColorMap(cm *common.ColorMap) {
+	c.colorMap = cm
+}
+func (c *ServerConn) DesktopName() string {
+	return c.desktopName
+}
+func (c *ServerConn) PixelFormat() *common.PixelFormat {
+	return c.pixelFormat
+}
+func (c *ServerConn) SetDesktopName(name string) {
+	c.desktopName = name
+}
+func (c *ServerConn) SetPixelFormat(pf *common.PixelFormat) error {
+	c.pixelFormat = pf
+	return nil
+}
+func (c *ServerConn) Encodings() []common.Encoding {
+	return c.encodings
+}
+func (c *ServerConn) Width() uint16 {
+	return c.fbWidth
+}
+func (c *ServerConn) Height() uint16 {
+	return c.fbHeight
+}
+func (c *ServerConn) Protocol() string {
+	return c.protocol
+}
+
+// TODO send desktopsize pseudo encoding
+func (c *ServerConn) SetWidth(w uint16) {
+	c.fbWidth = w
+}
+func (c *ServerConn) SetHeight(h uint16) {
+	c.fbHeight = h
+}
diff --git a/server/server.go b/server/server.go
new file mode 100644
index 0000000..d7794b3
--- /dev/null
+++ b/server/server.go
@@ -0,0 +1,366 @@
+package server
+
+import (
+	"bufio"
+	"context"
+	"encoding/binary"
+	"fmt"
+	"net"
+	"sync"
+	"vncproxy/common"
+)
+
+var DefaultClientMessages = []common.ClientMessage{
+	&SetPixelFormat{},
+	&SetEncodings{},
+	&FramebufferUpdateRequest{},
+	&KeyEvent{},
+	&PointerEvent{},
+	&ClientCutText{},
+}
+
+type ServerInit struct {
+	FBWidth, FBHeight uint16
+	PixelFormat       common.PixelFormat
+	NameLength        uint32
+	NameText          []byte
+}
+
+//var _ Conn = (*ServerConn)(nil)
+
+// ServerMessage represents a Client-to-Server RFB message type.
+// type ServerMessageType uint8
+
+// //go:generate stringer -type=ServerMessageType
+
+// // Client-to-Server message types.
+// const (
+// 	FramebufferUpdateMsgType ServerMessageType = iota
+// 	SetColorMapEntriesMsgType
+// 	BellMsgType
+// 	ServerCutTextMsgType
+// )
+
+// FramebufferUpdate holds a FramebufferUpdate wire format message.
+type FramebufferUpdate struct {
+	_       [1]byte             // pad
+	NumRect uint16              // number-of-rectangles
+	Rects   []*common.Rectangle // rectangles
+}
+
+// func (*FramebufferUpdate) Type() ServerMessageType {
+// 	return FramebufferUpdateMsgType
+// }
+
+type ServerHandler func(*ServerConfig, *ServerConn) error
+
+type ServerConfig struct {
+	//VersionHandler    ServerHandler
+	//SecurityHandler   ServerHandler
+	SecurityHandlers []SecurityHandler
+	//ClientInitHandler ServerHandler
+	//ServerInitHandler ServerHandler
+	Encodings       []common.Encoding
+	PixelFormat     *common.PixelFormat
+	ColorMap        *common.ColorMap
+	ClientMessageCh chan common.ClientMessage
+	ServerMessageCh chan common.ServerMessage
+	ClientMessages  []common.ClientMessage
+	DesktopName     []byte
+	Height          uint16
+	Width           uint16
+}
+
+func NewServerConn(c net.Conn, cfg *ServerConfig) (*ServerConn, error) {
+	if cfg.ClientMessageCh == nil {
+		return nil, fmt.Errorf("ClientMessageCh nil")
+	}
+
+	if len(cfg.ClientMessages) == 0 {
+		return nil, fmt.Errorf("ClientMessage 0")
+	}
+
+	return &ServerConn{
+		c:           c,
+		br:          bufio.NewReader(c),
+		bw:          bufio.NewWriter(c),
+		cfg:         cfg,
+		quit:        make(chan struct{}),
+		encodings:   cfg.Encodings,
+		pixelFormat: cfg.PixelFormat,
+		fbWidth:     cfg.Width,
+		fbHeight:    cfg.Height,
+	}, nil
+}
+
+func Serve(ctx context.Context, ln net.Listener, cfg *ServerConfig) error {
+	for {
+
+		c, err := ln.Accept()
+		if err != nil {
+			continue
+		}
+
+		conn, err := NewServerConn(c, cfg)
+		if err != nil {
+			continue
+		}
+
+		if err := ServerVersionHandler(cfg, conn); err != nil {
+			conn.Close()
+			continue
+		}
+
+		if err := ServerSecurityHandler(cfg, conn); err != nil {
+			conn.Close()
+			continue
+		}
+
+		if err := ServerClientInitHandler(cfg, conn); err != nil {
+			conn.Close()
+			continue
+		}
+
+		if err := ServerServerInitHandler(cfg, conn); err != nil {
+			conn.Close()
+			continue
+		}
+
+		go conn.Handle()
+	}
+}
+
+func (c *ServerConn) Handle() error {
+	//var err error
+	var wg sync.WaitGroup
+
+	defer c.Close()
+
+	//create a map of all message types
+	clientMessages := make(map[common.ClientMessageType]common.ClientMessage)
+	for _, m := range c.cfg.ClientMessages {
+		clientMessages[m.Type()] = m
+	}
+	wg.Add(2)
+
+	// server
+	go func() error {
+		defer wg.Done()
+		for {
+			select {
+			case msg := <-c.cfg.ServerMessageCh:
+				fmt.Printf("%v", msg)
+				// if err = msg.Write(c); err != nil {
+				// 	return err
+				// }
+			case <-c.quit:
+				return nil
+			}
+		}
+	}()
+
+	// client
+	go func() error {
+		defer wg.Done()
+		for {
+			select {
+			case <-c.quit:
+				return nil
+			default:
+				var messageType common.ClientMessageType
+				if err := binary.Read(c, binary.BigEndian, &messageType); err != nil {
+					return err
+				}
+				msg, ok := clientMessages[messageType]
+				if !ok {
+					return fmt.Errorf("unsupported message-type: %v", messageType)
+
+				}
+				parsedMsg, err := msg.Read(c)
+				if err != nil {
+					fmt.Printf("srv err %s\n", err.Error())
+					return err
+				}
+				fmt.Printf("message:%s, %v\n",parsedMsg.Type(), parsedMsg)
+				//c.cfg.ClientMessageCh <- parsedMsg
+			}
+		}
+	}()
+
+	wg.Wait()
+	return nil
+}
+
+// type ServerCutText struct {
+// 	_      [1]byte
+// 	Length uint32
+// 	Text   []byte
+// }
+
+// func (*ServerCutText) Type() ServerMessageType {
+// 	return ServerCutTextMsgType
+// }
+
+// func (*ServerCutText) Read(c common.Conn) (common.ServerMessage, error) {
+// 	msg := ServerCutText{}
+
+// 	var pad [1]byte
+// 	if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
+// 		return nil, err
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, &msg.Length); err != nil {
+// 		return nil, err
+// 	}
+
+// 	msg.Text = make([]byte, msg.Length)
+// 	if err := binary.Read(c, binary.BigEndian, &msg.Text); err != nil {
+// 		return nil, err
+// 	}
+// 	return &msg, nil
+// }
+
+// func (msg *ServerCutText) Write(c common.Conn) error {
+// 	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+// 		return err
+// 	}
+// 	var pad [1]byte
+// 	if err := binary.Write(c, binary.BigEndian, pad); err != nil {
+// 		return err
+// 	}
+
+// 	if msg.Length < uint32(len(msg.Text)) {
+// 		msg.Length = uint32(len(msg.Text))
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, msg.Length); err != nil {
+// 		return err
+// 	}
+
+// 	if err := binary.Write(c, binary.BigEndian, msg.Text); err != nil {
+// 		return err
+// 	}
+// 	return nil
+// }
+
+// type Bell struct{}
+
+// func (*Bell) Type() ServerMessageType {
+// 	return BellMsgType
+// }
+
+// func (*Bell) Read(c common.Conn) (common.ServerMessage, error) {
+// 	return &Bell{}, nil
+// }
+
+// func (msg *Bell) Write(c common.Conn) error {
+// 	return binary.Write(c, binary.BigEndian, msg.Type())
+// }
+
+// type SetColorMapEntries struct {
+// 	_          [1]byte
+// 	FirstColor uint16
+// 	ColorsNum  uint16
+// 	Colors     []common.Color
+// }
+
+// func (*SetColorMapEntries) Type() ServerMessageType {
+// 	return SetColorMapEntriesMsgType
+// }
+
+// func (*SetColorMapEntries) Read(c common.Conn) (common.ServerMessage, error) {
+// 	msg := SetColorMapEntries{}
+// 	var pad [1]byte
+// 	if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
+// 		return nil, err
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, &msg.FirstColor); err != nil {
+// 		return nil, err
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, &msg.ColorsNum); err != nil {
+// 		return nil, err
+// 	}
+
+// 	msg.Colors = make([]common.Color, msg.ColorsNum)
+// 	colorMap := c.ColorMap()
+
+// 	for i := uint16(0); i < msg.ColorsNum; i++ {
+// 		color := &msg.Colors[i]
+// 		if err := binary.Read(c, binary.BigEndian, &color); err != nil {
+// 			return nil, err
+// 		}
+// 		colorMap[msg.FirstColor+i] = *color
+// 	}
+// 	c.SetColorMap(colorMap)
+// 	return &msg, nil
+// }
+
+// func (msg *SetColorMapEntries) Write(c common.Conn) error {
+// 	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+// 		return err
+// 	}
+// 	var pad [1]byte
+// 	if err := binary.Write(c, binary.BigEndian, &pad); err != nil {
+// 		return err
+// 	}
+
+// 	if err := binary.Write(c, binary.BigEndian, msg.FirstColor); err != nil {
+// 		return err
+// 	}
+
+// 	if msg.ColorsNum < uint16(len(msg.Colors)) {
+// 		msg.ColorsNum = uint16(len(msg.Colors))
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, msg.ColorsNum); err != nil {
+// 		return err
+// 	}
+
+// 	for i := 0; i < len(msg.Colors); i++ {
+// 		color := msg.Colors[i]
+// 		if err := binary.Write(c, binary.BigEndian, color); err != nil {
+// 			return err
+// 		}
+// 	}
+
+// 	return nil
+// }
+
+// func (*FramebufferUpdate) Read(cliInfo common.IClientConn, c *common.RfbReadHelper) (common.ServerMessage, error) {
+// 	msg := FramebufferUpdate{}
+// 	var pad [1]byte
+// 	if err := binary.Read(c, binary.BigEndian, &pad); err != nil {
+// 		return nil, err
+// 	}
+
+// 	if err := binary.Read(c, binary.BigEndian, &msg.NumRect); err != nil {
+// 		return nil, err
+// 	}
+// 	for i := uint16(0); i < msg.NumRect; i++ {
+// 		rect := &common.Rectangle{}
+// 		if err := rect.Read(c); err != nil {
+// 			return nil, err
+// 		}
+// 		msg.Rects = append(msg.Rects, rect)
+// 	}
+// 	return &msg, nil
+// }
+
+// func (msg *FramebufferUpdate) Write(c common.Conn) error {
+// 	if err := binary.Write(c, binary.BigEndian, msg.Type()); err != nil {
+// 		return err
+// 	}
+// 	var pad [1]byte
+// 	if err := binary.Write(c, binary.BigEndian, pad); err != nil {
+// 		return err
+// 	}
+// 	if err := binary.Write(c, binary.BigEndian, msg.NumRect); err != nil {
+// 		return err
+// 	}
+// 	for _, rect := range msg.Rects {
+// 		if err := rect.Write(c); err != nil {
+// 			return err
+// 		}
+// 	}
+// 	return c.Flush()
+// }
diff --git a/server/server_test.go b/server/server_test.go
new file mode 100644
index 0000000..fb7adef
--- /dev/null
+++ b/server/server_test.go
@@ -0,0 +1,44 @@
+package server
+
+import (
+	"context"
+	"log"
+	"net"
+	"testing"
+	"vncproxy/common"
+	"vncproxy/encodings"
+)
+
+func TestServer(t *testing.T) {
+	ln, err := net.Listen("tcp", ":5903")
+	if err != nil {
+		log.Fatalf("Error listen. %v", err)
+	}
+
+	chServer := make(chan common.ClientMessage)
+	chClient := make(chan common.ServerMessage)
+
+	cfg := &ServerConfig{
+		//SecurityHandlers: []SecurityHandler{&ServerAuthNone{}, &ServerAuthVNC{}},
+		SecurityHandlers: []SecurityHandler{&ServerAuthVNC{}},
+		Encodings:        []common.Encoding{&encodings.RawEncoding{}, &encodings.TightEncoding{}, &encodings.CopyRectEncoding{}},
+		PixelFormat:      common.NewPixelFormat(32),
+		ClientMessageCh:  chServer,
+		ServerMessageCh:  chClient,
+		ClientMessages:   DefaultClientMessages,
+		DesktopName:      []byte("workDesk"),
+		Height:           uint16(768),
+		Width:            uint16(1024),
+
+	}
+	go Serve(context.Background(), ln, cfg)
+
+	// Process messages coming in on the ClientMessage channel.
+	for {
+		msg := <-chClient
+		switch msg.Type() {
+		default:
+			log.Printf("Received message type:%v msg:%v\n", msg.Type(), msg)
+		}
+	}
+}
diff --git a/vnc/client-conn.go b/vnc/client-conn.go
index 1a59085..8ed6f93 100644
--- a/vnc/client-conn.go
+++ b/vnc/client-conn.go
@@ -12,15 +12,6 @@ import (
 )
 
 // A ServerMessage implements a message sent from the server to the client.
-type ServerMessage interface {
-	// The type of the message that is sent down on the wire.
-	Type() uint8
-	String() string
-	// Read reads the contents of the message from the reader. At the point
-	// this is called, the message type has already been read from the reader.
-	// This should return a new ServerMessage that is the appropriate type.
-	Read(*ClientConn, *common.RfbReadHelper) (ServerMessage, error)
-}
 
 // A ClientAuth implements a method of authenticating with a remote server.
 type ClientAuth interface {
@@ -42,7 +33,7 @@ type ClientConn struct {
 	// If the pixel format uses a color map, then this is the color
 	// map that is used. This should not be modified directly, since
 	// the data comes from the server.
-	ColorMap [256]Color
+	ColorMap common.ColorMap
 
 	// Encodings supported by the client. This should not be modified
 	// directly. Instead, SetEncodings should be used.
@@ -80,12 +71,12 @@ type ClientConfig struct {
 	// from the VNC server may block indefinitely. It is up to the user
 	// of the library to ensure that this channel is properly read.
 	// If this is not set, then all messages will be discarded.
-	ServerMessageCh chan<- ServerMessage
+	ServerMessageCh chan<- common.ServerMessage
 
 	// A slice of supported messages that can be read from the server.
 	// This only needs to contain NEW server messages, and doesn't
 	// need to explicitly contain the RFC-required messages.
-	ServerMessages []ServerMessage
+	ServerMessages []common.ServerMessage
 }
 
 func Client(c net.Conn, cfg *ClientConfig) (*ClientConn, error) {
@@ -108,6 +99,18 @@ func (c *ClientConn) Close() error {
 	return c.conn.Close()
 }
 
+func (c *ClientConn) Encodings() []common.Encoding {
+	return c.Encs
+}
+
+func (c *ClientConn) CurrentPixelFormat() *common.PixelFormat {
+	return &c.PixelFormat
+}
+
+func (c *ClientConn) CurrentColorMap() *common.ColorMap {
+	return &c.ColorMap
+}
+
 // CutText tells the server that the client has new text in its cut buffer.
 // The text string MUST only contain Latin-1 characters. This encoding
 // is compatible with Go's native string format, but can only use up to
@@ -295,7 +298,7 @@ func (c *ClientConn) SetPixelFormat(format *common.PixelFormat) error {
 	}
 
 	// Reset the color map as according to RFC.
-	var newColorMap [256]Color
+	var newColorMap common.ColorMap
 	c.ColorMap = newColorMap
 
 	return nil
@@ -447,9 +450,9 @@ func (c *ClientConn) mainLoop() {
 
 	reader := &common.RfbReadHelper{Reader: c.conn, Listener: rec}
 	// Build the map of available server messages
-	typeMap := make(map[uint8]ServerMessage)
+	typeMap := make(map[uint8]common.ServerMessage)
 
-	defaultMessages := []ServerMessage{
+	defaultMessages := []common.ServerMessage{
 		new(FramebufferUpdateMessage),
 		new(SetColorMapEntriesMessage),
 		new(BellMessage),
@@ -477,7 +480,7 @@ func (c *ClientConn) mainLoop() {
 			// Unsupported message type! Bad!
 			break
 		}
-		reader.SendMessageSeparator(int(messageType))
+		reader.SendMessageSeparator(common.ServerMessageType(messageType))
 		reader.PublishBytes([]byte{byte(messageType)})
 
 		parsedMsg, err := msg.Read(c, reader)
diff --git a/vnc/pixel_format.go b/vnc/pixel-format.go
similarity index 100%
rename from vnc/pixel_format.go
rename to vnc/pixel-format.go
diff --git a/vnc/server_messages.go b/vnc/server-messages.go
similarity index 86%
rename from vnc/server_messages.go
rename to vnc/server-messages.go
index aaeb167..f5cddd6 100644
--- a/vnc/server_messages.go
+++ b/vnc/server-messages.go
@@ -27,7 +27,7 @@ func (*FramebufferUpdateMessage) Type() uint8 {
 	return 0
 }
 
-func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) {
+func (fbm *FramebufferUpdateMessage) Read(c common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) {
 
 	// Read off the padding
 	var padding [1]byte
@@ -42,7 +42,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper
 
 	// Build the map of encodings supported
 	encMap := make(map[int32]common.Encoding)
-	for _, enc := range c.Encs {
+	for _, enc := range c.Encodings() {
 		encMap[enc.Type()] = enc
 	}
 
@@ -82,7 +82,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper
 		}
 
 		var err error
-		rect.Enc, err = enc.Read(&c.PixelFormat, rect, r)
+		rect.Enc, err = enc.Read(c.CurrentPixelFormat(), rect, r)
 		if err != nil {
 			return nil, err
 		}
@@ -99,7 +99,7 @@ func (fbm *FramebufferUpdateMessage) Read(c *ClientConn, r *common.RfbReadHelper
 // See RFC 6143 Section 7.6.2
 type SetColorMapEntriesMessage struct {
 	FirstColor uint16
-	Colors     []Color
+	Colors     []common.Color
 }
 
 func (m *SetColorMapEntriesMessage) String() string {
@@ -110,7 +110,7 @@ func (*SetColorMapEntriesMessage) Type() uint8 {
 	return 1
 }
 
-func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) {
+func (*SetColorMapEntriesMessage) Read(c common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) {
 	// Read off the padding
 	var padding [1]byte
 	if _, err := io.ReadFull(r, padding[:]); err != nil {
@@ -127,7 +127,7 @@ func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) (
 		return nil, err
 	}
 
-	result.Colors = make([]Color, numColors)
+	result.Colors = make([]common.Color, numColors)
 	for i := uint16(0); i < numColors; i++ {
 
 		color := &result.Colors[i]
@@ -142,9 +142,9 @@ func (*SetColorMapEntriesMessage) Read(c *ClientConn, r *common.RfbReadHelper) (
 				return nil, err
 			}
 		}
-
+		cmap := c.CurrentColorMap()
 		// Update the connection's color map
-		c.ColorMap[result.FirstColor+i] = *color
+		cmap[result.FirstColor+i] = *color
 	}
 
 	return &result, nil
@@ -163,7 +163,7 @@ func (*BellMessage) Type() uint8 {
 	return 2
 }
 
-func (*BellMessage) Read(*ClientConn, *common.RfbReadHelper) (ServerMessage, error) {
+func (*BellMessage) Read(common.IClientConn, *common.RfbReadHelper) (common.ServerMessage, error) {
 	return new(BellMessage), nil
 }
 
@@ -182,7 +182,7 @@ func (*ServerCutTextMessage) Type() uint8 {
 	return 3
 }
 
-func (*ServerCutTextMessage) Read(conn *ClientConn, r *common.RfbReadHelper) (ServerMessage, error) {
+func (*ServerCutTextMessage) Read(conn common.IClientConn, r *common.RfbReadHelper) (common.ServerMessage, error) {
 	//reader := common.RfbReadHelper{Reader: r}
 
 	// Read off the padding