github.com/janelia-flyem/dvid@v1.0.0/datatype/labelvol/labelvol_test.go (about) 1 // Tests sparsevol variants and merge/split. 2 // Test body data is at end of file. 3 // TODO: Remove hardwiring of tests to assume block size = 32, including data. 4 5 package labelvol 6 7 import ( 8 "bytes" 9 "compress/gzip" 10 "encoding/binary" 11 "encoding/json" 12 "fmt" 13 "io" 14 "log" 15 "net/http" 16 "reflect" 17 "strings" 18 "sync" 19 "testing" 20 21 "github.com/janelia-flyem/dvid/datastore" 22 "github.com/janelia-flyem/dvid/dvid" 23 "github.com/janelia-flyem/dvid/server" 24 25 lz4 "github.com/janelia-flyem/go/golz4-updated" 26 ) 27 28 var ( 29 labelsT datastore.TypeService 30 labelvolT datastore.TypeService 31 testMu sync.Mutex 32 ) 33 34 // Sets package-level testRepo and TestVersionID 35 func initTestRepo() (dvid.UUID, dvid.VersionID) { 36 testMu.Lock() 37 defer testMu.Unlock() 38 var err error 39 if labelsT == nil { 40 labelsT, err = datastore.TypeServiceByName("labelblk") 41 if err != nil { 42 log.Fatalf("Can't get labelblk type: %v\n", err) 43 } 44 } 45 if labelvolT == nil { 46 labelvolT, err = datastore.TypeServiceByName("labelvol") 47 if err != nil { 48 log.Fatalf("Can't get labelvol type: %v\n", err) 49 } 50 } 51 return datastore.NewTestRepo() 52 } 53 54 // A single label block within the volume 55 type testBody struct { 56 label uint64 57 offset, size dvid.Point3d 58 blockSpans dvid.Spans 59 voxelSpans dvid.Spans 60 } 61 62 var emptyBody = testBody{ 63 label: 0, 64 offset: dvid.Point3d{}, 65 size: dvid.Point3d{}, 66 blockSpans: dvid.Spans{}, 67 voxelSpans: dvid.Spans{}, 68 } 69 70 // Makes sure the coarse sparse volume encoding matches the body. 71 func (b testBody) checkCoarse(t *testing.T, encoding []byte) { 72 // Get to the # spans and RLE in encoding 73 spansEncoding := encoding[8:] 74 var spans dvid.Spans 75 if err := spans.UnmarshalBinary(spansEncoding); err != nil { 76 t.Errorf("Error in decoding coarse sparse volume: %v\n", err) 77 return 78 } 79 80 // Check those spans match the body voxels. 81 if !reflect.DeepEqual(spans, b.blockSpans) { 82 t.Errorf("Expected spans for label %d:\n%s\nGot spans:\n%s\n", b.label, b.blockSpans, spans) 83 } 84 } 85 86 // Makes sure the sparse volume encoding matches the actual body voxels. 87 func (b testBody) checkSparseVol(t *testing.T, encoding []byte, bounds dvid.OptionalBounds) { 88 if len(encoding) < 12 { 89 t.Fatalf("Bad encoded sparsevol received. Only %d bytes\n", len(encoding)) 90 } 91 92 // Get to the # spans and RLE in encoding 93 spansEncoding := encoding[8:] 94 var spans dvid.Spans 95 if err := spans.UnmarshalBinary(spansEncoding); err != nil { 96 t.Fatalf("Error in decoding sparse volume: %v\n", err) 97 } 98 99 // Create potentially bounded spans 100 expected := dvid.Spans{} 101 if bounds.IsSet() { 102 for _, span := range b.voxelSpans { 103 if bounds.OutsideY(span[1]) || bounds.OutsideZ(span[0]) { 104 continue 105 } 106 expected = append(expected, span) 107 } 108 } else { 109 expected = b.voxelSpans 110 } 111 112 // Check those spans match the body voxels. 113 gotNorm := spans.Normalize() 114 expectNorm := expected.Normalize() 115 if !reflect.DeepEqual(gotNorm, expectNorm) { 116 for _, got := range gotNorm { 117 bad := true 118 for _, expect := range expectNorm { 119 if reflect.DeepEqual(got, expect) { 120 bad = false 121 } 122 } 123 if bad { 124 fmt.Printf("Got unexpected span: %s\n", got) 125 } 126 } 127 for _, expect := range expectNorm { 128 bad := true 129 for _, got := range gotNorm { 130 if reflect.DeepEqual(got, expect) { 131 bad = false 132 } 133 } 134 if bad { 135 fmt.Printf("Never got expected span: %s\n", expect) 136 } 137 } 138 t.Errorf("Expected spans for label %d:\n%s\nGot spans:\n%s\nAfter Norm:%s\n", b.label, expectNorm, spans, gotNorm) 139 } 140 } 141 142 // Sees if the given block span has any of this test body label in it. 143 func (b testBody) isDeleted(t *testing.T, encoding []byte, bspan dvid.Span) bool { 144 // Get to the # spans and RLE in encoding 145 spansEncoding := encoding[8:] 146 var spans dvid.Spans 147 if err := spans.UnmarshalBinary(spansEncoding); err != nil { 148 t.Fatalf("Error in decoding sparse volume: %v\n", err) 149 return false 150 } 151 152 // Iterate true spans to see if any are in the blocks given. 153 for _, span := range spans { 154 bx0 := span[2] / 32 155 bx1 := span[3] / 32 156 by := span[1] / 32 157 bz := span[0] / 32 158 159 within_x := (bx0 >= bspan[2] && bx0 <= bspan[3]) || (bx1 >= bspan[2] && bx1 <= bspan[3]) 160 if bz == bspan[0] && by == bspan[1] && within_x { 161 return false 162 } 163 } 164 return true 165 } 166 167 func checkSpans(t *testing.T, encoding []byte, minx, maxx int32) { 168 // Get to the # spans and RLE in encoding 169 spansEncoding := encoding[8:] 170 var spans dvid.Spans 171 if err := spans.UnmarshalBinary(spansEncoding); err != nil { 172 t.Errorf("Error in decoding coarse sparse volume: %v\n", err) 173 return 174 } 175 for _, span := range spans { 176 if span[2] < minx { 177 t.Errorf("Found span violating min x %d: %s\n", minx, span) 178 return 179 } 180 if span[3] > maxx { 181 t.Errorf("Found span violating max x %d: %s\n", maxx, span) 182 } 183 } 184 } 185 186 // A slice of bytes representing 3d label volume 187 type testVolume struct { 188 data []byte 189 size dvid.Point3d 190 } 191 192 func newTestVolume(nx, ny, nz int32) *testVolume { 193 return &testVolume{ 194 data: make([]byte, nx*ny*nz*8), 195 size: dvid.Point3d{nx, ny, nz}, 196 } 197 } 198 199 // Sets voxels in body to given label. 200 func (v *testVolume) addBody(body testBody, label uint64) { 201 nx := v.size[0] 202 nxy := nx * v.size[1] 203 for _, span := range body.voxelSpans { 204 z, y, x0, x1 := span.Unpack() 205 p := (z*nxy + y*nx) * 8 206 for i := p + x0*8; i <= p+x1*8; i += 8 { 207 binary.LittleEndian.PutUint64(v.data[i:i+8], label) 208 } 209 } 210 } 211 212 // Add a label to a subvolume. 213 func (v *testVolume) addSubvol(origin, size dvid.Point3d, label uint64) { 214 nx := v.size[0] 215 nxy := nx * v.size[1] 216 spanBytes := size[0] * 8 217 buf := make([]byte, spanBytes) 218 for x := int32(0); x < size[0]; x++ { 219 binary.LittleEndian.PutUint64(buf[x*8:x*8+8], label) 220 } 221 for z := origin[2]; z < origin[2]+size[2]; z++ { 222 for y := origin[1]; y < origin[1]+size[1]; y++ { 223 i := (z*nxy + y*nx + origin[0]) * 8 224 copy(v.data[i:i+spanBytes], buf) 225 } 226 } 227 } 228 229 // Put label data into given data instance. 230 func (v *testVolume) put(t *testing.T, uuid dvid.UUID, name string) { 231 apiStr := fmt.Sprintf("%snode/%s/%s/raw/0_1_2/%d_%d_%d/0_0_0", server.WebAPIPath, 232 uuid, name, v.size[0], v.size[1], v.size[2]) 233 server.TestHTTP(t, "POST", apiStr, bytes.NewBuffer(v.data)) 234 } 235 236 func (v *testVolume) putMutable(t *testing.T, uuid dvid.UUID, name string) { 237 apiStr := fmt.Sprintf("%snode/%s/%s/raw/0_1_2/%d_%d_%d/0_0_0?mutate=true", server.WebAPIPath, 238 uuid, name, v.size[0], v.size[1], v.size[2]) 239 server.TestHTTP(t, "POST", apiStr, bytes.NewBuffer(v.data)) 240 } 241 242 func (v *testVolume) get(t *testing.T, uuid dvid.UUID, name string) { 243 apiStr := fmt.Sprintf("%snode/%s/%s/raw/0_1_2/%d_%d_%d/0_0_0", server.WebAPIPath, 244 uuid, name, v.size[0], v.size[1], v.size[2]) 245 v.data = server.TestHTTP(t, "GET", apiStr, nil) 246 } 247 248 func (v *testVolume) getVoxel(pt dvid.Point3d) uint64 { 249 nx := v.size[0] 250 nxy := nx * v.size[1] 251 i := (pt[2]*nxy + pt[1]*nx + pt[0]) * 8 252 return binary.LittleEndian.Uint64(v.data[i : i+8]) 253 } 254 255 func (v *testVolume) verifyLabel(t *testing.T, expected uint64, x, y, z int32) { 256 pt := dvid.Point3d{x, y, z} 257 label := v.getVoxel(pt) 258 if label != expected { 259 t.Errorf("Expected label %d at %s but got %d instead\n", expected, pt, label) 260 } 261 } 262 263 func (v *testVolume) equals(v2 *testVolume) error { 264 if !v.size.Equals(v2.size) { 265 return fmt.Errorf("volume sizes are not equal") 266 } 267 if len(v.data) != len(v2.data) { 268 return fmt.Errorf("data lengths are not equal") 269 } 270 for i, value := range v.data { 271 if value != v2.data[i] { 272 return fmt.Errorf("For element %d, found value %d != %d\n", i, value, v2.data[i]) 273 } 274 } 275 return nil 276 } 277 278 // Returns true if all voxels in test volume for given body has label. 279 func (v *testVolume) isLabel(label uint64, body *testBody) bool { 280 nx := v.size[0] 281 nxy := nx * v.size[1] 282 for _, span := range body.voxelSpans { 283 z, y, x0, x1 := span.Unpack() 284 p := (z*nxy + y*nx) * 8 285 for i := p + x0*8; i <= p+x1*8; i += 8 { 286 curLabel := binary.LittleEndian.Uint64(v.data[i : i+8]) 287 if curLabel != label { 288 return false 289 } 290 } 291 } 292 return true 293 } 294 295 // Returns true if any voxel in test volume has given label. 296 func (v *testVolume) hasLabel(label uint64, body *testBody) bool { 297 nx := v.size[0] 298 nxy := nx * v.size[1] 299 for _, span := range body.voxelSpans { 300 z, y, x0, x1 := span.Unpack() 301 p := (z*nxy + y*nx) * 8 302 for i := p + x0*8; i <= p+x1*8; i += 8 { 303 curLabel := binary.LittleEndian.Uint64(v.data[i : i+8]) 304 if curLabel == label { 305 return true 306 } 307 } 308 } 309 return false 310 } 311 312 type mergeJSON string 313 314 func (mjson mergeJSON) send(t *testing.T, uuid dvid.UUID, name string) { 315 apiStr := fmt.Sprintf("%snode/%s/%s/merge", server.WebAPIPath, uuid, name) 316 server.TestHTTP(t, "POST", apiStr, bytes.NewBufferString(string(mjson))) 317 } 318 319 func createLabelTestVolume(t *testing.T, uuid dvid.UUID, name string) *testVolume { 320 // Setup test label blocks that are non-intersecting. 321 volume := newTestVolume(128, 128, 128) 322 volume.addBody(body1, 1) 323 volume.addBody(body2, 2) 324 volume.addBody(body3, 3) 325 volume.addBody(body4, 4) 326 327 // Send data over HTTP to populate a data instance 328 volume.put(t, uuid, name) 329 return volume 330 } 331 332 func createLabelTest2Volume(t *testing.T, uuid dvid.UUID, name string) *testVolume { 333 // Setup test label blocks that are non-intersecting. 334 volume := newTestVolume(128, 128, 128) 335 volume.addBody(body6, 6) 336 volume.addBody(body7, 7) 337 338 // Send data over HTTP to populate a data instance using mutable flag 339 volume.putMutable(t, uuid, name) 340 return volume 341 } 342 343 func TestBadSyncBlockSize(t *testing.T) { 344 if err := server.OpenTest(); err != nil { 345 t.Fatalf("can't open test server: %v\n", err) 346 } 347 defer server.CloseTest() 348 349 uuid, _ := initTestRepo() 350 var config dvid.Config 351 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 352 server.CreateTestInstance(t, uuid, "labelvol", "bodies2", config) 353 config.Set("BlockSize", "128,128,128") 354 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 355 356 url := fmt.Sprintf("%snode/%s/bodies/sync", server.WebAPIPath, uuid) 357 msg := `{"sync": "labels"}` 358 server.TestBadHTTP(t, "POST", url, strings.NewReader(msg)) 359 360 server.CreateTestSync(t, uuid, "bodies2", "labels") 361 } 362 363 func TestSparseVolumes(t *testing.T) { 364 if err := server.OpenTest(); err != nil { 365 t.Fatalf("can't open test server: %v\n", err) 366 } 367 defer server.CloseTest() 368 369 // Create testbed volume and data instances 370 uuid, _ := initTestRepo() 371 var config dvid.Config 372 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 373 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 374 server.CreateTestSync(t, uuid, "labels", "bodies") 375 server.CreateTestSync(t, uuid, "bodies", "labels") 376 377 // Populate the labels, which should automatically populate the labelvol 378 _ = createLabelTestVolume(t, uuid, "labels") 379 380 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 381 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 382 } 383 384 badReqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/0", server.WebAPIPath, uuid, "bodies") 385 server.TestBadHTTP(t, "GET", badReqStr, nil) 386 387 for _, label := range []uint64{1, 3, 4} { 388 // Get the coarse sparse volumes for each label and make sure they are correct. 389 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol-coarse/%d", server.WebAPIPath, uuid, "bodies", label) 390 encoding := server.TestHTTP(t, "GET", reqStr, nil) 391 bodies[label-1].checkCoarse(t, encoding) 392 } 393 394 for _, label := range []uint64{1, 2, 3, 4} { 395 // Check fast HEAD requests 396 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", label) 397 resp := server.TestHTTPResponse(t, "HEAD", reqStr, nil) 398 if resp.Code != http.StatusOK { 399 t.Errorf("HEAD on %s did not return OK. Status = %d\n", reqStr, resp.Code) 400 } 401 402 // Check full sparse volumes 403 encoding := server.TestHTTP(t, "GET", reqStr, nil) 404 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 405 406 // Check with lz4 compression 407 compressed := server.TestHTTP(t, "GET", reqStr+"?compression=lz4", nil) 408 if err := lz4.Uncompress(compressed, encoding); err != nil { 409 t.Fatalf("error uncompressing lz4: %v\n", err) 410 } 411 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 412 413 // Check with gzip compression 414 compressed = server.TestHTTP(t, "GET", reqStr+"?compression=gzip", nil) 415 b := bytes.NewBuffer(compressed) 416 var err error 417 r, err := gzip.NewReader(b) 418 if err != nil { 419 t.Fatalf("error creating gzip reader: %v\n", err) 420 } 421 var buffer bytes.Buffer 422 _, err = io.Copy(&buffer, r) 423 if err != nil { 424 t.Fatalf("error copying gzip data: %v\n", err) 425 } 426 err = r.Close() 427 if err != nil { 428 t.Fatalf("error closing gzip: %v\n", err) 429 } 430 encoding = buffer.Bytes() 431 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 432 433 // Check Y/Z restriction 434 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d?miny=30&maxy=50&minz=20&maxz=40", server.WebAPIPath, uuid, "bodies", label) 435 encoding = server.TestHTTP(t, "GET", reqStr, nil) 436 var bound dvid.OptionalBounds 437 bound.SetMinY(30) 438 bound.SetMaxY(50) 439 bound.SetMinZ(20) 440 bound.SetMaxZ(40) 441 bodies[label-1].checkSparseVol(t, encoding, bound) 442 443 // Check X restriction 444 minx := int32(20) 445 maxx := int32(47) 446 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d?minx=%d&maxx=%d", server.WebAPIPath, uuid, "bodies", label, minx, maxx) 447 encoding = server.TestHTTP(t, "GET", reqStr, nil) 448 checkSpans(t, encoding, minx, maxx) 449 } 450 451 // Make sure non-existent bodies return proper HEAD responses. 452 headReq := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 10) 453 resp := server.TestHTTPResponse(t, "HEAD", headReq, nil) 454 if resp.Code != http.StatusNoContent { 455 t.Errorf("HEAD on %s did not return 204 (No Content). Status = %d\n", headReq, resp.Code) 456 } 457 458 // Commit this node and create branch for deletion testing. 459 if err := datastore.Commit(uuid, "base segmentation", nil); err != nil { 460 t.Errorf("Unable to lock root node %s: %v\n", uuid, err) 461 } 462 463 uuid2, err := datastore.NewVersion(uuid, "deletion test", "", nil) 464 if err != nil { 465 t.Fatalf("Unable to create new version off node %s: %v\n", uuid, err) 466 } 467 468 // Delete an area 469 delReq := fmt.Sprintf("%snode/%s/%s/area/2/96_64_32/0_32_32", server.WebAPIPath, uuid2, "bodies") 470 server.TestHTTP(t, "DELETE", delReq, nil) 471 472 // Read the area to make sure they are gone. 473 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/2", server.WebAPIPath, uuid2, "bodies") 474 encoding := server.TestHTTP(t, "GET", reqStr, nil) 475 body2cropped.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 476 477 delReq = fmt.Sprintf("%snode/%s/%s/area/2/95_64_32/0_32_32", server.WebAPIPath, uuid2, "bodies") 478 server.TestBadHTTP(t, "DELETE", delReq, nil) 479 480 delReq = fmt.Sprintf("%snode/%s/%s/area/2/96_64_32/0_32_31", server.WebAPIPath, uuid2, "bodies") 481 server.TestBadHTTP(t, "DELETE", delReq, nil) 482 483 /* 484 // Make sure those blocks are still in the root uuid. 485 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 2) 486 encoding = server.TestHTTP(t, "GET", reqStr, nil) 487 if bodies[1].isDeleted(t, encoding, dvid.Span{1, 1, 0, 1}) { 488 t.Errorf("Expected RLEs to be presented in label 2 root undeleted blocks. Failed.\n") 489 } 490 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 1) 491 encoding = server.TestHTTP(t, "GET", reqStr, nil) 492 if bodies[0].isDeleted(t, encoding, dvid.Span{1, 1, 0, 1}) { 493 t.Errorf("Expected RLEs to be presented in label 1 root undeleted blocks. Failed.\n") 494 } 495 */ 496 } 497 498 func TestMergeLabels(t *testing.T) { 499 if err := server.OpenTest(); err != nil { 500 t.Fatalf("can't open test server: %v\n", err) 501 } 502 defer server.CloseTest() 503 504 // Create testbed volume and data instances 505 uuid, _ := initTestRepo() 506 var config dvid.Config 507 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 508 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 509 server.CreateTestSync(t, uuid, "labels", "bodies") 510 server.CreateTestSync(t, uuid, "bodies", "labels") 511 512 expected := createLabelTestVolume(t, uuid, "labels") 513 expected.addBody(body3, 2) 514 515 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 516 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 517 } 518 519 // Make sure max label is consistent 520 reqStr := fmt.Sprintf("%snode/%s/%s/maxlabel", server.WebAPIPath, uuid, "bodies") 521 r := server.TestHTTP(t, "GET", reqStr, nil) 522 jsonVal := make(map[string]uint64) 523 if err := json.Unmarshal(r, &jsonVal); err != nil { 524 t.Errorf("Unable to get maxlabel from server. Instead got: %v\n", jsonVal) 525 } 526 maxlabel, ok := jsonVal["maxlabel"] 527 if !ok { 528 t.Errorf("The maxlabel query did not yield max label. Instead got: %v\n", jsonVal) 529 } 530 if maxlabel != 4 { 531 t.Errorf("Expected max label to be 4, instead got %d\n", maxlabel) 532 } 533 534 // Test merge of 3 into 2 535 testMerge := mergeJSON(`[2, 3]`) 536 testMerge.send(t, uuid, "bodies") 537 538 // Make sure label 3 sparsevol has been removed. 539 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 3) 540 server.TestBadHTTP(t, "GET", reqStr, nil) 541 542 // Make sure label changes are correct after completion 543 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 544 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 545 } 546 547 retrieved := newTestVolume(128, 128, 128) 548 retrieved.get(t, uuid, "labels") 549 if len(retrieved.data) != 8*128*128*128 { 550 t.Errorf("Retrieved labelvol volume is incorrect size\n") 551 } 552 if !retrieved.isLabel(2, &body2) { 553 t.Errorf("Expected label 2 original voxels to remain. Instead some were removed.\n") 554 } 555 if retrieved.hasLabel(3, &body3) { 556 t.Errorf("Found label 3 when all label 3 should have been merged into label 2!\n") 557 } 558 if !retrieved.isLabel(2, &body3) { 559 t.Errorf("Incomplete merging. Label 2 should have taken over full extent of label 3\n") 560 } 561 if err := retrieved.equals(expected); err != nil { 562 t.Errorf("Merged label volume: %v\n", err) 563 } 564 } 565 566 func TestSplitLabel(t *testing.T) { 567 if err := server.OpenTest(); err != nil { 568 t.Fatalf("can't open test server: %v\n", err) 569 } 570 defer server.CloseTest() 571 572 // Create testbed volume and data instances 573 uuid, _ := initTestRepo() 574 var config dvid.Config 575 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 576 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 577 server.CreateTestSync(t, uuid, "labels", "bodies") 578 server.CreateTestSync(t, uuid, "bodies", "labels") 579 580 // Post label volume and setup expected volume after split. 581 expected := createLabelTestVolume(t, uuid, "labels") 582 expected.addBody(bodysplit, 5) 583 584 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 585 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 586 } 587 588 // Make sure sparsevol for original body 4 is correct 589 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 4) 590 encoding := server.TestHTTP(t, "GET", reqStr, nil) 591 fmt.Printf("Checking original body 4 is correct\n") 592 body4.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 593 594 // Create the sparsevol encoding for split area 595 numspans := len(bodysplit.voxelSpans) 596 rles := make(dvid.RLEs, numspans, numspans) 597 for i, span := range bodysplit.voxelSpans { 598 start := dvid.Point3d{span[2], span[1], span[0]} 599 length := span[3] - span[2] + 1 600 rles[i] = dvid.NewRLE(start, length) 601 } 602 603 // Create the split sparse volume binary 604 buf := new(bytes.Buffer) 605 buf.WriteByte(dvid.EncodingBinary) 606 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 607 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 608 buf.WriteByte(byte(0)) // reserved for later 609 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 610 binary.Write(buf, binary.LittleEndian, uint32(numspans)) // Placeholder for # spans 611 rleBytes, err := rles.MarshalBinary() 612 if err != nil { 613 t.Errorf("Unable to serialize RLEs: %v\n", err) 614 } 615 buf.Write(rleBytes) 616 617 // Verify the max label is 4 618 reqStr = fmt.Sprintf("%snode/%s/%s/maxlabel", server.WebAPIPath, uuid, "bodies") 619 jsonStr := server.TestHTTP(t, "GET", reqStr, nil) 620 expectedJSON := `{"maxlabel": 4}` 621 if string(jsonStr) != expectedJSON { 622 t.Errorf("Expected this JSON returned from maxlabel:\n%s\nGot:\n%s\n", expectedJSON, string(jsonStr)) 623 } 624 625 // Submit the split sparsevol for body 4a 626 reqStr = fmt.Sprintf("%snode/%s/%s/split/%d", server.WebAPIPath, uuid, "bodies", 4) 627 r := server.TestHTTP(t, "POST", reqStr, buf) 628 jsonVal := make(map[string]uint64) 629 if err := json.Unmarshal(r, &jsonVal); err != nil { 630 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 631 } 632 newlabel, ok := jsonVal["label"] 633 if !ok { 634 t.Errorf("The split request did not yield label value. Instead got: %v\n", jsonVal) 635 } 636 if newlabel != 5 { 637 t.Errorf("Expected split label to be 5, instead got %d\n", newlabel) 638 } 639 640 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 641 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 642 } 643 644 retrieved := newTestVolume(128, 128, 128) 645 retrieved.get(t, uuid, "labels") 646 if len(retrieved.data) != 8*128*128*128 { 647 t.Errorf("Retrieved post-split volume is incorrect size\n") 648 } 649 if err := retrieved.equals(expected); err != nil { 650 t.Errorf("Split label volume not equal to expected volume: %v\n", err) 651 } 652 653 // Make sure new body 5 is what we sent 654 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 5) 655 encoding = server.TestHTTP(t, "GET", reqStr, nil) 656 bodysplit.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 657 658 // Make sure sparsevol for original body 4 is correct 659 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 4) 660 encoding = server.TestHTTP(t, "GET", reqStr, nil) 661 bodyleft.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 662 663 // Do a merge of two after the split 664 testMerge := mergeJSON(`[4, 5]`) 665 testMerge.send(t, uuid, "bodies") 666 667 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 668 t.Fatalf("Error blocking on bodies update: %v\n", err) 669 } 670 671 // Make sure we wind up with original body 4 672 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/4", server.WebAPIPath, uuid, "bodies") 673 encoding = server.TestHTTP(t, "GET", reqStr, nil) 674 body4.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 675 } 676 677 // Same as TestSplitLabel but now designate the actual split label 678 func TestSplitGivenLabel(t *testing.T) { 679 if err := server.OpenTest(); err != nil { 680 t.Fatalf("can't open test server: %v\n", err) 681 } 682 defer server.CloseTest() 683 684 // Create testbed volume and data instances 685 uuid, _ := initTestRepo() 686 var config dvid.Config 687 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 688 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 689 server.CreateTestSync(t, uuid, "labels", "bodies") 690 server.CreateTestSync(t, uuid, "bodies", "labels") 691 692 // Post label volume and setup expected volume after split. 693 expected := createLabelTestVolume(t, uuid, "labels") 694 expected.addBody(bodyleft, 4) 695 expected.addBody(bodysplit, 23) 696 697 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 698 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 699 } 700 701 // Create the sparsevol encoding for split area 702 numspans := len(bodysplit.voxelSpans) 703 rles := make(dvid.RLEs, numspans, numspans) 704 for i, span := range bodysplit.voxelSpans { 705 start := dvid.Point3d{span[2], span[1], span[0]} 706 length := span[3] - span[2] + 1 707 rles[i] = dvid.NewRLE(start, length) 708 } 709 710 // Create the split sparse volume binary 711 buf := new(bytes.Buffer) 712 buf.WriteByte(dvid.EncodingBinary) 713 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 714 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 715 buf.WriteByte(byte(0)) // reserved for later 716 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 717 binary.Write(buf, binary.LittleEndian, uint32(numspans)) // Placeholder for # spans 718 rleBytes, err := rles.MarshalBinary() 719 if err != nil { 720 t.Errorf("Unable to serialize RLEs: %v\n", err) 721 } 722 buf.Write(rleBytes) 723 724 // Submit the split sparsevol for body 4a 725 reqStr := fmt.Sprintf("%snode/%s/%s/split/%d?splitlabel=23", server.WebAPIPath, uuid, "bodies", 4) 726 r := server.TestHTTP(t, "POST", reqStr, buf) 727 jsonVal := make(map[string]uint64) 728 if err := json.Unmarshal(r, &jsonVal); err != nil { 729 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 730 } 731 newlabel, ok := jsonVal["label"] 732 if !ok { 733 t.Errorf("The split request did not yield label value. Instead got: %v\n", jsonVal) 734 } 735 if newlabel != 23 { 736 t.Errorf("Expected split label to be assigned label 23, instead got %d\n", newlabel) 737 } 738 } 739 740 func TestSplitCoarseLabel(t *testing.T) { 741 if err := server.OpenTest(); err != nil { 742 t.Fatalf("can't open test server: %v\n", err) 743 } 744 defer server.CloseTest() 745 746 // Create testbed volume and data instances 747 uuid, _ := initTestRepo() 748 var config dvid.Config 749 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 750 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 751 server.CreateTestSync(t, uuid, "labels", "bodies") 752 server.CreateTestSync(t, uuid, "bodies", "labels") 753 754 // Post label volume and setup expected volume after split of block coords (2, 1, 1) and (3, 1, 2) 755 expected := createLabelTestVolume(t, uuid, "labels") 756 fromLabel := uint64(4) 757 toLabel := uint64(5) 758 nx := expected.size[0] 759 nxy := nx * expected.size[1] 760 var x, y, z int32 761 for z = 0; z < 128; z++ { 762 bz := z / DefaultBlockSize 763 if bz != 1 && bz != 2 { 764 continue 765 } 766 for y = 0; y < 128; y++ { 767 by := y / DefaultBlockSize 768 if by != 1 { 769 continue 770 } 771 for x = 0; x < 128; x++ { 772 bx := x / DefaultBlockSize 773 if (bz == 1 && bx == 2) || (bz == 2 && bx == 2) { 774 i := (z*nxy + y*nx + x) * 8 775 label := binary.LittleEndian.Uint64(expected.data[i : i+8]) 776 if label == fromLabel { 777 binary.LittleEndian.PutUint64(expected.data[i:i+8], toLabel) 778 } 779 } 780 } 781 } 782 } 783 784 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 785 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 786 } 787 788 // Make sure sparsevol for original body 4 is correct 789 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 4) 790 encoding := server.TestHTTP(t, "GET", reqStr, nil) 791 fmt.Printf("Checking original body 4 is correct\n") 792 body4.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 793 794 // Create the encoding for split area in block coordinates. 795 rles := dvid.RLEs{ 796 dvid.NewRLE(dvid.Point3d{2, 1, 1}, 1), 797 dvid.NewRLE(dvid.Point3d{2, 1, 2}, 1), 798 } 799 buf := new(bytes.Buffer) 800 buf.WriteByte(dvid.EncodingBinary) 801 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 802 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 803 buf.WriteByte(byte(0)) // reserved for later 804 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 805 binary.Write(buf, binary.LittleEndian, uint32(2)) // Placeholder for # spans 806 rleBytes, err := rles.MarshalBinary() 807 if err != nil { 808 t.Errorf("Unable to serialize RLEs: %v\n", err) 809 } 810 buf.Write(rleBytes) 811 812 // Submit the coarse split 813 reqStr = fmt.Sprintf("%snode/%s/%s/split-coarse/%d", server.WebAPIPath, uuid, "bodies", 4) 814 r := server.TestHTTP(t, "POST", reqStr, buf) 815 jsonVal := make(map[string]uint64) 816 if err := json.Unmarshal(r, &jsonVal); err != nil { 817 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 818 } 819 newlabel, ok := jsonVal["label"] 820 if !ok { 821 t.Errorf("The split request did not yield label value. Instead got: %v\n", jsonVal) 822 } 823 if newlabel != 5 { 824 t.Errorf("Expected split label to be 5, instead got %d\n", newlabel) 825 } 826 827 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 828 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 829 } 830 831 // Make sure labels are correct 832 retrieved := newTestVolume(128, 128, 128) 833 retrieved.get(t, uuid, "labels") 834 if len(retrieved.data) != 8*128*128*128 { 835 t.Errorf("Retrieved post-split volume is incorrect size\n") 836 } 837 if err := retrieved.equals(expected); err != nil { 838 t.Errorf("Split label volume not equal to expected volume: %v\n", err) 839 } 840 } 841 842 func TestSplitCoarseGivenLabel(t *testing.T) { 843 if err := server.OpenTest(); err != nil { 844 t.Fatalf("can't open test server: %v\n", err) 845 } 846 defer server.CloseTest() 847 848 // Create testbed volume and data instances 849 uuid, _ := initTestRepo() 850 var config dvid.Config 851 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 852 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 853 server.CreateTestSync(t, uuid, "labels", "bodies") 854 server.CreateTestSync(t, uuid, "bodies", "labels") 855 856 // Post label volume and setup expected volume after split of block coords (2, 1, 1) and (3, 1, 2) 857 expected := createLabelTestVolume(t, uuid, "labels") 858 fromLabel := uint64(4) 859 toLabel := uint64(8127) 860 nx := expected.size[0] 861 nxy := nx * expected.size[1] 862 var x, y, z int32 863 for z = 0; z < 128; z++ { 864 bz := z / DefaultBlockSize 865 if bz != 1 && bz != 2 { 866 continue 867 } 868 for y = 0; y < 128; y++ { 869 by := y / DefaultBlockSize 870 if by != 1 { 871 continue 872 } 873 for x = 0; x < 128; x++ { 874 bx := x / DefaultBlockSize 875 if (bz == 1 && bx == 2) || (bz == 2 && bx == 2) { 876 i := (z*nxy + y*nx + x) * 8 877 label := binary.LittleEndian.Uint64(expected.data[i : i+8]) 878 if label == fromLabel { 879 binary.LittleEndian.PutUint64(expected.data[i:i+8], toLabel) 880 } 881 } 882 } 883 } 884 } 885 886 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 887 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 888 } 889 890 // Create the encoding for split area in block coordinates. 891 rles := dvid.RLEs{ 892 dvid.NewRLE(dvid.Point3d{2, 1, 1}, 1), 893 dvid.NewRLE(dvid.Point3d{2, 1, 2}, 1), 894 } 895 buf := new(bytes.Buffer) 896 buf.WriteByte(dvid.EncodingBinary) 897 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 898 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 899 buf.WriteByte(byte(0)) // reserved for later 900 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 901 binary.Write(buf, binary.LittleEndian, uint32(2)) // Placeholder for # spans 902 rleBytes, err := rles.MarshalBinary() 903 if err != nil { 904 t.Errorf("Unable to serialize RLEs: %v\n", err) 905 } 906 buf.Write(rleBytes) 907 908 // Submit the coarse split 909 reqStr := fmt.Sprintf("%snode/%s/%s/split-coarse/%d?splitlabel=8127", server.WebAPIPath, uuid, "bodies", 4) 910 r := server.TestHTTP(t, "POST", reqStr, buf) 911 jsonVal := make(map[string]uint64) 912 if err := json.Unmarshal(r, &jsonVal); err != nil { 913 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 914 } 915 newlabel, ok := jsonVal["label"] 916 if !ok { 917 t.Errorf("The split request did not yield label value. Instead got: %v\n", jsonVal) 918 } 919 if newlabel != 8127 { 920 t.Errorf("Expected split label to be 8127, instead got %d\n", newlabel) 921 } 922 923 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 924 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 925 } 926 927 // Make sure labels are correct 928 retrieved := newTestVolume(128, 128, 128) 929 retrieved.get(t, uuid, "labels") 930 if len(retrieved.data) != 8*128*128*128 { 931 t.Errorf("Retrieved post-split volume is incorrect size\n") 932 } 933 if err := retrieved.equals(expected); err != nil { 934 t.Errorf("Split label volume not equal to expected volume: %v\n", err) 935 } 936 } 937 938 func TestMergeSplitLabel(t *testing.T) { 939 if err := server.OpenTest(); err != nil { 940 t.Fatalf("can't open test server: %v\n", err) 941 } 942 defer server.CloseTest() 943 944 // Create testbed volume and data instances 945 uuid, _ := initTestRepo() 946 var config dvid.Config 947 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 948 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 949 server.CreateTestSync(t, uuid, "labels", "bodies") 950 server.CreateTestSync(t, uuid, "bodies", "labels") 951 952 // Post standard label 1-4 volume 953 expected := createLabelTestVolume(t, uuid, "labels") 954 955 // Get expected volume if we add label 3 to 4. 956 expected.addBody(body3, 4) 957 958 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 959 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 960 } 961 962 // Test merge of 3 into 4 963 testMerge := mergeJSON(`[4, 3]`) 964 testMerge.send(t, uuid, "bodies") 965 966 // Make sure label changes are correct after completion 967 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 968 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 969 } 970 971 // Make sure label 3 sparsevol has been removed. 972 fmt.Printf("testing if merge has been done correctly\n") 973 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/3", server.WebAPIPath, uuid, "bodies") 974 fmt.Printf("Got back from sparsevol 3: %d bytes\n", len(reqStr)) 975 server.TestBadHTTP(t, "GET", reqStr, nil) 976 977 retrieved := newTestVolume(128, 128, 128) 978 retrieved.get(t, uuid, "labels") 979 if len(retrieved.data) != 8*128*128*128 { 980 t.Errorf("Retrieved labelvol volume is incorrect size\n") 981 } 982 if !retrieved.isLabel(2, &body2) { 983 t.Errorf("Expected label 2 original voxels to remain. Instead some were removed.\n") 984 } 985 if retrieved.hasLabel(3, &body3) { 986 t.Errorf("Found label 3 when all label 3 should have been merged into label 4!\n") 987 } 988 if !retrieved.isLabel(4, &body3) { 989 t.Errorf("Incomplete merging. Label 4 should have taken over full extent of label 3\n") 990 } 991 if err := retrieved.equals(expected); err != nil { 992 t.Errorf("Merged label volume not equal to expected merged volume: %v\n", err) 993 } 994 995 // Create the sparsevol encoding for split area of 4 996 numspans := len(bodysplit.voxelSpans) 997 rles := make(dvid.RLEs, numspans, numspans) 998 for i, span := range bodysplit.voxelSpans { 999 start := dvid.Point3d{span[2], span[1], span[0]} 1000 length := span[3] - span[2] + 1 1001 rles[i] = dvid.NewRLE(start, length) 1002 } 1003 1004 // Create the split sparse volume binary 1005 buf := new(bytes.Buffer) 1006 buf.WriteByte(dvid.EncodingBinary) 1007 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 1008 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 1009 buf.WriteByte(byte(0)) // reserved for later 1010 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 1011 binary.Write(buf, binary.LittleEndian, uint32(numspans)) // Placeholder for # spans 1012 rleBytes, err := rles.MarshalBinary() 1013 if err != nil { 1014 t.Errorf("Unable to serialize RLEs: %v\n", err) 1015 } 1016 buf.Write(rleBytes) 1017 1018 // Verify the max label is 4 1019 reqStr = fmt.Sprintf("%snode/%s/%s/maxlabel", server.WebAPIPath, uuid, "bodies") 1020 jsonStr := server.TestHTTP(t, "GET", reqStr, nil) 1021 expectedJSON := `{"maxlabel": 4}` 1022 if string(jsonStr) != expectedJSON { 1023 t.Errorf("Expected this JSON returned from maxlabel:\n%s\nGot:\n%s\n", expectedJSON, string(jsonStr)) 1024 } 1025 1026 // Submit the split sparsevol for body 4a (-> 5) 1027 reqStr = fmt.Sprintf("%snode/%s/%s/split/4", server.WebAPIPath, uuid, "bodies") 1028 r := server.TestHTTP(t, "POST", reqStr, buf) 1029 jsonVal := make(map[string]uint64) 1030 if err := json.Unmarshal(r, &jsonVal); err != nil { 1031 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 1032 } 1033 newlabel, ok := jsonVal["label"] 1034 if !ok { 1035 t.Errorf("The split request did not yield label value. Instead got: %v\n", jsonVal) 1036 } 1037 if newlabel != 5 { 1038 t.Errorf("Expected split label to be 5, instead got %d\n", newlabel) 1039 } 1040 1041 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 1042 t.Fatalf("Error blocking on sync of bodies -> labels: %v\n", err) 1043 } 1044 1045 retrieved = newTestVolume(128, 128, 128) 1046 retrieved.get(t, uuid, "labels") 1047 if len(retrieved.data) != 8*128*128*128 { 1048 t.Errorf("Retrieved post-split volume is incorrect size\n") 1049 } 1050 expected.addBody(bodysplit, 5) 1051 if err := retrieved.equals(expected); err != nil { 1052 t.Errorf("Split label volume not equal to expected volume: %v\n", err) 1053 } 1054 1055 // Make sure new body 5 is what we sent 1056 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 5) 1057 encoding := server.TestHTTP(t, "GET", reqStr, nil) 1058 bodysplit.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 1059 } 1060 1061 func TestMultiscaleMergeSplit(t *testing.T) { 1062 if err := server.OpenTest(); err != nil { 1063 t.Fatalf("can't open test server: %v\n", err) 1064 } 1065 defer server.CloseTest() 1066 1067 // Create testbed volume and data instances 1068 uuid, _ := initTestRepo() 1069 var config dvid.Config 1070 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 1071 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 1072 server.CreateTestSync(t, uuid, "labels", "bodies") 1073 server.CreateTestSync(t, uuid, "bodies", "labels") 1074 1075 // Add multiscale 1076 server.CreateTestInstance(t, uuid, "labelblk", "labels_1", config) // 64 x 64 x 64 1077 server.CreateTestSync(t, uuid, "labels_1", "labels") 1078 server.CreateTestInstance(t, uuid, "labelblk", "labels_2", config) // 32 x 32 x 32 1079 server.CreateTestSync(t, uuid, "labels_2", "labels_1") 1080 1081 // Create an easily interpreted label volume with a couple of labels. 1082 volume := newTestVolume(128, 128, 128) 1083 volume.addSubvol(dvid.Point3d{40, 40, 40}, dvid.Point3d{40, 40, 40}, 1) 1084 volume.addSubvol(dvid.Point3d{40, 40, 80}, dvid.Point3d{40, 40, 40}, 2) 1085 volume.addSubvol(dvid.Point3d{80, 40, 40}, dvid.Point3d{40, 40, 40}, 13) 1086 volume.addSubvol(dvid.Point3d{40, 80, 40}, dvid.Point3d{40, 40, 40}, 209) 1087 volume.addSubvol(dvid.Point3d{80, 80, 40}, dvid.Point3d{40, 40, 40}, 311) 1088 volume.put(t, uuid, "labels") 1089 1090 // Verify initial ingest for hi-res 1091 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 1092 t.Fatalf("Error blocking on update for labels: %v\n", err) 1093 } 1094 hires := newTestVolume(128, 128, 128) 1095 hires.get(t, uuid, "labels") 1096 hires.verifyLabel(t, 1, 45, 45, 45) 1097 hires.verifyLabel(t, 2, 50, 50, 100) 1098 hires.verifyLabel(t, 13, 100, 60, 60) 1099 hires.verifyLabel(t, 209, 55, 100, 55) 1100 hires.verifyLabel(t, 311, 81, 81, 41) 1101 1102 // Check the first downres: 64^3 1103 if err := datastore.BlockOnUpdating(uuid, "labels_1"); err != nil { 1104 t.Fatalf("Error blocking on update for labels_1: %v\n", err) 1105 } 1106 downres1 := newTestVolume(64, 64, 64) 1107 downres1.get(t, uuid, "labels_1") 1108 downres1.verifyLabel(t, 1, 30, 30, 30) 1109 downres1.verifyLabel(t, 2, 21, 21, 45) 1110 downres1.verifyLabel(t, 13, 45, 21, 36) 1111 downres1.verifyLabel(t, 209, 21, 50, 35) 1112 downres1.verifyLabel(t, 311, 45, 55, 35) 1113 expected1 := newTestVolume(64, 64, 64) 1114 expected1.addSubvol(dvid.Point3d{20, 20, 20}, dvid.Point3d{20, 20, 20}, 1) 1115 expected1.addSubvol(dvid.Point3d{20, 20, 40}, dvid.Point3d{20, 20, 20}, 2) 1116 expected1.addSubvol(dvid.Point3d{40, 20, 20}, dvid.Point3d{20, 20, 20}, 13) 1117 expected1.addSubvol(dvid.Point3d{20, 40, 20}, dvid.Point3d{20, 20, 20}, 209) 1118 expected1.addSubvol(dvid.Point3d{40, 40, 20}, dvid.Point3d{20, 20, 20}, 311) 1119 if err := downres1.equals(expected1); err != nil { 1120 t.Errorf("1st downres 'labels_1' isn't what is expected: %v\n", err) 1121 } 1122 1123 // Check the second downres to voxel: 32^3 1124 if err := datastore.BlockOnUpdating(uuid, "labels_2"); err != nil { 1125 t.Fatalf("Error blocking on update for labels_2: %v\n", err) 1126 } 1127 expected2 := newTestVolume(32, 32, 32) 1128 expected2.addSubvol(dvid.Point3d{10, 10, 10}, dvid.Point3d{10, 10, 10}, 1) 1129 expected2.addSubvol(dvid.Point3d{10, 10, 20}, dvid.Point3d{10, 10, 10}, 2) 1130 expected2.addSubvol(dvid.Point3d{20, 10, 10}, dvid.Point3d{10, 10, 10}, 13) 1131 expected2.addSubvol(dvid.Point3d{10, 20, 10}, dvid.Point3d{10, 10, 10}, 209) 1132 expected2.addSubvol(dvid.Point3d{20, 20, 10}, dvid.Point3d{10, 10, 10}, 311) 1133 downres2 := newTestVolume(32, 32, 32) 1134 downres2.get(t, uuid, "labels_2") 1135 if err := downres2.equals(expected2); err != nil { 1136 t.Errorf("2nd downres 'labels_2' isn't what is expected: %v\n", err) 1137 } 1138 1139 // Test merge of 2 and 13 into 1 1140 testMerge := mergeJSON(`[1, 2, 13]`) 1141 testMerge.send(t, uuid, "bodies") 1142 1143 // Make sure labels 2 and 13 sparsevol has been removed. 1144 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/2", server.WebAPIPath, uuid, "bodies") 1145 server.TestBadHTTP(t, "GET", reqStr, nil) 1146 1147 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/13", server.WebAPIPath, uuid, "bodies") 1148 server.TestBadHTTP(t, "GET", reqStr, nil) 1149 1150 // Make sure label changes are correct after completion of merge 1151 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 1152 t.Fatalf("Error blocking on sync of merge bodies -> labels: %v\n", err) 1153 } 1154 retrieved := newTestVolume(128, 128, 128) 1155 retrieved.get(t, uuid, "labels") 1156 merged := newTestVolume(128, 128, 128) 1157 merged.addSubvol(dvid.Point3d{40, 40, 40}, dvid.Point3d{40, 40, 40}, 1) 1158 merged.addSubvol(dvid.Point3d{40, 40, 80}, dvid.Point3d{40, 40, 40}, 1) 1159 merged.addSubvol(dvid.Point3d{80, 40, 40}, dvid.Point3d{40, 40, 40}, 1) 1160 merged.addSubvol(dvid.Point3d{40, 80, 40}, dvid.Point3d{40, 40, 40}, 209) 1161 merged.addSubvol(dvid.Point3d{80, 80, 40}, dvid.Point3d{40, 40, 40}, 311) 1162 if err := retrieved.equals(merged); err != nil { 1163 t.Errorf("Merged label volume not equal to expected merged volume: %v\n", err) 1164 } 1165 1166 if err := datastore.BlockOnUpdating(uuid, "labels_1"); err != nil { 1167 t.Fatalf("Error blocking on sync of merge bodies -> labels: %v\n", err) 1168 } 1169 retrieved1 := newTestVolume(64, 64, 64) 1170 retrieved1.get(t, uuid, "labels_1") 1171 merged1 := newTestVolume(64, 64, 64) 1172 merged1.addSubvol(dvid.Point3d{20, 20, 20}, dvid.Point3d{20, 20, 20}, 1) 1173 merged1.addSubvol(dvid.Point3d{20, 20, 40}, dvid.Point3d{20, 20, 20}, 1) 1174 merged1.addSubvol(dvid.Point3d{40, 20, 20}, dvid.Point3d{20, 20, 20}, 1) 1175 merged1.addSubvol(dvid.Point3d{20, 40, 20}, dvid.Point3d{20, 20, 20}, 209) 1176 merged1.addSubvol(dvid.Point3d{40, 40, 20}, dvid.Point3d{20, 20, 20}, 311) 1177 if err := retrieved1.equals(merged1); err != nil { 1178 t.Errorf("Merged label volume downres #1 not equal to expected merged volume: %v\n", err) 1179 } 1180 1181 if err := datastore.BlockOnUpdating(uuid, "labels_2"); err != nil { 1182 t.Fatalf("Error blocking on sync of merge bodies -> labels: %v\n", err) 1183 } 1184 retrieved2 := newTestVolume(32, 32, 32) 1185 retrieved2.get(t, uuid, "labels_2") 1186 merged2 := newTestVolume(32, 32, 32) 1187 merged2.addSubvol(dvid.Point3d{10, 10, 10}, dvid.Point3d{10, 10, 10}, 1) 1188 merged2.addSubvol(dvid.Point3d{10, 10, 20}, dvid.Point3d{10, 10, 10}, 1) 1189 merged2.addSubvol(dvid.Point3d{20, 10, 10}, dvid.Point3d{10, 10, 10}, 1) 1190 merged2.addSubvol(dvid.Point3d{10, 20, 10}, dvid.Point3d{10, 10, 10}, 209) 1191 merged2.addSubvol(dvid.Point3d{20, 20, 10}, dvid.Point3d{10, 10, 10}, 311) 1192 if err := retrieved2.equals(merged2); err != nil { 1193 t.Errorf("Merged label volume downres #2 not equal to expected merged volume: %v\n", err) 1194 } 1195 1196 // Create the sparsevol encoding for split area that used to be body 13 1197 numspans := 40 * 40 1198 rles := make(dvid.RLEs, numspans, numspans) 1199 length := int32(40) 1200 i := 0 1201 for z := int32(40); z < 80; z++ { 1202 for y := int32(40); y < 80; y++ { 1203 start := dvid.Point3d{80, y, z} 1204 rles[i] = dvid.NewRLE(start, length) 1205 i++ 1206 } 1207 } 1208 1209 // Create the split sparse volume binary 1210 buf := new(bytes.Buffer) 1211 buf.WriteByte(dvid.EncodingBinary) 1212 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 1213 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 1214 buf.WriteByte(byte(0)) // reserved for later 1215 binary.Write(buf, binary.LittleEndian, uint32(numspans*40)) // Placeholder for # voxels 1216 binary.Write(buf, binary.LittleEndian, uint32(numspans)) // Placeholder for # spans 1217 rleBytes, err := rles.MarshalBinary() 1218 if err != nil { 1219 t.Errorf("Unable to serialize RLEs: %v\n", err) 1220 } 1221 buf.Write(rleBytes) 1222 1223 // Submit the split sparsevol and assign to label 28 1224 reqStr = fmt.Sprintf("%snode/%s/%s/split/1?splitlabel=28", server.WebAPIPath, uuid, "bodies") 1225 r := server.TestHTTP(t, "POST", reqStr, buf) 1226 jsonVal := make(map[string]uint64) 1227 if err := json.Unmarshal(r, &jsonVal); err != nil { 1228 t.Errorf("Unable to get new label from split. Instead got: %v\n", jsonVal) 1229 } 1230 1231 // Test all the multiscales for correct split volume. 1232 1233 // Make sure label changes are correct after completion of merge 1234 if err := datastore.BlockOnUpdating(uuid, "labels"); err != nil { 1235 t.Fatalf("Error blocking on sync of merge bodies -> labels: %v\n", err) 1236 } 1237 retrieved.get(t, uuid, "labels") 1238 split := newTestVolume(128, 128, 128) 1239 split.addSubvol(dvid.Point3d{40, 40, 40}, dvid.Point3d{40, 40, 40}, 1) 1240 split.addSubvol(dvid.Point3d{40, 40, 80}, dvid.Point3d{40, 40, 40}, 1) 1241 split.addSubvol(dvid.Point3d{80, 40, 40}, dvid.Point3d{40, 40, 40}, 28) 1242 split.addSubvol(dvid.Point3d{40, 80, 40}, dvid.Point3d{40, 40, 40}, 209) 1243 split.addSubvol(dvid.Point3d{80, 80, 40}, dvid.Point3d{40, 40, 40}, 311) 1244 if err := retrieved.equals(split); err != nil { 1245 t.Errorf("Split label volume not equal to expected split volume: %v\n", err) 1246 } 1247 1248 if err := datastore.BlockOnUpdating(uuid, "labels_1"); err != nil { 1249 t.Fatalf("Error blocking on sync of split bodies -> labels: %v\n", err) 1250 } 1251 retrieved1.get(t, uuid, "labels_1") 1252 split1 := newTestVolume(64, 64, 64) 1253 split1.addSubvol(dvid.Point3d{20, 20, 20}, dvid.Point3d{20, 20, 20}, 1) 1254 split1.addSubvol(dvid.Point3d{20, 20, 40}, dvid.Point3d{20, 20, 20}, 1) 1255 split1.addSubvol(dvid.Point3d{40, 20, 20}, dvid.Point3d{20, 20, 20}, 28) 1256 split1.addSubvol(dvid.Point3d{20, 40, 20}, dvid.Point3d{20, 20, 20}, 209) 1257 split1.addSubvol(dvid.Point3d{40, 40, 20}, dvid.Point3d{20, 20, 20}, 311) 1258 if err := retrieved1.equals(split1); err != nil { 1259 t.Errorf("Split label volume downres #1 not equal to expected split volume: %v\n", err) 1260 } 1261 1262 if err := datastore.BlockOnUpdating(uuid, "labels_2"); err != nil { 1263 t.Fatalf("Error blocking on sync of merge bodies -> labels: %v\n", err) 1264 } 1265 retrieved2.get(t, uuid, "labels_2") 1266 split2 := newTestVolume(32, 32, 32) 1267 split2.addSubvol(dvid.Point3d{10, 10, 10}, dvid.Point3d{10, 10, 10}, 1) 1268 split2.addSubvol(dvid.Point3d{10, 10, 20}, dvid.Point3d{10, 10, 10}, 1) 1269 split2.addSubvol(dvid.Point3d{20, 10, 10}, dvid.Point3d{10, 10, 10}, 28) 1270 split2.addSubvol(dvid.Point3d{10, 20, 10}, dvid.Point3d{10, 10, 10}, 209) 1271 split2.addSubvol(dvid.Point3d{20, 20, 10}, dvid.Point3d{10, 10, 10}, 311) 1272 if err := retrieved2.equals(split2); err != nil { 1273 t.Errorf("Split label volume downres #2 not equal to expected split volume: %v\n", err) 1274 } 1275 } 1276 1277 // Test that mutable labelblk POST will accurately remove prior bodies. 1278 func TestMutableLabelblkPOST(t *testing.T) { 1279 if err := server.OpenTest(); err != nil { 1280 t.Fatalf("can't open test server: %v\n", err) 1281 } 1282 defer server.CloseTest() 1283 1284 // Create testbed volume and data instances 1285 uuid, _ := initTestRepo() 1286 var config dvid.Config 1287 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 1288 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 1289 server.CreateTestSync(t, uuid, "labels", "bodies") 1290 server.CreateTestSync(t, uuid, "bodies", "labels") 1291 1292 // Post labels 1-4 1293 createLabelTestVolume(t, uuid, "labels") 1294 1295 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 1296 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 1297 } 1298 1299 // Make sure we have labels 1-4 sparsevol 1300 for _, label := range []uint64{1, 2, 3, 4} { 1301 // Check fast HEAD requests 1302 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", label) 1303 resp := server.TestHTTPResponse(t, "HEAD", reqStr, nil) 1304 if resp.Code != http.StatusOK { 1305 t.Errorf("HEAD on %s did not return OK. Status = %d\n", reqStr, resp.Code) 1306 } 1307 1308 // Check full sparse volumes 1309 encoding := server.TestHTTP(t, "GET", reqStr, nil) 1310 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 1311 } 1312 1313 // Post labels 6-7 1314 createLabelTest2Volume(t, uuid, "labels") 1315 1316 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 1317 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 1318 } 1319 1320 // Make sure that labels 1-4 have no more sparse vol. 1321 for _, label := range []uint64{1, 2, 3, 4} { 1322 // Check full sparse volumes aren't retrievable anymore 1323 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", label) 1324 server.TestBadHTTP(t, "GET", reqStr, nil) 1325 1326 // Make sure non-existent bodies return proper HEAD responses. 1327 resp := server.TestHTTPResponse(t, "HEAD", reqStr, nil) 1328 if resp.Code != http.StatusNoContent { 1329 t.Errorf("HEAD on %s did not return 204 (No Content). Status = %d\n", reqStr, resp.Code) 1330 } 1331 } 1332 1333 // Make sure labels 6-7 are available as sparse vol. 1334 for _, label := range []uint64{6, 7} { 1335 // Check fast HEAD requests 1336 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", label) 1337 resp := server.TestHTTPResponse(t, "HEAD", reqStr, nil) 1338 if resp.Code != http.StatusOK { 1339 t.Errorf("HEAD on %s did not return OK. Status = %d\n", reqStr, resp.Code) 1340 } 1341 1342 // Check full sparse volumes 1343 encoding := server.TestHTTP(t, "GET", reqStr, nil) 1344 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 1345 } 1346 } 1347 1348 func TestResyncLabel(t *testing.T) { 1349 if err := server.OpenTest(); err != nil { 1350 t.Fatalf("can't open test server: %v\n", err) 1351 } 1352 defer server.CloseTest() 1353 1354 // Create testbed volume and data instances 1355 uuid, _ := initTestRepo() 1356 var config dvid.Config 1357 server.CreateTestInstance(t, uuid, "labelblk", "labels", config) 1358 server.CreateTestInstance(t, uuid, "labelvol", "bodies", config) 1359 server.CreateTestSync(t, uuid, "labels", "bodies") 1360 server.CreateTestSync(t, uuid, "bodies", "labels") 1361 1362 createLabelTestVolume(t, uuid, "labels") 1363 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 1364 t.Fatalf("Error blocking on sync of labels -> bodies: %v\n", err) 1365 } 1366 1367 reqStr := fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 1) 1368 encoding := server.TestHTTP(t, "GET", reqStr, nil) 1369 body1.checkSparseVol(t, encoding, dvid.OptionalBounds{}) 1370 1371 // Delete the labelvol but leave the labelblk. 1372 d, err := GetByUUIDName(uuid, "bodies") 1373 if err != nil { 1374 t.Fatalf("Unable to get labelvol data pointer: %v\n", err) 1375 } 1376 store, err := datastore.GetOrderedKeyValueDB(d) 1377 if err != nil { 1378 t.Fatalf("data %q had error initializing store: %v\n", d.DataName(), err) 1379 } 1380 startPt := dvid.ChunkPoint3d{0, 0, 0} 1381 endPt := dvid.ChunkPoint3d{10000, 10000, 10000} 1382 begTKey := NewTKey(1, startPt.ToIZYXString()) 1383 endTKey := NewTKey(1, endPt.ToIZYXString()) 1384 v, err := datastore.VersionFromUUID(uuid) 1385 if err != nil { 1386 t.Fatalf("bad version from UUID %s: %v\n", uuid, err) 1387 } 1388 ctx := datastore.NewVersionedCtx(d, v) 1389 if err := store.DeleteRange(ctx, begTKey, endTKey); err != nil { 1390 t.Fatalf("can't delete labelvol blocks for data %q: %v\n", d.DataName(), err) 1391 } 1392 1393 // We should have bad labelvol at this point. 1394 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", 1) 1395 server.TestBadHTTP(t, "GET", reqStr, nil) 1396 1397 // Create the encoding for resync area in block coordinates. 1398 rles := dvid.RLEs{ 1399 dvid.NewRLE(dvid.Point3d{0, 1, 0}, 1), // actually a superset of body 1 blocks 1400 dvid.NewRLE(dvid.Point3d{0, 1, 1}, 1), 1401 dvid.NewRLE(dvid.Point3d{0, 1, 2}, 1), 1402 } 1403 buf := new(bytes.Buffer) 1404 buf.WriteByte(dvid.EncodingBinary) 1405 binary.Write(buf, binary.LittleEndian, uint8(3)) // # of dimensions 1406 binary.Write(buf, binary.LittleEndian, byte(0)) // dimension of run (X = 0) 1407 buf.WriteByte(byte(0)) // reserved for later 1408 binary.Write(buf, binary.LittleEndian, uint32(0)) // Placeholder for # voxels 1409 binary.Write(buf, binary.LittleEndian, uint32(3)) // Placeholder for # spans 1410 rleBytes, err := rles.MarshalBinary() 1411 if err != nil { 1412 t.Errorf("Unable to serialize RLEs: %v\n", err) 1413 } 1414 buf.Write(rleBytes) 1415 1416 // Submit the resync 1417 reqStr = fmt.Sprintf("%snode/%s/%s/resync/%d", server.WebAPIPath, uuid, "bodies", 1) 1418 server.TestHTTP(t, "POST", reqStr, buf) 1419 1420 if err := datastore.BlockOnUpdating(uuid, "bodies"); err != nil { 1421 t.Fatalf("Error blocking on resync of labels: %v\n", err) 1422 } 1423 1424 // Make sure sparsevol for all bodies are correct (no inadvertent deletions) 1425 for _, label := range []uint64{1, 2, 3, 4} { 1426 // Check fast HEAD requests 1427 reqStr = fmt.Sprintf("%snode/%s/%s/sparsevol/%d", server.WebAPIPath, uuid, "bodies", label) 1428 resp := server.TestHTTPResponse(t, "HEAD", reqStr, nil) 1429 if resp.Code != http.StatusOK { 1430 t.Errorf("HEAD on %s did not return OK. Status = %d\n", reqStr, resp.Code) 1431 } 1432 1433 // Check full sparse volumes 1434 encoding := server.TestHTTP(t, "GET", reqStr, nil) 1435 bodies[label-1].checkSparseVol(t, encoding, dvid.OptionalBounds{}) 1436 } 1437 } 1438 1439 var ( 1440 body1 = testBody{ 1441 label: 1, 1442 offset: dvid.Point3d{10, 40, 10}, 1443 size: dvid.Point3d{20, 20, 80}, 1444 blockSpans: []dvid.Span{ 1445 {0, 1, 0, 0}, 1446 {1, 1, 0, 0}, 1447 {2, 1, 0, 0}, 1448 }, 1449 voxelSpans: []dvid.Span{ 1450 {10, 40, 10, 29}, {10, 41, 10, 29}, {10, 42, 10, 29}, {10, 43, 10, 29}, {10, 44, 10, 29}, 1451 {10, 45, 10, 29}, {10, 46, 10, 29}, {10, 47, 10, 29}, {10, 48, 10, 29}, {10, 49, 10, 29}, 1452 {10, 50, 10, 29}, {10, 51, 10, 29}, {10, 52, 10, 29}, {10, 53, 10, 29}, {10, 54, 10, 29}, 1453 {10, 55, 10, 29}, {10, 56, 10, 29}, {10, 57, 10, 29}, {10, 58, 10, 29}, {10, 59, 10, 29}, 1454 {11, 40, 10, 29}, {11, 41, 10, 29}, {11, 42, 10, 29}, {11, 43, 10, 29}, {11, 44, 10, 29}, 1455 {11, 45, 10, 29}, {11, 46, 10, 29}, {11, 47, 10, 29}, {11, 48, 10, 29}, {11, 49, 10, 29}, 1456 {11, 50, 10, 29}, {11, 51, 10, 29}, {11, 52, 10, 29}, {11, 53, 10, 29}, {11, 54, 10, 29}, 1457 {11, 55, 10, 29}, {11, 56, 10, 29}, {11, 57, 10, 29}, {11, 58, 10, 29}, {11, 59, 10, 29}, 1458 {12, 40, 10, 29}, {12, 41, 10, 29}, {12, 42, 10, 29}, {12, 43, 10, 29}, {12, 44, 10, 29}, 1459 {12, 45, 10, 29}, {12, 46, 10, 29}, {12, 47, 10, 29}, {12, 48, 10, 29}, {12, 49, 10, 29}, 1460 {12, 50, 10, 29}, {12, 51, 10, 29}, {12, 52, 10, 29}, {12, 53, 10, 29}, {12, 54, 10, 29}, 1461 {12, 55, 10, 29}, {12, 56, 10, 29}, {12, 57, 10, 29}, {12, 58, 10, 29}, {12, 59, 10, 29}, 1462 {13, 40, 10, 29}, {13, 41, 10, 29}, {13, 42, 10, 29}, {13, 43, 10, 29}, {13, 44, 10, 29}, 1463 {13, 45, 10, 29}, {13, 46, 10, 29}, {13, 47, 10, 29}, {13, 48, 10, 29}, {13, 49, 10, 29}, 1464 {13, 50, 10, 29}, {13, 51, 10, 29}, {13, 52, 10, 29}, {13, 53, 10, 29}, {13, 54, 10, 29}, 1465 {13, 55, 10, 29}, {13, 56, 10, 29}, {13, 57, 10, 29}, {13, 58, 10, 29}, {13, 59, 10, 29}, 1466 {14, 40, 10, 29}, {14, 41, 10, 29}, {14, 42, 10, 29}, {14, 43, 10, 29}, {14, 44, 10, 29}, 1467 {14, 45, 10, 29}, {14, 46, 10, 29}, {14, 47, 10, 29}, {14, 48, 10, 29}, {14, 49, 10, 29}, 1468 {14, 50, 10, 29}, {14, 51, 10, 29}, {14, 52, 10, 29}, {14, 53, 10, 29}, {14, 54, 10, 29}, 1469 {14, 55, 10, 29}, {14, 56, 10, 29}, {14, 57, 10, 29}, {14, 58, 10, 29}, {14, 59, 10, 29}, 1470 {15, 40, 10, 29}, {15, 41, 10, 29}, {15, 42, 10, 29}, {15, 43, 10, 29}, {15, 44, 10, 29}, 1471 {15, 45, 10, 29}, {15, 46, 10, 29}, {15, 47, 10, 29}, {15, 48, 10, 29}, {15, 49, 10, 29}, 1472 {15, 50, 10, 29}, {15, 51, 10, 29}, {15, 52, 10, 29}, {15, 53, 10, 29}, {15, 54, 10, 29}, 1473 {15, 55, 10, 29}, {15, 56, 10, 29}, {15, 57, 10, 29}, {15, 58, 10, 29}, {15, 59, 10, 29}, 1474 {16, 40, 10, 29}, {16, 41, 10, 29}, {16, 42, 10, 29}, {16, 43, 10, 29}, {16, 44, 10, 29}, 1475 {16, 45, 10, 29}, {16, 46, 10, 29}, {16, 47, 10, 29}, {16, 48, 10, 29}, {16, 49, 10, 29}, 1476 {16, 50, 10, 29}, {16, 51, 10, 29}, {16, 52, 10, 29}, {16, 53, 10, 29}, {16, 54, 10, 29}, 1477 {16, 55, 10, 29}, {16, 56, 10, 29}, {16, 57, 10, 29}, {16, 58, 10, 29}, {16, 59, 10, 29}, 1478 {17, 40, 10, 29}, {17, 41, 10, 29}, {17, 42, 10, 29}, {17, 43, 10, 29}, {17, 44, 10, 29}, 1479 {17, 45, 10, 29}, {17, 46, 10, 29}, {17, 47, 10, 29}, {17, 48, 10, 29}, {17, 49, 10, 29}, 1480 {17, 50, 10, 29}, {17, 51, 10, 29}, {17, 52, 10, 29}, {17, 53, 10, 29}, {17, 54, 10, 29}, 1481 {17, 55, 10, 29}, {17, 56, 10, 29}, {17, 57, 10, 29}, {17, 58, 10, 29}, {17, 59, 10, 29}, 1482 {18, 40, 10, 29}, {18, 41, 10, 29}, {18, 42, 10, 29}, {18, 43, 10, 29}, {18, 44, 10, 29}, 1483 {18, 45, 10, 29}, {18, 46, 10, 29}, {18, 47, 10, 29}, {18, 48, 10, 29}, {18, 49, 10, 29}, 1484 {18, 50, 10, 29}, {18, 51, 10, 29}, {18, 52, 10, 29}, {18, 53, 10, 29}, {18, 54, 10, 29}, 1485 {18, 55, 10, 29}, {18, 56, 10, 29}, {18, 57, 10, 29}, {18, 58, 10, 29}, {18, 59, 10, 29}, 1486 {19, 40, 10, 29}, {19, 41, 10, 29}, {19, 42, 10, 29}, {19, 43, 10, 29}, {19, 44, 10, 29}, 1487 {19, 45, 10, 29}, {19, 46, 10, 29}, {19, 47, 10, 29}, {19, 48, 10, 29}, {19, 49, 10, 29}, 1488 {19, 50, 10, 29}, {19, 51, 10, 29}, {19, 52, 10, 29}, {19, 53, 10, 29}, {19, 54, 10, 29}, 1489 {19, 55, 10, 29}, {19, 56, 10, 29}, {19, 57, 10, 29}, {19, 58, 10, 29}, {19, 59, 10, 29}, 1490 {20, 40, 10, 29}, {20, 41, 10, 29}, {20, 42, 10, 29}, {20, 43, 10, 29}, {20, 44, 10, 29}, 1491 {20, 45, 10, 29}, {20, 46, 10, 29}, {20, 47, 10, 29}, {20, 48, 10, 29}, {20, 49, 10, 29}, 1492 {20, 50, 10, 29}, {20, 51, 10, 29}, {20, 52, 10, 29}, {20, 53, 10, 29}, {20, 54, 10, 29}, 1493 {20, 55, 10, 29}, {20, 56, 10, 29}, {20, 57, 10, 29}, {20, 58, 10, 29}, {20, 59, 10, 29}, 1494 {21, 40, 10, 29}, {21, 41, 10, 29}, {21, 42, 10, 29}, {21, 43, 10, 29}, {21, 44, 10, 29}, 1495 {21, 45, 10, 29}, {21, 46, 10, 29}, {21, 47, 10, 29}, {21, 48, 10, 29}, {21, 49, 10, 29}, 1496 {21, 50, 10, 29}, {21, 51, 10, 29}, {21, 52, 10, 29}, {21, 53, 10, 29}, {21, 54, 10, 29}, 1497 {21, 55, 10, 29}, {21, 56, 10, 29}, {21, 57, 10, 29}, {21, 58, 10, 29}, {21, 59, 10, 29}, 1498 {22, 40, 10, 29}, {22, 41, 10, 29}, {22, 42, 10, 29}, {22, 43, 10, 29}, {22, 44, 10, 29}, 1499 {22, 45, 10, 29}, {22, 46, 10, 29}, {22, 47, 10, 29}, {22, 48, 10, 29}, {22, 49, 10, 29}, 1500 {22, 50, 10, 29}, {22, 51, 10, 29}, {22, 52, 10, 29}, {22, 53, 10, 29}, {22, 54, 10, 29}, 1501 {22, 55, 10, 29}, {22, 56, 10, 29}, {22, 57, 10, 29}, {22, 58, 10, 29}, {22, 59, 10, 29}, 1502 {23, 40, 10, 29}, {23, 41, 10, 29}, {23, 42, 10, 29}, {23, 43, 10, 29}, {23, 44, 10, 29}, 1503 {23, 45, 10, 29}, {23, 46, 10, 29}, {23, 47, 10, 29}, {23, 48, 10, 29}, {23, 49, 10, 29}, 1504 {23, 50, 10, 29}, {23, 51, 10, 29}, {23, 52, 10, 29}, {23, 53, 10, 29}, {23, 54, 10, 29}, 1505 {23, 55, 10, 29}, {23, 56, 10, 29}, {23, 57, 10, 29}, {23, 58, 10, 29}, {23, 59, 10, 29}, 1506 {24, 40, 10, 29}, {24, 41, 10, 29}, {24, 42, 10, 29}, {24, 43, 10, 29}, {24, 44, 10, 29}, 1507 {24, 45, 10, 29}, {24, 46, 10, 29}, {24, 47, 10, 29}, {24, 48, 10, 29}, {24, 49, 10, 29}, 1508 {24, 50, 10, 29}, {24, 51, 10, 29}, {24, 52, 10, 29}, {24, 53, 10, 29}, {24, 54, 10, 29}, 1509 {24, 55, 10, 29}, {24, 56, 10, 29}, {24, 57, 10, 29}, {24, 58, 10, 29}, {24, 59, 10, 29}, 1510 {25, 40, 10, 29}, {25, 41, 10, 29}, {25, 42, 10, 29}, {25, 43, 10, 29}, {25, 44, 10, 29}, 1511 {25, 45, 10, 29}, {25, 46, 10, 29}, {25, 47, 10, 29}, {25, 48, 10, 29}, {25, 49, 10, 29}, 1512 {25, 50, 10, 29}, {25, 51, 10, 29}, {25, 52, 10, 29}, {25, 53, 10, 29}, {25, 54, 10, 29}, 1513 {25, 55, 10, 29}, {25, 56, 10, 29}, {25, 57, 10, 29}, {25, 58, 10, 29}, {25, 59, 10, 29}, 1514 {26, 40, 10, 29}, {26, 41, 10, 29}, {26, 42, 10, 29}, {26, 43, 10, 29}, {26, 44, 10, 29}, 1515 {26, 45, 10, 29}, {26, 46, 10, 29}, {26, 47, 10, 29}, {26, 48, 10, 29}, {26, 49, 10, 29}, 1516 {26, 50, 10, 29}, {26, 51, 10, 29}, {26, 52, 10, 29}, {26, 53, 10, 29}, {26, 54, 10, 29}, 1517 {26, 55, 10, 29}, {26, 56, 10, 29}, {26, 57, 10, 29}, {26, 58, 10, 29}, {26, 59, 10, 29}, 1518 {27, 40, 10, 29}, {27, 41, 10, 29}, {27, 42, 10, 29}, {27, 43, 10, 29}, {27, 44, 10, 29}, 1519 {27, 45, 10, 29}, {27, 46, 10, 29}, {27, 47, 10, 29}, {27, 48, 10, 29}, {27, 49, 10, 29}, 1520 {27, 50, 10, 29}, {27, 51, 10, 29}, {27, 52, 10, 29}, {27, 53, 10, 29}, {27, 54, 10, 29}, 1521 {27, 55, 10, 29}, {27, 56, 10, 29}, {27, 57, 10, 29}, {27, 58, 10, 29}, {27, 59, 10, 29}, 1522 {28, 40, 10, 29}, {28, 41, 10, 29}, {28, 42, 10, 29}, {28, 43, 10, 29}, {28, 44, 10, 29}, 1523 {28, 45, 10, 29}, {28, 46, 10, 29}, {28, 47, 10, 29}, {28, 48, 10, 29}, {28, 49, 10, 29}, 1524 {28, 50, 10, 29}, {28, 51, 10, 29}, {28, 52, 10, 29}, {28, 53, 10, 29}, {28, 54, 10, 29}, 1525 {28, 55, 10, 29}, {28, 56, 10, 29}, {28, 57, 10, 29}, {28, 58, 10, 29}, {28, 59, 10, 29}, 1526 {29, 40, 10, 29}, {29, 41, 10, 29}, {29, 42, 10, 29}, {29, 43, 10, 29}, {29, 44, 10, 29}, 1527 {29, 45, 10, 29}, {29, 46, 10, 29}, {29, 47, 10, 29}, {29, 48, 10, 29}, {29, 49, 10, 29}, 1528 {29, 50, 10, 29}, {29, 51, 10, 29}, {29, 52, 10, 29}, {29, 53, 10, 29}, {29, 54, 10, 29}, 1529 {29, 55, 10, 29}, {29, 56, 10, 29}, {29, 57, 10, 29}, {29, 58, 10, 29}, {29, 59, 10, 29}, 1530 {30, 40, 10, 29}, {30, 41, 10, 29}, {30, 42, 10, 29}, {30, 43, 10, 29}, {30, 44, 10, 29}, 1531 {30, 45, 10, 29}, {30, 46, 10, 29}, {30, 47, 10, 29}, {30, 48, 10, 29}, {30, 49, 10, 29}, 1532 {30, 50, 10, 29}, {30, 51, 10, 29}, {30, 52, 10, 29}, {30, 53, 10, 29}, {30, 54, 10, 29}, 1533 {30, 55, 10, 29}, {30, 56, 10, 29}, {30, 57, 10, 29}, {30, 58, 10, 29}, {30, 59, 10, 29}, 1534 {31, 40, 10, 29}, {31, 41, 10, 29}, {31, 42, 10, 29}, {31, 43, 10, 29}, {31, 44, 10, 29}, 1535 {31, 45, 10, 29}, {31, 46, 10, 29}, {31, 47, 10, 29}, {31, 48, 10, 29}, {31, 49, 10, 29}, 1536 {31, 50, 10, 29}, {31, 51, 10, 29}, {31, 52, 10, 29}, {31, 53, 10, 29}, {31, 54, 10, 29}, 1537 {31, 55, 10, 29}, {31, 56, 10, 29}, {31, 57, 10, 29}, {31, 58, 10, 29}, {31, 59, 10, 29}, 1538 {32, 40, 10, 29}, {32, 41, 10, 29}, {32, 42, 10, 29}, {32, 43, 10, 29}, {32, 44, 10, 29}, 1539 {32, 45, 10, 29}, {32, 46, 10, 29}, {32, 47, 10, 29}, {32, 48, 10, 29}, {32, 49, 10, 29}, 1540 {32, 50, 10, 29}, {32, 51, 10, 29}, {32, 52, 10, 29}, {32, 53, 10, 29}, {32, 54, 10, 29}, 1541 {32, 55, 10, 29}, {32, 56, 10, 29}, {32, 57, 10, 29}, {32, 58, 10, 29}, {32, 59, 10, 29}, 1542 {33, 40, 10, 29}, {33, 41, 10, 29}, {33, 42, 10, 29}, {33, 43, 10, 29}, {33, 44, 10, 29}, 1543 {33, 45, 10, 29}, {33, 46, 10, 29}, {33, 47, 10, 29}, {33, 48, 10, 29}, {33, 49, 10, 29}, 1544 {33, 50, 10, 29}, {33, 51, 10, 29}, {33, 52, 10, 29}, {33, 53, 10, 29}, {33, 54, 10, 29}, 1545 {33, 55, 10, 29}, {33, 56, 10, 29}, {33, 57, 10, 29}, {33, 58, 10, 29}, {33, 59, 10, 29}, 1546 {34, 40, 10, 29}, {34, 41, 10, 29}, {34, 42, 10, 29}, {34, 43, 10, 29}, {34, 44, 10, 29}, 1547 {34, 45, 10, 29}, {34, 46, 10, 29}, {34, 47, 10, 29}, {34, 48, 10, 29}, {34, 49, 10, 29}, 1548 {34, 50, 10, 29}, {34, 51, 10, 29}, {34, 52, 10, 29}, {34, 53, 10, 29}, {34, 54, 10, 29}, 1549 {34, 55, 10, 29}, {34, 56, 10, 29}, {34, 57, 10, 29}, {34, 58, 10, 29}, {34, 59, 10, 29}, 1550 {35, 40, 10, 29}, {35, 41, 10, 29}, {35, 42, 10, 29}, {35, 43, 10, 29}, {35, 44, 10, 29}, 1551 {35, 45, 10, 29}, {35, 46, 10, 29}, {35, 47, 10, 29}, {35, 48, 10, 29}, {35, 49, 10, 29}, 1552 {35, 50, 10, 29}, {35, 51, 10, 29}, {35, 52, 10, 29}, {35, 53, 10, 29}, {35, 54, 10, 29}, 1553 {35, 55, 10, 29}, {35, 56, 10, 29}, {35, 57, 10, 29}, {35, 58, 10, 29}, {35, 59, 10, 29}, 1554 {36, 40, 10, 29}, {36, 41, 10, 29}, {36, 42, 10, 29}, {36, 43, 10, 29}, {36, 44, 10, 29}, 1555 {36, 45, 10, 29}, {36, 46, 10, 29}, {36, 47, 10, 29}, {36, 48, 10, 29}, {36, 49, 10, 29}, 1556 {36, 50, 10, 29}, {36, 51, 10, 29}, {36, 52, 10, 29}, {36, 53, 10, 29}, {36, 54, 10, 29}, 1557 {36, 55, 10, 29}, {36, 56, 10, 29}, {36, 57, 10, 29}, {36, 58, 10, 29}, {36, 59, 10, 29}, 1558 {37, 40, 10, 29}, {37, 41, 10, 29}, {37, 42, 10, 29}, {37, 43, 10, 29}, {37, 44, 10, 29}, 1559 {37, 45, 10, 29}, {37, 46, 10, 29}, {37, 47, 10, 29}, {37, 48, 10, 29}, {37, 49, 10, 29}, 1560 {37, 50, 10, 29}, {37, 51, 10, 29}, {37, 52, 10, 29}, {37, 53, 10, 29}, {37, 54, 10, 29}, 1561 {37, 55, 10, 29}, {37, 56, 10, 29}, {37, 57, 10, 29}, {37, 58, 10, 29}, {37, 59, 10, 29}, 1562 {38, 40, 10, 29}, {38, 41, 10, 29}, {38, 42, 10, 29}, {38, 43, 10, 29}, {38, 44, 10, 29}, 1563 {38, 45, 10, 29}, {38, 46, 10, 29}, {38, 47, 10, 29}, {38, 48, 10, 29}, {38, 49, 10, 29}, 1564 {38, 50, 10, 29}, {38, 51, 10, 29}, {38, 52, 10, 29}, {38, 53, 10, 29}, {38, 54, 10, 29}, 1565 {38, 55, 10, 29}, {38, 56, 10, 29}, {38, 57, 10, 29}, {38, 58, 10, 29}, {38, 59, 10, 29}, 1566 {39, 40, 10, 29}, {39, 41, 10, 29}, {39, 42, 10, 29}, {39, 43, 10, 29}, {39, 44, 10, 29}, 1567 {39, 45, 10, 29}, {39, 46, 10, 29}, {39, 47, 10, 29}, {39, 48, 10, 29}, {39, 49, 10, 29}, 1568 {39, 50, 10, 29}, {39, 51, 10, 29}, {39, 52, 10, 29}, {39, 53, 10, 29}, {39, 54, 10, 29}, 1569 {39, 55, 10, 29}, {39, 56, 10, 29}, {39, 57, 10, 29}, {39, 58, 10, 29}, {39, 59, 10, 29}, 1570 {40, 40, 10, 29}, {40, 41, 10, 29}, {40, 42, 10, 29}, {40, 43, 10, 29}, {40, 44, 10, 29}, 1571 {40, 45, 10, 29}, {40, 46, 10, 29}, {40, 47, 10, 29}, {40, 48, 10, 29}, {40, 49, 10, 29}, 1572 {40, 50, 10, 29}, {40, 51, 10, 29}, {40, 52, 10, 29}, {40, 53, 10, 29}, {40, 54, 10, 29}, 1573 {40, 55, 10, 29}, {40, 56, 10, 29}, {40, 57, 10, 29}, {40, 58, 10, 29}, {40, 59, 10, 29}, 1574 {41, 40, 10, 29}, {41, 41, 10, 29}, {41, 42, 10, 29}, {41, 43, 10, 29}, {41, 44, 10, 29}, 1575 {41, 45, 10, 29}, {41, 46, 10, 29}, {41, 47, 10, 29}, {41, 48, 10, 29}, {41, 49, 10, 29}, 1576 {41, 50, 10, 29}, {41, 51, 10, 29}, {41, 52, 10, 29}, {41, 53, 10, 29}, {41, 54, 10, 29}, 1577 {41, 55, 10, 29}, {41, 56, 10, 29}, {41, 57, 10, 29}, {41, 58, 10, 29}, {41, 59, 10, 29}, 1578 {42, 40, 10, 29}, {42, 41, 10, 29}, {42, 42, 10, 29}, {42, 43, 10, 29}, {42, 44, 10, 29}, 1579 {42, 45, 10, 29}, {42, 46, 10, 29}, {42, 47, 10, 29}, {42, 48, 10, 29}, {42, 49, 10, 29}, 1580 {42, 50, 10, 29}, {42, 51, 10, 29}, {42, 52, 10, 29}, {42, 53, 10, 29}, {42, 54, 10, 29}, 1581 {42, 55, 10, 29}, {42, 56, 10, 29}, {42, 57, 10, 29}, {42, 58, 10, 29}, {42, 59, 10, 29}, 1582 {43, 40, 10, 29}, {43, 41, 10, 29}, {43, 42, 10, 29}, {43, 43, 10, 29}, {43, 44, 10, 29}, 1583 {43, 45, 10, 29}, {43, 46, 10, 29}, {43, 47, 10, 29}, {43, 48, 10, 29}, {43, 49, 10, 29}, 1584 {43, 50, 10, 29}, {43, 51, 10, 29}, {43, 52, 10, 29}, {43, 53, 10, 29}, {43, 54, 10, 29}, 1585 {43, 55, 10, 29}, {43, 56, 10, 29}, {43, 57, 10, 29}, {43, 58, 10, 29}, {43, 59, 10, 29}, 1586 {44, 40, 10, 29}, {44, 41, 10, 29}, {44, 42, 10, 29}, {44, 43, 10, 29}, {44, 44, 10, 29}, 1587 {44, 45, 10, 29}, {44, 46, 10, 29}, {44, 47, 10, 29}, {44, 48, 10, 29}, {44, 49, 10, 29}, 1588 {44, 50, 10, 29}, {44, 51, 10, 29}, {44, 52, 10, 29}, {44, 53, 10, 29}, {44, 54, 10, 29}, 1589 {44, 55, 10, 29}, {44, 56, 10, 29}, {44, 57, 10, 29}, {44, 58, 10, 29}, {44, 59, 10, 29}, 1590 {45, 40, 10, 29}, {45, 41, 10, 29}, {45, 42, 10, 29}, {45, 43, 10, 29}, {45, 44, 10, 29}, 1591 {45, 45, 10, 29}, {45, 46, 10, 29}, {45, 47, 10, 29}, {45, 48, 10, 29}, {45, 49, 10, 29}, 1592 {45, 50, 10, 29}, {45, 51, 10, 29}, {45, 52, 10, 29}, {45, 53, 10, 29}, {45, 54, 10, 29}, 1593 {45, 55, 10, 29}, {45, 56, 10, 29}, {45, 57, 10, 29}, {45, 58, 10, 29}, {45, 59, 10, 29}, 1594 {46, 40, 10, 29}, {46, 41, 10, 29}, {46, 42, 10, 29}, {46, 43, 10, 29}, {46, 44, 10, 29}, 1595 {46, 45, 10, 29}, {46, 46, 10, 29}, {46, 47, 10, 29}, {46, 48, 10, 29}, {46, 49, 10, 29}, 1596 {46, 50, 10, 29}, {46, 51, 10, 29}, {46, 52, 10, 29}, {46, 53, 10, 29}, {46, 54, 10, 29}, 1597 {46, 55, 10, 29}, {46, 56, 10, 29}, {46, 57, 10, 29}, {46, 58, 10, 29}, {46, 59, 10, 29}, 1598 {47, 40, 10, 29}, {47, 41, 10, 29}, {47, 42, 10, 29}, {47, 43, 10, 29}, {47, 44, 10, 29}, 1599 {47, 45, 10, 29}, {47, 46, 10, 29}, {47, 47, 10, 29}, {47, 48, 10, 29}, {47, 49, 10, 29}, 1600 {47, 50, 10, 29}, {47, 51, 10, 29}, {47, 52, 10, 29}, {47, 53, 10, 29}, {47, 54, 10, 29}, 1601 {47, 55, 10, 29}, {47, 56, 10, 29}, {47, 57, 10, 29}, {47, 58, 10, 29}, {47, 59, 10, 29}, 1602 {48, 40, 10, 29}, {48, 41, 10, 29}, {48, 42, 10, 29}, {48, 43, 10, 29}, {48, 44, 10, 29}, 1603 {48, 45, 10, 29}, {48, 46, 10, 29}, {48, 47, 10, 29}, {48, 48, 10, 29}, {48, 49, 10, 29}, 1604 {48, 50, 10, 29}, {48, 51, 10, 29}, {48, 52, 10, 29}, {48, 53, 10, 29}, {48, 54, 10, 29}, 1605 {48, 55, 10, 29}, {48, 56, 10, 29}, {48, 57, 10, 29}, {48, 58, 10, 29}, {48, 59, 10, 29}, 1606 {49, 40, 10, 29}, {49, 41, 10, 29}, {49, 42, 10, 29}, {49, 43, 10, 29}, {49, 44, 10, 29}, 1607 {49, 45, 10, 29}, {49, 46, 10, 29}, {49, 47, 10, 29}, {49, 48, 10, 29}, {49, 49, 10, 29}, 1608 {49, 50, 10, 29}, {49, 51, 10, 29}, {49, 52, 10, 29}, {49, 53, 10, 29}, {49, 54, 10, 29}, 1609 {49, 55, 10, 29}, {49, 56, 10, 29}, {49, 57, 10, 29}, {49, 58, 10, 29}, {49, 59, 10, 29}, 1610 {50, 40, 10, 29}, {50, 41, 10, 29}, {50, 42, 10, 29}, {50, 43, 10, 29}, {50, 44, 10, 29}, 1611 {50, 45, 10, 29}, {50, 46, 10, 29}, {50, 47, 10, 29}, {50, 48, 10, 29}, {50, 49, 10, 29}, 1612 {50, 50, 10, 29}, {50, 51, 10, 29}, {50, 52, 10, 29}, {50, 53, 10, 29}, {50, 54, 10, 29}, 1613 {50, 55, 10, 29}, {50, 56, 10, 29}, {50, 57, 10, 29}, {50, 58, 10, 29}, {50, 59, 10, 29}, 1614 {51, 40, 10, 29}, {51, 41, 10, 29}, {51, 42, 10, 29}, {51, 43, 10, 29}, {51, 44, 10, 29}, 1615 {51, 45, 10, 29}, {51, 46, 10, 29}, {51, 47, 10, 29}, {51, 48, 10, 29}, {51, 49, 10, 29}, 1616 {51, 50, 10, 29}, {51, 51, 10, 29}, {51, 52, 10, 29}, {51, 53, 10, 29}, {51, 54, 10, 29}, 1617 {51, 55, 10, 29}, {51, 56, 10, 29}, {51, 57, 10, 29}, {51, 58, 10, 29}, {51, 59, 10, 29}, 1618 {52, 40, 10, 29}, {52, 41, 10, 29}, {52, 42, 10, 29}, {52, 43, 10, 29}, {52, 44, 10, 29}, 1619 {52, 45, 10, 29}, {52, 46, 10, 29}, {52, 47, 10, 29}, {52, 48, 10, 29}, {52, 49, 10, 29}, 1620 {52, 50, 10, 29}, {52, 51, 10, 29}, {52, 52, 10, 29}, {52, 53, 10, 29}, {52, 54, 10, 29}, 1621 {52, 55, 10, 29}, {52, 56, 10, 29}, {52, 57, 10, 29}, {52, 58, 10, 29}, {52, 59, 10, 29}, 1622 {53, 40, 10, 29}, {53, 41, 10, 29}, {53, 42, 10, 29}, {53, 43, 10, 29}, {53, 44, 10, 29}, 1623 {53, 45, 10, 29}, {53, 46, 10, 29}, {53, 47, 10, 29}, {53, 48, 10, 29}, {53, 49, 10, 29}, 1624 {53, 50, 10, 29}, {53, 51, 10, 29}, {53, 52, 10, 29}, {53, 53, 10, 29}, {53, 54, 10, 29}, 1625 {53, 55, 10, 29}, {53, 56, 10, 29}, {53, 57, 10, 29}, {53, 58, 10, 29}, {53, 59, 10, 29}, 1626 {54, 40, 10, 29}, {54, 41, 10, 29}, {54, 42, 10, 29}, {54, 43, 10, 29}, {54, 44, 10, 29}, 1627 {54, 45, 10, 29}, {54, 46, 10, 29}, {54, 47, 10, 29}, {54, 48, 10, 29}, {54, 49, 10, 29}, 1628 {54, 50, 10, 29}, {54, 51, 10, 29}, {54, 52, 10, 29}, {54, 53, 10, 29}, {54, 54, 10, 29}, 1629 {54, 55, 10, 29}, {54, 56, 10, 29}, {54, 57, 10, 29}, {54, 58, 10, 29}, {54, 59, 10, 29}, 1630 {55, 40, 10, 29}, {55, 41, 10, 29}, {55, 42, 10, 29}, {55, 43, 10, 29}, {55, 44, 10, 29}, 1631 {55, 45, 10, 29}, {55, 46, 10, 29}, {55, 47, 10, 29}, {55, 48, 10, 29}, {55, 49, 10, 29}, 1632 {55, 50, 10, 29}, {55, 51, 10, 29}, {55, 52, 10, 29}, {55, 53, 10, 29}, {55, 54, 10, 29}, 1633 {55, 55, 10, 29}, {55, 56, 10, 29}, {55, 57, 10, 29}, {55, 58, 10, 29}, {55, 59, 10, 29}, 1634 {56, 40, 10, 29}, {56, 41, 10, 29}, {56, 42, 10, 29}, {56, 43, 10, 29}, {56, 44, 10, 29}, 1635 {56, 45, 10, 29}, {56, 46, 10, 29}, {56, 47, 10, 29}, {56, 48, 10, 29}, {56, 49, 10, 29}, 1636 {56, 50, 10, 29}, {56, 51, 10, 29}, {56, 52, 10, 29}, {56, 53, 10, 29}, {56, 54, 10, 29}, 1637 {56, 55, 10, 29}, {56, 56, 10, 29}, {56, 57, 10, 29}, {56, 58, 10, 29}, {56, 59, 10, 29}, 1638 {57, 40, 10, 29}, {57, 41, 10, 29}, {57, 42, 10, 29}, {57, 43, 10, 29}, {57, 44, 10, 29}, 1639 {57, 45, 10, 29}, {57, 46, 10, 29}, {57, 47, 10, 29}, {57, 48, 10, 29}, {57, 49, 10, 29}, 1640 {57, 50, 10, 29}, {57, 51, 10, 29}, {57, 52, 10, 29}, {57, 53, 10, 29}, {57, 54, 10, 29}, 1641 {57, 55, 10, 29}, {57, 56, 10, 29}, {57, 57, 10, 29}, {57, 58, 10, 29}, {57, 59, 10, 29}, 1642 {58, 40, 10, 29}, {58, 41, 10, 29}, {58, 42, 10, 29}, {58, 43, 10, 29}, {58, 44, 10, 29}, 1643 {58, 45, 10, 29}, {58, 46, 10, 29}, {58, 47, 10, 29}, {58, 48, 10, 29}, {58, 49, 10, 29}, 1644 {58, 50, 10, 29}, {58, 51, 10, 29}, {58, 52, 10, 29}, {58, 53, 10, 29}, {58, 54, 10, 29}, 1645 {58, 55, 10, 29}, {58, 56, 10, 29}, {58, 57, 10, 29}, {58, 58, 10, 29}, {58, 59, 10, 29}, 1646 {59, 40, 10, 29}, {59, 41, 10, 29}, {59, 42, 10, 29}, {59, 43, 10, 29}, {59, 44, 10, 29}, 1647 {59, 45, 10, 29}, {59, 46, 10, 29}, {59, 47, 10, 29}, {59, 48, 10, 29}, {59, 49, 10, 29}, 1648 {59, 50, 10, 29}, {59, 51, 10, 29}, {59, 52, 10, 29}, {59, 53, 10, 29}, {59, 54, 10, 29}, 1649 {59, 55, 10, 29}, {59, 56, 10, 29}, {59, 57, 10, 29}, {59, 58, 10, 29}, {59, 59, 10, 29}, 1650 {60, 40, 10, 29}, {60, 41, 10, 29}, {60, 42, 10, 29}, {60, 43, 10, 29}, {60, 44, 10, 29}, 1651 {60, 45, 10, 29}, {60, 46, 10, 29}, {60, 47, 10, 29}, {60, 48, 10, 29}, {60, 49, 10, 29}, 1652 {60, 50, 10, 29}, {60, 51, 10, 29}, {60, 52, 10, 29}, {60, 53, 10, 29}, {60, 54, 10, 29}, 1653 {60, 55, 10, 29}, {60, 56, 10, 29}, {60, 57, 10, 29}, {60, 58, 10, 29}, {60, 59, 10, 29}, 1654 {61, 40, 10, 29}, {61, 41, 10, 29}, {61, 42, 10, 29}, {61, 43, 10, 29}, {61, 44, 10, 29}, 1655 {61, 45, 10, 29}, {61, 46, 10, 29}, {61, 47, 10, 29}, {61, 48, 10, 29}, {61, 49, 10, 29}, 1656 {61, 50, 10, 29}, {61, 51, 10, 29}, {61, 52, 10, 29}, {61, 53, 10, 29}, {61, 54, 10, 29}, 1657 {61, 55, 10, 29}, {61, 56, 10, 29}, {61, 57, 10, 29}, {61, 58, 10, 29}, {61, 59, 10, 29}, 1658 {62, 40, 10, 29}, {62, 41, 10, 29}, {62, 42, 10, 29}, {62, 43, 10, 29}, {62, 44, 10, 29}, 1659 {62, 45, 10, 29}, {62, 46, 10, 29}, {62, 47, 10, 29}, {62, 48, 10, 29}, {62, 49, 10, 29}, 1660 {62, 50, 10, 29}, {62, 51, 10, 29}, {62, 52, 10, 29}, {62, 53, 10, 29}, {62, 54, 10, 29}, 1661 {62, 55, 10, 29}, {62, 56, 10, 29}, {62, 57, 10, 29}, {62, 58, 10, 29}, {62, 59, 10, 29}, 1662 {63, 40, 10, 29}, {63, 41, 10, 29}, {63, 42, 10, 29}, {63, 43, 10, 29}, {63, 44, 10, 29}, 1663 {63, 45, 10, 29}, {63, 46, 10, 29}, {63, 47, 10, 29}, {63, 48, 10, 29}, {63, 49, 10, 29}, 1664 {63, 50, 10, 29}, {63, 51, 10, 29}, {63, 52, 10, 29}, {63, 53, 10, 29}, {63, 54, 10, 29}, 1665 {63, 55, 10, 29}, {63, 56, 10, 29}, {63, 57, 10, 29}, {63, 58, 10, 29}, {63, 59, 10, 29}, 1666 {64, 40, 10, 29}, {64, 41, 10, 29}, {64, 42, 10, 29}, {64, 43, 10, 29}, {64, 44, 10, 29}, 1667 {64, 45, 10, 29}, {64, 46, 10, 29}, {64, 47, 10, 29}, {64, 48, 10, 29}, {64, 49, 10, 29}, 1668 {64, 50, 10, 29}, {64, 51, 10, 29}, {64, 52, 10, 29}, {64, 53, 10, 29}, {64, 54, 10, 29}, 1669 {64, 55, 10, 29}, {64, 56, 10, 29}, {64, 57, 10, 29}, {64, 58, 10, 29}, {64, 59, 10, 29}, 1670 {65, 40, 10, 29}, {65, 41, 10, 29}, {65, 42, 10, 29}, {65, 43, 10, 29}, {65, 44, 10, 29}, 1671 {65, 45, 10, 29}, {65, 46, 10, 29}, {65, 47, 10, 29}, {65, 48, 10, 29}, {65, 49, 10, 29}, 1672 {65, 50, 10, 29}, {65, 51, 10, 29}, {65, 52, 10, 29}, {65, 53, 10, 29}, {65, 54, 10, 29}, 1673 {65, 55, 10, 29}, {65, 56, 10, 29}, {65, 57, 10, 29}, {65, 58, 10, 29}, {65, 59, 10, 29}, 1674 {66, 40, 10, 29}, {66, 41, 10, 29}, {66, 42, 10, 29}, {66, 43, 10, 29}, {66, 44, 10, 29}, 1675 {66, 45, 10, 29}, {66, 46, 10, 29}, {66, 47, 10, 29}, {66, 48, 10, 29}, {66, 49, 10, 29}, 1676 {66, 50, 10, 29}, {66, 51, 10, 29}, {66, 52, 10, 29}, {66, 53, 10, 29}, {66, 54, 10, 29}, 1677 {66, 55, 10, 29}, {66, 56, 10, 29}, {66, 57, 10, 29}, {66, 58, 10, 29}, {66, 59, 10, 29}, 1678 {67, 40, 10, 29}, {67, 41, 10, 29}, {67, 42, 10, 29}, {67, 43, 10, 29}, {67, 44, 10, 29}, 1679 {67, 45, 10, 29}, {67, 46, 10, 29}, {67, 47, 10, 29}, {67, 48, 10, 29}, {67, 49, 10, 29}, 1680 {67, 50, 10, 29}, {67, 51, 10, 29}, {67, 52, 10, 29}, {67, 53, 10, 29}, {67, 54, 10, 29}, 1681 {67, 55, 10, 29}, {67, 56, 10, 29}, {67, 57, 10, 29}, {67, 58, 10, 29}, {67, 59, 10, 29}, 1682 {68, 40, 10, 29}, {68, 41, 10, 29}, {68, 42, 10, 29}, {68, 43, 10, 29}, {68, 44, 10, 29}, 1683 {68, 45, 10, 29}, {68, 46, 10, 29}, {68, 47, 10, 29}, {68, 48, 10, 29}, {68, 49, 10, 29}, 1684 {68, 50, 10, 29}, {68, 51, 10, 29}, {68, 52, 10, 29}, {68, 53, 10, 29}, {68, 54, 10, 29}, 1685 {68, 55, 10, 29}, {68, 56, 10, 29}, {68, 57, 10, 29}, {68, 58, 10, 29}, {68, 59, 10, 29}, 1686 {69, 40, 10, 29}, {69, 41, 10, 29}, {69, 42, 10, 29}, {69, 43, 10, 29}, {69, 44, 10, 29}, 1687 {69, 45, 10, 29}, {69, 46, 10, 29}, {69, 47, 10, 29}, {69, 48, 10, 29}, {69, 49, 10, 29}, 1688 {69, 50, 10, 29}, {69, 51, 10, 29}, {69, 52, 10, 29}, {69, 53, 10, 29}, {69, 54, 10, 29}, 1689 {69, 55, 10, 29}, {69, 56, 10, 29}, {69, 57, 10, 29}, {69, 58, 10, 29}, {69, 59, 10, 29}, 1690 {70, 40, 10, 29}, {70, 41, 10, 29}, {70, 42, 10, 29}, {70, 43, 10, 29}, {70, 44, 10, 29}, 1691 {70, 45, 10, 29}, {70, 46, 10, 29}, {70, 47, 10, 29}, {70, 48, 10, 29}, {70, 49, 10, 29}, 1692 {70, 50, 10, 29}, {70, 51, 10, 29}, {70, 52, 10, 29}, {70, 53, 10, 29}, {70, 54, 10, 29}, 1693 {70, 55, 10, 29}, {70, 56, 10, 29}, {70, 57, 10, 29}, {70, 58, 10, 29}, {70, 59, 10, 29}, 1694 {71, 40, 10, 29}, {71, 41, 10, 29}, {71, 42, 10, 29}, {71, 43, 10, 29}, {71, 44, 10, 29}, 1695 {71, 45, 10, 29}, {71, 46, 10, 29}, {71, 47, 10, 29}, {71, 48, 10, 29}, {71, 49, 10, 29}, 1696 {71, 50, 10, 29}, {71, 51, 10, 29}, {71, 52, 10, 29}, {71, 53, 10, 29}, {71, 54, 10, 29}, 1697 {71, 55, 10, 29}, {71, 56, 10, 29}, {71, 57, 10, 29}, {71, 58, 10, 29}, {71, 59, 10, 29}, 1698 {72, 40, 10, 29}, {72, 41, 10, 29}, {72, 42, 10, 29}, {72, 43, 10, 29}, {72, 44, 10, 29}, 1699 {72, 45, 10, 29}, {72, 46, 10, 29}, {72, 47, 10, 29}, {72, 48, 10, 29}, {72, 49, 10, 29}, 1700 {72, 50, 10, 29}, {72, 51, 10, 29}, {72, 52, 10, 29}, {72, 53, 10, 29}, {72, 54, 10, 29}, 1701 {72, 55, 10, 29}, {72, 56, 10, 29}, {72, 57, 10, 29}, {72, 58, 10, 29}, {72, 59, 10, 29}, 1702 {73, 40, 10, 29}, {73, 41, 10, 29}, {73, 42, 10, 29}, {73, 43, 10, 29}, {73, 44, 10, 29}, 1703 {73, 45, 10, 29}, {73, 46, 10, 29}, {73, 47, 10, 29}, {73, 48, 10, 29}, {73, 49, 10, 29}, 1704 {73, 50, 10, 29}, {73, 51, 10, 29}, {73, 52, 10, 29}, {73, 53, 10, 29}, {73, 54, 10, 29}, 1705 {73, 55, 10, 29}, {73, 56, 10, 29}, {73, 57, 10, 29}, {73, 58, 10, 29}, {73, 59, 10, 29}, 1706 {74, 40, 10, 29}, {74, 41, 10, 29}, {74, 42, 10, 29}, {74, 43, 10, 29}, {74, 44, 10, 29}, 1707 {74, 45, 10, 29}, {74, 46, 10, 29}, {74, 47, 10, 29}, {74, 48, 10, 29}, {74, 49, 10, 29}, 1708 {74, 50, 10, 29}, {74, 51, 10, 29}, {74, 52, 10, 29}, {74, 53, 10, 29}, {74, 54, 10, 29}, 1709 {74, 55, 10, 29}, {74, 56, 10, 29}, {74, 57, 10, 29}, {74, 58, 10, 29}, {74, 59, 10, 29}, 1710 {75, 40, 10, 29}, {75, 41, 10, 29}, {75, 42, 10, 29}, {75, 43, 10, 29}, {75, 44, 10, 29}, 1711 {75, 45, 10, 29}, {75, 46, 10, 29}, {75, 47, 10, 29}, {75, 48, 10, 29}, {75, 49, 10, 29}, 1712 {75, 50, 10, 29}, {75, 51, 10, 29}, {75, 52, 10, 29}, {75, 53, 10, 29}, {75, 54, 10, 29}, 1713 {75, 55, 10, 29}, {75, 56, 10, 29}, {75, 57, 10, 29}, {75, 58, 10, 29}, {75, 59, 10, 29}, 1714 {76, 40, 10, 29}, {76, 41, 10, 29}, {76, 42, 10, 29}, {76, 43, 10, 29}, {76, 44, 10, 29}, 1715 {76, 45, 10, 29}, {76, 46, 10, 29}, {76, 47, 10, 29}, {76, 48, 10, 29}, {76, 49, 10, 29}, 1716 {76, 50, 10, 29}, {76, 51, 10, 29}, {76, 52, 10, 29}, {76, 53, 10, 29}, {76, 54, 10, 29}, 1717 {76, 55, 10, 29}, {76, 56, 10, 29}, {76, 57, 10, 29}, {76, 58, 10, 29}, {76, 59, 10, 29}, 1718 {77, 40, 10, 29}, {77, 41, 10, 29}, {77, 42, 10, 29}, {77, 43, 10, 29}, {77, 44, 10, 29}, 1719 {77, 45, 10, 29}, {77, 46, 10, 29}, {77, 47, 10, 29}, {77, 48, 10, 29}, {77, 49, 10, 29}, 1720 {77, 50, 10, 29}, {77, 51, 10, 29}, {77, 52, 10, 29}, {77, 53, 10, 29}, {77, 54, 10, 29}, 1721 {77, 55, 10, 29}, {77, 56, 10, 29}, {77, 57, 10, 29}, {77, 58, 10, 29}, {77, 59, 10, 29}, 1722 {78, 40, 10, 29}, {78, 41, 10, 29}, {78, 42, 10, 29}, {78, 43, 10, 29}, {78, 44, 10, 29}, 1723 {78, 45, 10, 29}, {78, 46, 10, 29}, {78, 47, 10, 29}, {78, 48, 10, 29}, {78, 49, 10, 29}, 1724 {78, 50, 10, 29}, {78, 51, 10, 29}, {78, 52, 10, 29}, {78, 53, 10, 29}, {78, 54, 10, 29}, 1725 {78, 55, 10, 29}, {78, 56, 10, 29}, {78, 57, 10, 29}, {78, 58, 10, 29}, {78, 59, 10, 29}, 1726 {79, 40, 10, 29}, {79, 41, 10, 29}, {79, 42, 10, 29}, {79, 43, 10, 29}, {79, 44, 10, 29}, 1727 {79, 45, 10, 29}, {79, 46, 10, 29}, {79, 47, 10, 29}, {79, 48, 10, 29}, {79, 49, 10, 29}, 1728 {79, 50, 10, 29}, {79, 51, 10, 29}, {79, 52, 10, 29}, {79, 53, 10, 29}, {79, 54, 10, 29}, 1729 {79, 55, 10, 29}, {79, 56, 10, 29}, {79, 57, 10, 29}, {79, 58, 10, 29}, {79, 59, 10, 29}, 1730 {80, 40, 10, 29}, {80, 41, 10, 29}, {80, 42, 10, 29}, {80, 43, 10, 29}, {80, 44, 10, 29}, 1731 {80, 45, 10, 29}, {80, 46, 10, 29}, {80, 47, 10, 29}, {80, 48, 10, 29}, {80, 49, 10, 29}, 1732 {80, 50, 10, 29}, {80, 51, 10, 29}, {80, 52, 10, 29}, {80, 53, 10, 29}, {80, 54, 10, 29}, 1733 {80, 55, 10, 29}, {80, 56, 10, 29}, {80, 57, 10, 29}, {80, 58, 10, 29}, {80, 59, 10, 29}, 1734 {81, 40, 10, 29}, {81, 41, 10, 29}, {81, 42, 10, 29}, {81, 43, 10, 29}, {81, 44, 10, 29}, 1735 {81, 45, 10, 29}, {81, 46, 10, 29}, {81, 47, 10, 29}, {81, 48, 10, 29}, {81, 49, 10, 29}, 1736 {81, 50, 10, 29}, {81, 51, 10, 29}, {81, 52, 10, 29}, {81, 53, 10, 29}, {81, 54, 10, 29}, 1737 {81, 55, 10, 29}, {81, 56, 10, 29}, {81, 57, 10, 29}, {81, 58, 10, 29}, {81, 59, 10, 29}, 1738 {82, 40, 10, 29}, {82, 41, 10, 29}, {82, 42, 10, 29}, {82, 43, 10, 29}, {82, 44, 10, 29}, 1739 {82, 45, 10, 29}, {82, 46, 10, 29}, {82, 47, 10, 29}, {82, 48, 10, 29}, {82, 49, 10, 29}, 1740 {82, 50, 10, 29}, {82, 51, 10, 29}, {82, 52, 10, 29}, {82, 53, 10, 29}, {82, 54, 10, 29}, 1741 {82, 55, 10, 29}, {82, 56, 10, 29}, {82, 57, 10, 29}, {82, 58, 10, 29}, {82, 59, 10, 29}, 1742 {83, 40, 10, 29}, {83, 41, 10, 29}, {83, 42, 10, 29}, {83, 43, 10, 29}, {83, 44, 10, 29}, 1743 {83, 45, 10, 29}, {83, 46, 10, 29}, {83, 47, 10, 29}, {83, 48, 10, 29}, {83, 49, 10, 29}, 1744 {83, 50, 10, 29}, {83, 51, 10, 29}, {83, 52, 10, 29}, {83, 53, 10, 29}, {83, 54, 10, 29}, 1745 {83, 55, 10, 29}, {83, 56, 10, 29}, {83, 57, 10, 29}, {83, 58, 10, 29}, {83, 59, 10, 29}, 1746 {84, 40, 10, 29}, {84, 41, 10, 29}, {84, 42, 10, 29}, {84, 43, 10, 29}, {84, 44, 10, 29}, 1747 {84, 45, 10, 29}, {84, 46, 10, 29}, {84, 47, 10, 29}, {84, 48, 10, 29}, {84, 49, 10, 29}, 1748 {84, 50, 10, 29}, {84, 51, 10, 29}, {84, 52, 10, 29}, {84, 53, 10, 29}, {84, 54, 10, 29}, 1749 {84, 55, 10, 29}, {84, 56, 10, 29}, {84, 57, 10, 29}, {84, 58, 10, 29}, {84, 59, 10, 29}, 1750 {85, 40, 10, 29}, {85, 41, 10, 29}, {85, 42, 10, 29}, {85, 43, 10, 29}, {85, 44, 10, 29}, 1751 {85, 45, 10, 29}, {85, 46, 10, 29}, {85, 47, 10, 29}, {85, 48, 10, 29}, {85, 49, 10, 29}, 1752 {85, 50, 10, 29}, {85, 51, 10, 29}, {85, 52, 10, 29}, {85, 53, 10, 29}, {85, 54, 10, 29}, 1753 {85, 55, 10, 29}, {85, 56, 10, 29}, {85, 57, 10, 29}, {85, 58, 10, 29}, {85, 59, 10, 29}, 1754 {86, 40, 10, 29}, {86, 41, 10, 29}, {86, 42, 10, 29}, {86, 43, 10, 29}, {86, 44, 10, 29}, 1755 {86, 45, 10, 29}, {86, 46, 10, 29}, {86, 47, 10, 29}, {86, 48, 10, 29}, {86, 49, 10, 29}, 1756 {86, 50, 10, 29}, {86, 51, 10, 29}, {86, 52, 10, 29}, {86, 53, 10, 29}, {86, 54, 10, 29}, 1757 {86, 55, 10, 29}, {86, 56, 10, 29}, {86, 57, 10, 29}, {86, 58, 10, 29}, {86, 59, 10, 29}, 1758 {87, 40, 10, 29}, {87, 41, 10, 29}, {87, 42, 10, 29}, {87, 43, 10, 29}, {87, 44, 10, 29}, 1759 {87, 45, 10, 29}, {87, 46, 10, 29}, {87, 47, 10, 29}, {87, 48, 10, 29}, {87, 49, 10, 29}, 1760 {87, 50, 10, 29}, {87, 51, 10, 29}, {87, 52, 10, 29}, {87, 53, 10, 29}, {87, 54, 10, 29}, 1761 {87, 55, 10, 29}, {87, 56, 10, 29}, {87, 57, 10, 29}, {87, 58, 10, 29}, {87, 59, 10, 29}, 1762 {88, 40, 10, 29}, {88, 41, 10, 29}, {88, 42, 10, 29}, {88, 43, 10, 29}, {88, 44, 10, 29}, 1763 {88, 45, 10, 29}, {88, 46, 10, 29}, {88, 47, 10, 29}, {88, 48, 10, 29}, {88, 49, 10, 29}, 1764 {88, 50, 10, 29}, {88, 51, 10, 29}, {88, 52, 10, 29}, {88, 53, 10, 29}, {88, 54, 10, 29}, 1765 {88, 55, 10, 29}, {88, 56, 10, 29}, {88, 57, 10, 29}, {88, 58, 10, 29}, {88, 59, 10, 29}, 1766 {89, 40, 10, 29}, {89, 41, 10, 29}, {89, 42, 10, 29}, {89, 43, 10, 29}, {89, 44, 10, 29}, 1767 {89, 45, 10, 29}, {89, 46, 10, 29}, {89, 47, 10, 29}, {89, 48, 10, 29}, {89, 49, 10, 29}, 1768 {89, 50, 10, 29}, {89, 51, 10, 29}, {89, 52, 10, 29}, {89, 53, 10, 29}, {89, 54, 10, 29}, 1769 {89, 55, 10, 29}, {89, 56, 10, 29}, {89, 57, 10, 29}, {89, 58, 10, 29}, {89, 59, 10, 29}, 1770 }, 1771 } 1772 body2 = testBody{ 1773 label: 2, 1774 offset: dvid.Point3d{30, 20, 40}, 1775 size: dvid.Point3d{50, 50, 20}, 1776 blockSpans: []dvid.Span{ 1777 {1, 0, 0, 2}, 1778 {1, 1, 0, 2}, 1779 {1, 2, 0, 2}, 1780 }, 1781 voxelSpans: []dvid.Span{ 1782 {40, 20, 30, 31}, {40, 21, 30, 31}, {40, 22, 30, 31}, {40, 23, 30, 31}, {40, 24, 30, 31}, 1783 {40, 25, 30, 31}, {40, 26, 30, 31}, {40, 27, 30, 31}, {40, 28, 30, 31}, {40, 29, 30, 31}, 1784 {40, 30, 30, 31}, {40, 31, 30, 31}, {41, 20, 30, 31}, {41, 21, 30, 31}, {41, 22, 30, 31}, 1785 {41, 23, 30, 31}, {41, 24, 30, 31}, {41, 25, 30, 31}, {41, 26, 30, 31}, {41, 27, 30, 31}, 1786 {41, 28, 30, 31}, {41, 29, 30, 31}, {41, 30, 30, 31}, {41, 31, 30, 31}, {42, 20, 30, 31}, 1787 {42, 21, 30, 31}, {42, 22, 30, 31}, {42, 23, 30, 31}, {42, 24, 30, 31}, {42, 25, 30, 31}, 1788 {42, 26, 30, 31}, {42, 27, 30, 31}, {42, 28, 30, 31}, {42, 29, 30, 31}, {42, 30, 30, 31}, 1789 {42, 31, 30, 31}, {43, 20, 30, 31}, {43, 21, 30, 31}, {43, 22, 30, 31}, {43, 23, 30, 31}, 1790 {43, 24, 30, 31}, {43, 25, 30, 31}, {43, 26, 30, 31}, {43, 27, 30, 31}, {43, 28, 30, 31}, 1791 {43, 29, 30, 31}, {43, 30, 30, 31}, {43, 31, 30, 31}, {44, 20, 30, 31}, {44, 21, 30, 31}, 1792 {44, 22, 30, 31}, {44, 23, 30, 31}, {44, 24, 30, 31}, {44, 25, 30, 31}, {44, 26, 30, 31}, 1793 {44, 27, 30, 31}, {44, 28, 30, 31}, {44, 29, 30, 31}, {44, 30, 30, 31}, {44, 31, 30, 31}, 1794 {45, 20, 30, 31}, {45, 21, 30, 31}, {45, 22, 30, 31}, {45, 23, 30, 31}, {45, 24, 30, 31}, 1795 {45, 25, 30, 31}, {45, 26, 30, 31}, {45, 27, 30, 31}, {45, 28, 30, 31}, {45, 29, 30, 31}, 1796 {45, 30, 30, 31}, {45, 31, 30, 31}, {46, 20, 30, 31}, {46, 21, 30, 31}, {46, 22, 30, 31}, 1797 {46, 23, 30, 31}, {46, 24, 30, 31}, {46, 25, 30, 31}, {46, 26, 30, 31}, {46, 27, 30, 31}, 1798 {46, 28, 30, 31}, {46, 29, 30, 31}, {46, 30, 30, 31}, {46, 31, 30, 31}, {47, 20, 30, 31}, 1799 {47, 21, 30, 31}, {47, 22, 30, 31}, {47, 23, 30, 31}, {47, 24, 30, 31}, {47, 25, 30, 31}, 1800 {47, 26, 30, 31}, {47, 27, 30, 31}, {47, 28, 30, 31}, {47, 29, 30, 31}, {47, 30, 30, 31}, 1801 {47, 31, 30, 31}, {48, 20, 30, 31}, {48, 21, 30, 31}, {48, 22, 30, 31}, {48, 23, 30, 31}, 1802 {48, 24, 30, 31}, {48, 25, 30, 31}, {48, 26, 30, 31}, {48, 27, 30, 31}, {48, 28, 30, 31}, 1803 {48, 29, 30, 31}, {48, 30, 30, 31}, {48, 31, 30, 31}, {49, 20, 30, 31}, {49, 21, 30, 31}, 1804 {49, 22, 30, 31}, {49, 23, 30, 31}, {49, 24, 30, 31}, {49, 25, 30, 31}, {49, 26, 30, 31}, 1805 {49, 27, 30, 31}, {49, 28, 30, 31}, {49, 29, 30, 31}, {49, 30, 30, 31}, {49, 31, 30, 31}, 1806 {50, 20, 30, 31}, {50, 21, 30, 31}, {50, 22, 30, 31}, {50, 23, 30, 31}, {50, 24, 30, 31}, 1807 {50, 25, 30, 31}, {50, 26, 30, 31}, {50, 27, 30, 31}, {50, 28, 30, 31}, {50, 29, 30, 31}, 1808 {50, 30, 30, 31}, {50, 31, 30, 31}, {51, 20, 30, 31}, {51, 21, 30, 31}, {51, 22, 30, 31}, 1809 {51, 23, 30, 31}, {51, 24, 30, 31}, {51, 25, 30, 31}, {51, 26, 30, 31}, {51, 27, 30, 31}, 1810 {51, 28, 30, 31}, {51, 29, 30, 31}, {51, 30, 30, 31}, {51, 31, 30, 31}, {52, 20, 30, 31}, 1811 {52, 21, 30, 31}, {52, 22, 30, 31}, {52, 23, 30, 31}, {52, 24, 30, 31}, {52, 25, 30, 31}, 1812 {52, 26, 30, 31}, {52, 27, 30, 31}, {52, 28, 30, 31}, {52, 29, 30, 31}, {52, 30, 30, 31}, 1813 {52, 31, 30, 31}, {53, 20, 30, 31}, {53, 21, 30, 31}, {53, 22, 30, 31}, {53, 23, 30, 31}, 1814 {53, 24, 30, 31}, {53, 25, 30, 31}, {53, 26, 30, 31}, {53, 27, 30, 31}, {53, 28, 30, 31}, 1815 {53, 29, 30, 31}, {53, 30, 30, 31}, {53, 31, 30, 31}, {54, 20, 30, 31}, {54, 21, 30, 31}, 1816 {54, 22, 30, 31}, {54, 23, 30, 31}, {54, 24, 30, 31}, {54, 25, 30, 31}, {54, 26, 30, 31}, 1817 {54, 27, 30, 31}, {54, 28, 30, 31}, {54, 29, 30, 31}, {54, 30, 30, 31}, {54, 31, 30, 31}, 1818 {55, 20, 30, 31}, {55, 21, 30, 31}, {55, 22, 30, 31}, {55, 23, 30, 31}, {55, 24, 30, 31}, 1819 {55, 25, 30, 31}, {55, 26, 30, 31}, {55, 27, 30, 31}, {55, 28, 30, 31}, {55, 29, 30, 31}, 1820 {55, 30, 30, 31}, {55, 31, 30, 31}, {56, 20, 30, 31}, {56, 21, 30, 31}, {56, 22, 30, 31}, 1821 {56, 23, 30, 31}, {56, 24, 30, 31}, {56, 25, 30, 31}, {56, 26, 30, 31}, {56, 27, 30, 31}, 1822 {56, 28, 30, 31}, {56, 29, 30, 31}, {56, 30, 30, 31}, {56, 31, 30, 31}, {57, 20, 30, 31}, 1823 {57, 21, 30, 31}, {57, 22, 30, 31}, {57, 23, 30, 31}, {57, 24, 30, 31}, {57, 25, 30, 31}, 1824 {57, 26, 30, 31}, {57, 27, 30, 31}, {57, 28, 30, 31}, {57, 29, 30, 31}, {57, 30, 30, 31}, 1825 {57, 31, 30, 31}, {58, 20, 30, 31}, {58, 21, 30, 31}, {58, 22, 30, 31}, {58, 23, 30, 31}, 1826 {58, 24, 30, 31}, {58, 25, 30, 31}, {58, 26, 30, 31}, {58, 27, 30, 31}, {58, 28, 30, 31}, 1827 {58, 29, 30, 31}, {58, 30, 30, 31}, {58, 31, 30, 31}, {59, 20, 30, 31}, {59, 21, 30, 31}, 1828 {59, 22, 30, 31}, {59, 23, 30, 31}, {59, 24, 30, 31}, {59, 25, 30, 31}, {59, 26, 30, 31}, 1829 {59, 27, 30, 31}, {59, 28, 30, 31}, {59, 29, 30, 31}, {59, 30, 30, 31}, {59, 31, 30, 31}, 1830 {40, 20, 32, 63}, {40, 21, 32, 63}, {40, 22, 32, 63}, {40, 23, 32, 63}, {40, 24, 32, 63}, 1831 {40, 25, 32, 63}, {40, 26, 32, 63}, {40, 27, 32, 63}, {40, 28, 32, 63}, {40, 29, 32, 63}, 1832 {40, 30, 32, 63}, {40, 31, 32, 63}, {41, 20, 32, 63}, {41, 21, 32, 63}, {41, 22, 32, 63}, 1833 {41, 23, 32, 63}, {41, 24, 32, 63}, {41, 25, 32, 63}, {41, 26, 32, 63}, {41, 27, 32, 63}, 1834 {41, 28, 32, 63}, {41, 29, 32, 63}, {41, 30, 32, 63}, {41, 31, 32, 63}, {42, 20, 32, 63}, 1835 {42, 21, 32, 63}, {42, 22, 32, 63}, {42, 23, 32, 63}, {42, 24, 32, 63}, {42, 25, 32, 63}, 1836 {42, 26, 32, 63}, {42, 27, 32, 63}, {42, 28, 32, 63}, {42, 29, 32, 63}, {42, 30, 32, 63}, 1837 {42, 31, 32, 63}, {43, 20, 32, 63}, {43, 21, 32, 63}, {43, 22, 32, 63}, {43, 23, 32, 63}, 1838 {43, 24, 32, 63}, {43, 25, 32, 63}, {43, 26, 32, 63}, {43, 27, 32, 63}, {43, 28, 32, 63}, 1839 {43, 29, 32, 63}, {43, 30, 32, 63}, {43, 31, 32, 63}, {44, 20, 32, 63}, {44, 21, 32, 63}, 1840 {44, 22, 32, 63}, {44, 23, 32, 63}, {44, 24, 32, 63}, {44, 25, 32, 63}, {44, 26, 32, 63}, 1841 {44, 27, 32, 63}, {44, 28, 32, 63}, {44, 29, 32, 63}, {44, 30, 32, 63}, {44, 31, 32, 63}, 1842 {45, 20, 32, 63}, {45, 21, 32, 63}, {45, 22, 32, 63}, {45, 23, 32, 63}, {45, 24, 32, 63}, 1843 {45, 25, 32, 63}, {45, 26, 32, 63}, {45, 27, 32, 63}, {45, 28, 32, 63}, {45, 29, 32, 63}, 1844 {45, 30, 32, 63}, {45, 31, 32, 63}, {46, 20, 32, 63}, {46, 21, 32, 63}, {46, 22, 32, 63}, 1845 {46, 23, 32, 63}, {46, 24, 32, 63}, {46, 25, 32, 63}, {46, 26, 32, 63}, {46, 27, 32, 63}, 1846 {46, 28, 32, 63}, {46, 29, 32, 63}, {46, 30, 32, 63}, {46, 31, 32, 63}, {47, 20, 32, 63}, 1847 {47, 21, 32, 63}, {47, 22, 32, 63}, {47, 23, 32, 63}, {47, 24, 32, 63}, {47, 25, 32, 63}, 1848 {47, 26, 32, 63}, {47, 27, 32, 63}, {47, 28, 32, 63}, {47, 29, 32, 63}, {47, 30, 32, 63}, 1849 {47, 31, 32, 63}, {48, 20, 32, 63}, {48, 21, 32, 63}, {48, 22, 32, 63}, {48, 23, 32, 63}, 1850 {48, 24, 32, 63}, {48, 25, 32, 63}, {48, 26, 32, 63}, {48, 27, 32, 63}, {48, 28, 32, 63}, 1851 {48, 29, 32, 63}, {48, 30, 32, 63}, {48, 31, 32, 63}, {49, 20, 32, 63}, {49, 21, 32, 63}, 1852 {49, 22, 32, 63}, {49, 23, 32, 63}, {49, 24, 32, 63}, {49, 25, 32, 63}, {49, 26, 32, 63}, 1853 {49, 27, 32, 63}, {49, 28, 32, 63}, {49, 29, 32, 63}, {49, 30, 32, 63}, {49, 31, 32, 63}, 1854 {50, 20, 32, 63}, {50, 21, 32, 63}, {50, 22, 32, 63}, {50, 23, 32, 63}, {50, 24, 32, 63}, 1855 {50, 25, 32, 63}, {50, 26, 32, 63}, {50, 27, 32, 63}, {50, 28, 32, 63}, {50, 29, 32, 63}, 1856 {50, 30, 32, 63}, {50, 31, 32, 63}, {51, 20, 32, 63}, {51, 21, 32, 63}, {51, 22, 32, 63}, 1857 {51, 23, 32, 63}, {51, 24, 32, 63}, {51, 25, 32, 63}, {51, 26, 32, 63}, {51, 27, 32, 63}, 1858 {51, 28, 32, 63}, {51, 29, 32, 63}, {51, 30, 32, 63}, {51, 31, 32, 63}, {52, 20, 32, 63}, 1859 {52, 21, 32, 63}, {52, 22, 32, 63}, {52, 23, 32, 63}, {52, 24, 32, 63}, {52, 25, 32, 63}, 1860 {52, 26, 32, 63}, {52, 27, 32, 63}, {52, 28, 32, 63}, {52, 29, 32, 63}, {52, 30, 32, 63}, 1861 {52, 31, 32, 63}, {53, 20, 32, 63}, {53, 21, 32, 63}, {53, 22, 32, 63}, {53, 23, 32, 63}, 1862 {53, 24, 32, 63}, {53, 25, 32, 63}, {53, 26, 32, 63}, {53, 27, 32, 63}, {53, 28, 32, 63}, 1863 {53, 29, 32, 63}, {53, 30, 32, 63}, {53, 31, 32, 63}, {54, 20, 32, 63}, {54, 21, 32, 63}, 1864 {54, 22, 32, 63}, {54, 23, 32, 63}, {54, 24, 32, 63}, {54, 25, 32, 63}, {54, 26, 32, 63}, 1865 {54, 27, 32, 63}, {54, 28, 32, 63}, {54, 29, 32, 63}, {54, 30, 32, 63}, {54, 31, 32, 63}, 1866 {55, 20, 32, 63}, {55, 21, 32, 63}, {55, 22, 32, 63}, {55, 23, 32, 63}, {55, 24, 32, 63}, 1867 {55, 25, 32, 63}, {55, 26, 32, 63}, {55, 27, 32, 63}, {55, 28, 32, 63}, {55, 29, 32, 63}, 1868 {55, 30, 32, 63}, {55, 31, 32, 63}, {56, 20, 32, 63}, {56, 21, 32, 63}, {56, 22, 32, 63}, 1869 {56, 23, 32, 63}, {56, 24, 32, 63}, {56, 25, 32, 63}, {56, 26, 32, 63}, {56, 27, 32, 63}, 1870 {56, 28, 32, 63}, {56, 29, 32, 63}, {56, 30, 32, 63}, {56, 31, 32, 63}, {57, 20, 32, 63}, 1871 {57, 21, 32, 63}, {57, 22, 32, 63}, {57, 23, 32, 63}, {57, 24, 32, 63}, {57, 25, 32, 63}, 1872 {57, 26, 32, 63}, {57, 27, 32, 63}, {57, 28, 32, 63}, {57, 29, 32, 63}, {57, 30, 32, 63}, 1873 {57, 31, 32, 63}, {58, 20, 32, 63}, {58, 21, 32, 63}, {58, 22, 32, 63}, {58, 23, 32, 63}, 1874 {58, 24, 32, 63}, {58, 25, 32, 63}, {58, 26, 32, 63}, {58, 27, 32, 63}, {58, 28, 32, 63}, 1875 {58, 29, 32, 63}, {58, 30, 32, 63}, {58, 31, 32, 63}, {59, 20, 32, 63}, {59, 21, 32, 63}, 1876 {59, 22, 32, 63}, {59, 23, 32, 63}, {59, 24, 32, 63}, {59, 25, 32, 63}, {59, 26, 32, 63}, 1877 {59, 27, 32, 63}, {59, 28, 32, 63}, {59, 29, 32, 63}, {59, 30, 32, 63}, {59, 31, 32, 63}, 1878 {40, 20, 64, 79}, {40, 21, 64, 79}, {40, 22, 64, 79}, {40, 23, 64, 79}, {40, 24, 64, 79}, 1879 {40, 25, 64, 79}, {40, 26, 64, 79}, {40, 27, 64, 79}, {40, 28, 64, 79}, {40, 29, 64, 79}, 1880 {40, 30, 64, 79}, {40, 31, 64, 79}, {41, 20, 64, 79}, {41, 21, 64, 79}, {41, 22, 64, 79}, 1881 {41, 23, 64, 79}, {41, 24, 64, 79}, {41, 25, 64, 79}, {41, 26, 64, 79}, {41, 27, 64, 79}, 1882 {41, 28, 64, 79}, {41, 29, 64, 79}, {41, 30, 64, 79}, {41, 31, 64, 79}, {42, 20, 64, 79}, 1883 {42, 21, 64, 79}, {42, 22, 64, 79}, {42, 23, 64, 79}, {42, 24, 64, 79}, {42, 25, 64, 79}, 1884 {42, 26, 64, 79}, {42, 27, 64, 79}, {42, 28, 64, 79}, {42, 29, 64, 79}, {42, 30, 64, 79}, 1885 {42, 31, 64, 79}, {43, 20, 64, 79}, {43, 21, 64, 79}, {43, 22, 64, 79}, {43, 23, 64, 79}, 1886 {43, 24, 64, 79}, {43, 25, 64, 79}, {43, 26, 64, 79}, {43, 27, 64, 79}, {43, 28, 64, 79}, 1887 {43, 29, 64, 79}, {43, 30, 64, 79}, {43, 31, 64, 79}, {44, 20, 64, 79}, {44, 21, 64, 79}, 1888 {44, 22, 64, 79}, {44, 23, 64, 79}, {44, 24, 64, 79}, {44, 25, 64, 79}, {44, 26, 64, 79}, 1889 {44, 27, 64, 79}, {44, 28, 64, 79}, {44, 29, 64, 79}, {44, 30, 64, 79}, {44, 31, 64, 79}, 1890 {45, 20, 64, 79}, {45, 21, 64, 79}, {45, 22, 64, 79}, {45, 23, 64, 79}, {45, 24, 64, 79}, 1891 {45, 25, 64, 79}, {45, 26, 64, 79}, {45, 27, 64, 79}, {45, 28, 64, 79}, {45, 29, 64, 79}, 1892 {45, 30, 64, 79}, {45, 31, 64, 79}, {46, 20, 64, 79}, {46, 21, 64, 79}, {46, 22, 64, 79}, 1893 {46, 23, 64, 79}, {46, 24, 64, 79}, {46, 25, 64, 79}, {46, 26, 64, 79}, {46, 27, 64, 79}, 1894 {46, 28, 64, 79}, {46, 29, 64, 79}, {46, 30, 64, 79}, {46, 31, 64, 79}, {47, 20, 64, 79}, 1895 {47, 21, 64, 79}, {47, 22, 64, 79}, {47, 23, 64, 79}, {47, 24, 64, 79}, {47, 25, 64, 79}, 1896 {47, 26, 64, 79}, {47, 27, 64, 79}, {47, 28, 64, 79}, {47, 29, 64, 79}, {47, 30, 64, 79}, 1897 {47, 31, 64, 79}, {48, 20, 64, 79}, {48, 21, 64, 79}, {48, 22, 64, 79}, {48, 23, 64, 79}, 1898 {48, 24, 64, 79}, {48, 25, 64, 79}, {48, 26, 64, 79}, {48, 27, 64, 79}, {48, 28, 64, 79}, 1899 {48, 29, 64, 79}, {48, 30, 64, 79}, {48, 31, 64, 79}, {49, 20, 64, 79}, {49, 21, 64, 79}, 1900 {49, 22, 64, 79}, {49, 23, 64, 79}, {49, 24, 64, 79}, {49, 25, 64, 79}, {49, 26, 64, 79}, 1901 {49, 27, 64, 79}, {49, 28, 64, 79}, {49, 29, 64, 79}, {49, 30, 64, 79}, {49, 31, 64, 79}, 1902 {50, 20, 64, 79}, {50, 21, 64, 79}, {50, 22, 64, 79}, {50, 23, 64, 79}, {50, 24, 64, 79}, 1903 {50, 25, 64, 79}, {50, 26, 64, 79}, {50, 27, 64, 79}, {50, 28, 64, 79}, {50, 29, 64, 79}, 1904 {50, 30, 64, 79}, {50, 31, 64, 79}, {51, 20, 64, 79}, {51, 21, 64, 79}, {51, 22, 64, 79}, 1905 {51, 23, 64, 79}, {51, 24, 64, 79}, {51, 25, 64, 79}, {51, 26, 64, 79}, {51, 27, 64, 79}, 1906 {51, 28, 64, 79}, {51, 29, 64, 79}, {51, 30, 64, 79}, {51, 31, 64, 79}, {52, 20, 64, 79}, 1907 {52, 21, 64, 79}, {52, 22, 64, 79}, {52, 23, 64, 79}, {52, 24, 64, 79}, {52, 25, 64, 79}, 1908 {52, 26, 64, 79}, {52, 27, 64, 79}, {52, 28, 64, 79}, {52, 29, 64, 79}, {52, 30, 64, 79}, 1909 {52, 31, 64, 79}, {53, 20, 64, 79}, {53, 21, 64, 79}, {53, 22, 64, 79}, {53, 23, 64, 79}, 1910 {53, 24, 64, 79}, {53, 25, 64, 79}, {53, 26, 64, 79}, {53, 27, 64, 79}, {53, 28, 64, 79}, 1911 {53, 29, 64, 79}, {53, 30, 64, 79}, {53, 31, 64, 79}, {54, 20, 64, 79}, {54, 21, 64, 79}, 1912 {54, 22, 64, 79}, {54, 23, 64, 79}, {54, 24, 64, 79}, {54, 25, 64, 79}, {54, 26, 64, 79}, 1913 {54, 27, 64, 79}, {54, 28, 64, 79}, {54, 29, 64, 79}, {54, 30, 64, 79}, {54, 31, 64, 79}, 1914 {55, 20, 64, 79}, {55, 21, 64, 79}, {55, 22, 64, 79}, {55, 23, 64, 79}, {55, 24, 64, 79}, 1915 {55, 25, 64, 79}, {55, 26, 64, 79}, {55, 27, 64, 79}, {55, 28, 64, 79}, {55, 29, 64, 79}, 1916 {55, 30, 64, 79}, {55, 31, 64, 79}, {56, 20, 64, 79}, {56, 21, 64, 79}, {56, 22, 64, 79}, 1917 {56, 23, 64, 79}, {56, 24, 64, 79}, {56, 25, 64, 79}, {56, 26, 64, 79}, {56, 27, 64, 79}, 1918 {56, 28, 64, 79}, {56, 29, 64, 79}, {56, 30, 64, 79}, {56, 31, 64, 79}, {57, 20, 64, 79}, 1919 {57, 21, 64, 79}, {57, 22, 64, 79}, {57, 23, 64, 79}, {57, 24, 64, 79}, {57, 25, 64, 79}, 1920 {57, 26, 64, 79}, {57, 27, 64, 79}, {57, 28, 64, 79}, {57, 29, 64, 79}, {57, 30, 64, 79}, 1921 {57, 31, 64, 79}, {58, 20, 64, 79}, {58, 21, 64, 79}, {58, 22, 64, 79}, {58, 23, 64, 79}, 1922 {58, 24, 64, 79}, {58, 25, 64, 79}, {58, 26, 64, 79}, {58, 27, 64, 79}, {58, 28, 64, 79}, 1923 {58, 29, 64, 79}, {58, 30, 64, 79}, {58, 31, 64, 79}, {59, 20, 64, 79}, {59, 21, 64, 79}, 1924 {59, 22, 64, 79}, {59, 23, 64, 79}, {59, 24, 64, 79}, {59, 25, 64, 79}, {59, 26, 64, 79}, 1925 {59, 27, 64, 79}, {59, 28, 64, 79}, {59, 29, 64, 79}, {59, 30, 64, 79}, {59, 31, 64, 79}, 1926 {40, 32, 30, 31}, {40, 33, 30, 31}, {40, 34, 30, 31}, {40, 35, 30, 31}, {40, 36, 30, 31}, 1927 {40, 37, 30, 31}, {40, 38, 30, 31}, {40, 39, 30, 31}, {40, 40, 30, 31}, {40, 41, 30, 31}, 1928 {40, 42, 30, 31}, {40, 43, 30, 31}, {40, 44, 30, 31}, {40, 45, 30, 31}, {40, 46, 30, 31}, 1929 {40, 47, 30, 31}, {40, 48, 30, 31}, {40, 49, 30, 31}, {40, 50, 30, 31}, {40, 51, 30, 31}, 1930 {40, 52, 30, 31}, {40, 53, 30, 31}, {40, 54, 30, 31}, {40, 55, 30, 31}, {40, 56, 30, 31}, 1931 {40, 57, 30, 31}, {40, 58, 30, 31}, {40, 59, 30, 31}, {40, 60, 30, 31}, {40, 61, 30, 31}, 1932 {40, 62, 30, 31}, {40, 63, 30, 31}, {41, 32, 30, 31}, {41, 33, 30, 31}, {41, 34, 30, 31}, 1933 {41, 35, 30, 31}, {41, 36, 30, 31}, {41, 37, 30, 31}, {41, 38, 30, 31}, {41, 39, 30, 31}, 1934 {41, 40, 30, 31}, {41, 41, 30, 31}, {41, 42, 30, 31}, {41, 43, 30, 31}, {41, 44, 30, 31}, 1935 {41, 45, 30, 31}, {41, 46, 30, 31}, {41, 47, 30, 31}, {41, 48, 30, 31}, {41, 49, 30, 31}, 1936 {41, 50, 30, 31}, {41, 51, 30, 31}, {41, 52, 30, 31}, {41, 53, 30, 31}, {41, 54, 30, 31}, 1937 {41, 55, 30, 31}, {41, 56, 30, 31}, {41, 57, 30, 31}, {41, 58, 30, 31}, {41, 59, 30, 31}, 1938 {41, 60, 30, 31}, {41, 61, 30, 31}, {41, 62, 30, 31}, {41, 63, 30, 31}, {42, 32, 30, 31}, 1939 {42, 33, 30, 31}, {42, 34, 30, 31}, {42, 35, 30, 31}, {42, 36, 30, 31}, {42, 37, 30, 31}, 1940 {42, 38, 30, 31}, {42, 39, 30, 31}, {42, 40, 30, 31}, {42, 41, 30, 31}, {42, 42, 30, 31}, 1941 {42, 43, 30, 31}, {42, 44, 30, 31}, {42, 45, 30, 31}, {42, 46, 30, 31}, {42, 47, 30, 31}, 1942 {42, 48, 30, 31}, {42, 49, 30, 31}, {42, 50, 30, 31}, {42, 51, 30, 31}, {42, 52, 30, 31}, 1943 {42, 53, 30, 31}, {42, 54, 30, 31}, {42, 55, 30, 31}, {42, 56, 30, 31}, {42, 57, 30, 31}, 1944 {42, 58, 30, 31}, {42, 59, 30, 31}, {42, 60, 30, 31}, {42, 61, 30, 31}, {42, 62, 30, 31}, 1945 {42, 63, 30, 31}, {43, 32, 30, 31}, {43, 33, 30, 31}, {43, 34, 30, 31}, {43, 35, 30, 31}, 1946 {43, 36, 30, 31}, {43, 37, 30, 31}, {43, 38, 30, 31}, {43, 39, 30, 31}, {43, 40, 30, 31}, 1947 {43, 41, 30, 31}, {43, 42, 30, 31}, {43, 43, 30, 31}, {43, 44, 30, 31}, {43, 45, 30, 31}, 1948 {43, 46, 30, 31}, {43, 47, 30, 31}, {43, 48, 30, 31}, {43, 49, 30, 31}, {43, 50, 30, 31}, 1949 {43, 51, 30, 31}, {43, 52, 30, 31}, {43, 53, 30, 31}, {43, 54, 30, 31}, {43, 55, 30, 31}, 1950 {43, 56, 30, 31}, {43, 57, 30, 31}, {43, 58, 30, 31}, {43, 59, 30, 31}, {43, 60, 30, 31}, 1951 {43, 61, 30, 31}, {43, 62, 30, 31}, {43, 63, 30, 31}, {44, 32, 30, 31}, {44, 33, 30, 31}, 1952 {44, 34, 30, 31}, {44, 35, 30, 31}, {44, 36, 30, 31}, {44, 37, 30, 31}, {44, 38, 30, 31}, 1953 {44, 39, 30, 31}, {44, 40, 30, 31}, {44, 41, 30, 31}, {44, 42, 30, 31}, {44, 43, 30, 31}, 1954 {44, 44, 30, 31}, {44, 45, 30, 31}, {44, 46, 30, 31}, {44, 47, 30, 31}, {44, 48, 30, 31}, 1955 {44, 49, 30, 31}, {44, 50, 30, 31}, {44, 51, 30, 31}, {44, 52, 30, 31}, {44, 53, 30, 31}, 1956 {44, 54, 30, 31}, {44, 55, 30, 31}, {44, 56, 30, 31}, {44, 57, 30, 31}, {44, 58, 30, 31}, 1957 {44, 59, 30, 31}, {44, 60, 30, 31}, {44, 61, 30, 31}, {44, 62, 30, 31}, {44, 63, 30, 31}, 1958 {45, 32, 30, 31}, {45, 33, 30, 31}, {45, 34, 30, 31}, {45, 35, 30, 31}, {45, 36, 30, 31}, 1959 {45, 37, 30, 31}, {45, 38, 30, 31}, {45, 39, 30, 31}, {45, 40, 30, 31}, {45, 41, 30, 31}, 1960 {45, 42, 30, 31}, {45, 43, 30, 31}, {45, 44, 30, 31}, {45, 45, 30, 31}, {45, 46, 30, 31}, 1961 {45, 47, 30, 31}, {45, 48, 30, 31}, {45, 49, 30, 31}, {45, 50, 30, 31}, {45, 51, 30, 31}, 1962 {45, 52, 30, 31}, {45, 53, 30, 31}, {45, 54, 30, 31}, {45, 55, 30, 31}, {45, 56, 30, 31}, 1963 {45, 57, 30, 31}, {45, 58, 30, 31}, {45, 59, 30, 31}, {45, 60, 30, 31}, {45, 61, 30, 31}, 1964 {45, 62, 30, 31}, {45, 63, 30, 31}, {46, 32, 30, 31}, {46, 33, 30, 31}, {46, 34, 30, 31}, 1965 {46, 35, 30, 31}, {46, 36, 30, 31}, {46, 37, 30, 31}, {46, 38, 30, 31}, {46, 39, 30, 31}, 1966 {46, 40, 30, 31}, {46, 41, 30, 31}, {46, 42, 30, 31}, {46, 43, 30, 31}, {46, 44, 30, 31}, 1967 {46, 45, 30, 31}, {46, 46, 30, 31}, {46, 47, 30, 31}, {46, 48, 30, 31}, {46, 49, 30, 31}, 1968 {46, 50, 30, 31}, {46, 51, 30, 31}, {46, 52, 30, 31}, {46, 53, 30, 31}, {46, 54, 30, 31}, 1969 {46, 55, 30, 31}, {46, 56, 30, 31}, {46, 57, 30, 31}, {46, 58, 30, 31}, {46, 59, 30, 31}, 1970 {46, 60, 30, 31}, {46, 61, 30, 31}, {46, 62, 30, 31}, {46, 63, 30, 31}, {47, 32, 30, 31}, 1971 {47, 33, 30, 31}, {47, 34, 30, 31}, {47, 35, 30, 31}, {47, 36, 30, 31}, {47, 37, 30, 31}, 1972 {47, 38, 30, 31}, {47, 39, 30, 31}, {47, 40, 30, 31}, {47, 41, 30, 31}, {47, 42, 30, 31}, 1973 {47, 43, 30, 31}, {47, 44, 30, 31}, {47, 45, 30, 31}, {47, 46, 30, 31}, {47, 47, 30, 31}, 1974 {47, 48, 30, 31}, {47, 49, 30, 31}, {47, 50, 30, 31}, {47, 51, 30, 31}, {47, 52, 30, 31}, 1975 {47, 53, 30, 31}, {47, 54, 30, 31}, {47, 55, 30, 31}, {47, 56, 30, 31}, {47, 57, 30, 31}, 1976 {47, 58, 30, 31}, {47, 59, 30, 31}, {47, 60, 30, 31}, {47, 61, 30, 31}, {47, 62, 30, 31}, 1977 {47, 63, 30, 31}, {48, 32, 30, 31}, {48, 33, 30, 31}, {48, 34, 30, 31}, {48, 35, 30, 31}, 1978 {48, 36, 30, 31}, {48, 37, 30, 31}, {48, 38, 30, 31}, {48, 39, 30, 31}, {48, 40, 30, 31}, 1979 {48, 41, 30, 31}, {48, 42, 30, 31}, {48, 43, 30, 31}, {48, 44, 30, 31}, {48, 45, 30, 31}, 1980 {48, 46, 30, 31}, {48, 47, 30, 31}, {48, 48, 30, 31}, {48, 49, 30, 31}, {48, 50, 30, 31}, 1981 {48, 51, 30, 31}, {48, 52, 30, 31}, {48, 53, 30, 31}, {48, 54, 30, 31}, {48, 55, 30, 31}, 1982 {48, 56, 30, 31}, {48, 57, 30, 31}, {48, 58, 30, 31}, {48, 59, 30, 31}, {48, 60, 30, 31}, 1983 {48, 61, 30, 31}, {48, 62, 30, 31}, {48, 63, 30, 31}, {49, 32, 30, 31}, {49, 33, 30, 31}, 1984 {49, 34, 30, 31}, {49, 35, 30, 31}, {49, 36, 30, 31}, {49, 37, 30, 31}, {49, 38, 30, 31}, 1985 {49, 39, 30, 31}, {49, 40, 30, 31}, {49, 41, 30, 31}, {49, 42, 30, 31}, {49, 43, 30, 31}, 1986 {49, 44, 30, 31}, {49, 45, 30, 31}, {49, 46, 30, 31}, {49, 47, 30, 31}, {49, 48, 30, 31}, 1987 {49, 49, 30, 31}, {49, 50, 30, 31}, {49, 51, 30, 31}, {49, 52, 30, 31}, {49, 53, 30, 31}, 1988 {49, 54, 30, 31}, {49, 55, 30, 31}, {49, 56, 30, 31}, {49, 57, 30, 31}, {49, 58, 30, 31}, 1989 {49, 59, 30, 31}, {49, 60, 30, 31}, {49, 61, 30, 31}, {49, 62, 30, 31}, {49, 63, 30, 31}, 1990 {50, 32, 30, 31}, {50, 33, 30, 31}, {50, 34, 30, 31}, {50, 35, 30, 31}, {50, 36, 30, 31}, 1991 {50, 37, 30, 31}, {50, 38, 30, 31}, {50, 39, 30, 31}, {50, 40, 30, 31}, {50, 41, 30, 31}, 1992 {50, 42, 30, 31}, {50, 43, 30, 31}, {50, 44, 30, 31}, {50, 45, 30, 31}, {50, 46, 30, 31}, 1993 {50, 47, 30, 31}, {50, 48, 30, 31}, {50, 49, 30, 31}, {50, 50, 30, 31}, {50, 51, 30, 31}, 1994 {50, 52, 30, 31}, {50, 53, 30, 31}, {50, 54, 30, 31}, {50, 55, 30, 31}, {50, 56, 30, 31}, 1995 {50, 57, 30, 31}, {50, 58, 30, 31}, {50, 59, 30, 31}, {50, 60, 30, 31}, {50, 61, 30, 31}, 1996 {50, 62, 30, 31}, {50, 63, 30, 31}, {51, 32, 30, 31}, {51, 33, 30, 31}, {51, 34, 30, 31}, 1997 {51, 35, 30, 31}, {51, 36, 30, 31}, {51, 37, 30, 31}, {51, 38, 30, 31}, {51, 39, 30, 31}, 1998 {51, 40, 30, 31}, {51, 41, 30, 31}, {51, 42, 30, 31}, {51, 43, 30, 31}, {51, 44, 30, 31}, 1999 {51, 45, 30, 31}, {51, 46, 30, 31}, {51, 47, 30, 31}, {51, 48, 30, 31}, {51, 49, 30, 31}, 2000 {51, 50, 30, 31}, {51, 51, 30, 31}, {51, 52, 30, 31}, {51, 53, 30, 31}, {51, 54, 30, 31}, 2001 {51, 55, 30, 31}, {51, 56, 30, 31}, {51, 57, 30, 31}, {51, 58, 30, 31}, {51, 59, 30, 31}, 2002 {51, 60, 30, 31}, {51, 61, 30, 31}, {51, 62, 30, 31}, {51, 63, 30, 31}, {52, 32, 30, 31}, 2003 {52, 33, 30, 31}, {52, 34, 30, 31}, {52, 35, 30, 31}, {52, 36, 30, 31}, {52, 37, 30, 31}, 2004 {52, 38, 30, 31}, {52, 39, 30, 31}, {52, 40, 30, 31}, {52, 41, 30, 31}, {52, 42, 30, 31}, 2005 {52, 43, 30, 31}, {52, 44, 30, 31}, {52, 45, 30, 31}, {52, 46, 30, 31}, {52, 47, 30, 31}, 2006 {52, 48, 30, 31}, {52, 49, 30, 31}, {52, 50, 30, 31}, {52, 51, 30, 31}, {52, 52, 30, 31}, 2007 {52, 53, 30, 31}, {52, 54, 30, 31}, {52, 55, 30, 31}, {52, 56, 30, 31}, {52, 57, 30, 31}, 2008 {52, 58, 30, 31}, {52, 59, 30, 31}, {52, 60, 30, 31}, {52, 61, 30, 31}, {52, 62, 30, 31}, 2009 {52, 63, 30, 31}, {53, 32, 30, 31}, {53, 33, 30, 31}, {53, 34, 30, 31}, {53, 35, 30, 31}, 2010 {53, 36, 30, 31}, {53, 37, 30, 31}, {53, 38, 30, 31}, {53, 39, 30, 31}, {53, 40, 30, 31}, 2011 {53, 41, 30, 31}, {53, 42, 30, 31}, {53, 43, 30, 31}, {53, 44, 30, 31}, {53, 45, 30, 31}, 2012 {53, 46, 30, 31}, {53, 47, 30, 31}, {53, 48, 30, 31}, {53, 49, 30, 31}, {53, 50, 30, 31}, 2013 {53, 51, 30, 31}, {53, 52, 30, 31}, {53, 53, 30, 31}, {53, 54, 30, 31}, {53, 55, 30, 31}, 2014 {53, 56, 30, 31}, {53, 57, 30, 31}, {53, 58, 30, 31}, {53, 59, 30, 31}, {53, 60, 30, 31}, 2015 {53, 61, 30, 31}, {53, 62, 30, 31}, {53, 63, 30, 31}, {54, 32, 30, 31}, {54, 33, 30, 31}, 2016 {54, 34, 30, 31}, {54, 35, 30, 31}, {54, 36, 30, 31}, {54, 37, 30, 31}, {54, 38, 30, 31}, 2017 {54, 39, 30, 31}, {54, 40, 30, 31}, {54, 41, 30, 31}, {54, 42, 30, 31}, {54, 43, 30, 31}, 2018 {54, 44, 30, 31}, {54, 45, 30, 31}, {54, 46, 30, 31}, {54, 47, 30, 31}, {54, 48, 30, 31}, 2019 {54, 49, 30, 31}, {54, 50, 30, 31}, {54, 51, 30, 31}, {54, 52, 30, 31}, {54, 53, 30, 31}, 2020 {54, 54, 30, 31}, {54, 55, 30, 31}, {54, 56, 30, 31}, {54, 57, 30, 31}, {54, 58, 30, 31}, 2021 {54, 59, 30, 31}, {54, 60, 30, 31}, {54, 61, 30, 31}, {54, 62, 30, 31}, {54, 63, 30, 31}, 2022 {55, 32, 30, 31}, {55, 33, 30, 31}, {55, 34, 30, 31}, {55, 35, 30, 31}, {55, 36, 30, 31}, 2023 {55, 37, 30, 31}, {55, 38, 30, 31}, {55, 39, 30, 31}, {55, 40, 30, 31}, {55, 41, 30, 31}, 2024 {55, 42, 30, 31}, {55, 43, 30, 31}, {55, 44, 30, 31}, {55, 45, 30, 31}, {55, 46, 30, 31}, 2025 {55, 47, 30, 31}, {55, 48, 30, 31}, {55, 49, 30, 31}, {55, 50, 30, 31}, {55, 51, 30, 31}, 2026 {55, 52, 30, 31}, {55, 53, 30, 31}, {55, 54, 30, 31}, {55, 55, 30, 31}, {55, 56, 30, 31}, 2027 {55, 57, 30, 31}, {55, 58, 30, 31}, {55, 59, 30, 31}, {55, 60, 30, 31}, {55, 61, 30, 31}, 2028 {55, 62, 30, 31}, {55, 63, 30, 31}, {56, 32, 30, 31}, {56, 33, 30, 31}, {56, 34, 30, 31}, 2029 {56, 35, 30, 31}, {56, 36, 30, 31}, {56, 37, 30, 31}, {56, 38, 30, 31}, {56, 39, 30, 31}, 2030 {56, 40, 30, 31}, {56, 41, 30, 31}, {56, 42, 30, 31}, {56, 43, 30, 31}, {56, 44, 30, 31}, 2031 {56, 45, 30, 31}, {56, 46, 30, 31}, {56, 47, 30, 31}, {56, 48, 30, 31}, {56, 49, 30, 31}, 2032 {56, 50, 30, 31}, {56, 51, 30, 31}, {56, 52, 30, 31}, {56, 53, 30, 31}, {56, 54, 30, 31}, 2033 {56, 55, 30, 31}, {56, 56, 30, 31}, {56, 57, 30, 31}, {56, 58, 30, 31}, {56, 59, 30, 31}, 2034 {56, 60, 30, 31}, {56, 61, 30, 31}, {56, 62, 30, 31}, {56, 63, 30, 31}, {57, 32, 30, 31}, 2035 {57, 33, 30, 31}, {57, 34, 30, 31}, {57, 35, 30, 31}, {57, 36, 30, 31}, {57, 37, 30, 31}, 2036 {57, 38, 30, 31}, {57, 39, 30, 31}, {57, 40, 30, 31}, {57, 41, 30, 31}, {57, 42, 30, 31}, 2037 {57, 43, 30, 31}, {57, 44, 30, 31}, {57, 45, 30, 31}, {57, 46, 30, 31}, {57, 47, 30, 31}, 2038 {57, 48, 30, 31}, {57, 49, 30, 31}, {57, 50, 30, 31}, {57, 51, 30, 31}, {57, 52, 30, 31}, 2039 {57, 53, 30, 31}, {57, 54, 30, 31}, {57, 55, 30, 31}, {57, 56, 30, 31}, {57, 57, 30, 31}, 2040 {57, 58, 30, 31}, {57, 59, 30, 31}, {57, 60, 30, 31}, {57, 61, 30, 31}, {57, 62, 30, 31}, 2041 {57, 63, 30, 31}, {58, 32, 30, 31}, {58, 33, 30, 31}, {58, 34, 30, 31}, {58, 35, 30, 31}, 2042 {58, 36, 30, 31}, {58, 37, 30, 31}, {58, 38, 30, 31}, {58, 39, 30, 31}, {58, 40, 30, 31}, 2043 {58, 41, 30, 31}, {58, 42, 30, 31}, {58, 43, 30, 31}, {58, 44, 30, 31}, {58, 45, 30, 31}, 2044 {58, 46, 30, 31}, {58, 47, 30, 31}, {58, 48, 30, 31}, {58, 49, 30, 31}, {58, 50, 30, 31}, 2045 {58, 51, 30, 31}, {58, 52, 30, 31}, {58, 53, 30, 31}, {58, 54, 30, 31}, {58, 55, 30, 31}, 2046 {58, 56, 30, 31}, {58, 57, 30, 31}, {58, 58, 30, 31}, {58, 59, 30, 31}, {58, 60, 30, 31}, 2047 {58, 61, 30, 31}, {58, 62, 30, 31}, {58, 63, 30, 31}, {59, 32, 30, 31}, {59, 33, 30, 31}, 2048 {59, 34, 30, 31}, {59, 35, 30, 31}, {59, 36, 30, 31}, {59, 37, 30, 31}, {59, 38, 30, 31}, 2049 {59, 39, 30, 31}, {59, 40, 30, 31}, {59, 41, 30, 31}, {59, 42, 30, 31}, {59, 43, 30, 31}, 2050 {59, 44, 30, 31}, {59, 45, 30, 31}, {59, 46, 30, 31}, {59, 47, 30, 31}, {59, 48, 30, 31}, 2051 {59, 49, 30, 31}, {59, 50, 30, 31}, {59, 51, 30, 31}, {59, 52, 30, 31}, {59, 53, 30, 31}, 2052 {59, 54, 30, 31}, {59, 55, 30, 31}, {59, 56, 30, 31}, {59, 57, 30, 31}, {59, 58, 30, 31}, 2053 {59, 59, 30, 31}, {59, 60, 30, 31}, {59, 61, 30, 31}, {59, 62, 30, 31}, {59, 63, 30, 31}, 2054 {40, 32, 32, 63}, {40, 33, 32, 63}, {40, 34, 32, 63}, {40, 35, 32, 63}, {40, 36, 32, 63}, 2055 {40, 37, 32, 63}, {40, 38, 32, 63}, {40, 39, 32, 63}, {40, 40, 32, 63}, {40, 41, 32, 63}, 2056 {40, 42, 32, 63}, {40, 43, 32, 63}, {40, 44, 32, 63}, {40, 45, 32, 63}, {40, 46, 32, 63}, 2057 {40, 47, 32, 63}, {40, 48, 32, 63}, {40, 49, 32, 63}, {40, 50, 32, 63}, {40, 51, 32, 63}, 2058 {40, 52, 32, 63}, {40, 53, 32, 63}, {40, 54, 32, 63}, {40, 55, 32, 63}, {40, 56, 32, 63}, 2059 {40, 57, 32, 63}, {40, 58, 32, 63}, {40, 59, 32, 63}, {40, 60, 32, 63}, {40, 61, 32, 63}, 2060 {40, 62, 32, 63}, {40, 63, 32, 63}, {41, 32, 32, 63}, {41, 33, 32, 63}, {41, 34, 32, 63}, 2061 {41, 35, 32, 63}, {41, 36, 32, 63}, {41, 37, 32, 63}, {41, 38, 32, 63}, {41, 39, 32, 63}, 2062 {41, 40, 32, 63}, {41, 41, 32, 63}, {41, 42, 32, 63}, {41, 43, 32, 63}, {41, 44, 32, 63}, 2063 {41, 45, 32, 63}, {41, 46, 32, 63}, {41, 47, 32, 63}, {41, 48, 32, 63}, {41, 49, 32, 63}, 2064 {41, 50, 32, 63}, {41, 51, 32, 63}, {41, 52, 32, 63}, {41, 53, 32, 63}, {41, 54, 32, 63}, 2065 {41, 55, 32, 63}, {41, 56, 32, 63}, {41, 57, 32, 63}, {41, 58, 32, 63}, {41, 59, 32, 63}, 2066 {41, 60, 32, 63}, {41, 61, 32, 63}, {41, 62, 32, 63}, {41, 63, 32, 63}, {42, 32, 32, 63}, 2067 {42, 33, 32, 63}, {42, 34, 32, 63}, {42, 35, 32, 63}, {42, 36, 32, 63}, {42, 37, 32, 63}, 2068 {42, 38, 32, 63}, {42, 39, 32, 63}, {42, 40, 32, 63}, {42, 41, 32, 63}, {42, 42, 32, 63}, 2069 {42, 43, 32, 63}, {42, 44, 32, 63}, {42, 45, 32, 63}, {42, 46, 32, 63}, {42, 47, 32, 63}, 2070 {42, 48, 32, 63}, {42, 49, 32, 63}, {42, 50, 32, 63}, {42, 51, 32, 63}, {42, 52, 32, 63}, 2071 {42, 53, 32, 63}, {42, 54, 32, 63}, {42, 55, 32, 63}, {42, 56, 32, 63}, {42, 57, 32, 63}, 2072 {42, 58, 32, 63}, {42, 59, 32, 63}, {42, 60, 32, 63}, {42, 61, 32, 63}, {42, 62, 32, 63}, 2073 {42, 63, 32, 63}, {43, 32, 32, 63}, {43, 33, 32, 63}, {43, 34, 32, 63}, {43, 35, 32, 63}, 2074 {43, 36, 32, 63}, {43, 37, 32, 63}, {43, 38, 32, 63}, {43, 39, 32, 63}, {43, 40, 32, 63}, 2075 {43, 41, 32, 63}, {43, 42, 32, 63}, {43, 43, 32, 63}, {43, 44, 32, 63}, {43, 45, 32, 63}, 2076 {43, 46, 32, 63}, {43, 47, 32, 63}, {43, 48, 32, 63}, {43, 49, 32, 63}, {43, 50, 32, 63}, 2077 {43, 51, 32, 63}, {43, 52, 32, 63}, {43, 53, 32, 63}, {43, 54, 32, 63}, {43, 55, 32, 63}, 2078 {43, 56, 32, 63}, {43, 57, 32, 63}, {43, 58, 32, 63}, {43, 59, 32, 63}, {43, 60, 32, 63}, 2079 {43, 61, 32, 63}, {43, 62, 32, 63}, {43, 63, 32, 63}, {44, 32, 32, 63}, {44, 33, 32, 63}, 2080 {44, 34, 32, 63}, {44, 35, 32, 63}, {44, 36, 32, 63}, {44, 37, 32, 63}, {44, 38, 32, 63}, 2081 {44, 39, 32, 63}, {44, 40, 32, 63}, {44, 41, 32, 63}, {44, 42, 32, 63}, {44, 43, 32, 63}, 2082 {44, 44, 32, 63}, {44, 45, 32, 63}, {44, 46, 32, 63}, {44, 47, 32, 63}, {44, 48, 32, 63}, 2083 {44, 49, 32, 63}, {44, 50, 32, 63}, {44, 51, 32, 63}, {44, 52, 32, 63}, {44, 53, 32, 63}, 2084 {44, 54, 32, 63}, {44, 55, 32, 63}, {44, 56, 32, 63}, {44, 57, 32, 63}, {44, 58, 32, 63}, 2085 {44, 59, 32, 63}, {44, 60, 32, 63}, {44, 61, 32, 63}, {44, 62, 32, 63}, {44, 63, 32, 63}, 2086 {45, 32, 32, 63}, {45, 33, 32, 63}, {45, 34, 32, 63}, {45, 35, 32, 63}, {45, 36, 32, 63}, 2087 {45, 37, 32, 63}, {45, 38, 32, 63}, {45, 39, 32, 63}, {45, 40, 32, 63}, {45, 41, 32, 63}, 2088 {45, 42, 32, 63}, {45, 43, 32, 63}, {45, 44, 32, 63}, {45, 45, 32, 63}, {45, 46, 32, 63}, 2089 {45, 47, 32, 63}, {45, 48, 32, 63}, {45, 49, 32, 63}, {45, 50, 32, 63}, {45, 51, 32, 63}, 2090 {45, 52, 32, 63}, {45, 53, 32, 63}, {45, 54, 32, 63}, {45, 55, 32, 63}, {45, 56, 32, 63}, 2091 {45, 57, 32, 63}, {45, 58, 32, 63}, {45, 59, 32, 63}, {45, 60, 32, 63}, {45, 61, 32, 63}, 2092 {45, 62, 32, 63}, {45, 63, 32, 63}, {46, 32, 32, 63}, {46, 33, 32, 63}, {46, 34, 32, 63}, 2093 {46, 35, 32, 63}, {46, 36, 32, 63}, {46, 37, 32, 63}, {46, 38, 32, 63}, {46, 39, 32, 63}, 2094 {46, 40, 32, 63}, {46, 41, 32, 63}, {46, 42, 32, 63}, {46, 43, 32, 63}, {46, 44, 32, 63}, 2095 {46, 45, 32, 63}, {46, 46, 32, 63}, {46, 47, 32, 63}, {46, 48, 32, 63}, {46, 49, 32, 63}, 2096 {46, 50, 32, 63}, {46, 51, 32, 63}, {46, 52, 32, 63}, {46, 53, 32, 63}, {46, 54, 32, 63}, 2097 {46, 55, 32, 63}, {46, 56, 32, 63}, {46, 57, 32, 63}, {46, 58, 32, 63}, {46, 59, 32, 63}, 2098 {46, 60, 32, 63}, {46, 61, 32, 63}, {46, 62, 32, 63}, {46, 63, 32, 63}, {47, 32, 32, 63}, 2099 {47, 33, 32, 63}, {47, 34, 32, 63}, {47, 35, 32, 63}, {47, 36, 32, 63}, {47, 37, 32, 63}, 2100 {47, 38, 32, 63}, {47, 39, 32, 63}, {47, 40, 32, 63}, {47, 41, 32, 63}, {47, 42, 32, 63}, 2101 {47, 43, 32, 63}, {47, 44, 32, 63}, {47, 45, 32, 63}, {47, 46, 32, 63}, {47, 47, 32, 63}, 2102 {47, 48, 32, 63}, {47, 49, 32, 63}, {47, 50, 32, 63}, {47, 51, 32, 63}, {47, 52, 32, 63}, 2103 {47, 53, 32, 63}, {47, 54, 32, 63}, {47, 55, 32, 63}, {47, 56, 32, 63}, {47, 57, 32, 63}, 2104 {47, 58, 32, 63}, {47, 59, 32, 63}, {47, 60, 32, 63}, {47, 61, 32, 63}, {47, 62, 32, 63}, 2105 {47, 63, 32, 63}, {48, 32, 32, 63}, {48, 33, 32, 63}, {48, 34, 32, 63}, {48, 35, 32, 63}, 2106 {48, 36, 32, 63}, {48, 37, 32, 63}, {48, 38, 32, 63}, {48, 39, 32, 63}, {48, 40, 32, 63}, 2107 {48, 41, 32, 63}, {48, 42, 32, 63}, {48, 43, 32, 63}, {48, 44, 32, 63}, {48, 45, 32, 63}, 2108 {48, 46, 32, 63}, {48, 47, 32, 63}, {48, 48, 32, 63}, {48, 49, 32, 63}, {48, 50, 32, 63}, 2109 {48, 51, 32, 63}, {48, 52, 32, 63}, {48, 53, 32, 63}, {48, 54, 32, 63}, {48, 55, 32, 63}, 2110 {48, 56, 32, 63}, {48, 57, 32, 63}, {48, 58, 32, 63}, {48, 59, 32, 63}, {48, 60, 32, 63}, 2111 {48, 61, 32, 63}, {48, 62, 32, 63}, {48, 63, 32, 63}, {49, 32, 32, 63}, {49, 33, 32, 63}, 2112 {49, 34, 32, 63}, {49, 35, 32, 63}, {49, 36, 32, 63}, {49, 37, 32, 63}, {49, 38, 32, 63}, 2113 {49, 39, 32, 63}, {49, 40, 32, 63}, {49, 41, 32, 63}, {49, 42, 32, 63}, {49, 43, 32, 63}, 2114 {49, 44, 32, 63}, {49, 45, 32, 63}, {49, 46, 32, 63}, {49, 47, 32, 63}, {49, 48, 32, 63}, 2115 {49, 49, 32, 63}, {49, 50, 32, 63}, {49, 51, 32, 63}, {49, 52, 32, 63}, {49, 53, 32, 63}, 2116 {49, 54, 32, 63}, {49, 55, 32, 63}, {49, 56, 32, 63}, {49, 57, 32, 63}, {49, 58, 32, 63}, 2117 {49, 59, 32, 63}, {49, 60, 32, 63}, {49, 61, 32, 63}, {49, 62, 32, 63}, {49, 63, 32, 63}, 2118 {50, 32, 32, 63}, {50, 33, 32, 63}, {50, 34, 32, 63}, {50, 35, 32, 63}, {50, 36, 32, 63}, 2119 {50, 37, 32, 63}, {50, 38, 32, 63}, {50, 39, 32, 63}, {50, 40, 32, 63}, {50, 41, 32, 63}, 2120 {50, 42, 32, 63}, {50, 43, 32, 63}, {50, 44, 32, 63}, {50, 45, 32, 63}, {50, 46, 32, 63}, 2121 {50, 47, 32, 63}, {50, 48, 32, 63}, {50, 49, 32, 63}, {50, 50, 32, 63}, {50, 51, 32, 63}, 2122 {50, 52, 32, 63}, {50, 53, 32, 63}, {50, 54, 32, 63}, {50, 55, 32, 63}, {50, 56, 32, 63}, 2123 {50, 57, 32, 63}, {50, 58, 32, 63}, {50, 59, 32, 63}, {50, 60, 32, 63}, {50, 61, 32, 63}, 2124 {50, 62, 32, 63}, {50, 63, 32, 63}, {51, 32, 32, 63}, {51, 33, 32, 63}, {51, 34, 32, 63}, 2125 {51, 35, 32, 63}, {51, 36, 32, 63}, {51, 37, 32, 63}, {51, 38, 32, 63}, {51, 39, 32, 63}, 2126 {51, 40, 32, 63}, {51, 41, 32, 63}, {51, 42, 32, 63}, {51, 43, 32, 63}, {51, 44, 32, 63}, 2127 {51, 45, 32, 63}, {51, 46, 32, 63}, {51, 47, 32, 63}, {51, 48, 32, 63}, {51, 49, 32, 63}, 2128 {51, 50, 32, 63}, {51, 51, 32, 63}, {51, 52, 32, 63}, {51, 53, 32, 63}, {51, 54, 32, 63}, 2129 {51, 55, 32, 63}, {51, 56, 32, 63}, {51, 57, 32, 63}, {51, 58, 32, 63}, {51, 59, 32, 63}, 2130 {51, 60, 32, 63}, {51, 61, 32, 63}, {51, 62, 32, 63}, {51, 63, 32, 63}, {52, 32, 32, 63}, 2131 {52, 33, 32, 63}, {52, 34, 32, 63}, {52, 35, 32, 63}, {52, 36, 32, 63}, {52, 37, 32, 63}, 2132 {52, 38, 32, 63}, {52, 39, 32, 63}, {52, 40, 32, 63}, {52, 41, 32, 63}, {52, 42, 32, 63}, 2133 {52, 43, 32, 63}, {52, 44, 32, 63}, {52, 45, 32, 63}, {52, 46, 32, 63}, {52, 47, 32, 63}, 2134 {52, 48, 32, 63}, {52, 49, 32, 63}, {52, 50, 32, 63}, {52, 51, 32, 63}, {52, 52, 32, 63}, 2135 {52, 53, 32, 63}, {52, 54, 32, 63}, {52, 55, 32, 63}, {52, 56, 32, 63}, {52, 57, 32, 63}, 2136 {52, 58, 32, 63}, {52, 59, 32, 63}, {52, 60, 32, 63}, {52, 61, 32, 63}, {52, 62, 32, 63}, 2137 {52, 63, 32, 63}, {53, 32, 32, 63}, {53, 33, 32, 63}, {53, 34, 32, 63}, {53, 35, 32, 63}, 2138 {53, 36, 32, 63}, {53, 37, 32, 63}, {53, 38, 32, 63}, {53, 39, 32, 63}, {53, 40, 32, 63}, 2139 {53, 41, 32, 63}, {53, 42, 32, 63}, {53, 43, 32, 63}, {53, 44, 32, 63}, {53, 45, 32, 63}, 2140 {53, 46, 32, 63}, {53, 47, 32, 63}, {53, 48, 32, 63}, {53, 49, 32, 63}, {53, 50, 32, 63}, 2141 {53, 51, 32, 63}, {53, 52, 32, 63}, {53, 53, 32, 63}, {53, 54, 32, 63}, {53, 55, 32, 63}, 2142 {53, 56, 32, 63}, {53, 57, 32, 63}, {53, 58, 32, 63}, {53, 59, 32, 63}, {53, 60, 32, 63}, 2143 {53, 61, 32, 63}, {53, 62, 32, 63}, {53, 63, 32, 63}, {54, 32, 32, 63}, {54, 33, 32, 63}, 2144 {54, 34, 32, 63}, {54, 35, 32, 63}, {54, 36, 32, 63}, {54, 37, 32, 63}, {54, 38, 32, 63}, 2145 {54, 39, 32, 63}, {54, 40, 32, 63}, {54, 41, 32, 63}, {54, 42, 32, 63}, {54, 43, 32, 63}, 2146 {54, 44, 32, 63}, {54, 45, 32, 63}, {54, 46, 32, 63}, {54, 47, 32, 63}, {54, 48, 32, 63}, 2147 {54, 49, 32, 63}, {54, 50, 32, 63}, {54, 51, 32, 63}, {54, 52, 32, 63}, {54, 53, 32, 63}, 2148 {54, 54, 32, 63}, {54, 55, 32, 63}, {54, 56, 32, 63}, {54, 57, 32, 63}, {54, 58, 32, 63}, 2149 {54, 59, 32, 63}, {54, 60, 32, 63}, {54, 61, 32, 63}, {54, 62, 32, 63}, {54, 63, 32, 63}, 2150 {55, 32, 32, 63}, {55, 33, 32, 63}, {55, 34, 32, 63}, {55, 35, 32, 63}, {55, 36, 32, 63}, 2151 {55, 37, 32, 63}, {55, 38, 32, 63}, {55, 39, 32, 63}, {55, 40, 32, 63}, {55, 41, 32, 63}, 2152 {55, 42, 32, 63}, {55, 43, 32, 63}, {55, 44, 32, 63}, {55, 45, 32, 63}, {55, 46, 32, 63}, 2153 {55, 47, 32, 63}, {55, 48, 32, 63}, {55, 49, 32, 63}, {55, 50, 32, 63}, {55, 51, 32, 63}, 2154 {55, 52, 32, 63}, {55, 53, 32, 63}, {55, 54, 32, 63}, {55, 55, 32, 63}, {55, 56, 32, 63}, 2155 {55, 57, 32, 63}, {55, 58, 32, 63}, {55, 59, 32, 63}, {55, 60, 32, 63}, {55, 61, 32, 63}, 2156 {55, 62, 32, 63}, {55, 63, 32, 63}, {56, 32, 32, 63}, {56, 33, 32, 63}, {56, 34, 32, 63}, 2157 {56, 35, 32, 63}, {56, 36, 32, 63}, {56, 37, 32, 63}, {56, 38, 32, 63}, {56, 39, 32, 63}, 2158 {56, 40, 32, 63}, {56, 41, 32, 63}, {56, 42, 32, 63}, {56, 43, 32, 63}, {56, 44, 32, 63}, 2159 {56, 45, 32, 63}, {56, 46, 32, 63}, {56, 47, 32, 63}, {56, 48, 32, 63}, {56, 49, 32, 63}, 2160 {56, 50, 32, 63}, {56, 51, 32, 63}, {56, 52, 32, 63}, {56, 53, 32, 63}, {56, 54, 32, 63}, 2161 {56, 55, 32, 63}, {56, 56, 32, 63}, {56, 57, 32, 63}, {56, 58, 32, 63}, {56, 59, 32, 63}, 2162 {56, 60, 32, 63}, {56, 61, 32, 63}, {56, 62, 32, 63}, {56, 63, 32, 63}, {57, 32, 32, 63}, 2163 {57, 33, 32, 63}, {57, 34, 32, 63}, {57, 35, 32, 63}, {57, 36, 32, 63}, {57, 37, 32, 63}, 2164 {57, 38, 32, 63}, {57, 39, 32, 63}, {57, 40, 32, 63}, {57, 41, 32, 63}, {57, 42, 32, 63}, 2165 {57, 43, 32, 63}, {57, 44, 32, 63}, {57, 45, 32, 63}, {57, 46, 32, 63}, {57, 47, 32, 63}, 2166 {57, 48, 32, 63}, {57, 49, 32, 63}, {57, 50, 32, 63}, {57, 51, 32, 63}, {57, 52, 32, 63}, 2167 {57, 53, 32, 63}, {57, 54, 32, 63}, {57, 55, 32, 63}, {57, 56, 32, 63}, {57, 57, 32, 63}, 2168 {57, 58, 32, 63}, {57, 59, 32, 63}, {57, 60, 32, 63}, {57, 61, 32, 63}, {57, 62, 32, 63}, 2169 {57, 63, 32, 63}, {58, 32, 32, 63}, {58, 33, 32, 63}, {58, 34, 32, 63}, {58, 35, 32, 63}, 2170 {58, 36, 32, 63}, {58, 37, 32, 63}, {58, 38, 32, 63}, {58, 39, 32, 63}, {58, 40, 32, 63}, 2171 {58, 41, 32, 63}, {58, 42, 32, 63}, {58, 43, 32, 63}, {58, 44, 32, 63}, {58, 45, 32, 63}, 2172 {58, 46, 32, 63}, {58, 47, 32, 63}, {58, 48, 32, 63}, {58, 49, 32, 63}, {58, 50, 32, 63}, 2173 {58, 51, 32, 63}, {58, 52, 32, 63}, {58, 53, 32, 63}, {58, 54, 32, 63}, {58, 55, 32, 63}, 2174 {58, 56, 32, 63}, {58, 57, 32, 63}, {58, 58, 32, 63}, {58, 59, 32, 63}, {58, 60, 32, 63}, 2175 {58, 61, 32, 63}, {58, 62, 32, 63}, {58, 63, 32, 63}, {59, 32, 32, 63}, {59, 33, 32, 63}, 2176 {59, 34, 32, 63}, {59, 35, 32, 63}, {59, 36, 32, 63}, {59, 37, 32, 63}, {59, 38, 32, 63}, 2177 {59, 39, 32, 63}, {59, 40, 32, 63}, {59, 41, 32, 63}, {59, 42, 32, 63}, {59, 43, 32, 63}, 2178 {59, 44, 32, 63}, {59, 45, 32, 63}, {59, 46, 32, 63}, {59, 47, 32, 63}, {59, 48, 32, 63}, 2179 {59, 49, 32, 63}, {59, 50, 32, 63}, {59, 51, 32, 63}, {59, 52, 32, 63}, {59, 53, 32, 63}, 2180 {59, 54, 32, 63}, {59, 55, 32, 63}, {59, 56, 32, 63}, {59, 57, 32, 63}, {59, 58, 32, 63}, 2181 {59, 59, 32, 63}, {59, 60, 32, 63}, {59, 61, 32, 63}, {59, 62, 32, 63}, {59, 63, 32, 63}, 2182 {40, 32, 64, 79}, {40, 33, 64, 79}, {40, 34, 64, 79}, {40, 35, 64, 79}, {40, 36, 64, 79}, 2183 {40, 37, 64, 79}, {40, 38, 64, 79}, {40, 39, 64, 79}, {40, 40, 64, 79}, {40, 41, 64, 79}, 2184 {40, 42, 64, 79}, {40, 43, 64, 79}, {40, 44, 64, 79}, {40, 45, 64, 79}, {40, 46, 64, 79}, 2185 {40, 47, 64, 79}, {40, 48, 64, 79}, {40, 49, 64, 79}, {40, 50, 64, 79}, {40, 51, 64, 79}, 2186 {40, 52, 64, 79}, {40, 53, 64, 79}, {40, 54, 64, 79}, {40, 55, 64, 79}, {40, 56, 64, 79}, 2187 {40, 57, 64, 79}, {40, 58, 64, 79}, {40, 59, 64, 79}, {40, 60, 64, 79}, {40, 61, 64, 79}, 2188 {40, 62, 64, 79}, {40, 63, 64, 79}, {41, 32, 64, 79}, {41, 33, 64, 79}, {41, 34, 64, 79}, 2189 {41, 35, 64, 79}, {41, 36, 64, 79}, {41, 37, 64, 79}, {41, 38, 64, 79}, {41, 39, 64, 79}, 2190 {41, 40, 64, 79}, {41, 41, 64, 79}, {41, 42, 64, 79}, {41, 43, 64, 79}, {41, 44, 64, 79}, 2191 {41, 45, 64, 79}, {41, 46, 64, 79}, {41, 47, 64, 79}, {41, 48, 64, 79}, {41, 49, 64, 79}, 2192 {41, 50, 64, 79}, {41, 51, 64, 79}, {41, 52, 64, 79}, {41, 53, 64, 79}, {41, 54, 64, 79}, 2193 {41, 55, 64, 79}, {41, 56, 64, 79}, {41, 57, 64, 79}, {41, 58, 64, 79}, {41, 59, 64, 79}, 2194 {41, 60, 64, 79}, {41, 61, 64, 79}, {41, 62, 64, 79}, {41, 63, 64, 79}, {42, 32, 64, 79}, 2195 {42, 33, 64, 79}, {42, 34, 64, 79}, {42, 35, 64, 79}, {42, 36, 64, 79}, {42, 37, 64, 79}, 2196 {42, 38, 64, 79}, {42, 39, 64, 79}, {42, 40, 64, 79}, {42, 41, 64, 79}, {42, 42, 64, 79}, 2197 {42, 43, 64, 79}, {42, 44, 64, 79}, {42, 45, 64, 79}, {42, 46, 64, 79}, {42, 47, 64, 79}, 2198 {42, 48, 64, 79}, {42, 49, 64, 79}, {42, 50, 64, 79}, {42, 51, 64, 79}, {42, 52, 64, 79}, 2199 {42, 53, 64, 79}, {42, 54, 64, 79}, {42, 55, 64, 79}, {42, 56, 64, 79}, {42, 57, 64, 79}, 2200 {42, 58, 64, 79}, {42, 59, 64, 79}, {42, 60, 64, 79}, {42, 61, 64, 79}, {42, 62, 64, 79}, 2201 {42, 63, 64, 79}, {43, 32, 64, 79}, {43, 33, 64, 79}, {43, 34, 64, 79}, {43, 35, 64, 79}, 2202 {43, 36, 64, 79}, {43, 37, 64, 79}, {43, 38, 64, 79}, {43, 39, 64, 79}, {43, 40, 64, 79}, 2203 {43, 41, 64, 79}, {43, 42, 64, 79}, {43, 43, 64, 79}, {43, 44, 64, 79}, {43, 45, 64, 79}, 2204 {43, 46, 64, 79}, {43, 47, 64, 79}, {43, 48, 64, 79}, {43, 49, 64, 79}, {43, 50, 64, 79}, 2205 {43, 51, 64, 79}, {43, 52, 64, 79}, {43, 53, 64, 79}, {43, 54, 64, 79}, {43, 55, 64, 79}, 2206 {43, 56, 64, 79}, {43, 57, 64, 79}, {43, 58, 64, 79}, {43, 59, 64, 79}, {43, 60, 64, 79}, 2207 {43, 61, 64, 79}, {43, 62, 64, 79}, {43, 63, 64, 79}, {44, 32, 64, 79}, {44, 33, 64, 79}, 2208 {44, 34, 64, 79}, {44, 35, 64, 79}, {44, 36, 64, 79}, {44, 37, 64, 79}, {44, 38, 64, 79}, 2209 {44, 39, 64, 79}, {44, 40, 64, 79}, {44, 41, 64, 79}, {44, 42, 64, 79}, {44, 43, 64, 79}, 2210 {44, 44, 64, 79}, {44, 45, 64, 79}, {44, 46, 64, 79}, {44, 47, 64, 79}, {44, 48, 64, 79}, 2211 {44, 49, 64, 79}, {44, 50, 64, 79}, {44, 51, 64, 79}, {44, 52, 64, 79}, {44, 53, 64, 79}, 2212 {44, 54, 64, 79}, {44, 55, 64, 79}, {44, 56, 64, 79}, {44, 57, 64, 79}, {44, 58, 64, 79}, 2213 {44, 59, 64, 79}, {44, 60, 64, 79}, {44, 61, 64, 79}, {44, 62, 64, 79}, {44, 63, 64, 79}, 2214 {45, 32, 64, 79}, {45, 33, 64, 79}, {45, 34, 64, 79}, {45, 35, 64, 79}, {45, 36, 64, 79}, 2215 {45, 37, 64, 79}, {45, 38, 64, 79}, {45, 39, 64, 79}, {45, 40, 64, 79}, {45, 41, 64, 79}, 2216 {45, 42, 64, 79}, {45, 43, 64, 79}, {45, 44, 64, 79}, {45, 45, 64, 79}, {45, 46, 64, 79}, 2217 {45, 47, 64, 79}, {45, 48, 64, 79}, {45, 49, 64, 79}, {45, 50, 64, 79}, {45, 51, 64, 79}, 2218 {45, 52, 64, 79}, {45, 53, 64, 79}, {45, 54, 64, 79}, {45, 55, 64, 79}, {45, 56, 64, 79}, 2219 {45, 57, 64, 79}, {45, 58, 64, 79}, {45, 59, 64, 79}, {45, 60, 64, 79}, {45, 61, 64, 79}, 2220 {45, 62, 64, 79}, {45, 63, 64, 79}, {46, 32, 64, 79}, {46, 33, 64, 79}, {46, 34, 64, 79}, 2221 {46, 35, 64, 79}, {46, 36, 64, 79}, {46, 37, 64, 79}, {46, 38, 64, 79}, {46, 39, 64, 79}, 2222 {46, 40, 64, 79}, {46, 41, 64, 79}, {46, 42, 64, 79}, {46, 43, 64, 79}, {46, 44, 64, 79}, 2223 {46, 45, 64, 79}, {46, 46, 64, 79}, {46, 47, 64, 79}, {46, 48, 64, 79}, {46, 49, 64, 79}, 2224 {46, 50, 64, 79}, {46, 51, 64, 79}, {46, 52, 64, 79}, {46, 53, 64, 79}, {46, 54, 64, 79}, 2225 {46, 55, 64, 79}, {46, 56, 64, 79}, {46, 57, 64, 79}, {46, 58, 64, 79}, {46, 59, 64, 79}, 2226 {46, 60, 64, 79}, {46, 61, 64, 79}, {46, 62, 64, 79}, {46, 63, 64, 79}, {47, 32, 64, 79}, 2227 {47, 33, 64, 79}, {47, 34, 64, 79}, {47, 35, 64, 79}, {47, 36, 64, 79}, {47, 37, 64, 79}, 2228 {47, 38, 64, 79}, {47, 39, 64, 79}, {47, 40, 64, 79}, {47, 41, 64, 79}, {47, 42, 64, 79}, 2229 {47, 43, 64, 79}, {47, 44, 64, 79}, {47, 45, 64, 79}, {47, 46, 64, 79}, {47, 47, 64, 79}, 2230 {47, 48, 64, 79}, {47, 49, 64, 79}, {47, 50, 64, 79}, {47, 51, 64, 79}, {47, 52, 64, 79}, 2231 {47, 53, 64, 79}, {47, 54, 64, 79}, {47, 55, 64, 79}, {47, 56, 64, 79}, {47, 57, 64, 79}, 2232 {47, 58, 64, 79}, {47, 59, 64, 79}, {47, 60, 64, 79}, {47, 61, 64, 79}, {47, 62, 64, 79}, 2233 {47, 63, 64, 79}, {48, 32, 64, 79}, {48, 33, 64, 79}, {48, 34, 64, 79}, {48, 35, 64, 79}, 2234 {48, 36, 64, 79}, {48, 37, 64, 79}, {48, 38, 64, 79}, {48, 39, 64, 79}, {48, 40, 64, 79}, 2235 {48, 41, 64, 79}, {48, 42, 64, 79}, {48, 43, 64, 79}, {48, 44, 64, 79}, {48, 45, 64, 79}, 2236 {48, 46, 64, 79}, {48, 47, 64, 79}, {48, 48, 64, 79}, {48, 49, 64, 79}, {48, 50, 64, 79}, 2237 {48, 51, 64, 79}, {48, 52, 64, 79}, {48, 53, 64, 79}, {48, 54, 64, 79}, {48, 55, 64, 79}, 2238 {48, 56, 64, 79}, {48, 57, 64, 79}, {48, 58, 64, 79}, {48, 59, 64, 79}, {48, 60, 64, 79}, 2239 {48, 61, 64, 79}, {48, 62, 64, 79}, {48, 63, 64, 79}, {49, 32, 64, 79}, {49, 33, 64, 79}, 2240 {49, 34, 64, 79}, {49, 35, 64, 79}, {49, 36, 64, 79}, {49, 37, 64, 79}, {49, 38, 64, 79}, 2241 {49, 39, 64, 79}, {49, 40, 64, 79}, {49, 41, 64, 79}, {49, 42, 64, 79}, {49, 43, 64, 79}, 2242 {49, 44, 64, 79}, {49, 45, 64, 79}, {49, 46, 64, 79}, {49, 47, 64, 79}, {49, 48, 64, 79}, 2243 {49, 49, 64, 79}, {49, 50, 64, 79}, {49, 51, 64, 79}, {49, 52, 64, 79}, {49, 53, 64, 79}, 2244 {49, 54, 64, 79}, {49, 55, 64, 79}, {49, 56, 64, 79}, {49, 57, 64, 79}, {49, 58, 64, 79}, 2245 {49, 59, 64, 79}, {49, 60, 64, 79}, {49, 61, 64, 79}, {49, 62, 64, 79}, {49, 63, 64, 79}, 2246 {50, 32, 64, 79}, {50, 33, 64, 79}, {50, 34, 64, 79}, {50, 35, 64, 79}, {50, 36, 64, 79}, 2247 {50, 37, 64, 79}, {50, 38, 64, 79}, {50, 39, 64, 79}, {50, 40, 64, 79}, {50, 41, 64, 79}, 2248 {50, 42, 64, 79}, {50, 43, 64, 79}, {50, 44, 64, 79}, {50, 45, 64, 79}, {50, 46, 64, 79}, 2249 {50, 47, 64, 79}, {50, 48, 64, 79}, {50, 49, 64, 79}, {50, 50, 64, 79}, {50, 51, 64, 79}, 2250 {50, 52, 64, 79}, {50, 53, 64, 79}, {50, 54, 64, 79}, {50, 55, 64, 79}, {50, 56, 64, 79}, 2251 {50, 57, 64, 79}, {50, 58, 64, 79}, {50, 59, 64, 79}, {50, 60, 64, 79}, {50, 61, 64, 79}, 2252 {50, 62, 64, 79}, {50, 63, 64, 79}, {51, 32, 64, 79}, {51, 33, 64, 79}, {51, 34, 64, 79}, 2253 {51, 35, 64, 79}, {51, 36, 64, 79}, {51, 37, 64, 79}, {51, 38, 64, 79}, {51, 39, 64, 79}, 2254 {51, 40, 64, 79}, {51, 41, 64, 79}, {51, 42, 64, 79}, {51, 43, 64, 79}, {51, 44, 64, 79}, 2255 {51, 45, 64, 79}, {51, 46, 64, 79}, {51, 47, 64, 79}, {51, 48, 64, 79}, {51, 49, 64, 79}, 2256 {51, 50, 64, 79}, {51, 51, 64, 79}, {51, 52, 64, 79}, {51, 53, 64, 79}, {51, 54, 64, 79}, 2257 {51, 55, 64, 79}, {51, 56, 64, 79}, {51, 57, 64, 79}, {51, 58, 64, 79}, {51, 59, 64, 79}, 2258 {51, 60, 64, 79}, {51, 61, 64, 79}, {51, 62, 64, 79}, {51, 63, 64, 79}, {52, 32, 64, 79}, 2259 {52, 33, 64, 79}, {52, 34, 64, 79}, {52, 35, 64, 79}, {52, 36, 64, 79}, {52, 37, 64, 79}, 2260 {52, 38, 64, 79}, {52, 39, 64, 79}, {52, 40, 64, 79}, {52, 41, 64, 79}, {52, 42, 64, 79}, 2261 {52, 43, 64, 79}, {52, 44, 64, 79}, {52, 45, 64, 79}, {52, 46, 64, 79}, {52, 47, 64, 79}, 2262 {52, 48, 64, 79}, {52, 49, 64, 79}, {52, 50, 64, 79}, {52, 51, 64, 79}, {52, 52, 64, 79}, 2263 {52, 53, 64, 79}, {52, 54, 64, 79}, {52, 55, 64, 79}, {52, 56, 64, 79}, {52, 57, 64, 79}, 2264 {52, 58, 64, 79}, {52, 59, 64, 79}, {52, 60, 64, 79}, {52, 61, 64, 79}, {52, 62, 64, 79}, 2265 {52, 63, 64, 79}, {53, 32, 64, 79}, {53, 33, 64, 79}, {53, 34, 64, 79}, {53, 35, 64, 79}, 2266 {53, 36, 64, 79}, {53, 37, 64, 79}, {53, 38, 64, 79}, {53, 39, 64, 79}, {53, 40, 64, 79}, 2267 {53, 41, 64, 79}, {53, 42, 64, 79}, {53, 43, 64, 79}, {53, 44, 64, 79}, {53, 45, 64, 79}, 2268 {53, 46, 64, 79}, {53, 47, 64, 79}, {53, 48, 64, 79}, {53, 49, 64, 79}, {53, 50, 64, 79}, 2269 {53, 51, 64, 79}, {53, 52, 64, 79}, {53, 53, 64, 79}, {53, 54, 64, 79}, {53, 55, 64, 79}, 2270 {53, 56, 64, 79}, {53, 57, 64, 79}, {53, 58, 64, 79}, {53, 59, 64, 79}, {53, 60, 64, 79}, 2271 {53, 61, 64, 79}, {53, 62, 64, 79}, {53, 63, 64, 79}, {54, 32, 64, 79}, {54, 33, 64, 79}, 2272 {54, 34, 64, 79}, {54, 35, 64, 79}, {54, 36, 64, 79}, {54, 37, 64, 79}, {54, 38, 64, 79}, 2273 {54, 39, 64, 79}, {54, 40, 64, 79}, {54, 41, 64, 79}, {54, 42, 64, 79}, {54, 43, 64, 79}, 2274 {54, 44, 64, 79}, {54, 45, 64, 79}, {54, 46, 64, 79}, {54, 47, 64, 79}, {54, 48, 64, 79}, 2275 {54, 49, 64, 79}, {54, 50, 64, 79}, {54, 51, 64, 79}, {54, 52, 64, 79}, {54, 53, 64, 79}, 2276 {54, 54, 64, 79}, {54, 55, 64, 79}, {54, 56, 64, 79}, {54, 57, 64, 79}, {54, 58, 64, 79}, 2277 {54, 59, 64, 79}, {54, 60, 64, 79}, {54, 61, 64, 79}, {54, 62, 64, 79}, {54, 63, 64, 79}, 2278 {55, 32, 64, 79}, {55, 33, 64, 79}, {55, 34, 64, 79}, {55, 35, 64, 79}, {55, 36, 64, 79}, 2279 {55, 37, 64, 79}, {55, 38, 64, 79}, {55, 39, 64, 79}, {55, 40, 64, 79}, {55, 41, 64, 79}, 2280 {55, 42, 64, 79}, {55, 43, 64, 79}, {55, 44, 64, 79}, {55, 45, 64, 79}, {55, 46, 64, 79}, 2281 {55, 47, 64, 79}, {55, 48, 64, 79}, {55, 49, 64, 79}, {55, 50, 64, 79}, {55, 51, 64, 79}, 2282 {55, 52, 64, 79}, {55, 53, 64, 79}, {55, 54, 64, 79}, {55, 55, 64, 79}, {55, 56, 64, 79}, 2283 {55, 57, 64, 79}, {55, 58, 64, 79}, {55, 59, 64, 79}, {55, 60, 64, 79}, {55, 61, 64, 79}, 2284 {55, 62, 64, 79}, {55, 63, 64, 79}, {56, 32, 64, 79}, {56, 33, 64, 79}, {56, 34, 64, 79}, 2285 {56, 35, 64, 79}, {56, 36, 64, 79}, {56, 37, 64, 79}, {56, 38, 64, 79}, {56, 39, 64, 79}, 2286 {56, 40, 64, 79}, {56, 41, 64, 79}, {56, 42, 64, 79}, {56, 43, 64, 79}, {56, 44, 64, 79}, 2287 {56, 45, 64, 79}, {56, 46, 64, 79}, {56, 47, 64, 79}, {56, 48, 64, 79}, {56, 49, 64, 79}, 2288 {56, 50, 64, 79}, {56, 51, 64, 79}, {56, 52, 64, 79}, {56, 53, 64, 79}, {56, 54, 64, 79}, 2289 {56, 55, 64, 79}, {56, 56, 64, 79}, {56, 57, 64, 79}, {56, 58, 64, 79}, {56, 59, 64, 79}, 2290 {56, 60, 64, 79}, {56, 61, 64, 79}, {56, 62, 64, 79}, {56, 63, 64, 79}, {57, 32, 64, 79}, 2291 {57, 33, 64, 79}, {57, 34, 64, 79}, {57, 35, 64, 79}, {57, 36, 64, 79}, {57, 37, 64, 79}, 2292 {57, 38, 64, 79}, {57, 39, 64, 79}, {57, 40, 64, 79}, {57, 41, 64, 79}, {57, 42, 64, 79}, 2293 {57, 43, 64, 79}, {57, 44, 64, 79}, {57, 45, 64, 79}, {57, 46, 64, 79}, {57, 47, 64, 79}, 2294 {57, 48, 64, 79}, {57, 49, 64, 79}, {57, 50, 64, 79}, {57, 51, 64, 79}, {57, 52, 64, 79}, 2295 {57, 53, 64, 79}, {57, 54, 64, 79}, {57, 55, 64, 79}, {57, 56, 64, 79}, {57, 57, 64, 79}, 2296 {57, 58, 64, 79}, {57, 59, 64, 79}, {57, 60, 64, 79}, {57, 61, 64, 79}, {57, 62, 64, 79}, 2297 {57, 63, 64, 79}, {58, 32, 64, 79}, {58, 33, 64, 79}, {58, 34, 64, 79}, {58, 35, 64, 79}, 2298 {58, 36, 64, 79}, {58, 37, 64, 79}, {58, 38, 64, 79}, {58, 39, 64, 79}, {58, 40, 64, 79}, 2299 {58, 41, 64, 79}, {58, 42, 64, 79}, {58, 43, 64, 79}, {58, 44, 64, 79}, {58, 45, 64, 79}, 2300 {58, 46, 64, 79}, {58, 47, 64, 79}, {58, 48, 64, 79}, {58, 49, 64, 79}, {58, 50, 64, 79}, 2301 {58, 51, 64, 79}, {58, 52, 64, 79}, {58, 53, 64, 79}, {58, 54, 64, 79}, {58, 55, 64, 79}, 2302 {58, 56, 64, 79}, {58, 57, 64, 79}, {58, 58, 64, 79}, {58, 59, 64, 79}, {58, 60, 64, 79}, 2303 {58, 61, 64, 79}, {58, 62, 64, 79}, {58, 63, 64, 79}, {59, 32, 64, 79}, {59, 33, 64, 79}, 2304 {59, 34, 64, 79}, {59, 35, 64, 79}, {59, 36, 64, 79}, {59, 37, 64, 79}, {59, 38, 64, 79}, 2305 {59, 39, 64, 79}, {59, 40, 64, 79}, {59, 41, 64, 79}, {59, 42, 64, 79}, {59, 43, 64, 79}, 2306 {59, 44, 64, 79}, {59, 45, 64, 79}, {59, 46, 64, 79}, {59, 47, 64, 79}, {59, 48, 64, 79}, 2307 {59, 49, 64, 79}, {59, 50, 64, 79}, {59, 51, 64, 79}, {59, 52, 64, 79}, {59, 53, 64, 79}, 2308 {59, 54, 64, 79}, {59, 55, 64, 79}, {59, 56, 64, 79}, {59, 57, 64, 79}, {59, 58, 64, 79}, 2309 {59, 59, 64, 79}, {59, 60, 64, 79}, {59, 61, 64, 79}, {59, 62, 64, 79}, {59, 63, 64, 79}, 2310 {40, 64, 30, 31}, {40, 65, 30, 31}, {40, 66, 30, 31}, {40, 67, 30, 31}, {40, 68, 30, 31}, 2311 {40, 69, 30, 31}, {41, 64, 30, 31}, {41, 65, 30, 31}, {41, 66, 30, 31}, {41, 67, 30, 31}, 2312 {41, 68, 30, 31}, {41, 69, 30, 31}, {42, 64, 30, 31}, {42, 65, 30, 31}, {42, 66, 30, 31}, 2313 {42, 67, 30, 31}, {42, 68, 30, 31}, {42, 69, 30, 31}, {43, 64, 30, 31}, {43, 65, 30, 31}, 2314 {43, 66, 30, 31}, {43, 67, 30, 31}, {43, 68, 30, 31}, {43, 69, 30, 31}, {44, 64, 30, 31}, 2315 {44, 65, 30, 31}, {44, 66, 30, 31}, {44, 67, 30, 31}, {44, 68, 30, 31}, {44, 69, 30, 31}, 2316 {45, 64, 30, 31}, {45, 65, 30, 31}, {45, 66, 30, 31}, {45, 67, 30, 31}, {45, 68, 30, 31}, 2317 {45, 69, 30, 31}, {46, 64, 30, 31}, {46, 65, 30, 31}, {46, 66, 30, 31}, {46, 67, 30, 31}, 2318 {46, 68, 30, 31}, {46, 69, 30, 31}, {47, 64, 30, 31}, {47, 65, 30, 31}, {47, 66, 30, 31}, 2319 {47, 67, 30, 31}, {47, 68, 30, 31}, {47, 69, 30, 31}, {48, 64, 30, 31}, {48, 65, 30, 31}, 2320 {48, 66, 30, 31}, {48, 67, 30, 31}, {48, 68, 30, 31}, {48, 69, 30, 31}, {49, 64, 30, 31}, 2321 {49, 65, 30, 31}, {49, 66, 30, 31}, {49, 67, 30, 31}, {49, 68, 30, 31}, {49, 69, 30, 31}, 2322 {50, 64, 30, 31}, {50, 65, 30, 31}, {50, 66, 30, 31}, {50, 67, 30, 31}, {50, 68, 30, 31}, 2323 {50, 69, 30, 31}, {51, 64, 30, 31}, {51, 65, 30, 31}, {51, 66, 30, 31}, {51, 67, 30, 31}, 2324 {51, 68, 30, 31}, {51, 69, 30, 31}, {52, 64, 30, 31}, {52, 65, 30, 31}, {52, 66, 30, 31}, 2325 {52, 67, 30, 31}, {52, 68, 30, 31}, {52, 69, 30, 31}, {53, 64, 30, 31}, {53, 65, 30, 31}, 2326 {53, 66, 30, 31}, {53, 67, 30, 31}, {53, 68, 30, 31}, {53, 69, 30, 31}, {54, 64, 30, 31}, 2327 {54, 65, 30, 31}, {54, 66, 30, 31}, {54, 67, 30, 31}, {54, 68, 30, 31}, {54, 69, 30, 31}, 2328 {55, 64, 30, 31}, {55, 65, 30, 31}, {55, 66, 30, 31}, {55, 67, 30, 31}, {55, 68, 30, 31}, 2329 {55, 69, 30, 31}, {56, 64, 30, 31}, {56, 65, 30, 31}, {56, 66, 30, 31}, {56, 67, 30, 31}, 2330 {56, 68, 30, 31}, {56, 69, 30, 31}, {57, 64, 30, 31}, {57, 65, 30, 31}, {57, 66, 30, 31}, 2331 {57, 67, 30, 31}, {57, 68, 30, 31}, {57, 69, 30, 31}, {58, 64, 30, 31}, {58, 65, 30, 31}, 2332 {58, 66, 30, 31}, {58, 67, 30, 31}, {58, 68, 30, 31}, {58, 69, 30, 31}, {59, 64, 30, 31}, 2333 {59, 65, 30, 31}, {59, 66, 30, 31}, {59, 67, 30, 31}, {59, 68, 30, 31}, {59, 69, 30, 31}, 2334 {40, 64, 32, 63}, {40, 65, 32, 63}, {40, 66, 32, 63}, {40, 67, 32, 63}, {40, 68, 32, 63}, 2335 {40, 69, 32, 63}, {41, 64, 32, 63}, {41, 65, 32, 63}, {41, 66, 32, 63}, {41, 67, 32, 63}, 2336 {41, 68, 32, 63}, {41, 69, 32, 63}, {42, 64, 32, 63}, {42, 65, 32, 63}, {42, 66, 32, 63}, 2337 {42, 67, 32, 63}, {42, 68, 32, 63}, {42, 69, 32, 63}, {43, 64, 32, 63}, {43, 65, 32, 63}, 2338 {43, 66, 32, 63}, {43, 67, 32, 63}, {43, 68, 32, 63}, {43, 69, 32, 63}, {44, 64, 32, 63}, 2339 {44, 65, 32, 63}, {44, 66, 32, 63}, {44, 67, 32, 63}, {44, 68, 32, 63}, {44, 69, 32, 63}, 2340 {45, 64, 32, 63}, {45, 65, 32, 63}, {45, 66, 32, 63}, {45, 67, 32, 63}, {45, 68, 32, 63}, 2341 {45, 69, 32, 63}, {46, 64, 32, 63}, {46, 65, 32, 63}, {46, 66, 32, 63}, {46, 67, 32, 63}, 2342 {46, 68, 32, 63}, {46, 69, 32, 63}, {47, 64, 32, 63}, {47, 65, 32, 63}, {47, 66, 32, 63}, 2343 {47, 67, 32, 63}, {47, 68, 32, 63}, {47, 69, 32, 63}, {48, 64, 32, 63}, {48, 65, 32, 63}, 2344 {48, 66, 32, 63}, {48, 67, 32, 63}, {48, 68, 32, 63}, {48, 69, 32, 63}, {49, 64, 32, 63}, 2345 {49, 65, 32, 63}, {49, 66, 32, 63}, {49, 67, 32, 63}, {49, 68, 32, 63}, {49, 69, 32, 63}, 2346 {50, 64, 32, 63}, {50, 65, 32, 63}, {50, 66, 32, 63}, {50, 67, 32, 63}, {50, 68, 32, 63}, 2347 {50, 69, 32, 63}, {51, 64, 32, 63}, {51, 65, 32, 63}, {51, 66, 32, 63}, {51, 67, 32, 63}, 2348 {51, 68, 32, 63}, {51, 69, 32, 63}, {52, 64, 32, 63}, {52, 65, 32, 63}, {52, 66, 32, 63}, 2349 {52, 67, 32, 63}, {52, 68, 32, 63}, {52, 69, 32, 63}, {53, 64, 32, 63}, {53, 65, 32, 63}, 2350 {53, 66, 32, 63}, {53, 67, 32, 63}, {53, 68, 32, 63}, {53, 69, 32, 63}, {54, 64, 32, 63}, 2351 {54, 65, 32, 63}, {54, 66, 32, 63}, {54, 67, 32, 63}, {54, 68, 32, 63}, {54, 69, 32, 63}, 2352 {55, 64, 32, 63}, {55, 65, 32, 63}, {55, 66, 32, 63}, {55, 67, 32, 63}, {55, 68, 32, 63}, 2353 {55, 69, 32, 63}, {56, 64, 32, 63}, {56, 65, 32, 63}, {56, 66, 32, 63}, {56, 67, 32, 63}, 2354 {56, 68, 32, 63}, {56, 69, 32, 63}, {57, 64, 32, 63}, {57, 65, 32, 63}, {57, 66, 32, 63}, 2355 {57, 67, 32, 63}, {57, 68, 32, 63}, {57, 69, 32, 63}, {58, 64, 32, 63}, {58, 65, 32, 63}, 2356 {58, 66, 32, 63}, {58, 67, 32, 63}, {58, 68, 32, 63}, {58, 69, 32, 63}, {59, 64, 32, 63}, 2357 {59, 65, 32, 63}, {59, 66, 32, 63}, {59, 67, 32, 63}, {59, 68, 32, 63}, {59, 69, 32, 63}, 2358 {40, 64, 64, 79}, {40, 65, 64, 79}, {40, 66, 64, 79}, {40, 67, 64, 79}, {40, 68, 64, 79}, 2359 {40, 69, 64, 79}, {41, 64, 64, 79}, {41, 65, 64, 79}, {41, 66, 64, 79}, {41, 67, 64, 79}, 2360 {41, 68, 64, 79}, {41, 69, 64, 79}, {42, 64, 64, 79}, {42, 65, 64, 79}, {42, 66, 64, 79}, 2361 {42, 67, 64, 79}, {42, 68, 64, 79}, {42, 69, 64, 79}, {43, 64, 64, 79}, {43, 65, 64, 79}, 2362 {43, 66, 64, 79}, {43, 67, 64, 79}, {43, 68, 64, 79}, {43, 69, 64, 79}, {44, 64, 64, 79}, 2363 {44, 65, 64, 79}, {44, 66, 64, 79}, {44, 67, 64, 79}, {44, 68, 64, 79}, {44, 69, 64, 79}, 2364 {45, 64, 64, 79}, {45, 65, 64, 79}, {45, 66, 64, 79}, {45, 67, 64, 79}, {45, 68, 64, 79}, 2365 {45, 69, 64, 79}, {46, 64, 64, 79}, {46, 65, 64, 79}, {46, 66, 64, 79}, {46, 67, 64, 79}, 2366 {46, 68, 64, 79}, {46, 69, 64, 79}, {47, 64, 64, 79}, {47, 65, 64, 79}, {47, 66, 64, 79}, 2367 {47, 67, 64, 79}, {47, 68, 64, 79}, {47, 69, 64, 79}, {48, 64, 64, 79}, {48, 65, 64, 79}, 2368 {48, 66, 64, 79}, {48, 67, 64, 79}, {48, 68, 64, 79}, {48, 69, 64, 79}, {49, 64, 64, 79}, 2369 {49, 65, 64, 79}, {49, 66, 64, 79}, {49, 67, 64, 79}, {49, 68, 64, 79}, {49, 69, 64, 79}, 2370 {50, 64, 64, 79}, {50, 65, 64, 79}, {50, 66, 64, 79}, {50, 67, 64, 79}, {50, 68, 64, 79}, 2371 {50, 69, 64, 79}, {51, 64, 64, 79}, {51, 65, 64, 79}, {51, 66, 64, 79}, {51, 67, 64, 79}, 2372 {51, 68, 64, 79}, {51, 69, 64, 79}, {52, 64, 64, 79}, {52, 65, 64, 79}, {52, 66, 64, 79}, 2373 {52, 67, 64, 79}, {52, 68, 64, 79}, {52, 69, 64, 79}, {53, 64, 64, 79}, {53, 65, 64, 79}, 2374 {53, 66, 64, 79}, {53, 67, 64, 79}, {53, 68, 64, 79}, {53, 69, 64, 79}, {54, 64, 64, 79}, 2375 {54, 65, 64, 79}, {54, 66, 64, 79}, {54, 67, 64, 79}, {54, 68, 64, 79}, {54, 69, 64, 79}, 2376 {55, 64, 64, 79}, {55, 65, 64, 79}, {55, 66, 64, 79}, {55, 67, 64, 79}, {55, 68, 64, 79}, 2377 {55, 69, 64, 79}, {56, 64, 64, 79}, {56, 65, 64, 79}, {56, 66, 64, 79}, {56, 67, 64, 79}, 2378 {56, 68, 64, 79}, {56, 69, 64, 79}, {57, 64, 64, 79}, {57, 65, 64, 79}, {57, 66, 64, 79}, 2379 {57, 67, 64, 79}, {57, 68, 64, 79}, {57, 69, 64, 79}, {58, 64, 64, 79}, {58, 65, 64, 79}, 2380 {58, 66, 64, 79}, {58, 67, 64, 79}, {58, 68, 64, 79}, {58, 69, 64, 79}, {59, 64, 64, 79}, 2381 {59, 65, 64, 79}, {59, 66, 64, 79}, {59, 67, 64, 79}, {59, 68, 64, 79}, {59, 69, 64, 79}, 2382 }, 2383 } 2384 body2cropped = testBody{ 2385 label: 2, 2386 offset: dvid.Point3d{30, 20, 40}, 2387 size: dvid.Point3d{50, 50, 20}, 2388 blockSpans: []dvid.Span{ 2389 {1, 0, 0, 2}, 2390 // {1, 1, 0, 2}, 2391 // {1, 2, 0, 2}, 2392 }, 2393 voxelSpans: []dvid.Span{ 2394 {40, 20, 30, 31}, {40, 21, 30, 31}, {40, 22, 30, 31}, {40, 23, 30, 31}, {40, 24, 30, 31}, 2395 {40, 25, 30, 31}, {40, 26, 30, 31}, {40, 27, 30, 31}, {40, 28, 30, 31}, {40, 29, 30, 31}, 2396 {40, 30, 30, 31}, {40, 31, 30, 31}, {41, 20, 30, 31}, {41, 21, 30, 31}, {41, 22, 30, 31}, 2397 {41, 23, 30, 31}, {41, 24, 30, 31}, {41, 25, 30, 31}, {41, 26, 30, 31}, {41, 27, 30, 31}, 2398 {41, 28, 30, 31}, {41, 29, 30, 31}, {41, 30, 30, 31}, {41, 31, 30, 31}, {42, 20, 30, 31}, 2399 {42, 21, 30, 31}, {42, 22, 30, 31}, {42, 23, 30, 31}, {42, 24, 30, 31}, {42, 25, 30, 31}, 2400 {42, 26, 30, 31}, {42, 27, 30, 31}, {42, 28, 30, 31}, {42, 29, 30, 31}, {42, 30, 30, 31}, 2401 {42, 31, 30, 31}, {43, 20, 30, 31}, {43, 21, 30, 31}, {43, 22, 30, 31}, {43, 23, 30, 31}, 2402 {43, 24, 30, 31}, {43, 25, 30, 31}, {43, 26, 30, 31}, {43, 27, 30, 31}, {43, 28, 30, 31}, 2403 {43, 29, 30, 31}, {43, 30, 30, 31}, {43, 31, 30, 31}, {44, 20, 30, 31}, {44, 21, 30, 31}, 2404 {44, 22, 30, 31}, {44, 23, 30, 31}, {44, 24, 30, 31}, {44, 25, 30, 31}, {44, 26, 30, 31}, 2405 {44, 27, 30, 31}, {44, 28, 30, 31}, {44, 29, 30, 31}, {44, 30, 30, 31}, {44, 31, 30, 31}, 2406 {45, 20, 30, 31}, {45, 21, 30, 31}, {45, 22, 30, 31}, {45, 23, 30, 31}, {45, 24, 30, 31}, 2407 {45, 25, 30, 31}, {45, 26, 30, 31}, {45, 27, 30, 31}, {45, 28, 30, 31}, {45, 29, 30, 31}, 2408 {45, 30, 30, 31}, {45, 31, 30, 31}, {46, 20, 30, 31}, {46, 21, 30, 31}, {46, 22, 30, 31}, 2409 {46, 23, 30, 31}, {46, 24, 30, 31}, {46, 25, 30, 31}, {46, 26, 30, 31}, {46, 27, 30, 31}, 2410 {46, 28, 30, 31}, {46, 29, 30, 31}, {46, 30, 30, 31}, {46, 31, 30, 31}, {47, 20, 30, 31}, 2411 {47, 21, 30, 31}, {47, 22, 30, 31}, {47, 23, 30, 31}, {47, 24, 30, 31}, {47, 25, 30, 31}, 2412 {47, 26, 30, 31}, {47, 27, 30, 31}, {47, 28, 30, 31}, {47, 29, 30, 31}, {47, 30, 30, 31}, 2413 {47, 31, 30, 31}, {48, 20, 30, 31}, {48, 21, 30, 31}, {48, 22, 30, 31}, {48, 23, 30, 31}, 2414 {48, 24, 30, 31}, {48, 25, 30, 31}, {48, 26, 30, 31}, {48, 27, 30, 31}, {48, 28, 30, 31}, 2415 {48, 29, 30, 31}, {48, 30, 30, 31}, {48, 31, 30, 31}, {49, 20, 30, 31}, {49, 21, 30, 31}, 2416 {49, 22, 30, 31}, {49, 23, 30, 31}, {49, 24, 30, 31}, {49, 25, 30, 31}, {49, 26, 30, 31}, 2417 {49, 27, 30, 31}, {49, 28, 30, 31}, {49, 29, 30, 31}, {49, 30, 30, 31}, {49, 31, 30, 31}, 2418 {50, 20, 30, 31}, {50, 21, 30, 31}, {50, 22, 30, 31}, {50, 23, 30, 31}, {50, 24, 30, 31}, 2419 {50, 25, 30, 31}, {50, 26, 30, 31}, {50, 27, 30, 31}, {50, 28, 30, 31}, {50, 29, 30, 31}, 2420 {50, 30, 30, 31}, {50, 31, 30, 31}, {51, 20, 30, 31}, {51, 21, 30, 31}, {51, 22, 30, 31}, 2421 {51, 23, 30, 31}, {51, 24, 30, 31}, {51, 25, 30, 31}, {51, 26, 30, 31}, {51, 27, 30, 31}, 2422 {51, 28, 30, 31}, {51, 29, 30, 31}, {51, 30, 30, 31}, {51, 31, 30, 31}, {52, 20, 30, 31}, 2423 {52, 21, 30, 31}, {52, 22, 30, 31}, {52, 23, 30, 31}, {52, 24, 30, 31}, {52, 25, 30, 31}, 2424 {52, 26, 30, 31}, {52, 27, 30, 31}, {52, 28, 30, 31}, {52, 29, 30, 31}, {52, 30, 30, 31}, 2425 {52, 31, 30, 31}, {53, 20, 30, 31}, {53, 21, 30, 31}, {53, 22, 30, 31}, {53, 23, 30, 31}, 2426 {53, 24, 30, 31}, {53, 25, 30, 31}, {53, 26, 30, 31}, {53, 27, 30, 31}, {53, 28, 30, 31}, 2427 {53, 29, 30, 31}, {53, 30, 30, 31}, {53, 31, 30, 31}, {54, 20, 30, 31}, {54, 21, 30, 31}, 2428 {54, 22, 30, 31}, {54, 23, 30, 31}, {54, 24, 30, 31}, {54, 25, 30, 31}, {54, 26, 30, 31}, 2429 {54, 27, 30, 31}, {54, 28, 30, 31}, {54, 29, 30, 31}, {54, 30, 30, 31}, {54, 31, 30, 31}, 2430 {55, 20, 30, 31}, {55, 21, 30, 31}, {55, 22, 30, 31}, {55, 23, 30, 31}, {55, 24, 30, 31}, 2431 {55, 25, 30, 31}, {55, 26, 30, 31}, {55, 27, 30, 31}, {55, 28, 30, 31}, {55, 29, 30, 31}, 2432 {55, 30, 30, 31}, {55, 31, 30, 31}, {56, 20, 30, 31}, {56, 21, 30, 31}, {56, 22, 30, 31}, 2433 {56, 23, 30, 31}, {56, 24, 30, 31}, {56, 25, 30, 31}, {56, 26, 30, 31}, {56, 27, 30, 31}, 2434 {56, 28, 30, 31}, {56, 29, 30, 31}, {56, 30, 30, 31}, {56, 31, 30, 31}, {57, 20, 30, 31}, 2435 {57, 21, 30, 31}, {57, 22, 30, 31}, {57, 23, 30, 31}, {57, 24, 30, 31}, {57, 25, 30, 31}, 2436 {57, 26, 30, 31}, {57, 27, 30, 31}, {57, 28, 30, 31}, {57, 29, 30, 31}, {57, 30, 30, 31}, 2437 {57, 31, 30, 31}, {58, 20, 30, 31}, {58, 21, 30, 31}, {58, 22, 30, 31}, {58, 23, 30, 31}, 2438 {58, 24, 30, 31}, {58, 25, 30, 31}, {58, 26, 30, 31}, {58, 27, 30, 31}, {58, 28, 30, 31}, 2439 {58, 29, 30, 31}, {58, 30, 30, 31}, {58, 31, 30, 31}, {59, 20, 30, 31}, {59, 21, 30, 31}, 2440 {59, 22, 30, 31}, {59, 23, 30, 31}, {59, 24, 30, 31}, {59, 25, 30, 31}, {59, 26, 30, 31}, 2441 {59, 27, 30, 31}, {59, 28, 30, 31}, {59, 29, 30, 31}, {59, 30, 30, 31}, {59, 31, 30, 31}, 2442 {40, 20, 32, 63}, {40, 21, 32, 63}, {40, 22, 32, 63}, {40, 23, 32, 63}, {40, 24, 32, 63}, 2443 {40, 25, 32, 63}, {40, 26, 32, 63}, {40, 27, 32, 63}, {40, 28, 32, 63}, {40, 29, 32, 63}, 2444 {40, 30, 32, 63}, {40, 31, 32, 63}, {41, 20, 32, 63}, {41, 21, 32, 63}, {41, 22, 32, 63}, 2445 {41, 23, 32, 63}, {41, 24, 32, 63}, {41, 25, 32, 63}, {41, 26, 32, 63}, {41, 27, 32, 63}, 2446 {41, 28, 32, 63}, {41, 29, 32, 63}, {41, 30, 32, 63}, {41, 31, 32, 63}, {42, 20, 32, 63}, 2447 {42, 21, 32, 63}, {42, 22, 32, 63}, {42, 23, 32, 63}, {42, 24, 32, 63}, {42, 25, 32, 63}, 2448 {42, 26, 32, 63}, {42, 27, 32, 63}, {42, 28, 32, 63}, {42, 29, 32, 63}, {42, 30, 32, 63}, 2449 {42, 31, 32, 63}, {43, 20, 32, 63}, {43, 21, 32, 63}, {43, 22, 32, 63}, {43, 23, 32, 63}, 2450 {43, 24, 32, 63}, {43, 25, 32, 63}, {43, 26, 32, 63}, {43, 27, 32, 63}, {43, 28, 32, 63}, 2451 {43, 29, 32, 63}, {43, 30, 32, 63}, {43, 31, 32, 63}, {44, 20, 32, 63}, {44, 21, 32, 63}, 2452 {44, 22, 32, 63}, {44, 23, 32, 63}, {44, 24, 32, 63}, {44, 25, 32, 63}, {44, 26, 32, 63}, 2453 {44, 27, 32, 63}, {44, 28, 32, 63}, {44, 29, 32, 63}, {44, 30, 32, 63}, {44, 31, 32, 63}, 2454 {45, 20, 32, 63}, {45, 21, 32, 63}, {45, 22, 32, 63}, {45, 23, 32, 63}, {45, 24, 32, 63}, 2455 {45, 25, 32, 63}, {45, 26, 32, 63}, {45, 27, 32, 63}, {45, 28, 32, 63}, {45, 29, 32, 63}, 2456 {45, 30, 32, 63}, {45, 31, 32, 63}, {46, 20, 32, 63}, {46, 21, 32, 63}, {46, 22, 32, 63}, 2457 {46, 23, 32, 63}, {46, 24, 32, 63}, {46, 25, 32, 63}, {46, 26, 32, 63}, {46, 27, 32, 63}, 2458 {46, 28, 32, 63}, {46, 29, 32, 63}, {46, 30, 32, 63}, {46, 31, 32, 63}, {47, 20, 32, 63}, 2459 {47, 21, 32, 63}, {47, 22, 32, 63}, {47, 23, 32, 63}, {47, 24, 32, 63}, {47, 25, 32, 63}, 2460 {47, 26, 32, 63}, {47, 27, 32, 63}, {47, 28, 32, 63}, {47, 29, 32, 63}, {47, 30, 32, 63}, 2461 {47, 31, 32, 63}, {48, 20, 32, 63}, {48, 21, 32, 63}, {48, 22, 32, 63}, {48, 23, 32, 63}, 2462 {48, 24, 32, 63}, {48, 25, 32, 63}, {48, 26, 32, 63}, {48, 27, 32, 63}, {48, 28, 32, 63}, 2463 {48, 29, 32, 63}, {48, 30, 32, 63}, {48, 31, 32, 63}, {49, 20, 32, 63}, {49, 21, 32, 63}, 2464 {49, 22, 32, 63}, {49, 23, 32, 63}, {49, 24, 32, 63}, {49, 25, 32, 63}, {49, 26, 32, 63}, 2465 {49, 27, 32, 63}, {49, 28, 32, 63}, {49, 29, 32, 63}, {49, 30, 32, 63}, {49, 31, 32, 63}, 2466 {50, 20, 32, 63}, {50, 21, 32, 63}, {50, 22, 32, 63}, {50, 23, 32, 63}, {50, 24, 32, 63}, 2467 {50, 25, 32, 63}, {50, 26, 32, 63}, {50, 27, 32, 63}, {50, 28, 32, 63}, {50, 29, 32, 63}, 2468 {50, 30, 32, 63}, {50, 31, 32, 63}, {51, 20, 32, 63}, {51, 21, 32, 63}, {51, 22, 32, 63}, 2469 {51, 23, 32, 63}, {51, 24, 32, 63}, {51, 25, 32, 63}, {51, 26, 32, 63}, {51, 27, 32, 63}, 2470 {51, 28, 32, 63}, {51, 29, 32, 63}, {51, 30, 32, 63}, {51, 31, 32, 63}, {52, 20, 32, 63}, 2471 {52, 21, 32, 63}, {52, 22, 32, 63}, {52, 23, 32, 63}, {52, 24, 32, 63}, {52, 25, 32, 63}, 2472 {52, 26, 32, 63}, {52, 27, 32, 63}, {52, 28, 32, 63}, {52, 29, 32, 63}, {52, 30, 32, 63}, 2473 {52, 31, 32, 63}, {53, 20, 32, 63}, {53, 21, 32, 63}, {53, 22, 32, 63}, {53, 23, 32, 63}, 2474 {53, 24, 32, 63}, {53, 25, 32, 63}, {53, 26, 32, 63}, {53, 27, 32, 63}, {53, 28, 32, 63}, 2475 {53, 29, 32, 63}, {53, 30, 32, 63}, {53, 31, 32, 63}, {54, 20, 32, 63}, {54, 21, 32, 63}, 2476 {54, 22, 32, 63}, {54, 23, 32, 63}, {54, 24, 32, 63}, {54, 25, 32, 63}, {54, 26, 32, 63}, 2477 {54, 27, 32, 63}, {54, 28, 32, 63}, {54, 29, 32, 63}, {54, 30, 32, 63}, {54, 31, 32, 63}, 2478 {55, 20, 32, 63}, {55, 21, 32, 63}, {55, 22, 32, 63}, {55, 23, 32, 63}, {55, 24, 32, 63}, 2479 {55, 25, 32, 63}, {55, 26, 32, 63}, {55, 27, 32, 63}, {55, 28, 32, 63}, {55, 29, 32, 63}, 2480 {55, 30, 32, 63}, {55, 31, 32, 63}, {56, 20, 32, 63}, {56, 21, 32, 63}, {56, 22, 32, 63}, 2481 {56, 23, 32, 63}, {56, 24, 32, 63}, {56, 25, 32, 63}, {56, 26, 32, 63}, {56, 27, 32, 63}, 2482 {56, 28, 32, 63}, {56, 29, 32, 63}, {56, 30, 32, 63}, {56, 31, 32, 63}, {57, 20, 32, 63}, 2483 {57, 21, 32, 63}, {57, 22, 32, 63}, {57, 23, 32, 63}, {57, 24, 32, 63}, {57, 25, 32, 63}, 2484 {57, 26, 32, 63}, {57, 27, 32, 63}, {57, 28, 32, 63}, {57, 29, 32, 63}, {57, 30, 32, 63}, 2485 {57, 31, 32, 63}, {58, 20, 32, 63}, {58, 21, 32, 63}, {58, 22, 32, 63}, {58, 23, 32, 63}, 2486 {58, 24, 32, 63}, {58, 25, 32, 63}, {58, 26, 32, 63}, {58, 27, 32, 63}, {58, 28, 32, 63}, 2487 {58, 29, 32, 63}, {58, 30, 32, 63}, {58, 31, 32, 63}, {59, 20, 32, 63}, {59, 21, 32, 63}, 2488 {59, 22, 32, 63}, {59, 23, 32, 63}, {59, 24, 32, 63}, {59, 25, 32, 63}, {59, 26, 32, 63}, 2489 {59, 27, 32, 63}, {59, 28, 32, 63}, {59, 29, 32, 63}, {59, 30, 32, 63}, {59, 31, 32, 63}, 2490 {40, 20, 64, 79}, {40, 21, 64, 79}, {40, 22, 64, 79}, {40, 23, 64, 79}, {40, 24, 64, 79}, 2491 {40, 25, 64, 79}, {40, 26, 64, 79}, {40, 27, 64, 79}, {40, 28, 64, 79}, {40, 29, 64, 79}, 2492 {40, 30, 64, 79}, {40, 31, 64, 79}, {41, 20, 64, 79}, {41, 21, 64, 79}, {41, 22, 64, 79}, 2493 {41, 23, 64, 79}, {41, 24, 64, 79}, {41, 25, 64, 79}, {41, 26, 64, 79}, {41, 27, 64, 79}, 2494 {41, 28, 64, 79}, {41, 29, 64, 79}, {41, 30, 64, 79}, {41, 31, 64, 79}, {42, 20, 64, 79}, 2495 {42, 21, 64, 79}, {42, 22, 64, 79}, {42, 23, 64, 79}, {42, 24, 64, 79}, {42, 25, 64, 79}, 2496 {42, 26, 64, 79}, {42, 27, 64, 79}, {42, 28, 64, 79}, {42, 29, 64, 79}, {42, 30, 64, 79}, 2497 {42, 31, 64, 79}, {43, 20, 64, 79}, {43, 21, 64, 79}, {43, 22, 64, 79}, {43, 23, 64, 79}, 2498 {43, 24, 64, 79}, {43, 25, 64, 79}, {43, 26, 64, 79}, {43, 27, 64, 79}, {43, 28, 64, 79}, 2499 {43, 29, 64, 79}, {43, 30, 64, 79}, {43, 31, 64, 79}, {44, 20, 64, 79}, {44, 21, 64, 79}, 2500 {44, 22, 64, 79}, {44, 23, 64, 79}, {44, 24, 64, 79}, {44, 25, 64, 79}, {44, 26, 64, 79}, 2501 {44, 27, 64, 79}, {44, 28, 64, 79}, {44, 29, 64, 79}, {44, 30, 64, 79}, {44, 31, 64, 79}, 2502 {45, 20, 64, 79}, {45, 21, 64, 79}, {45, 22, 64, 79}, {45, 23, 64, 79}, {45, 24, 64, 79}, 2503 {45, 25, 64, 79}, {45, 26, 64, 79}, {45, 27, 64, 79}, {45, 28, 64, 79}, {45, 29, 64, 79}, 2504 {45, 30, 64, 79}, {45, 31, 64, 79}, {46, 20, 64, 79}, {46, 21, 64, 79}, {46, 22, 64, 79}, 2505 {46, 23, 64, 79}, {46, 24, 64, 79}, {46, 25, 64, 79}, {46, 26, 64, 79}, {46, 27, 64, 79}, 2506 {46, 28, 64, 79}, {46, 29, 64, 79}, {46, 30, 64, 79}, {46, 31, 64, 79}, {47, 20, 64, 79}, 2507 {47, 21, 64, 79}, {47, 22, 64, 79}, {47, 23, 64, 79}, {47, 24, 64, 79}, {47, 25, 64, 79}, 2508 {47, 26, 64, 79}, {47, 27, 64, 79}, {47, 28, 64, 79}, {47, 29, 64, 79}, {47, 30, 64, 79}, 2509 {47, 31, 64, 79}, {48, 20, 64, 79}, {48, 21, 64, 79}, {48, 22, 64, 79}, {48, 23, 64, 79}, 2510 {48, 24, 64, 79}, {48, 25, 64, 79}, {48, 26, 64, 79}, {48, 27, 64, 79}, {48, 28, 64, 79}, 2511 {48, 29, 64, 79}, {48, 30, 64, 79}, {48, 31, 64, 79}, {49, 20, 64, 79}, {49, 21, 64, 79}, 2512 {49, 22, 64, 79}, {49, 23, 64, 79}, {49, 24, 64, 79}, {49, 25, 64, 79}, {49, 26, 64, 79}, 2513 {49, 27, 64, 79}, {49, 28, 64, 79}, {49, 29, 64, 79}, {49, 30, 64, 79}, {49, 31, 64, 79}, 2514 {50, 20, 64, 79}, {50, 21, 64, 79}, {50, 22, 64, 79}, {50, 23, 64, 79}, {50, 24, 64, 79}, 2515 {50, 25, 64, 79}, {50, 26, 64, 79}, {50, 27, 64, 79}, {50, 28, 64, 79}, {50, 29, 64, 79}, 2516 {50, 30, 64, 79}, {50, 31, 64, 79}, {51, 20, 64, 79}, {51, 21, 64, 79}, {51, 22, 64, 79}, 2517 {51, 23, 64, 79}, {51, 24, 64, 79}, {51, 25, 64, 79}, {51, 26, 64, 79}, {51, 27, 64, 79}, 2518 {51, 28, 64, 79}, {51, 29, 64, 79}, {51, 30, 64, 79}, {51, 31, 64, 79}, {52, 20, 64, 79}, 2519 {52, 21, 64, 79}, {52, 22, 64, 79}, {52, 23, 64, 79}, {52, 24, 64, 79}, {52, 25, 64, 79}, 2520 {52, 26, 64, 79}, {52, 27, 64, 79}, {52, 28, 64, 79}, {52, 29, 64, 79}, {52, 30, 64, 79}, 2521 {52, 31, 64, 79}, {53, 20, 64, 79}, {53, 21, 64, 79}, {53, 22, 64, 79}, {53, 23, 64, 79}, 2522 {53, 24, 64, 79}, {53, 25, 64, 79}, {53, 26, 64, 79}, {53, 27, 64, 79}, {53, 28, 64, 79}, 2523 {53, 29, 64, 79}, {53, 30, 64, 79}, {53, 31, 64, 79}, {54, 20, 64, 79}, {54, 21, 64, 79}, 2524 {54, 22, 64, 79}, {54, 23, 64, 79}, {54, 24, 64, 79}, {54, 25, 64, 79}, {54, 26, 64, 79}, 2525 {54, 27, 64, 79}, {54, 28, 64, 79}, {54, 29, 64, 79}, {54, 30, 64, 79}, {54, 31, 64, 79}, 2526 {55, 20, 64, 79}, {55, 21, 64, 79}, {55, 22, 64, 79}, {55, 23, 64, 79}, {55, 24, 64, 79}, 2527 {55, 25, 64, 79}, {55, 26, 64, 79}, {55, 27, 64, 79}, {55, 28, 64, 79}, {55, 29, 64, 79}, 2528 {55, 30, 64, 79}, {55, 31, 64, 79}, {56, 20, 64, 79}, {56, 21, 64, 79}, {56, 22, 64, 79}, 2529 {56, 23, 64, 79}, {56, 24, 64, 79}, {56, 25, 64, 79}, {56, 26, 64, 79}, {56, 27, 64, 79}, 2530 {56, 28, 64, 79}, {56, 29, 64, 79}, {56, 30, 64, 79}, {56, 31, 64, 79}, {57, 20, 64, 79}, 2531 {57, 21, 64, 79}, {57, 22, 64, 79}, {57, 23, 64, 79}, {57, 24, 64, 79}, {57, 25, 64, 79}, 2532 {57, 26, 64, 79}, {57, 27, 64, 79}, {57, 28, 64, 79}, {57, 29, 64, 79}, {57, 30, 64, 79}, 2533 {57, 31, 64, 79}, {58, 20, 64, 79}, {58, 21, 64, 79}, {58, 22, 64, 79}, {58, 23, 64, 79}, 2534 {58, 24, 64, 79}, {58, 25, 64, 79}, {58, 26, 64, 79}, {58, 27, 64, 79}, {58, 28, 64, 79}, 2535 {58, 29, 64, 79}, {58, 30, 64, 79}, {58, 31, 64, 79}, {59, 20, 64, 79}, {59, 21, 64, 79}, 2536 {59, 22, 64, 79}, {59, 23, 64, 79}, {59, 24, 64, 79}, {59, 25, 64, 79}, {59, 26, 64, 79}, 2537 {59, 27, 64, 79}, {59, 28, 64, 79}, {59, 29, 64, 79}, {59, 30, 64, 79}, {59, 31, 64, 79}, 2538 }, 2539 } 2540 body3 = testBody{ 2541 label: 3, 2542 offset: dvid.Point3d{40, 40, 10}, 2543 size: dvid.Point3d{20, 20, 30}, 2544 blockSpans: []dvid.Span{ 2545 {0, 1, 1, 1}, 2546 {1, 1, 1, 1}, 2547 }, 2548 voxelSpans: []dvid.Span{ 2549 {10, 40, 40, 59}, {10, 41, 40, 59}, {10, 42, 40, 59}, {10, 43, 40, 59}, {10, 44, 40, 59}, 2550 {10, 45, 40, 59}, {10, 46, 40, 59}, {10, 47, 40, 59}, {10, 48, 40, 59}, {10, 49, 40, 59}, 2551 {10, 50, 40, 59}, {10, 51, 40, 59}, {10, 52, 40, 59}, {10, 53, 40, 59}, {10, 54, 40, 59}, 2552 {10, 55, 40, 59}, {10, 56, 40, 59}, {10, 57, 40, 59}, {10, 58, 40, 59}, {10, 59, 40, 59}, 2553 {11, 40, 40, 59}, {11, 41, 40, 59}, {11, 42, 40, 59}, {11, 43, 40, 59}, {11, 44, 40, 59}, 2554 {11, 45, 40, 59}, {11, 46, 40, 59}, {11, 47, 40, 59}, {11, 48, 40, 59}, {11, 49, 40, 59}, 2555 {11, 50, 40, 59}, {11, 51, 40, 59}, {11, 52, 40, 59}, {11, 53, 40, 59}, {11, 54, 40, 59}, 2556 {11, 55, 40, 59}, {11, 56, 40, 59}, {11, 57, 40, 59}, {11, 58, 40, 59}, {11, 59, 40, 59}, 2557 {12, 40, 40, 59}, {12, 41, 40, 59}, {12, 42, 40, 59}, {12, 43, 40, 59}, {12, 44, 40, 59}, 2558 {12, 45, 40, 59}, {12, 46, 40, 59}, {12, 47, 40, 59}, {12, 48, 40, 59}, {12, 49, 40, 59}, 2559 {12, 50, 40, 59}, {12, 51, 40, 59}, {12, 52, 40, 59}, {12, 53, 40, 59}, {12, 54, 40, 59}, 2560 {12, 55, 40, 59}, {12, 56, 40, 59}, {12, 57, 40, 59}, {12, 58, 40, 59}, {12, 59, 40, 59}, 2561 {13, 40, 40, 59}, {13, 41, 40, 59}, {13, 42, 40, 59}, {13, 43, 40, 59}, {13, 44, 40, 59}, 2562 {13, 45, 40, 59}, {13, 46, 40, 59}, {13, 47, 40, 59}, {13, 48, 40, 59}, {13, 49, 40, 59}, 2563 {13, 50, 40, 59}, {13, 51, 40, 59}, {13, 52, 40, 59}, {13, 53, 40, 59}, {13, 54, 40, 59}, 2564 {13, 55, 40, 59}, {13, 56, 40, 59}, {13, 57, 40, 59}, {13, 58, 40, 59}, {13, 59, 40, 59}, 2565 {14, 40, 40, 59}, {14, 41, 40, 59}, {14, 42, 40, 59}, {14, 43, 40, 59}, {14, 44, 40, 59}, 2566 {14, 45, 40, 59}, {14, 46, 40, 59}, {14, 47, 40, 59}, {14, 48, 40, 59}, {14, 49, 40, 59}, 2567 {14, 50, 40, 59}, {14, 51, 40, 59}, {14, 52, 40, 59}, {14, 53, 40, 59}, {14, 54, 40, 59}, 2568 {14, 55, 40, 59}, {14, 56, 40, 59}, {14, 57, 40, 59}, {14, 58, 40, 59}, {14, 59, 40, 59}, 2569 {15, 40, 40, 59}, {15, 41, 40, 59}, {15, 42, 40, 59}, {15, 43, 40, 59}, {15, 44, 40, 59}, 2570 {15, 45, 40, 59}, {15, 46, 40, 59}, {15, 47, 40, 59}, {15, 48, 40, 59}, {15, 49, 40, 59}, 2571 {15, 50, 40, 59}, {15, 51, 40, 59}, {15, 52, 40, 59}, {15, 53, 40, 59}, {15, 54, 40, 59}, 2572 {15, 55, 40, 59}, {15, 56, 40, 59}, {15, 57, 40, 59}, {15, 58, 40, 59}, {15, 59, 40, 59}, 2573 {16, 40, 40, 59}, {16, 41, 40, 59}, {16, 42, 40, 59}, {16, 43, 40, 59}, {16, 44, 40, 59}, 2574 {16, 45, 40, 59}, {16, 46, 40, 59}, {16, 47, 40, 59}, {16, 48, 40, 59}, {16, 49, 40, 59}, 2575 {16, 50, 40, 59}, {16, 51, 40, 59}, {16, 52, 40, 59}, {16, 53, 40, 59}, {16, 54, 40, 59}, 2576 {16, 55, 40, 59}, {16, 56, 40, 59}, {16, 57, 40, 59}, {16, 58, 40, 59}, {16, 59, 40, 59}, 2577 {17, 40, 40, 59}, {17, 41, 40, 59}, {17, 42, 40, 59}, {17, 43, 40, 59}, {17, 44, 40, 59}, 2578 {17, 45, 40, 59}, {17, 46, 40, 59}, {17, 47, 40, 59}, {17, 48, 40, 59}, {17, 49, 40, 59}, 2579 {17, 50, 40, 59}, {17, 51, 40, 59}, {17, 52, 40, 59}, {17, 53, 40, 59}, {17, 54, 40, 59}, 2580 {17, 55, 40, 59}, {17, 56, 40, 59}, {17, 57, 40, 59}, {17, 58, 40, 59}, {17, 59, 40, 59}, 2581 {18, 40, 40, 59}, {18, 41, 40, 59}, {18, 42, 40, 59}, {18, 43, 40, 59}, {18, 44, 40, 59}, 2582 {18, 45, 40, 59}, {18, 46, 40, 59}, {18, 47, 40, 59}, {18, 48, 40, 59}, {18, 49, 40, 59}, 2583 {18, 50, 40, 59}, {18, 51, 40, 59}, {18, 52, 40, 59}, {18, 53, 40, 59}, {18, 54, 40, 59}, 2584 {18, 55, 40, 59}, {18, 56, 40, 59}, {18, 57, 40, 59}, {18, 58, 40, 59}, {18, 59, 40, 59}, 2585 {19, 40, 40, 59}, {19, 41, 40, 59}, {19, 42, 40, 59}, {19, 43, 40, 59}, {19, 44, 40, 59}, 2586 {19, 45, 40, 59}, {19, 46, 40, 59}, {19, 47, 40, 59}, {19, 48, 40, 59}, {19, 49, 40, 59}, 2587 {19, 50, 40, 59}, {19, 51, 40, 59}, {19, 52, 40, 59}, {19, 53, 40, 59}, {19, 54, 40, 59}, 2588 {19, 55, 40, 59}, {19, 56, 40, 59}, {19, 57, 40, 59}, {19, 58, 40, 59}, {19, 59, 40, 59}, 2589 {20, 40, 40, 59}, {20, 41, 40, 59}, {20, 42, 40, 59}, {20, 43, 40, 59}, {20, 44, 40, 59}, 2590 {20, 45, 40, 59}, {20, 46, 40, 59}, {20, 47, 40, 59}, {20, 48, 40, 59}, {20, 49, 40, 59}, 2591 {20, 50, 40, 59}, {20, 51, 40, 59}, {20, 52, 40, 59}, {20, 53, 40, 59}, {20, 54, 40, 59}, 2592 {20, 55, 40, 59}, {20, 56, 40, 59}, {20, 57, 40, 59}, {20, 58, 40, 59}, {20, 59, 40, 59}, 2593 {21, 40, 40, 59}, {21, 41, 40, 59}, {21, 42, 40, 59}, {21, 43, 40, 59}, {21, 44, 40, 59}, 2594 {21, 45, 40, 59}, {21, 46, 40, 59}, {21, 47, 40, 59}, {21, 48, 40, 59}, {21, 49, 40, 59}, 2595 {21, 50, 40, 59}, {21, 51, 40, 59}, {21, 52, 40, 59}, {21, 53, 40, 59}, {21, 54, 40, 59}, 2596 {21, 55, 40, 59}, {21, 56, 40, 59}, {21, 57, 40, 59}, {21, 58, 40, 59}, {21, 59, 40, 59}, 2597 {22, 40, 40, 59}, {22, 41, 40, 59}, {22, 42, 40, 59}, {22, 43, 40, 59}, {22, 44, 40, 59}, 2598 {22, 45, 40, 59}, {22, 46, 40, 59}, {22, 47, 40, 59}, {22, 48, 40, 59}, {22, 49, 40, 59}, 2599 {22, 50, 40, 59}, {22, 51, 40, 59}, {22, 52, 40, 59}, {22, 53, 40, 59}, {22, 54, 40, 59}, 2600 {22, 55, 40, 59}, {22, 56, 40, 59}, {22, 57, 40, 59}, {22, 58, 40, 59}, {22, 59, 40, 59}, 2601 {23, 40, 40, 59}, {23, 41, 40, 59}, {23, 42, 40, 59}, {23, 43, 40, 59}, {23, 44, 40, 59}, 2602 {23, 45, 40, 59}, {23, 46, 40, 59}, {23, 47, 40, 59}, {23, 48, 40, 59}, {23, 49, 40, 59}, 2603 {23, 50, 40, 59}, {23, 51, 40, 59}, {23, 52, 40, 59}, {23, 53, 40, 59}, {23, 54, 40, 59}, 2604 {23, 55, 40, 59}, {23, 56, 40, 59}, {23, 57, 40, 59}, {23, 58, 40, 59}, {23, 59, 40, 59}, 2605 {24, 40, 40, 59}, {24, 41, 40, 59}, {24, 42, 40, 59}, {24, 43, 40, 59}, {24, 44, 40, 59}, 2606 {24, 45, 40, 59}, {24, 46, 40, 59}, {24, 47, 40, 59}, {24, 48, 40, 59}, {24, 49, 40, 59}, 2607 {24, 50, 40, 59}, {24, 51, 40, 59}, {24, 52, 40, 59}, {24, 53, 40, 59}, {24, 54, 40, 59}, 2608 {24, 55, 40, 59}, {24, 56, 40, 59}, {24, 57, 40, 59}, {24, 58, 40, 59}, {24, 59, 40, 59}, 2609 {25, 40, 40, 59}, {25, 41, 40, 59}, {25, 42, 40, 59}, {25, 43, 40, 59}, {25, 44, 40, 59}, 2610 {25, 45, 40, 59}, {25, 46, 40, 59}, {25, 47, 40, 59}, {25, 48, 40, 59}, {25, 49, 40, 59}, 2611 {25, 50, 40, 59}, {25, 51, 40, 59}, {25, 52, 40, 59}, {25, 53, 40, 59}, {25, 54, 40, 59}, 2612 {25, 55, 40, 59}, {25, 56, 40, 59}, {25, 57, 40, 59}, {25, 58, 40, 59}, {25, 59, 40, 59}, 2613 {26, 40, 40, 59}, {26, 41, 40, 59}, {26, 42, 40, 59}, {26, 43, 40, 59}, {26, 44, 40, 59}, 2614 {26, 45, 40, 59}, {26, 46, 40, 59}, {26, 47, 40, 59}, {26, 48, 40, 59}, {26, 49, 40, 59}, 2615 {26, 50, 40, 59}, {26, 51, 40, 59}, {26, 52, 40, 59}, {26, 53, 40, 59}, {26, 54, 40, 59}, 2616 {26, 55, 40, 59}, {26, 56, 40, 59}, {26, 57, 40, 59}, {26, 58, 40, 59}, {26, 59, 40, 59}, 2617 {27, 40, 40, 59}, {27, 41, 40, 59}, {27, 42, 40, 59}, {27, 43, 40, 59}, {27, 44, 40, 59}, 2618 {27, 45, 40, 59}, {27, 46, 40, 59}, {27, 47, 40, 59}, {27, 48, 40, 59}, {27, 49, 40, 59}, 2619 {27, 50, 40, 59}, {27, 51, 40, 59}, {27, 52, 40, 59}, {27, 53, 40, 59}, {27, 54, 40, 59}, 2620 {27, 55, 40, 59}, {27, 56, 40, 59}, {27, 57, 40, 59}, {27, 58, 40, 59}, {27, 59, 40, 59}, 2621 {28, 40, 40, 59}, {28, 41, 40, 59}, {28, 42, 40, 59}, {28, 43, 40, 59}, {28, 44, 40, 59}, 2622 {28, 45, 40, 59}, {28, 46, 40, 59}, {28, 47, 40, 59}, {28, 48, 40, 59}, {28, 49, 40, 59}, 2623 {28, 50, 40, 59}, {28, 51, 40, 59}, {28, 52, 40, 59}, {28, 53, 40, 59}, {28, 54, 40, 59}, 2624 {28, 55, 40, 59}, {28, 56, 40, 59}, {28, 57, 40, 59}, {28, 58, 40, 59}, {28, 59, 40, 59}, 2625 {29, 40, 40, 59}, {29, 41, 40, 59}, {29, 42, 40, 59}, {29, 43, 40, 59}, {29, 44, 40, 59}, 2626 {29, 45, 40, 59}, {29, 46, 40, 59}, {29, 47, 40, 59}, {29, 48, 40, 59}, {29, 49, 40, 59}, 2627 {29, 50, 40, 59}, {29, 51, 40, 59}, {29, 52, 40, 59}, {29, 53, 40, 59}, {29, 54, 40, 59}, 2628 {29, 55, 40, 59}, {29, 56, 40, 59}, {29, 57, 40, 59}, {29, 58, 40, 59}, {29, 59, 40, 59}, 2629 {30, 40, 40, 59}, {30, 41, 40, 59}, {30, 42, 40, 59}, {30, 43, 40, 59}, {30, 44, 40, 59}, 2630 {30, 45, 40, 59}, {30, 46, 40, 59}, {30, 47, 40, 59}, {30, 48, 40, 59}, {30, 49, 40, 59}, 2631 {30, 50, 40, 59}, {30, 51, 40, 59}, {30, 52, 40, 59}, {30, 53, 40, 59}, {30, 54, 40, 59}, 2632 {30, 55, 40, 59}, {30, 56, 40, 59}, {30, 57, 40, 59}, {30, 58, 40, 59}, {30, 59, 40, 59}, 2633 {31, 40, 40, 59}, {31, 41, 40, 59}, {31, 42, 40, 59}, {31, 43, 40, 59}, {31, 44, 40, 59}, 2634 {31, 45, 40, 59}, {31, 46, 40, 59}, {31, 47, 40, 59}, {31, 48, 40, 59}, {31, 49, 40, 59}, 2635 {31, 50, 40, 59}, {31, 51, 40, 59}, {31, 52, 40, 59}, {31, 53, 40, 59}, {31, 54, 40, 59}, 2636 {31, 55, 40, 59}, {31, 56, 40, 59}, {31, 57, 40, 59}, {31, 58, 40, 59}, {31, 59, 40, 59}, 2637 {32, 40, 40, 59}, {32, 41, 40, 59}, {32, 42, 40, 59}, {32, 43, 40, 59}, {32, 44, 40, 59}, 2638 {32, 45, 40, 59}, {32, 46, 40, 59}, {32, 47, 40, 59}, {32, 48, 40, 59}, {32, 49, 40, 59}, 2639 {32, 50, 40, 59}, {32, 51, 40, 59}, {32, 52, 40, 59}, {32, 53, 40, 59}, {32, 54, 40, 59}, 2640 {32, 55, 40, 59}, {32, 56, 40, 59}, {32, 57, 40, 59}, {32, 58, 40, 59}, {32, 59, 40, 59}, 2641 {33, 40, 40, 59}, {33, 41, 40, 59}, {33, 42, 40, 59}, {33, 43, 40, 59}, {33, 44, 40, 59}, 2642 {33, 45, 40, 59}, {33, 46, 40, 59}, {33, 47, 40, 59}, {33, 48, 40, 59}, {33, 49, 40, 59}, 2643 {33, 50, 40, 59}, {33, 51, 40, 59}, {33, 52, 40, 59}, {33, 53, 40, 59}, {33, 54, 40, 59}, 2644 {33, 55, 40, 59}, {33, 56, 40, 59}, {33, 57, 40, 59}, {33, 58, 40, 59}, {33, 59, 40, 59}, 2645 {34, 40, 40, 59}, {34, 41, 40, 59}, {34, 42, 40, 59}, {34, 43, 40, 59}, {34, 44, 40, 59}, 2646 {34, 45, 40, 59}, {34, 46, 40, 59}, {34, 47, 40, 59}, {34, 48, 40, 59}, {34, 49, 40, 59}, 2647 {34, 50, 40, 59}, {34, 51, 40, 59}, {34, 52, 40, 59}, {34, 53, 40, 59}, {34, 54, 40, 59}, 2648 {34, 55, 40, 59}, {34, 56, 40, 59}, {34, 57, 40, 59}, {34, 58, 40, 59}, {34, 59, 40, 59}, 2649 {35, 40, 40, 59}, {35, 41, 40, 59}, {35, 42, 40, 59}, {35, 43, 40, 59}, {35, 44, 40, 59}, 2650 {35, 45, 40, 59}, {35, 46, 40, 59}, {35, 47, 40, 59}, {35, 48, 40, 59}, {35, 49, 40, 59}, 2651 {35, 50, 40, 59}, {35, 51, 40, 59}, {35, 52, 40, 59}, {35, 53, 40, 59}, {35, 54, 40, 59}, 2652 {35, 55, 40, 59}, {35, 56, 40, 59}, {35, 57, 40, 59}, {35, 58, 40, 59}, {35, 59, 40, 59}, 2653 {36, 40, 40, 59}, {36, 41, 40, 59}, {36, 42, 40, 59}, {36, 43, 40, 59}, {36, 44, 40, 59}, 2654 {36, 45, 40, 59}, {36, 46, 40, 59}, {36, 47, 40, 59}, {36, 48, 40, 59}, {36, 49, 40, 59}, 2655 {36, 50, 40, 59}, {36, 51, 40, 59}, {36, 52, 40, 59}, {36, 53, 40, 59}, {36, 54, 40, 59}, 2656 {36, 55, 40, 59}, {36, 56, 40, 59}, {36, 57, 40, 59}, {36, 58, 40, 59}, {36, 59, 40, 59}, 2657 {37, 40, 40, 59}, {37, 41, 40, 59}, {37, 42, 40, 59}, {37, 43, 40, 59}, {37, 44, 40, 59}, 2658 {37, 45, 40, 59}, {37, 46, 40, 59}, {37, 47, 40, 59}, {37, 48, 40, 59}, {37, 49, 40, 59}, 2659 {37, 50, 40, 59}, {37, 51, 40, 59}, {37, 52, 40, 59}, {37, 53, 40, 59}, {37, 54, 40, 59}, 2660 {37, 55, 40, 59}, {37, 56, 40, 59}, {37, 57, 40, 59}, {37, 58, 40, 59}, {37, 59, 40, 59}, 2661 {38, 40, 40, 59}, {38, 41, 40, 59}, {38, 42, 40, 59}, {38, 43, 40, 59}, {38, 44, 40, 59}, 2662 {38, 45, 40, 59}, {38, 46, 40, 59}, {38, 47, 40, 59}, {38, 48, 40, 59}, {38, 49, 40, 59}, 2663 {38, 50, 40, 59}, {38, 51, 40, 59}, {38, 52, 40, 59}, {38, 53, 40, 59}, {38, 54, 40, 59}, 2664 {38, 55, 40, 59}, {38, 56, 40, 59}, {38, 57, 40, 59}, {38, 58, 40, 59}, {38, 59, 40, 59}, 2665 {39, 40, 40, 59}, {39, 41, 40, 59}, {39, 42, 40, 59}, {39, 43, 40, 59}, {39, 44, 40, 59}, 2666 {39, 45, 40, 59}, {39, 46, 40, 59}, {39, 47, 40, 59}, {39, 48, 40, 59}, {39, 49, 40, 59}, 2667 {39, 50, 40, 59}, {39, 51, 40, 59}, {39, 52, 40, 59}, {39, 53, 40, 59}, {39, 54, 40, 59}, 2668 {39, 55, 40, 59}, {39, 56, 40, 59}, {39, 57, 40, 59}, {39, 58, 40, 59}, {39, 59, 40, 59}, 2669 }, 2670 } 2671 body4 = testBody{ 2672 label: 4, 2673 offset: dvid.Point3d{75, 40, 60}, 2674 size: dvid.Point3d{20, 20, 30}, 2675 blockSpans: []dvid.Span{ 2676 {1, 1, 2, 2}, 2677 {2, 1, 2, 2}, 2678 }, 2679 voxelSpans: []dvid.Span{ 2680 {60, 40, 75, 94}, {60, 41, 75, 94}, {60, 42, 75, 94}, {60, 43, 75, 94}, {60, 44, 75, 94}, 2681 {60, 45, 75, 94}, {60, 46, 75, 94}, {60, 47, 75, 94}, {60, 48, 75, 94}, {60, 49, 75, 94}, 2682 {60, 50, 75, 94}, {60, 51, 75, 94}, {60, 52, 75, 94}, {60, 53, 75, 94}, {60, 54, 75, 94}, 2683 {60, 55, 75, 94}, {60, 56, 75, 94}, {60, 57, 75, 94}, {60, 58, 75, 94}, {60, 59, 75, 94}, 2684 {61, 40, 75, 94}, {61, 41, 75, 94}, {61, 42, 75, 94}, {61, 43, 75, 94}, {61, 44, 75, 94}, 2685 {61, 45, 75, 94}, {61, 46, 75, 94}, {61, 47, 75, 94}, {61, 48, 75, 94}, {61, 49, 75, 94}, 2686 {61, 50, 75, 94}, {61, 51, 75, 94}, {61, 52, 75, 94}, {61, 53, 75, 94}, {61, 54, 75, 94}, 2687 {61, 55, 75, 94}, {61, 56, 75, 94}, {61, 57, 75, 94}, {61, 58, 75, 94}, {61, 59, 75, 94}, 2688 {62, 40, 75, 94}, {62, 41, 75, 94}, {62, 42, 75, 94}, {62, 43, 75, 94}, {62, 44, 75, 94}, 2689 {62, 45, 75, 94}, {62, 46, 75, 94}, {62, 47, 75, 94}, {62, 48, 75, 94}, {62, 49, 75, 94}, 2690 {62, 50, 75, 94}, {62, 51, 75, 94}, {62, 52, 75, 94}, {62, 53, 75, 94}, {62, 54, 75, 94}, 2691 {62, 55, 75, 94}, {62, 56, 75, 94}, {62, 57, 75, 94}, {62, 58, 75, 94}, {62, 59, 75, 94}, 2692 {63, 40, 75, 94}, {63, 41, 75, 94}, {63, 42, 75, 94}, {63, 43, 75, 94}, {63, 44, 75, 94}, 2693 {63, 45, 75, 94}, {63, 46, 75, 94}, {63, 47, 75, 94}, {63, 48, 75, 94}, {63, 49, 75, 94}, 2694 {63, 50, 75, 94}, {63, 51, 75, 94}, {63, 52, 75, 94}, {63, 53, 75, 94}, {63, 54, 75, 94}, 2695 {63, 55, 75, 94}, {63, 56, 75, 94}, {63, 57, 75, 94}, {63, 58, 75, 94}, {63, 59, 75, 94}, 2696 {64, 40, 75, 94}, {64, 41, 75, 94}, {64, 42, 75, 94}, {64, 43, 75, 94}, {64, 44, 75, 94}, 2697 {64, 45, 75, 94}, {64, 46, 75, 94}, {64, 47, 75, 94}, {64, 48, 75, 94}, {64, 49, 75, 94}, 2698 {64, 50, 75, 94}, {64, 51, 75, 94}, {64, 52, 75, 94}, {64, 53, 75, 94}, {64, 54, 75, 94}, 2699 {64, 55, 75, 94}, {64, 56, 75, 94}, {64, 57, 75, 94}, {64, 58, 75, 94}, {64, 59, 75, 94}, 2700 {65, 40, 75, 94}, {65, 41, 75, 94}, {65, 42, 75, 94}, {65, 43, 75, 94}, {65, 44, 75, 94}, 2701 {65, 45, 75, 94}, {65, 46, 75, 94}, {65, 47, 75, 94}, {65, 48, 75, 94}, {65, 49, 75, 94}, 2702 {65, 50, 75, 94}, {65, 51, 75, 94}, {65, 52, 75, 94}, {65, 53, 75, 94}, {65, 54, 75, 94}, 2703 {65, 55, 75, 94}, {65, 56, 75, 94}, {65, 57, 75, 94}, {65, 58, 75, 94}, {65, 59, 75, 94}, 2704 {66, 40, 75, 94}, {66, 41, 75, 94}, {66, 42, 75, 94}, {66, 43, 75, 94}, {66, 44, 75, 94}, 2705 {66, 45, 75, 94}, {66, 46, 75, 94}, {66, 47, 75, 94}, {66, 48, 75, 94}, {66, 49, 75, 94}, 2706 {66, 50, 75, 94}, {66, 51, 75, 94}, {66, 52, 75, 94}, {66, 53, 75, 94}, {66, 54, 75, 94}, 2707 {66, 55, 75, 94}, {66, 56, 75, 94}, {66, 57, 75, 94}, {66, 58, 75, 94}, {66, 59, 75, 94}, 2708 {67, 40, 75, 94}, {67, 41, 75, 94}, {67, 42, 75, 94}, {67, 43, 75, 94}, {67, 44, 75, 94}, 2709 {67, 45, 75, 94}, {67, 46, 75, 94}, {67, 47, 75, 94}, {67, 48, 75, 94}, {67, 49, 75, 94}, 2710 {67, 50, 75, 94}, {67, 51, 75, 94}, {67, 52, 75, 94}, {67, 53, 75, 94}, {67, 54, 75, 94}, 2711 {67, 55, 75, 94}, {67, 56, 75, 94}, {67, 57, 75, 94}, {67, 58, 75, 94}, {67, 59, 75, 94}, 2712 {68, 40, 75, 94}, {68, 41, 75, 94}, {68, 42, 75, 94}, {68, 43, 75, 94}, {68, 44, 75, 94}, 2713 {68, 45, 75, 94}, {68, 46, 75, 94}, {68, 47, 75, 94}, {68, 48, 75, 94}, {68, 49, 75, 94}, 2714 {68, 50, 75, 94}, {68, 51, 75, 94}, {68, 52, 75, 94}, {68, 53, 75, 94}, {68, 54, 75, 94}, 2715 {68, 55, 75, 94}, {68, 56, 75, 94}, {68, 57, 75, 94}, {68, 58, 75, 94}, {68, 59, 75, 94}, 2716 {69, 40, 75, 94}, {69, 41, 75, 94}, {69, 42, 75, 94}, {69, 43, 75, 94}, {69, 44, 75, 94}, 2717 {69, 45, 75, 94}, {69, 46, 75, 94}, {69, 47, 75, 94}, {69, 48, 75, 94}, {69, 49, 75, 94}, 2718 {69, 50, 75, 94}, {69, 51, 75, 94}, {69, 52, 75, 94}, {69, 53, 75, 94}, {69, 54, 75, 94}, 2719 {69, 55, 75, 94}, {69, 56, 75, 94}, {69, 57, 75, 94}, {69, 58, 75, 94}, {69, 59, 75, 94}, 2720 {70, 40, 75, 94}, {70, 41, 75, 94}, {70, 42, 75, 94}, {70, 43, 75, 94}, {70, 44, 75, 94}, 2721 {70, 45, 75, 94}, {70, 46, 75, 94}, {70, 47, 75, 94}, {70, 48, 75, 94}, {70, 49, 75, 94}, 2722 {70, 50, 75, 94}, {70, 51, 75, 94}, {70, 52, 75, 94}, {70, 53, 75, 94}, {70, 54, 75, 94}, 2723 {70, 55, 75, 94}, {70, 56, 75, 94}, {70, 57, 75, 94}, {70, 58, 75, 94}, {70, 59, 75, 94}, 2724 {71, 40, 75, 94}, {71, 41, 75, 94}, {71, 42, 75, 94}, {71, 43, 75, 94}, {71, 44, 75, 94}, 2725 {71, 45, 75, 94}, {71, 46, 75, 94}, {71, 47, 75, 94}, {71, 48, 75, 94}, {71, 49, 75, 94}, 2726 {71, 50, 75, 94}, {71, 51, 75, 94}, {71, 52, 75, 94}, {71, 53, 75, 94}, {71, 54, 75, 94}, 2727 {71, 55, 75, 94}, {71, 56, 75, 94}, {71, 57, 75, 94}, {71, 58, 75, 94}, {71, 59, 75, 94}, 2728 {72, 40, 75, 94}, {72, 41, 75, 94}, {72, 42, 75, 94}, {72, 43, 75, 94}, {72, 44, 75, 94}, 2729 {72, 45, 75, 94}, {72, 46, 75, 94}, {72, 47, 75, 94}, {72, 48, 75, 94}, {72, 49, 75, 94}, 2730 {72, 50, 75, 94}, {72, 51, 75, 94}, {72, 52, 75, 94}, {72, 53, 75, 94}, {72, 54, 75, 94}, 2731 {72, 55, 75, 94}, {72, 56, 75, 94}, {72, 57, 75, 94}, {72, 58, 75, 94}, {72, 59, 75, 94}, 2732 {73, 40, 75, 94}, {73, 41, 75, 94}, {73, 42, 75, 94}, {73, 43, 75, 94}, {73, 44, 75, 94}, 2733 {73, 45, 75, 94}, {73, 46, 75, 94}, {73, 47, 75, 94}, {73, 48, 75, 94}, {73, 49, 75, 94}, 2734 {73, 50, 75, 94}, {73, 51, 75, 94}, {73, 52, 75, 94}, {73, 53, 75, 94}, {73, 54, 75, 94}, 2735 {73, 55, 75, 94}, {73, 56, 75, 94}, {73, 57, 75, 94}, {73, 58, 75, 94}, {73, 59, 75, 94}, 2736 {74, 40, 75, 94}, {74, 41, 75, 94}, {74, 42, 75, 94}, {74, 43, 75, 94}, {74, 44, 75, 94}, 2737 {74, 45, 75, 94}, {74, 46, 75, 94}, {74, 47, 75, 94}, {74, 48, 75, 94}, {74, 49, 75, 94}, 2738 {74, 50, 75, 94}, {74, 51, 75, 94}, {74, 52, 75, 94}, {74, 53, 75, 94}, {74, 54, 75, 94}, 2739 {74, 55, 75, 94}, {74, 56, 75, 94}, {74, 57, 75, 94}, {74, 58, 75, 94}, {74, 59, 75, 94}, 2740 {75, 40, 75, 94}, {75, 41, 75, 94}, {75, 42, 75, 94}, {75, 43, 75, 94}, {75, 44, 75, 94}, 2741 {75, 45, 75, 94}, {75, 46, 75, 94}, {75, 47, 75, 94}, {75, 48, 75, 94}, {75, 49, 75, 94}, 2742 {75, 50, 75, 94}, {75, 51, 75, 94}, {75, 52, 75, 94}, {75, 53, 75, 94}, {75, 54, 75, 94}, 2743 {75, 55, 75, 94}, {75, 56, 75, 94}, {75, 57, 75, 94}, {75, 58, 75, 94}, {75, 59, 75, 94}, 2744 {76, 40, 75, 94}, {76, 41, 75, 94}, {76, 42, 75, 94}, {76, 43, 75, 94}, {76, 44, 75, 94}, 2745 {76, 45, 75, 94}, {76, 46, 75, 94}, {76, 47, 75, 94}, {76, 48, 75, 94}, {76, 49, 75, 94}, 2746 {76, 50, 75, 94}, {76, 51, 75, 94}, {76, 52, 75, 94}, {76, 53, 75, 94}, {76, 54, 75, 94}, 2747 {76, 55, 75, 94}, {76, 56, 75, 94}, {76, 57, 75, 94}, {76, 58, 75, 94}, {76, 59, 75, 94}, 2748 {77, 40, 75, 94}, {77, 41, 75, 94}, {77, 42, 75, 94}, {77, 43, 75, 94}, {77, 44, 75, 94}, 2749 {77, 45, 75, 94}, {77, 46, 75, 94}, {77, 47, 75, 94}, {77, 48, 75, 94}, {77, 49, 75, 94}, 2750 {77, 50, 75, 94}, {77, 51, 75, 94}, {77, 52, 75, 94}, {77, 53, 75, 94}, {77, 54, 75, 94}, 2751 {77, 55, 75, 94}, {77, 56, 75, 94}, {77, 57, 75, 94}, {77, 58, 75, 94}, {77, 59, 75, 94}, 2752 {78, 40, 75, 94}, {78, 41, 75, 94}, {78, 42, 75, 94}, {78, 43, 75, 94}, {78, 44, 75, 94}, 2753 {78, 45, 75, 94}, {78, 46, 75, 94}, {78, 47, 75, 94}, {78, 48, 75, 94}, {78, 49, 75, 94}, 2754 {78, 50, 75, 94}, {78, 51, 75, 94}, {78, 52, 75, 94}, {78, 53, 75, 94}, {78, 54, 75, 94}, 2755 {78, 55, 75, 94}, {78, 56, 75, 94}, {78, 57, 75, 94}, {78, 58, 75, 94}, {78, 59, 75, 94}, 2756 {79, 40, 75, 94}, {79, 41, 75, 94}, {79, 42, 75, 94}, {79, 43, 75, 94}, {79, 44, 75, 94}, 2757 {79, 45, 75, 94}, {79, 46, 75, 94}, {79, 47, 75, 94}, {79, 48, 75, 94}, {79, 49, 75, 94}, 2758 {79, 50, 75, 94}, {79, 51, 75, 94}, {79, 52, 75, 94}, {79, 53, 75, 94}, {79, 54, 75, 94}, 2759 {79, 55, 75, 94}, {79, 56, 75, 94}, {79, 57, 75, 94}, {79, 58, 75, 94}, {79, 59, 75, 94}, 2760 {80, 40, 75, 94}, {80, 41, 75, 94}, {80, 42, 75, 94}, {80, 43, 75, 94}, {80, 44, 75, 94}, 2761 {80, 45, 75, 94}, {80, 46, 75, 94}, {80, 47, 75, 94}, {80, 48, 75, 94}, {80, 49, 75, 94}, 2762 {80, 50, 75, 94}, {80, 51, 75, 94}, {80, 52, 75, 94}, {80, 53, 75, 94}, {80, 54, 75, 94}, 2763 {80, 55, 75, 94}, {80, 56, 75, 94}, {80, 57, 75, 94}, {80, 58, 75, 94}, {80, 59, 75, 94}, 2764 {81, 40, 75, 94}, {81, 41, 75, 94}, {81, 42, 75, 94}, {81, 43, 75, 94}, {81, 44, 75, 94}, 2765 {81, 45, 75, 94}, {81, 46, 75, 94}, {81, 47, 75, 94}, {81, 48, 75, 94}, {81, 49, 75, 94}, 2766 {81, 50, 75, 94}, {81, 51, 75, 94}, {81, 52, 75, 94}, {81, 53, 75, 94}, {81, 54, 75, 94}, 2767 {81, 55, 75, 94}, {81, 56, 75, 94}, {81, 57, 75, 94}, {81, 58, 75, 94}, {81, 59, 75, 94}, 2768 {82, 40, 75, 94}, {82, 41, 75, 94}, {82, 42, 75, 94}, {82, 43, 75, 94}, {82, 44, 75, 94}, 2769 {82, 45, 75, 94}, {82, 46, 75, 94}, {82, 47, 75, 94}, {82, 48, 75, 94}, {82, 49, 75, 94}, 2770 {82, 50, 75, 94}, {82, 51, 75, 94}, {82, 52, 75, 94}, {82, 53, 75, 94}, {82, 54, 75, 94}, 2771 {82, 55, 75, 94}, {82, 56, 75, 94}, {82, 57, 75, 94}, {82, 58, 75, 94}, {82, 59, 75, 94}, 2772 {83, 40, 75, 94}, {83, 41, 75, 94}, {83, 42, 75, 94}, {83, 43, 75, 94}, {83, 44, 75, 94}, 2773 {83, 45, 75, 94}, {83, 46, 75, 94}, {83, 47, 75, 94}, {83, 48, 75, 94}, {83, 49, 75, 94}, 2774 {83, 50, 75, 94}, {83, 51, 75, 94}, {83, 52, 75, 94}, {83, 53, 75, 94}, {83, 54, 75, 94}, 2775 {83, 55, 75, 94}, {83, 56, 75, 94}, {83, 57, 75, 94}, {83, 58, 75, 94}, {83, 59, 75, 94}, 2776 {84, 40, 75, 94}, {84, 41, 75, 94}, {84, 42, 75, 94}, {84, 43, 75, 94}, {84, 44, 75, 94}, 2777 {84, 45, 75, 94}, {84, 46, 75, 94}, {84, 47, 75, 94}, {84, 48, 75, 94}, {84, 49, 75, 94}, 2778 {84, 50, 75, 94}, {84, 51, 75, 94}, {84, 52, 75, 94}, {84, 53, 75, 94}, {84, 54, 75, 94}, 2779 {84, 55, 75, 94}, {84, 56, 75, 94}, {84, 57, 75, 94}, {84, 58, 75, 94}, {84, 59, 75, 94}, 2780 {85, 40, 75, 94}, {85, 41, 75, 94}, {85, 42, 75, 94}, {85, 43, 75, 94}, {85, 44, 75, 94}, 2781 {85, 45, 75, 94}, {85, 46, 75, 94}, {85, 47, 75, 94}, {85, 48, 75, 94}, {85, 49, 75, 94}, 2782 {85, 50, 75, 94}, {85, 51, 75, 94}, {85, 52, 75, 94}, {85, 53, 75, 94}, {85, 54, 75, 94}, 2783 {85, 55, 75, 94}, {85, 56, 75, 94}, {85, 57, 75, 94}, {85, 58, 75, 94}, {85, 59, 75, 94}, 2784 {86, 40, 75, 94}, {86, 41, 75, 94}, {86, 42, 75, 94}, {86, 43, 75, 94}, {86, 44, 75, 94}, 2785 {86, 45, 75, 94}, {86, 46, 75, 94}, {86, 47, 75, 94}, {86, 48, 75, 94}, {86, 49, 75, 94}, 2786 {86, 50, 75, 94}, {86, 51, 75, 94}, {86, 52, 75, 94}, {86, 53, 75, 94}, {86, 54, 75, 94}, 2787 {86, 55, 75, 94}, {86, 56, 75, 94}, {86, 57, 75, 94}, {86, 58, 75, 94}, {86, 59, 75, 94}, 2788 {87, 40, 75, 94}, {87, 41, 75, 94}, {87, 42, 75, 94}, {87, 43, 75, 94}, {87, 44, 75, 94}, 2789 {87, 45, 75, 94}, {87, 46, 75, 94}, {87, 47, 75, 94}, {87, 48, 75, 94}, {87, 49, 75, 94}, 2790 {87, 50, 75, 94}, {87, 51, 75, 94}, {87, 52, 75, 94}, {87, 53, 75, 94}, {87, 54, 75, 94}, 2791 {87, 55, 75, 94}, {87, 56, 75, 94}, {87, 57, 75, 94}, {87, 58, 75, 94}, {87, 59, 75, 94}, 2792 {88, 40, 75, 94}, {88, 41, 75, 94}, {88, 42, 75, 94}, {88, 43, 75, 94}, {88, 44, 75, 94}, 2793 {88, 45, 75, 94}, {88, 46, 75, 94}, {88, 47, 75, 94}, {88, 48, 75, 94}, {88, 49, 75, 94}, 2794 {88, 50, 75, 94}, {88, 51, 75, 94}, {88, 52, 75, 94}, {88, 53, 75, 94}, {88, 54, 75, 94}, 2795 {88, 55, 75, 94}, {88, 56, 75, 94}, {88, 57, 75, 94}, {88, 58, 75, 94}, {88, 59, 75, 94}, 2796 {89, 40, 75, 94}, {89, 41, 75, 94}, {89, 42, 75, 94}, {89, 43, 75, 94}, {89, 44, 75, 94}, 2797 {89, 45, 75, 94}, {89, 46, 75, 94}, {89, 47, 75, 94}, {89, 48, 75, 94}, {89, 49, 75, 94}, 2798 {89, 50, 75, 94}, {89, 51, 75, 94}, {89, 52, 75, 94}, {89, 53, 75, 94}, {89, 54, 75, 94}, 2799 {89, 55, 75, 94}, {89, 56, 75, 94}, {89, 57, 75, 94}, {89, 58, 75, 94}, {89, 59, 75, 94}, 2800 }, 2801 } 2802 bodyleft = testBody{ 2803 label: 4, 2804 offset: dvid.Point3d{75, 40, 60}, 2805 size: dvid.Point3d{20, 20, 21}, 2806 blockSpans: []dvid.Span{ 2807 {1, 1, 2, 2}, 2808 {2, 1, 2, 2}, 2809 }, 2810 voxelSpans: []dvid.Span{ 2811 {60, 40, 75, 94}, {60, 41, 75, 94}, {60, 42, 75, 94}, {60, 43, 75, 94}, {60, 44, 75, 94}, 2812 {60, 45, 75, 94}, {60, 46, 75, 94}, {60, 47, 75, 94}, {60, 48, 75, 94}, {60, 49, 75, 94}, 2813 {60, 50, 75, 94}, {60, 51, 75, 94}, {60, 52, 75, 94}, {60, 53, 75, 94}, {60, 54, 75, 94}, 2814 {60, 55, 75, 94}, {60, 56, 75, 94}, {60, 57, 75, 94}, {60, 58, 75, 94}, {60, 59, 75, 94}, 2815 {61, 40, 75, 94}, {61, 41, 75, 94}, {61, 42, 75, 94}, {61, 43, 75, 94}, {61, 44, 75, 94}, 2816 {61, 45, 75, 94}, {61, 46, 75, 94}, {61, 47, 75, 94}, {61, 48, 75, 94}, {61, 49, 75, 94}, 2817 {61, 50, 75, 94}, {61, 51, 75, 94}, {61, 52, 75, 94}, {61, 53, 75, 94}, {61, 54, 75, 94}, 2818 {61, 55, 75, 94}, {61, 56, 75, 94}, {61, 57, 75, 94}, {61, 58, 75, 94}, {61, 59, 75, 94}, 2819 {62, 40, 75, 94}, {62, 41, 75, 94}, {62, 42, 75, 94}, {62, 43, 75, 94}, {62, 44, 75, 94}, 2820 {62, 45, 75, 94}, {62, 46, 75, 94}, {62, 47, 75, 94}, {62, 48, 75, 94}, {62, 49, 75, 94}, 2821 {62, 50, 75, 94}, {62, 51, 75, 94}, {62, 52, 75, 94}, {62, 53, 75, 94}, {62, 54, 75, 94}, 2822 {62, 55, 75, 94}, {62, 56, 75, 94}, {62, 57, 75, 94}, {62, 58, 75, 94}, {62, 59, 75, 94}, 2823 {63, 40, 75, 94}, {63, 41, 75, 94}, {63, 42, 75, 94}, {63, 43, 75, 94}, {63, 44, 75, 94}, 2824 {63, 45, 75, 94}, {63, 46, 75, 94}, {63, 47, 75, 94}, {63, 48, 75, 94}, {63, 49, 75, 94}, 2825 {63, 50, 75, 94}, {63, 51, 75, 94}, {63, 52, 75, 94}, {63, 53, 75, 94}, {63, 54, 75, 94}, 2826 {63, 55, 75, 94}, {63, 56, 75, 94}, {63, 57, 75, 94}, {63, 58, 75, 94}, {63, 59, 75, 94}, 2827 {64, 40, 75, 94}, {64, 41, 75, 94}, {64, 42, 75, 94}, {64, 43, 75, 94}, {64, 44, 75, 94}, 2828 {64, 45, 75, 94}, {64, 46, 75, 94}, {64, 47, 75, 94}, {64, 48, 75, 94}, {64, 49, 75, 94}, 2829 {64, 50, 75, 94}, {64, 51, 75, 94}, {64, 52, 75, 94}, {64, 53, 75, 94}, {64, 54, 75, 94}, 2830 {64, 55, 75, 94}, {64, 56, 75, 94}, {64, 57, 75, 94}, {64, 58, 75, 94}, {64, 59, 75, 94}, 2831 {65, 40, 75, 94}, {65, 41, 75, 94}, {65, 42, 75, 94}, {65, 43, 75, 94}, {65, 44, 75, 94}, 2832 {65, 45, 75, 94}, {65, 46, 75, 94}, {65, 47, 75, 94}, {65, 48, 75, 94}, {65, 49, 75, 94}, 2833 {65, 50, 75, 94}, {65, 51, 75, 94}, {65, 52, 75, 94}, {65, 53, 75, 94}, {65, 54, 75, 94}, 2834 {65, 55, 75, 94}, {65, 56, 75, 94}, {65, 57, 75, 94}, {65, 58, 75, 94}, {65, 59, 75, 94}, 2835 {66, 40, 75, 94}, {66, 41, 75, 94}, {66, 42, 75, 94}, {66, 43, 75, 94}, {66, 44, 75, 94}, 2836 {66, 45, 75, 94}, {66, 46, 75, 94}, {66, 47, 75, 94}, {66, 48, 75, 94}, {66, 49, 75, 94}, 2837 {66, 50, 75, 94}, {66, 51, 75, 94}, {66, 52, 75, 94}, {66, 53, 75, 94}, {66, 54, 75, 94}, 2838 {66, 55, 75, 94}, {66, 56, 75, 94}, {66, 57, 75, 94}, {66, 58, 75, 94}, {66, 59, 75, 94}, 2839 {67, 40, 75, 94}, {67, 41, 75, 94}, {67, 42, 75, 94}, {67, 43, 75, 94}, {67, 44, 75, 94}, 2840 {67, 45, 75, 94}, {67, 46, 75, 94}, {67, 47, 75, 94}, {67, 48, 75, 94}, {67, 49, 75, 94}, 2841 {67, 50, 75, 94}, {67, 51, 75, 94}, {67, 52, 75, 94}, {67, 53, 75, 94}, {67, 54, 75, 94}, 2842 {67, 55, 75, 94}, {67, 56, 75, 94}, {67, 57, 75, 94}, {67, 58, 75, 94}, {67, 59, 75, 94}, 2843 {68, 40, 75, 94}, {68, 41, 75, 94}, {68, 42, 75, 94}, {68, 43, 75, 94}, {68, 44, 75, 94}, 2844 {68, 45, 75, 94}, {68, 46, 75, 94}, {68, 47, 75, 94}, {68, 48, 75, 94}, {68, 49, 75, 94}, 2845 {68, 50, 75, 94}, {68, 51, 75, 94}, {68, 52, 75, 94}, {68, 53, 75, 94}, {68, 54, 75, 94}, 2846 {68, 55, 75, 94}, {68, 56, 75, 94}, {68, 57, 75, 94}, {68, 58, 75, 94}, {68, 59, 75, 94}, 2847 {69, 40, 75, 94}, {69, 41, 75, 94}, {69, 42, 75, 94}, {69, 43, 75, 94}, {69, 44, 75, 94}, 2848 {69, 45, 75, 94}, {69, 46, 75, 94}, {69, 47, 75, 94}, {69, 48, 75, 94}, {69, 49, 75, 94}, 2849 {69, 50, 75, 94}, {69, 51, 75, 94}, {69, 52, 75, 94}, {69, 53, 75, 94}, {69, 54, 75, 94}, 2850 {69, 55, 75, 94}, {69, 56, 75, 94}, {69, 57, 75, 94}, {69, 58, 75, 94}, {69, 59, 75, 94}, 2851 {70, 40, 75, 94}, {70, 41, 75, 94}, {70, 42, 75, 94}, {70, 43, 75, 94}, {70, 44, 75, 94}, 2852 {70, 45, 75, 94}, {70, 46, 75, 94}, {70, 47, 75, 94}, {70, 48, 75, 94}, {70, 49, 75, 94}, 2853 {70, 50, 75, 94}, {70, 51, 75, 94}, {70, 52, 75, 94}, {70, 53, 75, 94}, {70, 54, 75, 94}, 2854 {70, 55, 75, 94}, {70, 56, 75, 94}, {70, 57, 75, 94}, {70, 58, 75, 94}, {70, 59, 75, 94}, 2855 {71, 40, 75, 94}, {71, 41, 75, 94}, {71, 42, 75, 94}, {71, 43, 75, 94}, {71, 44, 75, 94}, 2856 {71, 45, 75, 94}, {71, 46, 75, 94}, {71, 47, 75, 94}, {71, 48, 75, 94}, {71, 49, 75, 94}, 2857 {71, 50, 75, 94}, {71, 51, 75, 94}, {71, 52, 75, 94}, {71, 53, 75, 94}, {71, 54, 75, 94}, 2858 {71, 55, 75, 94}, {71, 56, 75, 94}, {71, 57, 75, 94}, {71, 58, 75, 94}, {71, 59, 75, 94}, 2859 {72, 40, 75, 94}, {72, 41, 75, 94}, {72, 42, 75, 94}, {72, 43, 75, 94}, {72, 44, 75, 94}, 2860 {72, 45, 75, 94}, {72, 46, 75, 94}, {72, 47, 75, 94}, {72, 48, 75, 94}, {72, 49, 75, 94}, 2861 {72, 50, 75, 94}, {72, 51, 75, 94}, {72, 52, 75, 94}, {72, 53, 75, 94}, {72, 54, 75, 94}, 2862 {72, 55, 75, 94}, {72, 56, 75, 94}, {72, 57, 75, 94}, {72, 58, 75, 94}, {72, 59, 75, 94}, 2863 {73, 40, 75, 94}, {73, 41, 75, 94}, {73, 42, 75, 94}, {73, 43, 75, 94}, {73, 44, 75, 94}, 2864 {73, 45, 75, 94}, {73, 46, 75, 94}, {73, 47, 75, 94}, {73, 48, 75, 94}, {73, 49, 75, 94}, 2865 {73, 50, 75, 94}, {73, 51, 75, 94}, {73, 52, 75, 94}, {73, 53, 75, 94}, {73, 54, 75, 94}, 2866 {73, 55, 75, 94}, {73, 56, 75, 94}, {73, 57, 75, 94}, {73, 58, 75, 94}, {73, 59, 75, 94}, 2867 {74, 40, 75, 94}, {74, 41, 75, 94}, {74, 42, 75, 94}, {74, 43, 75, 94}, {74, 44, 75, 94}, 2868 {74, 45, 75, 94}, {74, 46, 75, 94}, {74, 47, 75, 94}, {74, 48, 75, 94}, {74, 49, 75, 94}, 2869 {74, 50, 75, 94}, {74, 51, 75, 94}, {74, 52, 75, 94}, {74, 53, 75, 94}, {74, 54, 75, 94}, 2870 {74, 55, 75, 94}, {74, 56, 75, 94}, {74, 57, 75, 94}, {74, 58, 75, 94}, {74, 59, 75, 94}, 2871 {75, 40, 75, 94}, {75, 41, 75, 94}, {75, 42, 75, 94}, {75, 43, 75, 94}, {75, 44, 75, 94}, 2872 {75, 45, 75, 94}, {75, 46, 75, 94}, {75, 47, 75, 94}, {75, 48, 75, 94}, {75, 49, 75, 94}, 2873 {75, 50, 75, 94}, {75, 51, 75, 94}, {75, 52, 75, 94}, {75, 53, 75, 94}, {75, 54, 75, 94}, 2874 {75, 55, 75, 94}, {75, 56, 75, 94}, {75, 57, 75, 94}, {75, 58, 75, 94}, {75, 59, 75, 94}, 2875 {76, 40, 75, 94}, {76, 41, 75, 94}, {76, 42, 75, 94}, {76, 43, 75, 94}, {76, 44, 75, 94}, 2876 {76, 45, 75, 94}, {76, 46, 75, 94}, {76, 47, 75, 94}, {76, 48, 75, 94}, {76, 49, 75, 94}, 2877 {76, 50, 75, 94}, {76, 51, 75, 94}, {76, 52, 75, 94}, {76, 53, 75, 94}, {76, 54, 75, 94}, 2878 {76, 55, 75, 94}, {76, 56, 75, 94}, {76, 57, 75, 94}, {76, 58, 75, 94}, {76, 59, 75, 94}, 2879 {77, 40, 75, 94}, {77, 41, 75, 94}, {77, 42, 75, 94}, {77, 43, 75, 94}, {77, 44, 75, 94}, 2880 {77, 45, 75, 94}, {77, 46, 75, 94}, {77, 47, 75, 94}, {77, 48, 75, 94}, {77, 49, 75, 94}, 2881 {77, 50, 75, 94}, {77, 51, 75, 94}, {77, 52, 75, 94}, {77, 53, 75, 94}, {77, 54, 75, 94}, 2882 {77, 55, 75, 94}, {77, 56, 75, 94}, {77, 57, 75, 94}, {77, 58, 75, 94}, {77, 59, 75, 94}, 2883 {78, 40, 75, 94}, {78, 41, 75, 94}, {78, 42, 75, 94}, {78, 43, 75, 94}, {78, 44, 75, 94}, 2884 {78, 45, 75, 94}, {78, 46, 75, 94}, {78, 47, 75, 94}, {78, 48, 75, 94}, {78, 49, 75, 94}, 2885 {78, 50, 75, 94}, {78, 51, 75, 94}, {78, 52, 75, 94}, {78, 53, 75, 94}, {78, 54, 75, 94}, 2886 {78, 55, 75, 94}, {78, 56, 75, 94}, {78, 57, 75, 94}, {78, 58, 75, 94}, {78, 59, 75, 94}, 2887 {79, 40, 75, 94}, {79, 41, 75, 94}, {79, 42, 75, 94}, {79, 43, 75, 94}, {79, 44, 75, 94}, 2888 {79, 45, 75, 94}, {79, 46, 75, 94}, {79, 47, 75, 94}, {79, 48, 75, 94}, {79, 49, 75, 94}, 2889 {79, 50, 75, 94}, {79, 51, 75, 94}, {79, 52, 75, 94}, {79, 53, 75, 94}, {79, 54, 75, 94}, 2890 {79, 55, 75, 94}, {79, 56, 75, 94}, {79, 57, 75, 94}, {79, 58, 75, 94}, {79, 59, 75, 94}, 2891 {80, 40, 75, 80}, {80, 40, 87, 89}, {80, 40, 93, 94}, 2892 }, 2893 } 2894 bodysplit = testBody{ 2895 label: 5, 2896 offset: dvid.Point3d{75, 40, 80}, 2897 size: dvid.Point3d{20, 20, 10}, 2898 blockSpans: []dvid.Span{ 2899 {2, 1, 2, 2}, 2900 }, 2901 voxelSpans: []dvid.Span{ 2902 {80, 40, 81, 86}, {80, 40, 90, 92}, // These first 2 test splits interleaved in one span. 2903 {80, 41, 75, 94}, {80, 42, 75, 94}, {80, 43, 75, 94}, {80, 44, 75, 94}, 2904 {80, 45, 75, 94}, {80, 46, 75, 94}, {80, 47, 75, 94}, {80, 48, 75, 94}, {80, 49, 75, 94}, 2905 {80, 50, 75, 94}, {80, 51, 75, 94}, {80, 52, 75, 94}, {80, 53, 75, 94}, {80, 54, 75, 94}, 2906 {80, 55, 75, 94}, {80, 56, 75, 94}, {80, 57, 75, 94}, {80, 58, 75, 94}, {80, 59, 75, 94}, 2907 {81, 40, 75, 94}, {81, 41, 75, 94}, {81, 42, 75, 94}, {81, 43, 75, 94}, {81, 44, 75, 94}, 2908 {81, 45, 75, 94}, {81, 46, 75, 94}, {81, 47, 75, 94}, {81, 48, 75, 94}, {81, 49, 75, 94}, 2909 {81, 50, 75, 94}, {81, 51, 75, 94}, {81, 52, 75, 94}, {81, 53, 75, 94}, {81, 54, 75, 94}, 2910 {81, 55, 75, 94}, {81, 56, 75, 94}, {81, 57, 75, 94}, {81, 58, 75, 94}, {81, 59, 75, 94}, 2911 {82, 40, 75, 94}, {82, 41, 75, 94}, {82, 42, 75, 94}, {82, 43, 75, 94}, {82, 44, 75, 94}, 2912 {82, 45, 75, 94}, {82, 46, 75, 94}, {82, 47, 75, 94}, {82, 48, 75, 94}, {82, 49, 75, 94}, 2913 {82, 50, 75, 94}, {82, 51, 75, 94}, {82, 52, 75, 94}, {82, 53, 75, 94}, {82, 54, 75, 94}, 2914 {82, 55, 75, 94}, {82, 56, 75, 94}, {82, 57, 75, 94}, {82, 58, 75, 94}, {82, 59, 75, 94}, 2915 {83, 40, 75, 94}, {83, 41, 75, 94}, {83, 42, 75, 94}, {83, 43, 75, 94}, {83, 44, 75, 94}, 2916 {83, 45, 75, 94}, {83, 46, 75, 94}, {83, 47, 75, 94}, {83, 48, 75, 94}, {83, 49, 75, 94}, 2917 {83, 50, 75, 94}, {83, 51, 75, 94}, {83, 52, 75, 94}, {83, 53, 75, 94}, {83, 54, 75, 94}, 2918 {83, 55, 75, 94}, {83, 56, 75, 94}, {83, 57, 75, 94}, {83, 58, 75, 94}, {83, 59, 75, 94}, 2919 {84, 40, 75, 94}, {84, 41, 75, 94}, {84, 42, 75, 94}, {84, 43, 75, 94}, {84, 44, 75, 94}, 2920 {84, 45, 75, 94}, {84, 46, 75, 94}, {84, 47, 75, 94}, {84, 48, 75, 94}, {84, 49, 75, 94}, 2921 {84, 50, 75, 94}, {84, 51, 75, 94}, {84, 52, 75, 94}, {84, 53, 75, 94}, {84, 54, 75, 94}, 2922 {84, 55, 75, 94}, {84, 56, 75, 94}, {84, 57, 75, 94}, {84, 58, 75, 94}, {84, 59, 75, 94}, 2923 {85, 40, 75, 94}, {85, 41, 75, 94}, {85, 42, 75, 94}, {85, 43, 75, 94}, {85, 44, 75, 94}, 2924 {85, 45, 75, 94}, {85, 46, 75, 94}, {85, 47, 75, 94}, {85, 48, 75, 94}, {85, 49, 75, 94}, 2925 {85, 50, 75, 94}, {85, 51, 75, 94}, {85, 52, 75, 94}, {85, 53, 75, 94}, {85, 54, 75, 94}, 2926 {85, 55, 75, 94}, {85, 56, 75, 94}, {85, 57, 75, 94}, {85, 58, 75, 94}, {85, 59, 75, 94}, 2927 {86, 40, 75, 94}, {86, 41, 75, 94}, {86, 42, 75, 94}, {86, 43, 75, 94}, {86, 44, 75, 94}, 2928 {86, 45, 75, 94}, {86, 46, 75, 94}, {86, 47, 75, 94}, {86, 48, 75, 94}, {86, 49, 75, 94}, 2929 {86, 50, 75, 94}, {86, 51, 75, 94}, {86, 52, 75, 94}, {86, 53, 75, 94}, {86, 54, 75, 94}, 2930 {86, 55, 75, 94}, {86, 56, 75, 94}, {86, 57, 75, 94}, {86, 58, 75, 94}, {86, 59, 75, 94}, 2931 {87, 40, 75, 94}, {87, 41, 75, 94}, {87, 42, 75, 94}, {87, 43, 75, 94}, {87, 44, 75, 94}, 2932 {87, 45, 75, 94}, {87, 46, 75, 94}, {87, 47, 75, 94}, {87, 48, 75, 94}, {87, 49, 75, 94}, 2933 {87, 50, 75, 94}, {87, 51, 75, 94}, {87, 52, 75, 94}, {87, 53, 75, 94}, {87, 54, 75, 94}, 2934 {87, 55, 75, 94}, {87, 56, 75, 94}, {87, 57, 75, 94}, {87, 58, 75, 94}, {87, 59, 75, 94}, 2935 {88, 40, 75, 94}, {88, 41, 75, 94}, {88, 42, 75, 94}, {88, 43, 75, 94}, {88, 44, 75, 94}, 2936 {88, 45, 75, 94}, {88, 46, 75, 94}, {88, 47, 75, 94}, {88, 48, 75, 94}, {88, 49, 75, 94}, 2937 {88, 50, 75, 94}, {88, 51, 75, 94}, {88, 52, 75, 94}, {88, 53, 75, 94}, {88, 54, 75, 94}, 2938 {88, 55, 75, 94}, {88, 56, 75, 94}, {88, 57, 75, 94}, {88, 58, 75, 94}, {88, 59, 75, 94}, 2939 {89, 40, 75, 94}, {89, 41, 75, 94}, {89, 42, 75, 94}, {89, 43, 75, 94}, {89, 44, 75, 94}, 2940 {89, 45, 75, 94}, {89, 46, 75, 94}, {89, 47, 75, 94}, {89, 48, 75, 94}, {89, 49, 75, 94}, 2941 {89, 50, 75, 94}, {89, 51, 75, 94}, {89, 52, 75, 94}, {89, 53, 75, 94}, {89, 54, 75, 94}, 2942 {89, 55, 75, 94}, {89, 56, 75, 94}, {89, 57, 75, 94}, {89, 58, 75, 94}, {89, 59, 75, 94}, 2943 }, 2944 } 2945 body6 = testBody{ 2946 label: 6, 2947 offset: dvid.Point3d{8, 10, 7}, 2948 size: dvid.Point3d{52, 50, 10}, 2949 blockSpans: []dvid.Span{ 2950 {0, 0, 0, 1}, 2951 {0, 1, 0, 1}, 2952 }, 2953 voxelSpans: []dvid.Span{ 2954 {8, 11, 9, 31}, {8, 12, 9, 59}, {8, 13, 9, 59}, {8, 14, 9, 59}, 2955 {8, 15, 19, 59}, {8, 16, 19, 59}, {8, 17, 19, 59}, {8, 18, 19, 59}, 2956 {8, 19, 29, 59}, {8, 20, 29, 59}, {8, 21, 29, 59}, {8, 22, 29, 59}, 2957 {8, 23, 39, 59}, {8, 24, 39, 59}, {8, 25, 39, 59}, {8, 26, 39, 59}, 2958 {8, 23, 39, 59}, {8, 24, 39, 59}, {8, 25, 39, 59}, {8, 26, 39, 59}, 2959 {8, 27, 39, 59}, {8, 28, 39, 59}, {8, 29, 39, 59}, {8, 30, 39, 59}, 2960 {8, 31, 39, 59}, {8, 32, 39, 59}, {8, 33, 39, 59}, {8, 34, 39, 59}, 2961 {8, 35, 39, 59}, {8, 36, 39, 59}, {8, 37, 45, 59}, {8, 38, 39, 59}, 2962 {8, 39, 39, 59}, {8, 40, 39, 59}, {8, 41, 42, 59}, {8, 42, 39, 56}, 2963 {8, 43, 39, 59}, {8, 44, 39, 59}, {8, 45, 39, 59}, {8, 46, 39, 50}, 2964 2965 {8, 11, 9, 59}, {8, 12, 9, 59}, {8, 13, 9, 59}, {8, 14, 9, 59}, 2966 {8, 15, 19, 59}, {8, 16, 19, 59}, {8, 17, 19, 59}, {8, 18, 19, 59}, 2967 {8, 19, 29, 59}, {8, 20, 29, 59}, {8, 21, 29, 59}, {8, 22, 29, 59}, 2968 {8, 23, 39, 59}, {8, 24, 39, 59}, {8, 25, 39, 59}, {8, 26, 39, 59}, 2969 {8, 23, 39, 59}, {8, 24, 39, 59}, {8, 25, 39, 59}, {8, 26, 39, 59}, 2970 {8, 27, 39, 59}, {8, 28, 39, 59}, {8, 29, 39, 59}, {8, 30, 39, 59}, 2971 {8, 31, 39, 59}, {8, 32, 39, 59}, {8, 33, 39, 59}, {8, 34, 39, 59}, 2972 {8, 35, 39, 59}, {8, 36, 39, 59}, {8, 37, 45, 59}, {8, 38, 39, 59}, 2973 {8, 39, 39, 59}, {8, 40, 39, 59}, {8, 41, 42, 59}, {8, 42, 39, 56}, 2974 {8, 43, 39, 59}, {8, 44, 39, 59}, {8, 45, 39, 59}, {8, 46, 39, 50}, 2975 2976 {9, 11, 9, 59}, {9, 12, 9, 59}, {9, 13, 9, 59}, {9, 14, 9, 59}, 2977 {9, 15, 19, 59}, {9, 16, 19, 59}, {9, 17, 19, 59}, {9, 18, 19, 59}, 2978 {9, 19, 29, 59}, {9, 20, 29, 59}, {9, 21, 29, 59}, {9, 22, 29, 59}, 2979 {9, 23, 39, 59}, {9, 24, 39, 59}, {9, 25, 39, 59}, {9, 26, 39, 59}, 2980 {9, 23, 39, 59}, {9, 24, 39, 59}, {9, 25, 39, 59}, {9, 26, 39, 59}, 2981 {9, 27, 39, 59}, {9, 28, 39, 59}, {9, 29, 39, 59}, {9, 30, 39, 59}, 2982 {9, 31, 39, 59}, {9, 32, 39, 59}, {9, 33, 39, 59}, {9, 34, 39, 59}, 2983 {9, 35, 39, 59}, {9, 36, 39, 59}, {9, 37, 45, 59}, {9, 38, 39, 59}, 2984 {9, 39, 39, 59}, {9, 40, 39, 59}, {9, 41, 42, 59}, {9, 42, 39, 56}, 2985 {9, 43, 39, 59}, {9, 44, 39, 59}, {9, 45, 39, 59}, {9, 46, 39, 50}, 2986 2987 {10, 11, 9, 59}, {10, 12, 9, 59}, {10, 13, 9, 59}, {10, 14, 9, 59}, 2988 {10, 15, 19, 59}, {10, 16, 19, 59}, {10, 17, 19, 59}, {10, 18, 19, 59}, 2989 {10, 19, 29, 59}, {10, 20, 29, 59}, {10, 21, 29, 59}, {10, 22, 29, 59}, 2990 {10, 23, 39, 59}, {10, 24, 39, 59}, {10, 25, 39, 59}, {10, 26, 39, 59}, 2991 {10, 23, 39, 59}, {10, 24, 39, 59}, {10, 25, 39, 59}, {10, 26, 39, 59}, 2992 {10, 27, 39, 59}, {10, 28, 39, 59}, {10, 29, 39, 59}, {10, 30, 39, 59}, 2993 {10, 31, 39, 59}, {10, 32, 39, 59}, {10, 33, 39, 59}, {10, 34, 39, 59}, 2994 {10, 35, 39, 59}, {10, 36, 39, 59}, {10, 37, 45, 59}, {10, 38, 39, 59}, 2995 {10, 39, 39, 59}, {10, 40, 39, 59}, {10, 41, 42, 59}, {10, 42, 39, 56}, 2996 {10, 43, 39, 59}, {10, 44, 39, 59}, {10, 45, 39, 59}, {10, 46, 39, 50}, 2997 2998 {11, 11, 9, 59}, {11, 12, 9, 59}, {11, 13, 9, 59}, {11, 14, 9, 59}, 2999 {11, 15, 19, 59}, {11, 16, 19, 59}, {11, 17, 19, 59}, {11, 18, 19, 59}, 3000 {11, 19, 29, 59}, {11, 20, 29, 59}, {11, 21, 29, 59}, {11, 22, 29, 59}, 3001 {11, 23, 39, 59}, {11, 24, 39, 59}, {11, 25, 39, 59}, {11, 26, 39, 59}, 3002 {11, 23, 39, 59}, {11, 24, 39, 59}, {11, 25, 39, 59}, {11, 26, 39, 59}, 3003 {11, 27, 39, 59}, {11, 28, 39, 59}, {11, 29, 39, 59}, {11, 30, 39, 59}, 3004 {11, 31, 39, 59}, {11, 32, 39, 59}, {11, 33, 39, 59}, {11, 34, 39, 59}, 3005 {11, 35, 39, 59}, {11, 36, 39, 59}, {11, 37, 45, 59}, {11, 38, 39, 59}, 3006 {11, 39, 39, 59}, {11, 40, 39, 59}, {11, 41, 42, 59}, {11, 42, 39, 56}, 3007 {11, 43, 39, 59}, {11, 44, 39, 59}, {11, 45, 39, 59}, {11, 46, 39, 50}, 3008 3009 {12, 11, 9, 59}, {12, 12, 9, 59}, {12, 13, 9, 59}, {12, 14, 9, 59}, 3010 {12, 15, 19, 59}, {12, 16, 19, 59}, {12, 17, 19, 59}, {12, 18, 19, 59}, 3011 {12, 19, 29, 59}, {12, 20, 29, 59}, {12, 21, 29, 59}, {12, 22, 29, 59}, 3012 {12, 23, 39, 59}, {12, 24, 39, 59}, {12, 25, 39, 59}, {12, 26, 39, 59}, 3013 {12, 23, 39, 59}, {12, 24, 39, 59}, {12, 25, 39, 59}, {12, 26, 39, 59}, 3014 {12, 27, 39, 59}, {12, 28, 39, 59}, {12, 29, 39, 59}, {12, 30, 39, 59}, 3015 {12, 31, 39, 59}, {12, 32, 39, 59}, {12, 33, 39, 59}, {12, 34, 39, 59}, 3016 {12, 35, 39, 59}, {12, 36, 39, 59}, {12, 37, 45, 59}, {12, 38, 39, 59}, 3017 {12, 39, 39, 59}, {12, 40, 39, 59}, {12, 41, 42, 59}, {12, 42, 39, 56}, 3018 {12, 43, 39, 59}, {12, 44, 39, 59}, {12, 45, 39, 59}, {12, 46, 39, 50}, 3019 }, 3020 } 3021 body7 = testBody{ 3022 label: 7, 3023 offset: dvid.Point3d{68, 10, 7}, 3024 size: dvid.Point3d{52, 50, 10}, 3025 blockSpans: []dvid.Span{ 3026 {2, 0, 0, 1}, 3027 {2, 1, 0, 1}, 3028 }, 3029 voxelSpans: []dvid.Span{ 3030 {78, 11, 9, 59}, {78, 12, 9, 59}, {78, 13, 9, 59}, {78, 14, 9, 59}, 3031 {78, 15, 19, 59}, {78, 16, 19, 59}, {78, 17, 19, 59}, {78, 18, 19, 59}, 3032 {78, 19, 29, 59}, {78, 20, 29, 59}, {78, 21, 29, 59}, {78, 22, 29, 59}, 3033 {78, 23, 39, 59}, {78, 24, 39, 59}, {78, 25, 39, 59}, {78, 26, 39, 59}, 3034 {78, 23, 39, 59}, {78, 24, 39, 59}, {78, 25, 39, 59}, {78, 26, 39, 59}, 3035 {78, 27, 39, 59}, {78, 28, 39, 59}, {78, 29, 39, 59}, {78, 30, 39, 59}, 3036 {78, 31, 39, 59}, {78, 32, 39, 59}, {78, 33, 39, 59}, {78, 34, 39, 59}, 3037 {78, 35, 39, 59}, {78, 36, 39, 59}, {78, 37, 45, 59}, {78, 38, 39, 59}, 3038 {78, 39, 39, 59}, {78, 40, 39, 59}, {78, 41, 42, 59}, {78, 42, 39, 56}, 3039 {78, 43, 39, 59}, {78, 44, 39, 59}, {78, 45, 39, 59}, {78, 46, 39, 50}, 3040 3041 {79, 11, 9, 59}, {79, 12, 9, 59}, {79, 13, 9, 59}, {79, 14, 9, 59}, 3042 {79, 15, 19, 59}, {79, 16, 19, 59}, {79, 17, 19, 59}, {79, 18, 19, 59}, 3043 {79, 19, 29, 59}, {79, 20, 29, 59}, {79, 21, 29, 59}, {79, 22, 29, 59}, 3044 {79, 23, 39, 59}, {79, 24, 39, 59}, {79, 25, 39, 59}, {79, 26, 39, 59}, 3045 {79, 23, 39, 59}, {79, 24, 39, 59}, {79, 25, 39, 59}, {79, 26, 39, 59}, 3046 {79, 27, 39, 59}, {79, 28, 39, 59}, {79, 29, 39, 59}, {79, 30, 39, 59}, 3047 {79, 31, 39, 59}, {79, 32, 39, 59}, {79, 33, 39, 59}, {79, 34, 39, 59}, 3048 {79, 35, 39, 59}, {79, 36, 39, 59}, {79, 37, 45, 59}, {79, 38, 39, 59}, 3049 {79, 39, 39, 59}, {79, 40, 39, 59}, {79, 41, 42, 59}, {79, 42, 39, 56}, 3050 {79, 43, 39, 59}, {79, 44, 39, 59}, {79, 45, 39, 59}, {79, 46, 39, 50}, 3051 3052 {80, 11, 9, 59}, {80, 12, 9, 59}, {80, 13, 9, 59}, {80, 14, 9, 59}, 3053 {80, 15, 19, 59}, {80, 16, 19, 59}, {80, 17, 19, 59}, {80, 18, 19, 59}, 3054 {80, 19, 29, 59}, {80, 20, 29, 59}, {80, 21, 29, 59}, {80, 22, 29, 59}, 3055 {80, 23, 39, 59}, {80, 24, 39, 59}, {80, 25, 39, 59}, {80, 26, 39, 59}, 3056 {80, 23, 39, 59}, {80, 24, 39, 59}, {80, 25, 39, 59}, {80, 26, 39, 59}, 3057 {80, 27, 39, 59}, {80, 28, 39, 59}, {80, 29, 39, 59}, {80, 30, 39, 59}, 3058 {80, 31, 39, 59}, {80, 32, 39, 59}, {80, 33, 39, 59}, {80, 34, 39, 59}, 3059 {80, 35, 39, 59}, {80, 36, 39, 59}, {80, 37, 45, 59}, {80, 38, 39, 59}, 3060 {80, 39, 39, 59}, {80, 40, 39, 59}, {80, 41, 42, 59}, {80, 42, 39, 56}, 3061 {80, 43, 39, 59}, {80, 44, 39, 59}, {80, 45, 39, 59}, {80, 46, 39, 50}, 3062 3063 {81, 11, 9, 59}, {81, 12, 9, 59}, {81, 13, 9, 59}, {81, 14, 9, 59}, 3064 {81, 15, 19, 59}, {81, 16, 19, 59}, {81, 17, 19, 59}, {81, 18, 19, 59}, 3065 {81, 19, 29, 59}, {81, 20, 29, 59}, {81, 21, 29, 59}, {81, 22, 29, 59}, 3066 {81, 23, 39, 59}, {81, 24, 39, 59}, {81, 25, 39, 59}, {81, 26, 39, 59}, 3067 {81, 23, 39, 59}, {81, 24, 39, 59}, {81, 25, 39, 59}, {81, 26, 39, 59}, 3068 {81, 27, 39, 59}, {81, 28, 39, 59}, {81, 29, 39, 59}, {81, 30, 39, 59}, 3069 {81, 31, 39, 59}, {81, 32, 39, 59}, {81, 33, 39, 59}, {81, 34, 39, 59}, 3070 {81, 35, 39, 59}, {81, 36, 39, 59}, {81, 37, 45, 59}, {81, 38, 39, 59}, 3071 {81, 39, 39, 59}, {81, 40, 39, 59}, {81, 41, 42, 59}, {81, 42, 39, 56}, 3072 {81, 43, 39, 59}, {81, 44, 39, 59}, {81, 45, 39, 59}, {81, 46, 39, 50}, 3073 3074 {82, 11, 9, 59}, {82, 12, 9, 59}, {82, 13, 9, 59}, {82, 14, 9, 59}, 3075 {82, 15, 19, 59}, {82, 16, 19, 59}, {82, 17, 19, 59}, {82, 18, 19, 59}, 3076 {82, 19, 29, 59}, {82, 20, 29, 59}, {82, 21, 29, 59}, {82, 22, 29, 59}, 3077 {82, 23, 39, 59}, {82, 24, 39, 59}, {82, 25, 39, 59}, {82, 26, 39, 59}, 3078 {82, 23, 39, 59}, {82, 24, 39, 59}, {82, 25, 39, 59}, {82, 26, 39, 59}, 3079 {82, 27, 39, 59}, {82, 28, 39, 59}, {82, 29, 39, 59}, {82, 30, 39, 59}, 3080 {82, 31, 39, 59}, {82, 32, 39, 59}, {82, 33, 39, 59}, {82, 34, 39, 59}, 3081 {82, 35, 39, 59}, {82, 36, 39, 59}, {82, 37, 45, 59}, {82, 38, 39, 59}, 3082 {82, 39, 39, 59}, {82, 40, 39, 59}, {82, 41, 42, 59}, {82, 42, 39, 56}, 3083 {82, 43, 39, 59}, {82, 44, 39, 59}, {82, 45, 39, 59}, {82, 46, 39, 50}, 3084 }, 3085 } 3086 bodies = []testBody{ 3087 body1, body2, body3, body4, bodysplit, body6, body7, 3088 } 3089 )