Further graphviz work; named hkexsh goroutines
| 
						 | 
				
			
			@ -14,41 +14,41 @@ digraph gocallvis {
 | 
			
		|||
    edge [minlen="2"]
 | 
			
		||||
 | 
			
		||||
    subgraph "cluster_focus" {
 | 
			
		||||
        bgcolor="#e6ecfa";
 | 
			
		||||
        fontsize="18";
 | 
			
		||||
bgcolor="#e6ecfa";
 | 
			
		||||
label="main";
 | 
			
		||||
labelloc="t";
 | 
			
		||||
labeljust="c";
 | 
			
		||||
fontsize="18";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexpasswd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh" {
 | 
			
		||||
        fillcolor="lightyellow";
 | 
			
		||||
        penwidth="0.8";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
label="[hkexsh]";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_github.com/jameskeane/bcrypt" {
 | 
			
		||||
        tooltip="package: github.com/jameskeane/bcrypt";
 | 
			
		||||
        penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
tooltip="package: github.com/jameskeane/bcrypt";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[bcrypt]";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
URL="/?f=github.com/jameskeane/bcrypt";
 | 
			
		||||
        
 | 
			
		||||
        "github.com/jameskeane/bcrypt.Salt" [ label="Salt" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "github.com/jameskeane/bcrypt.Salt" [ fillcolor="moccasin" label="Salt" penwidth="1.5" ]
 | 
			
		||||
        "github.com/jameskeane/bcrypt.Hash" [ fillcolor="moccasin" label="Hash" penwidth="1.5" ]
 | 
			
		||||
        "github.com/jameskeane/bcrypt.Match" [ fillcolor="moccasin" label="Match" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,176 +14,176 @@ digraph gocallvis {
 | 
			
		|||
    edge [minlen="2"]
 | 
			
		||||
 | 
			
		||||
    subgraph "cluster_focus" {
 | 
			
		||||
        label="main";
 | 
			
		||||
        bgcolor="#e6ecfa";
 | 
			
		||||
label="main";
 | 
			
		||||
labelloc="t";
 | 
			
		||||
labeljust="c";
 | 
			
		||||
fontsize="18";
 | 
			
		||||
bgcolor="#e6ecfa";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.reqTunnel" [ fillcolor="lightblue" label="reqTunnel" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.launchTuns" [ fillcolor="lightblue" label="launchTuns" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ penwidth="0.5" fillcolor="lightblue" label="rejectUserMsg" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ style="dotted,filled" fillcolor="lightblue" label="shellRemoteToStdin" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode" [ label="doShellMode" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.GetSize" [ fillcolor="lightblue" label="GetSize" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ fillcolor="lightblue" label="handleTermResizes" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ style="dotted,filled" fillcolor="lightblue" label="shellStdinToRemote" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [ fillcolor="lightblue" label="parseNonSwitchArgs" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.main$1" [ fillcolor="lightblue" label="deferRestore" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.sendSessionParams" [ label="sendSessionParams" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.sendSessionParams" [ fillcolor="lightblue" label="sendSessionParams" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [ label="rejectUserMsg" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.main$2" [ fillcolor="lightblue" label="deferCloseChaff" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ fillcolor="lightblue" label="shellRemoteToStdin" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode" [ penwidth="0.5" fillcolor="lightblue" label="doShellMode" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ fillcolor="lightblue" label="handleTermResizes$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.GetSize" [ penwidth="1.5" fillcolor="lightblue" label="GetSize" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [ label="handleTermResizes" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ fillcolor="lightblue" label="shellStdinToRemote" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [ fillcolor="lightblue" label="doShellMode$2$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doCopyMode" [ penwidth="0.5" fillcolor="lightblue" label="doCopyMode" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.doCopyMode" [ fillcolor="lightblue" label="doCopyMode" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.usageShell" [ fillcolor="lightblue" label="usageShell" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.usageCp" [ penwidth="0.5" fillcolor="lightblue" label="usageCp" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexsh.usageCp" [ fillcolor="lightblue" label="usageCp" penwidth="0.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh" {
 | 
			
		||||
        URL="/?f=blitter.com/go/hkexsh";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
label="[hkexsh]";
 | 
			
		||||
style="filled";
 | 
			
		||||
        tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
rank="sink";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
label="[hkexsh]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh.Restore" [ label="Restore" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.MakeRaw" [ fillcolor="moccasin" label="MakeRaw" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.Restore" [ fillcolor="moccasin" label="Restore" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.ReadPassword" [ fillcolor="moccasin" label="ReadPassword" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.ReadPassword" [ penwidth="1.5" fillcolor="moccasin" label="ReadPassword" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.NewSession" [ fillcolor="moccasin" label="NewSession" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        fillcolor="wheat2";
 | 
			
		||||
label="(*Session)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh.Session";
 | 
			
		||||
        tooltip="type: *blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(*Session)";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        tooltip="type: blitter.com/go/hkexsh.Session";
 | 
			
		||||
        fillcolor="wheat2";
 | 
			
		||||
label="(Session)";
 | 
			
		||||
tooltip="type: blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(Session)";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).ConnHost" [ penwidth="1.5" fillcolor="moccasin" label="ConnHost" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).TermType" [ label="TermType" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).AuthCookie" [ label="AuthCookie" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Status" [ fillcolor="moccasin" label="Status" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Op" [ label="Op" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Who" [ label="Who" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Cmd" [ penwidth="1.5" fillcolor="moccasin" label="Cmd" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
 | 
			
		||||
        fontname="bold";
 | 
			
		||||
        penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[hkexnet]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Dial" [ penwidth="1.5" fillcolor="moccasin" label="Dial" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Dial" [ fillcolor="moccasin" label="Dial" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
 | 
			
		||||
        label="(*Conn)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
        tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(*Conn)";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ label="WritePacket" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ fillcolor="moccasin" label="WritePacket" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ label="DisableChaff" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ label="ShutdownChaff" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
 | 
			
		||||
        style="rounded,filled";
 | 
			
		||||
        fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(Conn)";
 | 
			
		||||
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ penwidth="1.5" fillcolor="moccasin" label="Read" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ fillcolor="moccasin" label="GetStatus" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ fillcolor="moccasin" label="Read" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/logger" {
 | 
			
		||||
        rank="sink";
 | 
			
		||||
        style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/logger";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[logger]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/logger";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/logger";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.LogDebug" [ fillcolor="moccasin" label="LogDebug" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.New" [ penwidth="1.5" fillcolor="moccasin" label="New" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.LogDebug" [ label="LogDebug" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.New" [ label="New" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/spinsult" {
 | 
			
		||||
        label="[spinsult]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/spinsult";
 | 
			
		||||
rank="sink";
 | 
			
		||||
        rank="sink";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
label="[spinsult]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/spinsult";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/spinsult";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/spinsult.GetSentence" [ fillcolor="moccasin" label="GetSentence" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_github.com/mattn/go-isatty" {
 | 
			
		||||
        tooltip="package: github.com/mattn/go-isatty";
 | 
			
		||||
        fillcolor="lightyellow";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[isatty]";
 | 
			
		||||
URL="/?f=github.com/mattn/go-isatty";
 | 
			
		||||
tooltip="package: github.com/mattn/go-isatty";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[isatty]";
 | 
			
		||||
URL="/?f=github.com/mattn/go-isatty";
 | 
			
		||||
        
 | 
			
		||||
        "github.com/mattn/go-isatty.IsTerminal" [ fillcolor="moccasin" label="IsTerminal" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			@ -194,15 +194,26 @@ fillcolor="lightyellow";
 | 
			
		|||
    "blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "blitter.com/go/hkexsh/logger.LogDebug" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.reqTunnel" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.launchTuns" -> "blitter.com/go/hkexsh/hkexsh.reqTunnel" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" -> "blitter.com/go/hkexsh/spinsult.GetSentence" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "blitter.com/go/hkexsh/hkexsh.GetSize" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.parseNonSwitchArgs" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexnet.Dial" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "github.com/mattn/go-isatty.IsTerminal" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.MakeRaw" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$1" [ arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.ReadPassword" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh.NewSession" [ color="saddlebrown" ]
 | 
			
		||||
| 
						 | 
				
			
			@ -216,26 +227,15 @@ fillcolor="lightyellow";
 | 
			
		|||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.sendSessionParams" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh/hkexnet.Conn).Read" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" -> "blitter.com/go/hkexsh/spinsult.GetSentence" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.rejectUserMsg" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.main$2" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.launchTuns" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh/hkexnet.Conn).GetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(*blitter.com/go/hkexsh.Session).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$1" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$1" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "blitter.com/go/hkexsh/hkexsh.GetSize" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.handleTermResizes" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes$1" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.handleTermResizes" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2$1" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode$2" -> "blitter.com/go/hkexsh.Restore" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doShellMode" -> "blitter.com/go/hkexsh/hkexsh.doShellMode$2" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "blitter.com/go/hkexsh/hkexsh.doShellMode" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.main" -> "(blitter.com/go/hkexsh.Session).Status" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexsh.doCopyMode" -> "(blitter.com/go/hkexsh.Session).Cmd" [ color="saddlebrown" ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 602 KiB After Width: | Height: | Size: 584 KiB  | 
| 
		 Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 56 KiB  | 
| 
						 | 
				
			
			@ -236,8 +236,8 @@ func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State,
 | 
			
		|||
 | 
			
		||||
	wg.Add(1)
 | 
			
		||||
	// #gv:s/label=\"doShellMode\$1\"/label=\"shellRemoteToStdin\"/
 | 
			
		||||
	// .gv:doShellMode:1:shellRemoteToStdin
 | 
			
		||||
	go func() {
 | 
			
		||||
	// TODO:.gv:doShellMode:1:shellRemoteToStdin
 | 
			
		||||
	shellRemoteToStdout := func() {
 | 
			
		||||
		defer wg.Done()
 | 
			
		||||
		// By deferring a call to wg.Done(),
 | 
			
		||||
		// each goroutine guarantees that it marks
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,8 @@ func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State,
 | 
			
		|||
			log.Println("[* Got EOF *]")
 | 
			
		||||
			_ = hkexsh.Restore(int(os.Stdin.Fd()), oldState) // #nosec
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
	}
 | 
			
		||||
	go shellRemoteToStdout()
 | 
			
		||||
 | 
			
		||||
	// Only look for data from stdin to send to remote end
 | 
			
		||||
	// for interactive sessions.
 | 
			
		||||
| 
						 | 
				
			
			@ -275,8 +276,8 @@ func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State,
 | 
			
		|||
		// Write local stdin to remote end
 | 
			
		||||
		wg.Add(1)
 | 
			
		||||
		// #gv:s/label=\"doShellMode\$2\"/label=\"shellStdinToRemote\"/
 | 
			
		||||
		// .gv:doShellMode:2:shellStdinToRemote
 | 
			
		||||
		go func() {
 | 
			
		||||
		// TODO:.gv:doShellMode:2:shellStdinToRemote
 | 
			
		||||
		shellStdinToRemote := func() {
 | 
			
		||||
			defer wg.Done()
 | 
			
		||||
			//!defer wg.Done()
 | 
			
		||||
			// Copy() expects EOF so this will
 | 
			
		||||
| 
						 | 
				
			
			@ -294,7 +295,8 @@ func doShellMode(isInteractive bool, conn *hkexnet.Conn, oldState *hkexsh.State,
 | 
			
		|||
				log.Println("[Hanging up]")
 | 
			
		||||
				os.Exit(0)
 | 
			
		||||
			}
 | 
			
		||||
		}()
 | 
			
		||||
		}
 | 
			
		||||
		go shellStdinToRemote()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Wait until both stdin and stdout goroutines finish before returning
 | 
			
		||||
| 
						 | 
				
			
			@ -633,7 +635,7 @@ func main() {
 | 
			
		|||
				panic(err)
 | 
			
		||||
			}
 | 
			
		||||
			// #gv:s/label=\"main\$1\"/label=\"deferRestore\"/
 | 
			
		||||
			// .gv:main:1:deferRestore
 | 
			
		||||
			// TODO:.gv:main:1:deferRestore
 | 
			
		||||
			defer func() { _ = hkexsh.Restore(int(os.Stdin.Fd()), oldState) }() // Best effort.
 | 
			
		||||
		} else {
 | 
			
		||||
			log.Println("NOT A TTY")
 | 
			
		||||
| 
						 | 
				
			
			@ -676,7 +678,7 @@ func main() {
 | 
			
		|||
		conn.SetupChaff(chaffFreqMin, chaffFreqMax, chaffBytesMax) // enable client->server chaffing
 | 
			
		||||
		if chaffEnabled {
 | 
			
		||||
			// #gv:s/label=\"main\$2\"/label=\"deferCloseChaff\"/
 | 
			
		||||
			// .gv:main:2:deferCloseChaff
 | 
			
		||||
			// TODO:.gv:main:2:deferCloseChaff
 | 
			
		||||
			conn.EnableChaff() // goroutine, returns immediately
 | 
			
		||||
			defer conn.DisableChaff()
 | 
			
		||||
			defer conn.ShutdownChaff()
 | 
			
		||||
| 
						 | 
				
			
			@ -684,13 +686,14 @@ func main() {
 | 
			
		|||
 | 
			
		||||
		// Keepalive for any tunnels that may exist
 | 
			
		||||
		// #gv:s/label=\"main\$1\"/label=\"tunKeepAlive\"/
 | 
			
		||||
		// .gv:main:1:tunKeepAlive
 | 
			
		||||
		go func() {
 | 
			
		||||
		// TODO:.gv:main:1:tunKeepAlive
 | 
			
		||||
		keepAliveWorker := func() {
 | 
			
		||||
			for {
 | 
			
		||||
				time.Sleep(time.Duration(2) * time.Second)
 | 
			
		||||
				conn.WritePacket([]byte{0, 0}, hkexnet.CSOTunKeepAlive)
 | 
			
		||||
			}
 | 
			
		||||
		}()
 | 
			
		||||
		}
 | 
			
		||||
		go keepAliveWorker()
 | 
			
		||||
 | 
			
		||||
		if shellMode {
 | 
			
		||||
			launchTuns(&conn, remoteHost, tunSpecStr)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,115 +14,60 @@ digraph gocallvis {
 | 
			
		|||
    edge [minlen="2"]
 | 
			
		||||
 | 
			
		||||
    subgraph "cluster_focus" {
 | 
			
		||||
        fontsize="18";
 | 
			
		||||
bgcolor="#e6ecfa";
 | 
			
		||||
        bgcolor="#e6ecfa";
 | 
			
		||||
label="main";
 | 
			
		||||
labelloc="t";
 | 
			
		||||
labeljust="c";
 | 
			
		||||
fontsize="18";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ label="runServerToClientCopyAs" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main" [ fillcolor="lightblue" label="main" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$1" [ fillcolor="lightblue" label="main$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ penwidth="1.5" fillcolor="lightblue" label="GenAuthToken" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" [ fillcolor="lightblue" label="runServerToClientCopyAs" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$1" [ label="main$1" style="dotted,filled" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs" [ fillcolor="lightblue" label="runShellAs" penwidth="0.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ fillcolor="lightblue" label="runShellAs$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ label="runShellAs$2" style="dotted,filled" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ fillcolor="lightblue" label="runShellAs$2" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ fillcolor="lightblue" label="runShellAs$3" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ fillcolor="lightblue" label="runShellAs$4" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ style="dotted,filled" fillcolor="lightblue" label="runShellAs$4" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main" [ label="main" penwidth="0.5" fillcolor="lightblue" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$2" [ fillcolor="lightblue" label="main$2" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [ penwidth="1.5" fillcolor="lightblue" label="GenAuthToken" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.main$2$1" [ fillcolor="lightblue" label="main$2$1" style="dotted,filled" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" [ fillcolor="lightblue" label="runClientToServerCopyAs" penwidth="0.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_blitter.com/go/goutmp" {
 | 
			
		||||
        fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
URL="/?f=blitter.com/go/goutmp";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[goutmp]";
 | 
			
		||||
URL="/?f=blitter.com/go/goutmp";
 | 
			
		||||
tooltip="package: blitter.com/go/goutmp";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
label="[goutmp]";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/goutmp.Unput_utmp" [ fillcolor="moccasin" label="Unput_utmp" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/goutmp.GetHost" [ fillcolor="moccasin" label="GetHost" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/goutmp.Put_utmp" [ penwidth="1.5" fillcolor="moccasin" label="Put_utmp" ]
 | 
			
		||||
        "blitter.com/go/goutmp.Put_utmp" [ fillcolor="moccasin" label="Put_utmp" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/goutmp.Unput_utmp" [ fillcolor="moccasin" label="Unput_utmp" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/goutmp.Put_lastlog_entry" [ fillcolor="moccasin" label="Put_lastlog_entry" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh" {
 | 
			
		||||
        fontsize="16";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
rank="sink";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
label="[hkexsh]";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh.AuthUserByToken" [ fillcolor="moccasin" label="AuthUserByToken" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.AuthUserByPasswd" [ penwidth="1.5" fillcolor="moccasin" label="AuthUserByPasswd" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        fillcolor="wheat2";
 | 
			
		||||
label="(*Session)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetOp" [ fillcolor="moccasin" label="SetOp" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetConnHost" [ penwidth="1.5" fillcolor="moccasin" label="SetConnHost" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetTermType" [ fillcolor="moccasin" label="SetTermType" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetCmd" [ label="SetCmd" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ fillcolor="moccasin" label="SetAuthCookie" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ fillcolor="moccasin" label="ClearAuthCookie" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        fillcolor="wheat2";
 | 
			
		||||
label="(Session)";
 | 
			
		||||
tooltip="type: blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Who" [ fillcolor="moccasin" label="Who" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).AuthCookie" [ fillcolor="moccasin" label="AuthCookie" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).TermType" [ fillcolor="moccasin" label="TermType" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
 | 
			
		||||
        rank="sink";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
label="[hkexsh]";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
label="[hkexnet]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Init" [ fillcolor="moccasin" label="Init" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.AuthUserByToken" [ fillcolor="moccasin" label="AuthUserByToken" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh.AuthUserByPasswd" [ fillcolor="moccasin" label="AuthUserByPasswd" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
 | 
			
		||||
        label="(*Conn)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        label="(*Session)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
| 
						 | 
				
			
			@ -130,13 +75,68 @@ labelloc="b";
 | 
			
		|||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ fillcolor="moccasin" label="EnableChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetOp" [ fillcolor="moccasin" label="SetOp" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetWho" [ fillcolor="moccasin" label="SetWho" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetConnHost" [ penwidth="1.5" fillcolor="moccasin" label="SetConnHost" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetTermType" [ label="SetTermType" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetCmd" [ fillcolor="moccasin" label="SetCmd" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).SetAuthCookie" [ penwidth="1.5" fillcolor="moccasin" label="SetAuthCookie" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh.Session).ClearAuthCookie" [ fillcolor="moccasin" label="ClearAuthCookie" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh.Session" {
 | 
			
		||||
        tooltip="type: blitter.com/go/hkexsh.Session";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(Session)";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Op" [ fillcolor="moccasin" label="Op" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Who" [ label="Who" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).ConnHost" [ fillcolor="moccasin" label="ConnHost" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).Cmd" [ fillcolor="moccasin" label="Cmd" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).AuthCookie" [ penwidth="1.5" fillcolor="moccasin" label="AuthCookie" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh.Session).TermType" [ penwidth="1.5" fillcolor="moccasin" label="TermType" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/hkexnet" {
 | 
			
		||||
        URL="/?f=blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[hkexnet]";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/hkexnet";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Init" [ penwidth="1.5" fillcolor="moccasin" label="Init" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/hkexnet.Listen" [ fillcolor="moccasin" label="Listen" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
        subgraph "cluster_*blitter.com/go/hkexsh/hkexnet.Conn" {
 | 
			
		||||
        fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(*Conn)";
 | 
			
		||||
tooltip="type: *blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ label="EnableChaff" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ fillcolor="moccasin" label="DisableChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ fillcolor="moccasin" label="ShutdownChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ fillcolor="moccasin" label="SetStatus" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ fillcolor="moccasin" label="SetupChaff" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).RemoteAddr" [ fillcolor="moccasin" label="RemoteAddr" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ label="SetStatus" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.Conn).WritePacket" [ penwidth="1.5" fillcolor="moccasin" label="WritePacket" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -151,19 +151,19 @@ style="rounded,filled";
 | 
			
		|||
fillcolor="wheat2";
 | 
			
		||||
label="(*HKExListener)";
 | 
			
		||||
        
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ fillcolor="moccasin" label="Accept" penwidth="1.5" ]
 | 
			
		||||
        "(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ label="Accept" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/hkexnet.Conn" {
 | 
			
		||||
        fontsize="15";
 | 
			
		||||
fontcolor="#222222";
 | 
			
		||||
        fontcolor="#222222";
 | 
			
		||||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
fillcolor="wheat2";
 | 
			
		||||
label="(Conn)";
 | 
			
		||||
tooltip="type: blitter.com/go/hkexsh/hkexnet.Conn";
 | 
			
		||||
penwidth="0.5";
 | 
			
		||||
fontsize="15";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.Conn).Write" [ fillcolor="moccasin" label="Write" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			@ -179,57 +179,66 @@ fontcolor="#222222";
 | 
			
		|||
labelloc="b";
 | 
			
		||||
style="rounded,filled";
 | 
			
		||||
        
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ fillcolor="moccasin" label="Close" penwidth="1.5" ]
 | 
			
		||||
        "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ label="Close" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_blitter.com/go/hkexsh/logger" {
 | 
			
		||||
        URL="/?f=blitter.com/go/hkexsh/logger";
 | 
			
		||||
tooltip="package: blitter.com/go/hkexsh/logger";
 | 
			
		||||
        tooltip="package: blitter.com/go/hkexsh/logger";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
label="[logger]";
 | 
			
		||||
URL="/?f=blitter.com/go/hkexsh/logger";
 | 
			
		||||
style="filled";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
rank="sink";
 | 
			
		||||
label="[logger]";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
        
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.LogNotice" [ fillcolor="moccasin" label="LogNotice" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.New" [ fillcolor="moccasin" label="New" penwidth="1.5" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.LogNotice" [ label="LogNotice" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "blitter.com/go/hkexsh/logger.LogErr" [ fillcolor="moccasin" label="LogErr" penwidth="1.5" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        subgraph "cluster_github.com/kr/pty" {
 | 
			
		||||
        style="filled";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
rank="sink";
 | 
			
		||||
        rank="sink";
 | 
			
		||||
label="[pty]";
 | 
			
		||||
URL="/?f=github.com/kr/pty";
 | 
			
		||||
tooltip="package: github.com/kr/pty";
 | 
			
		||||
penwidth="0.8";
 | 
			
		||||
fillcolor="lightyellow";
 | 
			
		||||
fontname="bold";
 | 
			
		||||
fontsize="16";
 | 
			
		||||
style="filled";
 | 
			
		||||
URL="/?f=github.com/kr/pty";
 | 
			
		||||
        
 | 
			
		||||
        "github.com/kr/pty.Start" [ label="Start" penwidth="1.5" fillcolor="moccasin" ]
 | 
			
		||||
        "github.com/kr/pty.Setsize" [ fillcolor="moccasin" label="Setsize" penwidth="1.5" ]
 | 
			
		||||
        "github.com/kr/pty.Start" [ fillcolor="moccasin" label="Start" penwidth="1.5" ]
 | 
			
		||||
        "github.com/kr/pty.Setsize" [ penwidth="1.5" fillcolor="moccasin" label="Setsize" ]
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2$1" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runServerToClientCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$1" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs$2" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/logger.New" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Init" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$1" -> "blitter.com/go/hkexsh/logger.LogNotice" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexshd.main$1" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "blitter.com/go/hkexsh/hkexnet.Listen" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "(blitter.com/go/hkexsh/hkexnet.HKExListener).Close" [ color="saddlebrown" arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "(*blitter.com/go/hkexsh/hkexnet.HKExListener).Accept" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetupChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).Close" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
| 
						 | 
				
			
			@ -253,20 +262,11 @@ fontname="bold";
 | 
			
		|||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.GetHost" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.GenAuthToken" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "(blitter.com/go/hkexsh.Session).TermType" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "github.com/kr/pty.Start" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$1" [ arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs$2" -> "github.com/kr/pty.Setsize" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$2" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$3" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).DisableChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).ShutdownChaff" [ arrowhead="normalnoneodiamond" color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "blitter.com/go/hkexsh/hkexshd.runShellAs$4" [ arrowhead="normalnoneodot" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runShellAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.runShellAs" [  ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/logger.LogErr" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).SetStatus" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_utmp" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2$1" -> "blitter.com/go/goutmp.Unput_utmp" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/hkexsh/hkexshd.main$2$1" [ arrowhead="normalnoneodiamond" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.main$2" -> "blitter.com/go/goutmp.Put_lastlog_entry" [ color="saddlebrown" ]
 | 
			
		||||
    "blitter.com/go/hkexsh/hkexshd.runClientToServerCopyAs" -> "(*blitter.com/go/hkexsh/hkexnet.Conn).EnableChaff" [ color="saddlebrown" ]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 Before Width: | Height: | Size: 677 KiB After Width: | Height: | Size: 607 KiB  | 
| 
		 Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB  |