func CellIDFromFacePosLevel(face int, pos uint64, level int) CellID {
	return CellID(uint64(face)<<posBits + pos | 1).Parent(level)
}
CellIDFromFacePosLevel returns a cell given its face in the range
[0,5], the 61-bit Hilbert curve position pos within that face, and
the level in the range [0,maxLevel]. The position in the cell ID
will be truncated to correspond to the Hilbert curve position at
the center of the returned cell.
package s2
import (
	"bytes"
	"fmt"
	"io"
	"math"
	"sort"
	"strconv"
	"strings"
	"github.com/golang/geo/r1"
	"github.com/golang/geo/r2"
	"github.com/golang/geo/r3"
	"github.com/golang/geo/s1"
)
type CellID uint64
const SentinelCellID = CellID(^uint64(0))
func sortCellIDs(ci []CellID) {
	sort.Sort(cellIDs(ci))
}
type cellIDs []CellID
func (c cellIDs) Len() int           { return len(c) }
func (c cellIDs) Swap(i, j int)      { c[i], c[j] = c[j], c[i] }
func (c cellIDs) Less(i, j int) bool { return c[i] < c[j] }
const (
	faceBits = 3
	numFaces = 6
	maxLevel = 30
	posBits = 2*maxLevel + 1
	maxSize = 1 << maxLevel
	wrapOffset = uint64(numFaces) << posBits
)