code: func expandNode(hash hashNode, n node) node {
  	switch n := n.(type) {
  	case *rawShortNode:
  		// Short nodes need key and child expansion
  		return &shortNode{
  			Key: compactToHex(n.Key),
  			Val: expandNode(nil, n.Val),
  			flags: nodeFlag{
  				hash: hash,
  			},
  		}
  
  	case rawFullNode:
  		// Full nodes need child expansion
  		node := &fullNode{
  			flags: nodeFlag{
  				hash: hash,
  			},
  		}
  		for i := 0; i < len(node.Children); i++ {
  			if n[i] != nil {
  				node.Children[i] = expandNode(nil, n[i])
  			}
  		}
  		return node
  
  	case valueNode, hashNode:
  		return n
  
  	default:
  		panic(fmt.Sprintf("unknown node type: %T", n))
  	}
  }
docs: // expandNode traverses the node hierarchy of a collapsed storage node and converts
  // all fields and keys into expanded memory form.