func validUtf8(data []int) bool {
	n, cnt := len(data), 0
	for i, m := 0, 0; i < n; i++ {
		if cnt != 0 {
			if data[i]>>6 != 2 {
				return false
			}
			cnt--
			continue
		}
		// b10000000 = 0x80
		for m = 0x80; m&data[i] != 0; m >>= 1 {
		}
		switch m {
		case 0x80: // 0xxxxxxx
		case 0x20: // 110xxxxx
			cnt = 1
		case 0x10: // 1110xxxx
			cnt = 2
		case 0x08: // 11110xxx
			cnt = 3
		default:
			return false
		}
	}
	return cnt == 0
}